diff --git a/.gitignore b/.gitignore index 9ce2c5b..307cc90 100644 --- a/.gitignore +++ b/.gitignore @@ -44,11 +44,13 @@ *.a *.o *.ocx +*.res # Delphi autogenerated files (duplicated info) *.cfg *.hpp -*Resource.rc + +#*Resource.rc # Delphi local files (user-specific info) *.local diff --git a/build/AErender_Launcher.ciproj b/build/AErender_Launcher.ciproj new file mode 100644 index 0000000..69a7982 --- /dev/null +++ b/build/AErender_Launcher.ciproj @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/build/README.md b/build/README.md new file mode 100644 index 0000000..96f5930 --- /dev/null +++ b/build/README.md @@ -0,0 +1,39 @@ +# Building AErender Launcher +## Step 1 +To build **Launcher** you first of all need to install a RAD Studio *(Delphi, we don't need C++Builder here).* There is three options how to do it: +### Option 1 - Legal, Free, but outdated +1) Go to https://www.embarcadero.com/ +2) Go to Free Tools -> Delphi Community Ed. +3) Click on "Get community edition free" +4) Complete form, download and install Delphi Community Edition 10.3.3 with macOS/OSX dev tools + +**Downsides:** You will have outdated version of Delphi. If you try to build **Launcher**, it will build, but I won't guarantee you 100% functionality and error-free expirience. Community Edition was recently updated to RAD Studio 10.4.2 Seattle and the code was migrated to RAD Studio 11.0 Alexandria. Compability-wise I left previoius versions of libs untouched, so it should be possible to compile it in the Community Edition + +### Option 2 - Legal, but Trial +1) Go to https://www.embarcadero.com/ +2) Go to Products -> RAD Studio +3) Click on "Start a Free Trial" +4) Complete form, download and install RAD Studio Trial 11.0 with macOS/OSX dev tools + +### Option 3 - Illegal, but no Trial +1) Find whereever a pirated version of RAD Studio Architect 11.0 +2) ... +3) Install and crack RAD Studio Architect 11.0 + +*btw, I don't support this, but oh well...* + +## Step 2 +### If you have MSBuild installed and you want to build for Windows +To build only Windows versions of **Launcher**, go to `/build/` folder at the root of the repository and start a `build.bat` file. Both x64 and x32 versions will be built into the following folders: +```text +/src/Win32/Beta/AErender_Launcher.exe +``` +```text +/src/Win64/Beta/AErender_Launcher.exe +``` + +### If you don't have MSBuild installed or you want to build for macOS +1) Open `/src/AErender_Launcher.dproj` +2) Change project's **Build Configurations** to "Beta" (if it's not already) +3) Select needed platform by changing it in project's **Target Platforms** (double click) +4) Compile project by `Shift+F9` or going into `Project` -> `Build AErender_Launcher` \ No newline at end of file diff --git a/build/build.bat b/build/build.bat new file mode 100644 index 0000000..4ab4d4f --- /dev/null +++ b/build/build.bat @@ -0,0 +1,7 @@ +@ECHO off +set "msbuild_path=%WINDIR%\Microsoft.NET\Framework\v4.0.30319" +set "BDS=C:\Program Files (x86)\Embarcadero\Studio\21.0\" + +::"%msbuild_path%\msbuild.exe" /t:build src\AErender_Launcher.dproj + +"%msbuild_path%\msbuild.exe" /t:build AErender_Launcher.ciproj \ No newline at end of file diff --git a/src/AErender CC/AErender Launcher_Premiere/Adobe After Effects Auto-Save/Intro auto-save 6.aep b/src/AErender CC/AErender Launcher_Premiere/Adobe After Effects Auto-Save/Intro auto-save 6.aep deleted file mode 100644 index 6c56d8d..0000000 Binary files a/src/AErender CC/AErender Launcher_Premiere/Adobe After Effects Auto-Save/Intro auto-save 6.aep and /dev/null differ diff --git a/src/AErender CC/AErender.icns b/src/AErender CC/AErender.icns deleted file mode 100644 index 8b9e578..0000000 Binary files a/src/AErender CC/AErender.icns and /dev/null differ diff --git a/src/AErender CC/AErender.ico b/src/AErender CC/AErender.ico deleted file mode 100644 index e4bb8b6..0000000 Binary files a/src/AErender CC/AErender.ico and /dev/null differ diff --git a/src/AErender CC/Style/bg.png b/src/AErender CC/Style/bg.png deleted file mode 100644 index 1e898f6..0000000 Binary files a/src/AErender CC/Style/bg.png and /dev/null differ diff --git a/src/AErender CC/Style/bg15x.png b/src/AErender CC/Style/bg15x.png deleted file mode 100644 index 7a42f5a..0000000 Binary files a/src/AErender CC/Style/bg15x.png and /dev/null differ diff --git a/src/AErender CC/Style/bg20x.png b/src/AErender CC/Style/bg20x.png deleted file mode 100644 index 9590269..0000000 Binary files a/src/AErender CC/Style/bg20x.png and /dev/null differ diff --git a/src/AErender CC/Style/style.png b/src/AErender CC/Style/style.png deleted file mode 100644 index 91bde62..0000000 Binary files a/src/AErender CC/Style/style.png and /dev/null differ diff --git a/src/AErender CC/Style/style15x.png b/src/AErender CC/Style/style15x.png deleted file mode 100644 index cec0210..0000000 Binary files a/src/AErender CC/Style/style15x.png and /dev/null differ diff --git a/src/AErender CC/Style/style20x.png b/src/AErender CC/Style/style20x.png deleted file mode 100644 index e4f4cb5..0000000 Binary files a/src/AErender CC/Style/style20x.png and /dev/null differ diff --git a/src/AErender CC/icon_128.png b/src/AErender CC/icon_128.png deleted file mode 100644 index 2c358c3..0000000 Binary files a/src/AErender CC/icon_128.png and /dev/null differ diff --git a/src/AErender CC/icon_128@2x.png b/src/AErender CC/icon_128@2x.png deleted file mode 100644 index 4c7a574..0000000 Binary files a/src/AErender CC/icon_128@2x.png and /dev/null differ diff --git a/src/AErender CC/icon_16.png b/src/AErender CC/icon_16.png deleted file mode 100644 index 67ab6ba..0000000 Binary files a/src/AErender CC/icon_16.png and /dev/null differ diff --git a/src/AErender CC/icon_16@2x.png b/src/AErender CC/icon_16@2x.png deleted file mode 100644 index 0ce5b1b..0000000 Binary files a/src/AErender CC/icon_16@2x.png and /dev/null differ diff --git a/src/AErender CC/icon_256.png b/src/AErender CC/icon_256.png deleted file mode 100644 index 4c7a574..0000000 Binary files a/src/AErender CC/icon_256.png and /dev/null differ diff --git a/src/AErender CC/icon_256@2x.png b/src/AErender CC/icon_256@2x.png deleted file mode 100644 index 8e2a353..0000000 Binary files a/src/AErender CC/icon_256@2x.png and /dev/null differ diff --git a/src/AErender CC/icon_32.png b/src/AErender CC/icon_32.png deleted file mode 100644 index 0ce5b1b..0000000 Binary files a/src/AErender CC/icon_32.png and /dev/null differ diff --git a/src/AErender CC/icon_32@2x.png b/src/AErender CC/icon_32@2x.png deleted file mode 100644 index e29e7b6..0000000 Binary files a/src/AErender CC/icon_32@2x.png and /dev/null differ diff --git a/src/AErender CC/icon_48.ico b/src/AErender CC/icon_48.ico deleted file mode 100644 index e6bd7e5..0000000 Binary files a/src/AErender CC/icon_48.ico and /dev/null differ diff --git a/src/AErender CC/icon_48.png b/src/AErender CC/icon_48.png deleted file mode 100644 index 3382bb4..0000000 Binary files a/src/AErender CC/icon_48.png and /dev/null differ diff --git a/src/AErender CC/icon_512.png b/src/AErender CC/icon_512.png deleted file mode 100644 index 8e2a353..0000000 Binary files a/src/AErender CC/icon_512.png and /dev/null differ diff --git a/src/AErender CC/icon_512@2x.png b/src/AErender CC/icon_512@2x.png deleted file mode 100644 index 1c96b17..0000000 Binary files a/src/AErender CC/icon_512@2x.png and /dev/null differ diff --git a/src/AErender CC/icon_UWP_150.png b/src/AErender CC/icon_UWP_150.png deleted file mode 100644 index 4c38394..0000000 Binary files a/src/AErender CC/icon_UWP_150.png and /dev/null differ diff --git a/src/AErender CC/icon_UWP_44.png b/src/AErender CC/icon_UWP_44.png deleted file mode 100644 index 746a63d..0000000 Binary files a/src/AErender CC/icon_UWP_44.png and /dev/null differ diff --git a/src/AErender CC/icons8-info-512.png b/src/AErender CC/icons8-info-512.png deleted file mode 100644 index 049b3e5..0000000 Binary files a/src/AErender CC/icons8-info-512.png and /dev/null differ diff --git a/src/AErender CC/icons8-settings-26.png b/src/AErender CC/icons8-settings-26.png deleted file mode 100644 index 40e4fd4..0000000 Binary files a/src/AErender CC/icons8-settings-26.png and /dev/null differ diff --git a/src/AErender CC/icons8-settings-512.png b/src/AErender CC/icons8-settings-512.png deleted file mode 100644 index fea7bd6..0000000 Binary files a/src/AErender CC/icons8-settings-512.png and /dev/null differ diff --git a/src/AErender_Launcher.deployproj b/src/AErender_Launcher.deployproj index 293c6bc..a088167 100644 --- a/src/AErender_Launcher.deployproj +++ b/src/AErender_Launcher.deployproj @@ -3,33 +3,37 @@ 12 - + + + + + + - + AErender_Launcher\ - AErender_Launcher.exe - ProjectOutput + ru-RU.aerlang + ProjectFile 0 True - True - + AErender_Launcher\ - ru-RU.aerlang + aeparser_win.exe ProjectFile 0 True - - AErender_Launcher\Assets\ - Logo44x44.png - UWP_DelphiLogo44 - 1 + + AErender_Launcher\ + ru-RU.aerlang + ProjectFile + 0 True @@ -43,6 +47,15 @@ True + + AErender_Launcher\ + aeparser_mac + ProjectFile + 0 + + + True + AErender_Launcher\ en-US.aerlang @@ -62,18 +75,16 @@ True True - - - + AErender_Launcher\Assets\ - Logo150x150.png - UWP_DelphiLogo150 + Logo44x44.png + UWP_DelphiLogo44 1 True - + AErender_Launcher\ en-US.aerlang ProjectFile @@ -82,6 +93,27 @@ True + + AErender_Launcher\ + AErender_Launcher.exe + ProjectOutput + 0 + + + True + True + + + + + AErender_Launcher\ + ru-RU.aerlang + ProjectFile + 0 + + + True + AErender_Launcher\Assets\ Logo44x44.png @@ -91,6 +123,51 @@ True + + AErender_Launcher\ + aeparser_win.exe + ProjectFile + 0 + + + True + + + AErender_Launcher\Assets\ + Logo150x150.png + UWP_DelphiLogo150 + 1 + + + True + + + AErender_Launcher\ + en-US.aerlang + ProjectFile + 0 + + + True + + + AErender_Launcher\ + aeparser_mac + ProjectFile + 0 + + + True + + + AErender_Launcher\ + en-US.aerlang + ProjectFile + 0 + + + True + AErender_Launcher\ ru-RU.aerlang @@ -130,6 +207,15 @@ True + + AErender_Launcher.app\Contents\Resources\ + AErender_Launcher.icns + ProjectOSXResource + 1 + + + True + AErender_Launcher.app\Contents\Resources\StartUp\ ru-RU.aerlang @@ -149,15 +235,6 @@ True True - - AErender_Launcher.app\..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF\ - AErender_Launcher - ProjectOSXDebug - 1 - - - True - AErender_Launcher.app\Contents\Resources\StartUp\ ru-RU.aerlang @@ -177,15 +254,6 @@ True True - - AErender_Launcher.app\..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF\ - AErenderLauncher - ProjectOSXDebug - 1 - - - True - AErender_Launcher.app\Contents\Resources\ AErender_Launcher.icns @@ -195,15 +263,6 @@ True - - AErender_Launcher.app\Contents\Resources\ - AErender_Launcher.icns - ProjectOSXResource - 1 - - - True - AErender_Launcher.app\Contents\ Info.plist @@ -213,15 +272,6 @@ True - - AErender_Launcher.app\Contents\MacOS\ - libcgsqlite3.dylib - DependencyModule - 1 - - - True - AErender_Launcher.app\Contents\Resources\StartUp\ en-US.aerlang @@ -231,16 +281,25 @@ True - - AErender_Launcher.app\..\ - AErenderLauncher.entitlements - ProjectOSXEntitlements + + AErender_Launcher.app\..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF\ + AErender_Launcher + ProjectOSXDebug 1 True - + + AErender_Launcher.app\..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF\ + AErender_Launcher + ProjectOSXDebug + 1 + + + True + + AErender_Launcher.app\..\ AErender_Launcher.entitlements ProjectOSXEntitlements @@ -249,7 +308,16 @@ True - + + AErender_Launcher.app\Contents\Resources\StartUp\ + aeparser_win.exe + ProjectFile + 0 + + + True + + AErender_Launcher.app\Contents\ Info.plist ProjectOSXInfoPList @@ -258,6 +326,42 @@ True + + AErender_Launcher.app\Contents\Resources\StartUp\ + aeparser_mac + ProjectFile + 0 + + + True + + + AErender_Launcher.app\Contents\Resources\ + AErender_Launcher.icns + ProjectOSXResource + 1 + + + True + + + AErender_Launcher.app\Contents\MacOS\ + libcgsqlite3.dylib + DependencyModule + 1 + + + True + + + AErender_Launcher.app\..\ + AErender_Launcher.entitlements + ProjectOSXEntitlements + 1 + + + True + diff --git a/src/AErender_Launcher.dpr b/src/AErender_Launcher.dpr index 35adf59..8115656 100644 --- a/src/AErender_Launcher.dpr +++ b/src/AErender_Launcher.dpr @@ -2,10 +2,10 @@ program AErender_Launcher; (* AErender Launcher *) (* AErenderLauncher.dpr *) -(* Lily Stilson // 2019 - 2020 *) +(* Lily Stilson // 2019 - 2021 *) (* MIT License *) (* *) -(* Copyright (c) 2019 - 2020 Alice Romanets *) +(* Copyright (c) 2019 - 2021 Alice Romanets *) (* *) (* Permission is hereby granted, free of charge, to any person obtaining a copy *) (* of this software and associated documentation files (the "Software"), to deal *) @@ -31,8 +31,25 @@ uses System.StartUpCopy, System.SysUtils, FMX.Forms, - FMX.Graphics in 'lib\FMX.Graphics.pas', - FMX.Ani in 'lib\FMX.Ani.pas', + + /// RAD Studio 10.4 Sydney + {$IF CompilerVersion = 34.0} + FMX.Graphics in 'lib\FMX\DX 10.4\FMX.Graphics.pas', + FMX.Ani in 'lib\FMX\DX 10.4\FMX.Ani.pas', + FMX.TreeView in 'lib\FMX\DX 10.4\FMX.TreeView.pas', + + /// RAD Studio 11.0 Alexandria + /// + /// Bug with double animation on text fields in FMX.Ani was fixed, + /// no need to include it anymore + {$ELSE CompilerVersion = 35.0} + FMX.Graphics in 'lib\FMX\DX 11.0\FMX.Graphics.pas', + FMX.TreeView in 'lib\FMX\DX 11.0\FMX.TreeView.pas', + + {$ENDIF} + + FMX.CompLabel in 'lib\Components\TCompLabel\Package\FMX.CompLabel.pas', + FMX.RenderProgress in 'lib\Components\TRenderProgress\Package\FMX.RenderProgress.pas', SplashScreenUnit in 'SplashScreenUnit.pas' {SplashScreenForm}, MainUnit in 'MainUnit.pas' {MainForm}, SettingsUnit in 'SettingsUnit.pas' {SettingsForm}, @@ -44,14 +61,19 @@ uses OutputModuleEditorUnit in 'OutputModuleEditorUnit.pas' {OutputModuleEditorForm}, {$IFDEF MACOS} Mac.CodeBlocks in 'lib\Mac.CodeBlocks.pas', + MacApi.Dialogs in 'lib\MacApi.Dialogs.pas', {$ENDIF MACOS} {$IFDEF MSWINDOWS} - FMX.Taskbar in 'lib\FMX.Taskbar.pas', + FMX.Taskbar in 'lib\FMX\FMX.Taskbar.pas', {$ENDIF MSWINDOWS} - MathExpParser in 'MathExpParser.pas', - AErenderDataParser in '..\..\AErender Parser\AErenderDataParser.pas', - AErenderLauncherLocalization in 'lib\AErenderLauncherLocalization.pas', - MacApi.Dialogs in 'lib\MacApi.Dialogs.pas'; + AErenderLauncher.Localization in 'lib\AErenderLauncher.Localization.pas', + AErenderLauncher.AerenderParser in 'lib\AErenderLauncher.AerenderParser.pas', + AErenderLauncher.Math.ExpParser in 'lib\AErenderLauncher.Math.ExpParser.pas', + AErenderLauncher.Rendering in 'lib\AErenderLauncher.Rendering.pas', + AErenderLauncher.IO in 'lib\AErenderLauncher.IO.pas', + AErenderLauncher.Math in 'lib\AErenderLauncher.Math.pas' {/System.Types.Nullable in 'lib\System.Types.Nullable.pas';}, + AErenderLauncher.SysUtils in 'lib\AErenderLauncher.SysUtils.pas', + AErenderLauncher.Types in 'lib\AErenderLauncher.Types.pas'; {$R *.res} diff --git a/src/AErender_Launcher.dproj b/src/AErender_Launcher.dproj index 2f07a0d..5f3d023 100644 --- a/src/AErender_Launcher.dproj +++ b/src/AErender_Launcher.dproj @@ -2,29 +2,13 @@ True Application - Beta + Debug FMX AErender_Launcher.dpr Win32 {C2DB1030-533B-41FD-8468-632CB85028C7} - 19.0 - 4099 - - - true - Base - true - ..\icons\platform\Launcher2020.icns - true - 5 - 8 - 0 - (None) - true - Debug - CFBundleVersion=0.8.5;NSHighResolutionCapable=true;NSLocationUsageDescription=;CFBundleShortVersionString=0.8.5;NSCalendarsUsageDescription=Not used;NSRemindersUsageDescription=Not used;NSCameraUsageDescription=Not used;NSMicrophoneUsageDescription=Not used;NSMotionUsageDescription=Not used;NSDesktopFolderUsageDescription=Not used;NSDocumentsFolderUsageDescription=Not used;NSDownloadsFolderUsageDescription=Not used;NSNetworkVolumesUsageDescription=Not used;NSRemovableVolumesUsageDescription=Not used;NSSpeechRecognitionUsageDescription=Not used - ..\icons\platform\Launcher2020.ico - /usr/X11/bin/xterm -e "%debuggee%" + 19.3 + 135171 true @@ -34,6 +18,11 @@ Base true + + true + Base + true + true Base @@ -55,6 +44,12 @@ true true + + true + Cfg_1 + true + true + true Cfg_1 @@ -78,6 +73,12 @@ true true + + true + Cfg_2 + true + true + true Cfg_2 @@ -101,6 +102,12 @@ true true + + true + Cfg_3 + true + true + true Cfg_3 @@ -124,6 +131,12 @@ true true + + true + Cfg_4 + true + true + true Cfg_4 @@ -156,6 +169,39 @@ $(BDS)\bin\delphi_PROJECTICNS.icns $(BDS)\bin\delphi_PROJECTICON.ico + + true + Base + true + ..\icons\platform\Launcher2020.icns + true + 9 + 8 + 0 + (None) + true + Debug + CFBundleVersion=0.8.9;NSHighResolutionCapable=true;NSLocationUsageDescription=;CFBundleShortVersionString=0.8.9;NSCalendarsUsageDescription=Not used;NSRemindersUsageDescription=Not used;NSCameraUsageDescription=Not used;NSMicrophoneUsageDescription=Not used;NSMotionUsageDescription=Not used;NSDesktopFolderUsageDescription=Not used;NSDocumentsFolderUsageDescription=Not used;NSDownloadsFolderUsageDescription=Not used;NSNetworkVolumesUsageDescription=Not used;NSRemovableVolumesUsageDescription=Not used;NSSpeechRecognitionUsageDescription=Not used + ..\icons\platform\Launcher2020.ico + /usr/X11/bin/xterm -e "%debuggee%" + + + CFBundleVersion=0.8.9;NSHighResolutionCapable=true;NSLocationUsageDescription=;CFBundleShortVersionString=0.8.9;NSCalendarsUsageDescription=Not used;NSRemindersUsageDescription=Not used;NSCameraUsageDescription=Not used;NSMicrophoneUsageDescription=Not used;NSMotionUsageDescription=Not used;NSDesktopFolderUsageDescription=Not used;NSDocumentsFolderUsageDescription=Not used;NSDownloadsFolderUsageDescription=Not used;NSNetworkVolumesUsageDescription=Not used;NSRemovableVolumesUsageDescription=Not used;NSSpeechRecognitionUsageDescription=Not used + Debug + true + true + Base + true + true + ..\icons\platform\Launcher2020.icns + 9 + 8 + 0 + (None) + true + ..\icons\platform\Launcher2020.ico + /usr/X11/bin/xterm -e "%debuggee%" + PerMonitorV2 Debug @@ -172,27 +218,26 @@ ..\icons\png\resized_uwp\icon_uwp_44.png true true - CompanyName=Night Sky Studio;FileDescription=AErender Launcher;FileVersion=0.8.5.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.NightSkyStudio.AErenderLauncher;ProductName=AErender Launcher;ProductVersion=0.8.5.0;Comments= + CompanyName=Night Sky Studio;FileDescription=AErender Launcher;FileVersion=0.9.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=org.NightSkyStudio.AErenderLauncher;ProductName=AErender Launcher;ProductVersion=0.9.0.0;Comments= 1033 0 - 8 + 9 true - 5 ..\icons\platform\Launcher2020.icns ..\icons\platform\Launcher2020.ico - (None) + $(BDS)\bin\default_app.manifest ..\icons\png\resized_uwp\icon_uwp_150.png ..\icons\png\resized_uwp\icon_uwp_44.png true true - FileVersion=0.8.5.0;ProductVersion=0.8.5.0 + FileVersion=0.9.0.0;ProductVersion=0.9.0.0 1033 0 - 8 + 9 true - 5 + PerMonitorV2 true @@ -209,7 +254,20 @@ ..\icons\platform\Launcher2020.icns ..\icons\platform\Launcher2020.ico ..\(None) - 5 + 6 + true + 0 + 8 + + + true + Cfg_1 + true + true + ..\icons\platform\Launcher2020.icns + ..\icons\platform\Launcher2020.ico + ..\(None) + 6 true 0 8 @@ -220,24 +278,26 @@ ..\icons\platform\Launcher2020.icns ..\icons\platform\Launcher2020.ico true - 1 + 5 true true - CompanyName=Night Sky Studio;FileDescription=AErender Launcher;FileVersion=0.8.5.1;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.NightSkyStudio.AErenderLauncher;ProductName=AErender Launcher;ProductVersion=0.8.5.0;Comments= + CompanyName=Night Sky Studio;FileDescription=AErender Launcher;FileVersion=0.8.6.5;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.NightSkyStudio.AErenderLauncher;ProductName=AErender Launcher;ProductVersion=0.8.5.0;Comments= 1033 0 8 true - 5 + 6 + 65001 + true Debug ..\icons\platform\Launcher2020.icns ..\icons\platform\Launcher2020.ico true - 1 + 5 true - FileVersion=1.0.0.1;ProductVersion=1.0.0.0 + FileVersion=1.0.0.5;ProductVersion=1.0.0.0 1033 true @@ -259,6 +319,19 @@ 0 8 + + true + Cfg_2 + true + true + ..\icons\platform\Launcher2020.icns + ..\icons\platform\Launcher2020.ico + ..\(None) + 5 + true + 0 + 8 + true ..\icons\platform\Launcher2020.icns @@ -268,9 +341,9 @@ true 1033 0 - 8 + 9 true - 5 + 65001 ..\icons\platform\Launcher2020.icns @@ -297,27 +370,42 @@ ..\icons\platform\Launcher2020.icns ..\icons\platform\Launcher2020.ico ..\(None) - 5 true - CFBundleVersion=0.8.5;NSHighResolutionCapable=true;NSCalendarsUsageDescription=Not used;NSRemindersUsageDescription=Not used;NSCameraUsageDescription=Not used;NSMicrophoneUsageDescription=Not used;NSMotionUsageDescription=Not used;NSDesktopFolderUsageDescription=Not used;NSDocumentsFolderUsageDescription=Data saving;NSDownloadsFolderUsageDescription=Not used;NSNetworkVolumesUsageDescription=Not used;NSRemovableVolumesUsageDescription=Not used;NSSpeechRecognitionUsageDescription=Not used;CFBundleShortVersionString=0.8.5 + CFBundleVersion=0.9.0;NSHighResolutionCapable=true;NSCalendarsUsageDescription=Not used;NSRemindersUsageDescription=Not used;NSCameraUsageDescription=Not used;NSMicrophoneUsageDescription=Not used;NSMotionUsageDescription=Not used;NSDesktopFolderUsageDescription=Not used;NSDocumentsFolderUsageDescription=Data saving;NSDownloadsFolderUsageDescription=Not used;NSNetworkVolumesUsageDescription=Not used;NSRemovableVolumesUsageDescription=Not used;NSSpeechRecognitionUsageDescription=Not used;CFBundleShortVersionString=0.9.0 0 - 8 + 9 + + + true + true + Cfg_3 + true + true + true + true + true + true + ..\icons\platform\Launcher2020.icns + ..\icons\platform\Launcher2020.ico + ..\(None) + true + CFBundleVersion=0.9.0;NSHighResolutionCapable=true;NSCalendarsUsageDescription=Not used;NSRemindersUsageDescription=Not used;NSCameraUsageDescription=Not used;NSMicrophoneUsageDescription=Not used;NSMotionUsageDescription=Not used;NSDesktopFolderUsageDescription=Not used;NSDocumentsFolderUsageDescription=Data saving;NSDownloadsFolderUsageDescription=Not used;NSNetworkVolumesUsageDescription=Not used;NSRemovableVolumesUsageDescription=Not used;NSSpeechRecognitionUsageDescription=Not used;CFBundleShortVersionString=0.9.0 + 0 + 9 true ..\icons\platform\Launcher2020.icns ..\icons\platform\Launcher2020.ico true - 23 - true + 26 true - CompanyName=Night Sky Studio;FileDescription=AErender Launcher;FileVersion=0.8.5.23;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.NightSkyStudio.AErenderLauncher;ProductName=AErender Launcher;ProductVersion=0.8.0;Comments=;PrivateBuild=v0.8.0-beta + CompanyName=Night Sky Studio;FileDescription=AErender Launcher;FileVersion=0.9.0.26;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.NightSkyStudio.AErenderLauncher;ProductName=AErender Launcher;ProductVersion=0.9.0;Comments=;PrivateBuild=v0.9.0-beta 1033 0 - 8 + 9 true true - 5 PerMonitorV2 @@ -327,14 +415,14 @@ ..\icons\platform\Launcher2020.ico $(BDS)\bin\default_app.manifest true - 7 true - CompanyName=Night Sky Studio;FileDescription=AErender Launcher;FileVersion=0.8.5.7;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.NightSkyStudio.AErenderLauncher;ProductName=AErender Launcher;ProductVersion=0.8.5;Comments=;PrivateBuild=v0.8.5-beta 1033 0 - 8 + 9 true - 5 + true + 1 + CompanyName=Night Sky Studio;FileDescription=AErender Launcher;FileVersion=0.9.0.1;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.NightSkyStudio.AErenderLauncher;ProductName=AErender Launcher;ProductVersion=0.9.0;Comments=;PrivateBuild=v0.9.0-beta ..\icons\platform\Launcher2020.icns @@ -344,6 +432,18 @@ 0 8 + + true + true + Cfg_4 + true + ..\icons\platform\Launcher2020.icns + ..\icons\platform\Launcher2020.ico + 5 + true + 0 + 8 + ..\icons\platform\Launcher2020.icns ..\icons\platform\Launcher2020.ico @@ -372,6 +472,9 @@ + + +
SplashScreenForm
@@ -401,9 +504,16 @@
- - - + + + + + + +
/System.Types.Nullable in 'lib\System.Types.Nullable.pas';
+
+ + ResourceItem @@ -415,6 +525,16 @@ RCDATA Language_RU + + ResourceItem + RCDATA + AEPARSER_MAC + + + ResourceItem + RCDATA + AEPARSER_WIN + Base @@ -449,28 +569,16 @@ - - - true - - - - - AErender_Launcher.icns - true - - - - - Assets\ - Logo150x150.png + + + AErender_Launcher.exe true - + Assets\ - Logo150x150.png + Logo44x44.png true @@ -481,287 +589,1083 @@ true - - - Assets\ - Logo44x44.png + + + false true - + - .\ + false + AErender_Launcher.exe true - - - .\ + + + false + AErender_Launcher.exe true - - - Contents\Resources\StartUp\ + + + .\ true - + - Contents\Resources\StartUp\ + AErender_Launcher true - + .\ true - - - .\ - true - - - + Contents\Resources\StartUp\ true - + - Contents\Resources\StartUp\ + AErender_Launcher true - + - AErender_Launcher.icns true - - - C:\ProgramData\AErender\Docs - false + + + Contents\Resources\StartUp\ true - + C:\ProgramData\AErender\Docs false true - - - C:\ProgramData\AErender\Docs - false + + + Assets\ + Logo150x150.png true - - - C:\ProgramData\AErender\Docs - false + + + .\ true - - - C:\ProgramData\AErender\Docs - false + + + Contents\Resources\StartUp\ true - + - C:\ProgramData\AErender\Docs - false true - - - C:\ProgramData\AErender\Docs - false + + true - + - AErender_Launcher + Contents\Resources\StartUp\ true - + - AErender_Launcher true - + + AErender_Launcher true - + + + C:\ProgramData\AErender\Docs + false + true + + + - Info.plist + AErender_Launcher.icns true - + - AErenderLauncher + AErender_Launcher.icns + true + + + + + .\ true - + + Contents\Resources\StartUp\ + true + + + + + C:\ProgramData\AErender\Docs + false + true + + + + + true + + + + + .\ true - + Info.plist true - + - AErender_Launcher + Contents\Resources\StartUp\ true - + + + AErender_Launcher.rsm + true + + + + .\ + true + + + + + true + + + + AErender_Launcher.exe true - + + + .\ + true + + + + + true + + + + + .\ + true + + + + + .\ + true + + + + + .\ + true + + + + + AErender_Launcher.icns + true + + + + .\ true - + + + AErender_Launcher + true + + + + + Assets\ + Logo150x150.png + true + + + - false AErender_Launcher.exe true - + + C:\ProgramData\AErender\Docs false - AErender_Launcher.exe true - + + + Info.plist + true + + + + + .\ + true + + + + C:\ProgramData\AErender\Docs false true - - - AErender_Launcher.exe + + + C:\ProgramData\AErender\Docs + false true - - - AErender_Launcher.exe + + + C:\ProgramData\AErender\Docs + false true + + 1 + + + Contents\MacOS + 1 + 0 - - - 0 + + + classes + 64 + + + classes + 64 - - - Contents\MacOS + + + classes 1 - .framework - - 0 + + classes + 1 - - - Contents\MacOS + + + res\xml 1 - .dylib - - 0 - .dll;.bpl + + res\xml + 1 - - - Contents\MacOS + + + library\lib\armeabi-v7a 1 - .dylib - - 0 - .bpl + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 - - - Contents\Resources\StartUp\ - 0 + + + library\lib\armeabi-v7a + 1 - - 0 + + + + library\lib\mips + 1 + + + library\lib\mips + 1 - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a 1 - - - ..\ + + + library\lib\armeabi-v7a 1 - - - Contents + + + res\drawable + 1 + + + res\drawable 1 - - - Contents\Resources + + + res\values + 1 + + + res\values 1 - - - Contents\MacOS + + + res\values-v21 1 - - 0 + + 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-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 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 + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 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 + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 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 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 @@ -792,12 +1696,24 @@ 1 + + + + + + + + + False + False + False True + True True True diff --git a/src/AErender_Launcher.res b/src/AErender_Launcher.res index f552737..4673884 100644 Binary files a/src/AErender_Launcher.res and b/src/AErender_Launcher.res differ diff --git a/src/AErender_LauncherResource.rc b/src/AErender_LauncherResource.rc new file mode 100644 index 0000000..073496c --- /dev/null +++ b/src/AErender_LauncherResource.rc @@ -0,0 +1,4 @@ +Language_EN RCDATA "..\\lang\\en-US.aerlang" +Language_RU RCDATA "..\\lang\\ru-RU.aerlang" +AEPARSER_MAC RCDATA "lib\\plugins\\AEP Parser\\aeparser_mac" +AEPARSER_WIN RCDATA "lib\\plugins\\AEP Parser\\aeparser_win.exe" diff --git a/src/AboutUnit.fmx b/src/AboutUnit.fmx index 3ebb333..d173870 100644 --- a/src/AboutUnit.fmx +++ b/src/AboutUnit.fmx @@ -53,107 +53,107 @@ object AboutForm: TAboutForm PNG = { 89504E470D0A1A0A0000000D4948445200000080000000800806000000C33E61 CB000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 - 0C7449444154785EED9D096C14E715C7DFFAD85DEFAEBDB6B131D86073D998D3 - E0636D5AB551E8212135A92A4551D52A6D1AA95552D284400285025112B5AADA - 4AA44D507AA9A952A557AA44254DA3465481A815B5F16D739F36E0D8D8E0737D - EDD5EFCD1163F0CE7C33DEF5CC7ADE4F7AECBCCFCBACE5F7DFF7DDDF00411004 - 411004411004411004411016C026BDCE05F267CDE567262291BB5EE34ABC8381 - F7474B924CF689E860E0D1C292C97E5C884730E42027334B6196CACC0DAEDC0D - 9096550C49F645906473B232E26EC29171084F76C358FF0518ED6D63257E6601 - 66416621663117432C0520071E836E078723173CCB1E82CCC20758F07DEC470E - 7C13C14B648289A00E063ADF8591AB7F8389895E5638C90CC5103321C44A0053 - 81B7DB0B2077D33390B9FC11484A710B3F25664738E887812B7F80DEE6433039 - 798395DC298459110B0160DD8E69DE05D9258FC2A2CD0721392553F809115B42 - C101E86E7A116E9FFF3DF3469961F580ED04DDCC5600187C96DA9D0BA1A8E655 - C828F892584CC495E1EBEFC1D5DAED00E3379937C14CB70866230031F8767B11 - 147EF1AF90E6DD20161373C2D8601B747EF030AB123A98A75B04D852D783187C - 87A300967DE11D7066AE178B893923D59907E9055B61A4F33D0885B03A90BB8C - 9AD02300CC1A76665E28DAFA26A42DA8144A89B927C5990BCE9CCDD07FF908F3 - 74B507F408005BFB1EC82BFB3E642DFFAA58441886DD5D04B6241BF87BFEC73C - CD22C054AE0529F57BCB2077ED5362116138180B8C89D020D716532D6FC6D48F - 19C3058B2B0F30D561D78F3003180B8C09C6468C1177E35EAB00ECE0CAA984F4 - 455BC522C234604C303662FB2C2E0240653921BBF89BA24B980E313638CFC2DD - B6E315809CFE33C0BB749B5042980F313619CCB8AB012D02480577BE0F9252F1 - 03083382B1C1188943F3311500BE2F153C0BAA4497302D628C50005CB1E57913 - 2A092D05EC99AB8512C2BC38324BD8BF385623C74D112D550013807BB1E812A6 - 25D59DCFFE9505A00A6F06C0F72543B2DD2B9410E625D92E3702316631CB0088 - 980508B3C3DD0044B40880988790002C0E09C0E290002C0E09C0E290002C4EC2 - 09203535155C2E17B72527734F8C59129EFE228A04E7981742C983C7C191BE4C - 283588A777ED81B5EBF91720373736C06BAF1C923C0B30317C15CE1FB98F5DE1 - 9271DC40A2B8442CE13280D3A96D5BE1868D65E0F678248FB89B84138037334B - BAE2233925052AABAA258FB89B8412407A7A06642F582079FCF8B67C4ABA22EE - 26A104B0A9BC026C36EE61EE4F58B9AA0416E4E4481E71270925804A5F8D74A5 - 0D148DAF86B2C04C248C00BCDE4C28295D2379DA2101CC4CC208A0C2570D4949 - FA7FDDFC8225B0B4B048F20899841180AF7A8B7435336DADCDD25574A831782F - 0921809CDC85B07CE52AC9BB9770380CFFF8FB3B92179D2A26229B2D61343F27 - 24C45F0303A7C4B5CE0EB87AF912DCEAC36374A2939595CDDA11A592A79FF48C - 0CC8F07AA39ADD8E03A7D171B9DC505EE583AF3CF4303CF6ED27E0F1277740DE - 2263965B26C450F0F32FFD18F2972C91BC7BF9D73FDF85B7DFFA0B7CFD1BDF82 - CFDEFF39A97466FEFBD13178E3F5DF4A9E7630C03F7DF9B0E4CDCCE0E0001CD8 - B30B2626F0DC86290A583B64DB035F86CD15559092327D751D0E57E3B0F5AC99 - 6F43C1054B962A061F696F6D155FDB5A845725CA2B7DC284925E468687852A47 - 09ECB1AC5937355FE14C4B83AF3DF228EC7FF1474236BB3BF846627A01A8A5FF - 919111B878E19C707DE6F429080450F4D14973B96043D926C9D30E061F3F538D - C22231512E292C84FD2FFC10EEDBFAF959F562E285A9058003386A02686B69FA - E41B39C952EE9953EDC2B512BE9A4F4B57FA181F1B93AEA28343D6AB4BD7C073 - 7B0F422E6BC49A15530B60F98A95AC07902B7933D3D234BDDE6C6AA897AEA283 - 19001B627A51CB32C80AD66BD9BEE359CDB397738DA90550A5327A170804E074 - 3B9EA83A454B73A36A1D8D7530B6C2F5A2767F045BF50E071ED8616E4C2B00AC - 2FD5A671CF9E6EBFA7A5ED67F5F385F3629B4089EA590C0DA3F0E60BA615C0EA - 356B852E9712D1BA4DCD8DEAD540F1EA52C8CAD63EB58C044900F147ADF11789 - 8485743F133CFD69618650E533A2110CE231BDB1251EF7E4C19402C03A1A074B - 94B87CE9120C0F0D49DE746EDFEA83EBD73A252F3A7AE70622117D67347775DD - 80A31FBC0FBF7EED1578E9E03E78F6E9EFC233DBBF033BBFF738B4B7AA8F61C4 - 03530A60FDC6326145AF12A754FE603C5960C9D24261A0299E04830138FEE1BF - E1C5037BE1851FEC81B7FEF42634D4D50A0245018F8E8E0AED16A330A500D4D2 - 3FD2CAFAFF4A34359C94AE9489E73A81C6FA3AD8BF6717FCF18DD7E1C6F56B52 - A9B9309D001CACDFBC7153B9E4CDCC2D96E271024809FC86F574774B5E745000 - 7A9699A9D1DF7F1B7E75F817D07FFBB654624E4C27804D9B2B5467D378067B90 - 8693B5D2557470C46E5571EC4FBE0987D4C70ACC80E904C093FE1BEAF0585C75 - 78BA8348B585178A986A3AD8E3F1C04F5E3EACB89D0B5BE00D27EBB85AE298DA - 2BAA7CAA29DEEF1F81DD3B9EE4EE8A3DB57337ACDBB051F266E6565F1FEC7B6E - 87E4CD21893C1D8C53B56A7BF9309895BE6A96296A540DDFC753BFBBDD1E1650 - 3C6BD97A984A003CE93F5E58B51A308D0032B3B285E159A3C09E475A5A9AE459 - 07D308A0CA571397EE182FB84A486DF4713E621E01D41897FE657C5B66B75024 - 1131850016E62D82A265CB25CF3870054FA6C6DDC7898E29046064E3EF4E8435 - 08ACF760254C21009F09D2BF4CB5C5AA01C3078270BF1EAE9A55E397AFFE1C3A - 3BAE4A9E767077D1CEDD7B254F99E7F7ED86EE8FBB24EF5E68202886F0CCC60D - 0D0D0A8B3F71E78F5E3B77E61474DDB82EDD51192B65014305208EEAA9D7B92D - 8D0D5C0B31D5A8E79C43C02AC9C82EE95C62A800561697701DF9D2C839FBA7C6 - C95A3E01607581CBBAAD80A102E069FD8F8EFA59FA3E2D79B3E3664F37773BC2 - 2A5BC90D13004EFAE04C9D1AADCD4D100AC56EC1E4C9DA13D29532583559E190 - 49C30450BA769D70EA971ABC4BBB78A9AFABE59A4AF678D2351D4899A8182600 - 9EF48F9B3E4EB54DDFF9335B70C5F0E54B17254F192BF4060C11406AAA1D3697 - AB3F751E974AF3ECC3D34A3D6763B06C73B9B046713E638800707326EE995723 - D6E95FA6A1BE96AB5B69B73BB8849AC81822005CF7AF06A6FFB616F5839FF430 - 383000E7CEF2F52CCACA2BA4AB2978968EE17E8044C090A16097DB0D1919CAFB - FE46FD7E6104305EE0B66D5C84A2066EDA181E9EBE03090F99C0534094C0EEEB - D060FC7EFFA8681C0A367C2E808831F3FDB87822B690002C0E09C0E290002C0E - 09C0E290002C0E09C0E290002C0E09C0E290002C8E560118739619A1054D31D2 - 2280080427673E978D300F628CB8CFB1E31100DE0C2D0C8111F5539708631163 - 84134072DC14E1CD0078A3204C0CF2ADA5228C438C115603AAC1477833002A2A - 0823BD339FCD4A980731462800390B28C29B01F0660118BDD500E1E0B0584498 - 0E8C0DC6086325C64C152D5500BB69601886AE1D158B08D321C486C5481440CC - AA00194C2B63D07BFECFA24B980E3136F83C1BEEAEA0960C8029650CC6FB9A60 - B8EB3F4229611E3026181B51005CF53FA22503E04D718DD930F4341E827044D3 - 80031147301618138C0DC73AC03BD1B7F92D38310249B63470E7CDEF45F38942 - 6FFB6F60A0F36D7635C00C9FA113570188A9C5DF73163C791560F714083E610C - FE9E3AB87EE220BBEA6336CA2C84C5BCE815002A2CCCEA9D7A48CFFF0CA438D5 - 17D813B1677CE022741CDFCEBA7F78F489A6D6BF8C5E01A085D8078FC360E709 - F0E46F8154A7BE273011FA181B3807578E3E01A1894BCCC31D289A52BF8CDE0D - F0B208821009F961E8CA71B07B5780D34B9B46E682C16BC7E0DAB11D100A5C66 - 9E5CEF6B4AFD327A0580A00050710108875926E8F80882E303E0595806B664F3 - 3F313111090786A1ABE1107437FD8CFDCD6FB09259051F99ED4948F8FFB12B89 - 01C767B16641B263192C5CFF1864153F08C9C9D63B7D391E844263D07FE108DC - 6CFF1D4BF978C64D3F333F3339EDE3975117B13A0A0B4580CF64C7CDF4E9CC32 - 98101683B7681B780BEF0777EE7AB025293F0786984E243C09FEDE76D6C6FA90 - 65D7F759E03F66A558D7E323C6C699718FF72B112B0120782FAC526421E0B71F - B3820B2025035C99A5E0C8288214770ED86C983162F9D9F3810844221310F4F7 - C1C450078C0E9C654D2C5CDC815D3BFCB6E3089F1C784CF9BABFF577128F20C8 - 4290C580DF7C0C385EA361B6A0E0CFCC54BB4A344CF138B227073D6681978967 - 20F0DE681870341404055F1D5904186C7C95EBF898065E66AE82217F0E059F0F - 39D871093A411004411004411004411004613900FE0FC9CFE14B9BFF54F80000 - 000049454E44AE426082} + 0C7E49444154785EED9D096C1CE515C7FF3E76ED3DBCB6933897133B24E48224 + 4EEC78EDB46A11F490504BAB4A0855AD6829522B6828842B29148200B5AADA4A + A105442F958A8A5E54A0425354042241AD208E8F2476424248489CC424B1139F + BBBEF6E8F7E6209777E79BF1AE67D6F37ED2CBCEFBBC99B5FCFEFBBEFB1B300C + C3300CC3300CC3300CC3300CE302F2B4D7A940FFACA9FCCC5C2479D96B56C976 + 30E8FE64F99AE93E931A0A3C594233DDCF0AD908861EE4026185C23CC202F057 + AC86AF7C29F2BD73919F572CCA98CB49244790183B8DE1DEC38876B78B9288B0 + 7161316171611917432605A0079E82EE45515105828B6E46D9C29BE09F1D163F + 2AA23731B22447113DDB84BE13AF61E8D83F303ADA2D0AC78491183226844C09 + E042E0BDDE4A54ACBD17BECA5BE1F307949F329363381AC1F0A93FA17BCF368C + 8D9D1225170B615264420054B7539AF763C6B2DB50B16E2BBC8565CA4F98CC32 + 16EB4377DB1338FFC11F85171546D503B5132C33590150F0456A2F9E8DEAC667 + 10AAFCB25ACC6495C113DB71AC692330725678A3C22C8B6032025083EFF556A3 + EA8B7F87AF74B55ACC4C09C3FDEDE87CE31651251C179E6511504BDD0A6AF08B + 8A2AB1E80BAFA0B86C955ACC4C199EE23928A9BC01439DDB118F5375A077194D + 6145009435BCC24A517DFD8BF0CD5AAF9432534F6171058A67AE43EFD1578567 + A93D604500D4DA0F624ECD0F51BEF8EB6A11631BDE6035F2F2F31039F39EF04C + 8B8052B919B4D45F5A83D092BBD522C67628161413A5416E2EA666DE4CA99F32 + 861FF3D63F8A621F75FD182740B1A098506CD4184937EECD0AC00BBFA8F34BE6 + DEA016318E816242B151DB6759110029AB18E54BBFADBA8CE3506343F32CD26D + 3B5901E8E93F84B2B9372A258CF350631312265D0D9811800781F961E4FBE903 + 182742B1A118A943F3191500BDCF83E0CC7AD5651C8B1A231280546C65DE444A + 222B84A76CB952C23897A2B265E25F1AABD1E39616335540218A02F35497712C + 9EC07CF1AF2E0043643300BDAF0005DE52A584712EF95EBD114831CB580620F2 + 108F93B2182793884B370009330260A6212C0097C30270392C0097C30270392C + 0097937302F0783CF0FBFDD25650203D31E64A64FA8B24129A639E8D255FDA09 + 7FD922A5D426EEB97F0BAE5925BF00794F6B0B9E7B7A9BE6B98068DF311CD97E + 9DB8A225E3B48124ED12B19CCB00C5C5E6B615AE5E53834030A879CCE5E49C00 + 4ACBCAB52B390A0A0BB1BEBE41F398CBC929019494843063E64CCD9327BCE153 + DA157339392580B5B575C8CB931EE6FE8425572FC3CC59B3348FB9989C12C0FA + 70A376650E124DB891B3C044E48C004A4BCBB06CC54ACD330F0B606272460075 + E106E4E75BFF75E7572EC0C2AA6ACD6374724600E1860DDAD5C4B4EFDBA35DA5 + 861B83579213029855311B572DB95AF3AE249148E05FFF7C45F352532F449497 + 97339A9F1272E2AF41814BC789CEE33876F408CEF5D0313AA9292F9F21DA112B + 34CF3A25A11042A5A529CDEBA581D3D4F8FD01D4D687F1B59B6FC1EDDFBD1377 + DCB50973E6DAB3DC322786821F7BF2A798BF6081E65DC97FFEFD1A5E7EE96FF8 + E6B7BE83CF5EFF39AD7462FEF7CE0EBCF0FCEF35CF3C14E09F3FF5ACE64D4C7F + 7F1F1EDD723F4647E9DC860B548A76C88D377D15EBEAEA515878E9EA3A1AAEA6 + 61EB4933DD86822B172C4C1B7CA263DF3EF5B57DAFF29A8EDAF5616542C92A43 + 83834A95930EEAB1ACBCF6C27C45B1CF876FDC7A1B1E79E2274A36BB3CF876E2 + 780118A5FFA1A1217C78F89072FDFE81FD181F27D1A7C6E7F76375CD5ACD330F + 059F3ED388AA6A35512EA8AAC2238FFF18D7DDF0F949F562B285A30540033846 + 0268DFDBF6C937724CA4DCF7F77728D7E908377E5ABBB2C6C8F0B076951A1AB2 + 5EBE62251E7C682B2A4423D6A9385A00572D5E227A00159A37317BDB2EAD37DB + 5A9AB5ABD45006A08698558CB20CB158F45A366E7AC0F4ECE554E36801D41B8C + DE8D8F8FE340079DA87A81BD7B5A0DEB68AA83A9156E15A3FB13D4AA2F2AA203 + 3B9C8D630540F5A5D134EEC1031D57B4B423A27E3EFC81DA264847C324868649 + 78D305C70A60F9CA6B942E573A52759BF6B41A57034B97AF40F90CF353CB448C + 05907D8C1A7FC9644249F71321D39F5666080D3E2315B1181DD39B59B2714F19 + 1C2900AAA369B0241D478F1CC1E0C080E65DCAF9733D3879A253F35263756E20 + 99B476467357D729BCF9C6EBF8ED734FE3C9AD0FE3817BBE8F7B377E0FF7FDE0 + 0E74EC331EC3C8068E14C0AA3535CA8ADE74EC37F883C96481050BAB9481A66C + 128B8D63E7DB6FE189471FC2E33FDA8297FEF2225A9A762902250147A351A5DD + 62178E148051FA27F689FE7F3ADA5A766B57E9C9E63A81D6E6263CB2E57EFCF9 + 85E771EAE409ADD459384E0045A2DFBC666DADE64DCC3991E26902281DF40D3B + 73FAB4E6A586046065999911BDBDE7F19B677F85DEF3E7B51267E23801AC5D57 + 67389B2633D843B4ECDEA55DA58646ECAE5E9AF9936F1271E3B10227E03801C8 + A4FF96263A16D71899EE20D1E0E285228E9A0E0E0683F8D953CFA6DDCE452DF0 + 96DD4D522D714AED75F561C3141F890C61F3A6BBA4BB6277DFB719D7AE5EA379 + 1373AEA7070F3FB849F3A6905C9E0EA6A95AA3BD7C14CCF5E10691291A0D8DDE + 2753BF07024111503A6BD97D384A0032E93F5BB8B51A708C00CACA6728C3B376 + 413D0F9FCFA779EEC13102A80F3766A53B260BAD12321A7D9C8E3847008DF6A5 + 7F9DF086C92D14C9451C2180D973E6A27AD1559A671FB482A7CCE4EEE35CC711 + 02B0B3F17731CA1A04D17B70138E1040D801E95FA7C165D580ED0341B45F8F56 + CD1AF1EB677E89CEE3C734CF3CB4BBE8BECD0F695E7A1E7B78334E7FDCA57957 + C20341194466366E60A05F59FC493B7FACDAA1F7F7A3EBD449ED8EE9715316B0 + 5500EAA89E719DBBB7B5456A21A611CD9273085425D9D9259D4A6C15C092A5CB + A48E7C69959CFD3362F72E3901507541CBBADD80AD029069FD47A31191BE0F68 + DEE4387BE6B4743BC22D5BC96D13004DFAD04C9D11FBF6B4211ECFDC82C9DDBB + DED5AED24355931B0E99B44D002BAEB95639F5CB08D9A55DB23437ED929A4A0E + 064B4C1D4899ABD8260099F44F9B3EF6B75FBAF367B2D08AE1A3473ED4BCF4B8 + A137608B003C1E2FD6D51A3F759E964ACBECC3334BB36463B0665DADB246713A + 638B00687326ED993722D3E95FA7A5799754B7D2EB2D92126A2E638B0068DDBF + 1194FEDBF71A1FFC6485FEBE3E1C3A28D7B3A8A9ADD3AE2E20B3748CF603E402 + B60C05FB03018442E9F7FD4523116504305BD0B66D5A8462046DDA181CBC7407 + 121D3241A780A483BAAF03FDD9FBFD53627228D8F6B90026C34CF7E3E299CCC2 + 0270392C0097C30270392C0097C30270392C0097C30270392C0097C3027039E6 + 04505060CF59668C3C2663644600498C8F4D7C2E1BE31CD418499F63272300BA + 195902B121E35397187B51634413407ADCD2229B01E846318CF6CBADA562EC43 + 8D11550386C127643300292A86A1EE89CF66659C831A2312809E05D2229B01E8 + 66E3889E6B412236A816318E83624331A258A93133C44C15206E3A3E8881136F + AA458CE350622362A40A206355800EA59561747FF057D5651C871A1B7A9E8D74 + 57D04C06A094328C919E360C74FD5729659C03C58462A30A40AAFE27CC6400BA + 29AD311BC4D9D66D184E9A1A7060B208C5826242B19158077831D636BFC54687 + E0810F8139D37BD17CAED0DBFE3BF475BE2CAEFA84D13374B22A0035B544CE1E + 44704E1DBCC14AC567EC2172A60927DFDB2AAE7A844585C5A95816AB02208525 + 30D8D58C92799F41A1CF78813D9379467A3FC4F19D1B45F78F8E3E31D5FAD7B1 + 2A00B2B8F8E011F477BE8BE0FC0DF0145B7B0213638D68DF217CF4D69D888F1E + 111EED403195FA75AC6E80D7451043321EC1C0473BE1092D4671296F1A990AFA + 3A77E0E48E4D888F1F254F1805DF54EAD7B12A008204408A1B4722318281CE77 + 101BE94370760DF20A9CFFC4C45C24313E88AE966D38D3F60BF1373F254A2615 + 7C62B22721D1FFA7AE24059C9EC55A8E82A245A858753B662CFD0A0A0ADC77FA + 723688C78771FEF0ABE8EEF88348F974C64DAFB088303DEDD397D112993A0A8B + 4440CF64A7CDF425C2424208F3505A7D234AABAE47A06215F2F2D33F0786B994 + 64620C91EE0ED1C67A1BFDC75F1781FF5894525D4F8F181B11263DDE9F8E4C09 + 80A07B5195A20B81BEFD9415FC406108FEB215280A55A330300B7979943132F9 + D9D3812492C951C4223D181D382E1A790745138B167750D78EBEED34C2A7079E + 52BEE56FFDC5642308BA107431D0379F024ED764942D38F81373A15DA51AA578 + 1AD9D3839EB1C0EB643310746F320A38190982836F8C2E020A36BDEA757C4603 + AF3355C1D03F87832F871EECAC049D611886611886611886611886711DC0FF01 + 5322E5446696053F0000000049454E44AE426082} FileName = 'C:\YandexDisk\Development\Delphi\AErender Launcher\icons\png\ps\' + 'icon_128.png' @@ -165,215 +165,215 @@ object AboutForm: TAboutForm PNG = { 89504E470D0A1A0A0000000D49484452000001000000010008060000005C72A8 66000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 - 19F249444154785EEDDD09741D577907F0EF6979DA2C3DADB66559B6E45D5E14 - CBB66C67C1092127349400871E68819EF67481362DD05087E034244058439B42 - E1140870A0A50D5BA1C0A14081903DCDE2459B37BCC4B622D9962D6B7F929EB6 - D7FBCDDC8BC6CF92FDDE9B3B6FE6BDF9FFCEB999B963D97E72F4FDE7CE768700 + 19F749444154785EEDDD09745C577907F04FD268345A47AB6D59926D795FE555 + B6B3E004C8090D25C0A1075AA0A73D5DA0A5050A7500A721010201429B42E114 + 0870A0A50D5BA1C0A14081900DD28478D1E60D2F516CCB8BBC681FCD8CD6DEEF + BD7BD1F358B267E6DD37EFCDBCFFEF9C9BF7EEB36C8F1C7DFF77DF761F010000 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000020B50272992962BF9F4CFBFEC01D51B95462FB692BDD0B44 - 7D7EEBF7C1EB736D0748962A785E5A8BDFBA3D2DA56381C416372F635B96684C - F515EB3AC07C628B5CF56744537D6B63B1CBB4904E05612D662E70D5E7F5F99A - F5F7A825403CAC05CD8D8B7FBE66FD1AA6FA9E970E45A18A583555DCD957B482 - 8A5A2A2ADF42C1D2060A16AFA6BC921ACA29A8A6AC4048FCD67CF13500718A8E - D34C7490A6C6CE5164A89B26868FD3C4C0110AF71DA0B14BAF8A2F989EA3C506 - 82E783C0CB013057D173CBF95DCBCB5B4045B5B75271CDED54B4F846CACEA911 - DB019C353DD54DE1F3CFD370F7AF28FCEA1314898C88AD5396A68220360C3CC7 - 8B013057E1F31E5E157E2E85965E4FA52BDF49C54BDE4081AC22B10DC01DD199 - 300D9FFD390D9CFC360D76BD20B64C8AA68260BE518167782D00620B7FB6E889 - F2A862CD5BA8B2E12E0A2ED828FA00DE323172907A8F7C892E1DFB89E84544B3 - 86416C10788257024015BE2A7EB5C70F1AAD7CD51DB470D37D945BB85AF401BC - 6D72F4385DE8F834F59DF885E84DC8661D11786634E08500B016BF2A7CDEE307 - 29BF6C0DD5ECFC241596DF2CFA00E965B4EF69EA7EF17E1AEF3F267A1C026A44 - C041E08910E08273932A7C35DCE7C2E7B3F585B4B0F1AF69D90D5F157BFD55A2 - 0F907E720BEAA862E53BC58F7784C23D1D72ABEB7B7D2B2E3EB758F7FADCCCE3 - FCDCA26A5AFE9A2F5041C52DA20F9019467B9FA6CEE7DE4793E173A2A7CE0FA8 - CB87AE8D04DC1A01588B5F1DEB175061D5165AF9BAEF53B0A451F40132476E61 - 1D95D5BD89C2BD7B6972B4576CB116BC6BA302370260EEE22FADBF9D96EFFA16 - 65E5568A3E40E6C9CA29A1B2FAB7D044F8288D0F748A2DD63DBF2F460073157F - 3E85EADF48B5D77F8D025905A20F90B9028120952CBD932223C72932F08AD8E2 - 6A08A43200E62BFE3B45F17F59FCC3F0390080CC1708648B10B84384C009B743 - 205501A08A5F9DED3787FD25B537D3F21BC59E5FA422809F70088496BE5E1C0A - B418CF1AB8749350AA02800B9F036076CF9F5FDA4075B77E1BB7F2827F0572C4 - 48E0761AEE7A9CA6C6FBC50615002A041C0F032E4CA7C50EFDF32818ACA0BAD7 - 7E8DB2B243A20FE05F5C035C0B5C135C1B668D70ADA8BA7194D323006BF19BD7 - F9F9269FDA9B3E4B051537897500C8CEADA0BC50350D9C795CF4527AABB0D301 - C0238CCB8FFB2B56BD892AD77F50AC03809257B29EA6C78ED358DF49D1B33E38 - C41C0B02270F01D4DE7F3600720B17D2E22D1F17EB00108B6B23B7A84AACF1CE - 926B866B47D59123521100B3C3FFC54DBB71A30FC03CB836166FBE47ACF1A132 - D78CE3E7029C0A00F5A167F7FE45E5EB2854F74EB10E00F3E11AE15A49D128C0 - E90098DDFB576DFE80D8E2F4390780F4C635C2B592A251801301A03EECECDEBF - 50245A71F51D621D00AE856B856B2605A30027038093CB0C80CAF57F21B701C0 - B50564CDA800706C14A03B00D407E43FD71CFEE7169651C9B23B8DAD00101FAE - 19AE9DD9C30055AB5A43C0A91100FFB9E6DE3F54F7660A04F0941F4022B866B8 - 76AE3C0CD04A7700A8E25701904BA5CBDF2096009028B3767804A002407B08E8 - 0C00F5C178691EFFE7142FA482B266632B0024866B876BC80C00751E80690B01 - 9D01C0F883CD064068F12ED1D5FD7700F884A81DA3862E0B006DC5CF9C0800FE - 33CD00285ABC9337024092CC1A5201C0B5E5D90050E9640980CA26B104806499 - 35141B00DA42406700B0D900C82D2CA19CC23A632B0024876B886BC9E3230095 - 4A2A00B28CD7736BFEB0003E1410B5C42FC731EBEAF25AB34D5700282A00B229 - BF0C7B7F001DF2CBB996D2EA1C4016E5E454F34600B029277B89F8AF5957B375 - A685CE0060B321100CF11C67006097594BDA8B9FE90A00F5C154CBA2AC5C3E71 - 01007699B5640D00D56CD33D0260E6870B040ACD2E00D8623E4BA3ADE8AD9C08 - 005320C0D72E01C02E07DF9AE5DC080000744A8B11000A1FC0595A6BCCB94300 - 00F03C0400808F2100007C0C0100E0630800001F430000F8180200C0C7100000 - 3E860000F0310400808F2100007C0C0100E063BA1E2CE020E139CBF89DE645A2 - 85A8FED6476941F52D62DDF7CA2B2A28E0D0FB51C6C7C6281C1E913DC84823E7 - 9EA2534FFC95581B142D2C5A44B469D16644B30501E0B05DB7DC4AEFFAD33F97 - 3DFD666666E8331FFF089D397D4A6E818CE36000E010C061A1D252B9E68CACAC - 2CDA79C34DB20790180480C3B8409DB66DC7CE94FC3D9079F053E3B0A2050BE4 - 9A734A4A42D4B06193EC01C40F01E0B050A84CAE396BC7F537C83580F821001C - 56595525D79CB579CB560A06F91C2C40FC10000ECAC9CDA5458B53F382A4BCBC - 7CDADCB445F600E2830070D07A715C9E2B422055765C7FA35C03880F02C0415B - 9BB7CBB5D468D8B8898A8BF14226881F02C021D9D9D9D4785D93ECA506FF9DA9 - 0E1D486F0800876CD8D84885457C53646AE1300012810070C8F69DEE5C965BB1 - 6A3555562D943D80AB430038802FC73536A576F86FE556F840FA410038E0BAA6 - 2DC66539B7E03000E285007040F38EEBE59A3B165757D3B2E575B207303F0480 - 667CE26FC3A646D9730F4601100F0480665BB636534E4E8EEC25AEBDAD85A6A6 - A6642F79CD784210E2809F10CD9A77DA1BFE1F3ED841278EFD56F692172A2DA3 - 750DEB650F606E08008D78F28F356B1B642F39A74E9EA08EF636D9B3A7195703 - E01A10001A6D6BDE616BD81D8944E8D5CE3374E460BBDC624F93381C090683B2 - 077025048046CD3BECED7179E83F3D3D4DDDDD5DD4DFD727B726AFA0A0801A37 - BB773F82977150F3A3DAABD7AC351EA5E669D5F8FE89BC7CF72EDFBA0193826A - 52B570117DE2E147642F393FFAC1F7E87F7FF65363FD4FFEEC2FE9C65DF6FFF9 - DA5A0ED097BEF0CFB2E79EEA2535B64E8E4E4E4CD0F9F3E7642F715CF05CEC1B - 1B37D32AB1AC5DB68C7273AF1C1D3DFECB5FD07F7DF731D9F308CC0AEC7D77BC - F14DF4963F78BBEC25E7531F7BE077B3FB6EDDB69DDEF3B7EF37D6EDE02B0AF7 - DEFD5E57A70EAFAB5F41F73DF890EC25EFB9679EA2FFF8E6D7652F3EE5E515B4 - EBB5AFA31B5EB38B42A16B4FD0FAC2F3CFD2BF7DFD51D9F308CC0AEC7D766FBF - 1D1919A6CE33A7658FE8C8E143C694DF76F15ED7ED2704C7C7C7E59A3D378911 - 51CDD25AD9BB3A3E21CBD3B1F3A88CC3399EE2F723048006FC43B9A466A9EC25 - E750473B45A351D9231A1D0DD3C913C765CF9EED2EDF14D477A957AED9B775FB - 0EB936379E85E90D77BE993EF199478C773264DB38ECF0030480063A1EBE39D8 - D62AD7661D6CBF725B32F8D8B7A2B252F6526F421CBF47348D0256AF5E2BD7AE - 54BF62253DF0B14FD19BDFFA360AE6F1D1285C0B02C0A6402040DBB6EF94BDE4 - 4C4F4F5147C795D7FEDB5B5BE49A7D6E3F9F3038C887AFF6D5CEF18C03FF3FE0 - 61FEBDF77FC4780E02E28700B089F73A7667FE3D7AE4308D8D8ECADEACB3DD5D - 74F1428FECD9E3F6B301A39A4E42F2A5CDD2B272D923E3B2DD5DEFFB80710216 - B73E270EFF62366DD7301F7FEB81FD72ED4A7C194F073E47B1B47699ECA59EAE - 1381ACBCDC0C009EFFF09E3D1F361EBF86E420006CE03DCED66D573F29158FF6 - AB1479CB817D72CD3E3747013A0380DFB654120AD1EE3DF7E3B1679B100036AC - 5DB7DEF841B4E3F4A9576860A05FF6AE74F2F83171FC3C207BF6F0834A7CBCEC - 061D973495CACA2ABAFB9E3DC6CD45600F02C006BB4FFEB1B696F987FF8C2F0D - EA3A0C2813C7CE6BD6AE93BDD48A44F48D00DEFAF677C47D3F005C1D0220497C - BD79CB36FB37D85C2B0058EB7E7D87016EDF13A0031E70D2070190A48D9B1A8D - 33D276F45EBC48DD5D5DB237BFA3470ED1D8D898ECD9C3B7187378A59ACE4300 - D0070190241DD7D5E3D9FB337E42B0638E1B8592515058489B1A37CB5EEA8C8F - EB0930D00B019004BEF6ACE3D253BC01C0DA5A341E0668387791B0D9BB9CC143 - 100049D8DCB475CE474913111E19A1E3094CFD75B0BD4DCB5C81AC71F3166324 - 904A636357DEE804EE43002461BB86E13F4FFE99C871315F473F7AF890ECD963 - 3C21A8E10426A43F0440828A8A16186FE1B5AB35891B7C5AF6EF956BF6E9B883 - 31113CDD19780F022041FC382ABF85D70E7E3A8E67FF4D148F1AAC8F0CDBC193 - 975AEFA9771A9FC84C0783037A6EBA4A1798112841BBF77CD8F6CD34BCF7FFF2 - 173F2F7B89D9F3C047A97EC52AD9B3E787DFFF0EFDEA173F933D67BDEEF6DFA3 - B7BFE38F652FB52627278CC9563A4F9FA69EF3E7A8B7F7220D0F0D19732E4C4F - 9B8761598180317700FFBAAE90D50633027903EF31F9D97ABB78F28F64B5B5E8 - 7B4478478A0F0352A9BBEB55FAF94F7F4CFFF8A987E8EEBF790F7DF6930FD177 - 1FFB163DF99B5F1B9754F916EC0B3D3D74498401B78B172FD0F97367BD57FC0E - 43002480DFB6A3E35EFA83360220997307F3595ABBDCF64C465E32323C6C8C68 - 3E7AFF87E8A107EEA39FFCF70FE8C4F163DAAE9E642204400274DCFCC3CFF8DB - 9922EBDCD96E6398AA4B26BC43B0AFEF123DF6AD6FD29EDDEF370E6BF8DF08E2 - 830088D3A2C5D5B4BCAE5EF692D7D1667F087FB5F90312C5A1E6D61382768D8C - 8CD077FEF3DFE9810FEDA6679EFC8D38D69F94BF02F14200C4699B18FEEBA063 - 9AAFFD7B5F926BF6F15C812B57AD91BDF4C14F487EE4BE7BE829714C8F217EF2 - 100071DA6EF3AD3F6C686850CB4CBF7C469BCF64EBB2E386F43A0CE8EA3C435F - FEE2E78C1100D8830088034F44A963B249DE6BE938CBCC7FC6FE97F58D02F89D - 8676EF6D48A5D1D151DF9DAD770A02200E3A6EFD652D1A9FEBD7791850585444 - 1B1BAF933DF01304C035F009321DC7FFA3E1301D3D7C50F6ECE35788F1F56B5D - 74BCDB00D20F02E01A56AD5E63BC5FCE2E9EDC53F7EDB03A270CE5C79BED4E70 - 02E90701700DBA5EA8B1EFA517E49A3E579B4D3851FC7873D3D666D903BFC0B3 - 0057C127C61EFEDC178DF9E7EDE0EBD3DFF8EA97B44F8B9595954DEFBEEBBDDA - 5E8871E450077DFE9F1E963DBD743E0B70ECE8117AE4E14FCA9E0FE0F5E0EED8 - B0E93A7AFFDF7F50F6321F0714DF4DE7C4137108001BF030903B5C993ACB453C - 9268DEEEAFEFD9EF1000F3E0A9A7AF6BDA2A7BFE91EA8942C05D0880796C6CDC - ECCBB3E2FCBCC3E2EA25B207990E01300FBF0DFFAD704F807F2000E6C033E6F2 - 08C0AFF830205D9F1084C42000E6604EFB9DFAB7E7784555D5426DD38E81B721 - 00E6A0E3A59FE90E2703FD010110A3B8A4841AD66F943DFFDAA661F663F03E04 - 408CADCD3BB4DD5997CEF8EEC7F51BECBFFF00BC0D3FE93174DDFB9F093261BE - 40B83A0480457945A5F1F41F98F809417E112A642E0480859FAFFDCF25989767 - 5C1181CC8500B0E079FFE172380CC86C0800896F7FE51765C0E51A366C34AE8C - 406642004899FC9A2C3B8C270471623463210024FC90CF4FC794E8E04D981044 - A8AB5F41F73DF890ECD9D3D1DE9AB237EECE87473337ED7AADECE9F1C09EDDC6 - CB34938509416CC08C40CE7ADB1FBD8B6E7BFD1DB267CFA3FFFA2F7460DF5ED9 - 7347CDD25A7AF0E39F963D3D7EFAE31FD2FFFCE447B2973804800D9811C839FC - D49BAEB3FFFC1E7A3BAFFED6855F8DADFB0599B81A90997C1F006BD63550A8B4 - 4CF6EC39D8DE46910887B3FBF66A9E8578E1A2C5C6A1126416DF0740F3767DD7 - FE75BEB5D7AE7D1A5F1DA6E009C1CCE3EB00E0A7DDF8E11F1DA6A7A7A8AD55DF - 3CFD76F59C3F67BC4454279E30140F4A65165FFFDFDCB0B1D1782F9E0E478F1C - A6B1D151D9F306DDA3809250088F4A67185F0780CEB9EF0EEC7D59AE7987EEF3 - 000C870199C5B701100CE651635393ECD9C32FD4F0D2F05FE9BBD44BA74E9E94 - 3D3D366FD9664C990E99C1B701603CEA9AA7E751D713C77E4BC34343B2E72D2F - BFF8BC5CD3233F3FDF97EF4BC854BE0D009DB7FEB6EC77F7C69FABE19B92A2D1 - A8ECE9817B0232872F03804FFC6DD8D4287BF6E97C4DB76E0303FDF4DBA38765 - 4F8FF51B37D182E262D98374E6CB00D8B2B59972727264CF1E3EC6EEEFEB933D - 6FDAAFF904A571F974DB76D98374E6CB00D039ED77AB87F7FE0A5FA1989EE65B - C7F5C1614066F05D00844A4B69CDDA06D9B36FFF3EEF5DFE8B3532324C478F1C - 923D3D56AE5E43955555B207E9CA7701B04DE3B4DFFCD0CDC50BC93F229B4A7B - 5F74E09E00BC4330EDF92E009A354E6E910E7B7FA5B5653F4D4D4DC99E1E0880 - F4E7AB00A85AB888EA57AE943DFB5AF77BFFF85FE1DB940F76B4C99E1ED54B6A - A876799DEC413AF25500F0EBAE74E1876DF810209DEC7BE945B9A6CF0E8C02D2 - 9AAF0240E790D54B8FFEC6ABBDAD85229171D9D383DFA5805789A72FDF0440CD - D2A5B4A466A9ECD977208D8EFF95C8F83875B4B5CA9E1E3C99CABA86F5B207E9 - C63701505A562ED7ECEB7AB593CE9C3E257BE9E5F9679F916BFAD4D42E936BF3 - 1B1CE8976BF60D0C0CC835B0CB379382F23075EDBA06CA2F28905B9233333D43 - C78F1DA5B1B131B925FD2CAF5F4165657AA641E31B8C7892CE78A6425BBD761D - 15D99C7F81FFFD4F9C3846A3619E1BD327302B30808F6156600070020200C0C7 + 0000000000004066E5C965AE48FC7E72EDFB03774CCBA592D8CF5AD95E20EAF3 + 5BBF0F5E9F6D3B40BA54C1F3D25AFCD6ED59291B0B24B1B87999D8F24563AAAF + 58D701E69258E4AA3F259AEA5B1B4B5C66856C2A086B317381AB3EAFCFD5ACBF + 472D0192612D686E5CFC7335EBD730D5F7BC6C280A55C4AAA9E22EB8A615D734 + 5169F5160A56AEA160F90A2AAA68A0E9E27A2A1A0B138542E26B0092148B513C + 384879D1F3141F3A4B63C3C7696CE00845FA0E50F4CA19F10593B3B4C440F07C + 10783900662B7A6E81DFB5A2A2322A6D7A059537DC49A50B6EA1824083D80EE0 + ACC989B314B9F02C0D9FFD3945CE3C41F1F888D83A61692A0812C3C073BC1800 + B3153EEFE155E11752B8F126AA5CF6160AD6BC9A42C5A5621B803B62D1088D5D + F9090D9CFC060DF63C27B68C8BA68260AE518167782D00120B7FA6E8898AA866 + E5EBA97AF53B2854BE5EF401BC25367C90FA8E7E9EAE1CFBA1E8C545B3864162 + 10788257024015BE2A7EB5C70F1AAD7AF95D54B3EE5E0A95AD107D006F8B8D1C + A72B873E417D277E2A7A63B25947049E190D782100ACC5AF0A9FF7F8410A55AD + A4853B1FA2D2EADB441F20BB44FA9EA673CFDF47B1FE63A2C721A046041C049E + 08012E3837A9C257C37D2E7C3E5B5F42F35AFE9A166DFD12052B968B3E40F609 + 162FA19AC6B7881FEB38457ABBE456D7F7FA565C7C6EB1EEF5B999C7F985A5F5 + B4F8659FA5E29ADB451F2037442E3D4D679E7D178D47CE8B9E3A3FA02E1FBA36 + 12706B04602D7E75AC5F4C25755B68D9EDDFA160B845F4017247B074095535BD + 962257F6D2F8E865B1C55AF0AE8D0ADC0880D98BBFB2F94E5ABCEBEB945F542B + FA00B9273F584155CDAFA7B1C8518A0D9C165BAC7B7E5F8C00662BFE10859B5F + 43F3B67C990A0B8B451F2077E5E505A9A8EE6E9A8C1DA7F8C08B628BAB2190C9 + 0098ABF8EF16C5FF050A85F81C0040EE0B040A4408DC2542E084DB2190A90050 + C5AFCEF69BC3FE8AA6DB68F12D5FA64021F701FC834320DCF82A7128D0663C6B + E0D24D42990A002E7C0E80993D7FA8720D2D7EC537283F1FB7F2824FE505A8BC + F14E1AEE799C2662FD62830A0015028E870117A6D31287FE45140CD650D36D5F + A68282B0E803F817D700D702D704D78659235C2BAA6E1CE5F408C05AFCE6757E + BEC9A7E9964F5169DDAD621D0002A2F88B2AEA69E0D4E3A297D15B859D0E001E + 615C7DDC5FB3FCB554BBF67D621D0094A2F05A9A8C1EA768DF49D1B33E38C41C + 0B02270F01D4DE7F26000A4BE6D182968F8A750048C4B551585A27D67867C935 + C3B5A3EAC81199088099E1FFFC4DBB29BF1837FA00CC866B63FEC67BC41A1F2A + 73CD387E2EC0A900501F7A66EF5F5ABD9A2A9ADF22D601602E5C235C2B191A05 + 381D00337BFFBA4DEF153DA7CF39006437AE11AE950C8D029C0800F56167F6FE + 2522D1CAEBEF12EB0070235C2B5C331918053819009C5C6600D4AEFD0BB90D00 + 6E2C4FD68C0A00C74601BA03407D40FE73CDE17F614915952DBADBD80A00C9E1 + 9AE1DA99390C50B5AA35049C1A01F09F6BEEFDC34B5E47057978CA0F20155C33 + 5C3BD71E0668A53B0054F1AB0028A48AA6578B2500A4CAAC1D1E01A800D01E02 + 3A03407D305E9AC7FF81F279545AD66A6C0580D470ED700D9901A0CE03306D21 + A03300187FB09900082FD84514D2FD7700F884A81DA386AE0A006DC5CF9C0800 + FE33CD002899BF933702409ACC1A5201C0B5E5D90050E934130065759BC51200 + D265D6506200680B019D01C06602A0B0A48202254B8CAD00901EAE21AE258F8F + 00542AA900C8375ECFADF9C302F8509EA8257E398E595757D79A6DBA02405101 + 5040A12AECFD01740855732D65D539807C0A04EA792300D814285828FE6BD6D5 + 4C9D69A13300D84C0804C33CC71900D865D692F6E267BA02407D30D5F2293FC0 + 272E00C02EB396AC01A09A6DBA47004C7EB8FC12B30B00F618CFD2682B7A2B27 + 02C0946F5CBB0400BBF2F3F879004738380200008DB2620480C2077096D61A73 + EE1000003C0F0100E0630800001F430000F8180200C0C71000003E860000F031 + 0400808F2100007C0C0100E0630800001F430000F898AE070B384878CE327EA7 + 79A968616A7EF9A354B6F076B1EE7BD535359497E74CD6C6A2518A4446640F72 + D2C8B9A7A8FBC9BF126B83A245448B8B3629DA9468B620001CB6EBF657D05BFF + F4CF654FBFA9A929FAE4473F44A75EEA965B20E738180038047058B8B252AE39 + 233F3F9F76DE7CABEC01A40601E0302E50A76DDBB133237F0FE41EFCD438ACB4 + AC4CAE39A7A2224C6BD66D903D80E421001C160E57C93567EDB8E966B906903C + 0480C36AEBEAE49AB3366DD94AC1209F8305481E02C04181C2429ABF20332F48 + 2A2A0AD1A6CD5B640F2039080007AD15C7E58522043265C74DB7C83580E42000 + 1CB4B575BB5CCB8C35EB375079395EC804C9430038A4A0A0805A366E96BDCCE0 + BF33D3A103D90D01E09075EB5BA8A4946F8ACC2C1C06402A10000ED9BED39DCB + 724B97AFA0DABA79B207707D080007F0E5B896CD991DFE5BB9153E907D10000E + D8B8798B7159CE2D380C806421001CD0BAE326B9E68E05F5F5B468F112D90398 + 1B0240333EF1B76E438BECB907A30048060240B32D5B5B291008C85EEA3A3BDA + 68626242F6D2D78A27042109F809D1AC75A7BDE1FFE1835D74E2D86F652F7DE1 + CA2A5ABD66ADEC01CC0E01A0114FFEB172D51AD94B4FF7C913D4D5D9217BF6B4 + E26A00DC000240A36DAD3B6C0DBBE3F1389D397D8A8E1CEC945BECD92C0E4782 + C1A0EC015C0B01A051EB0E7B7B5C1EFA4F4E4ED2D9B33DD4DFD727B7A6AFB8B8 + 985A36B9773F82977150F3A3DA2B56AE321EA5E669D5F8FE89A2907B976FDD80 + 494135A99B379F3EF6F023B2979EEF7FF7DBF4BF3FFE91B1FE277FF69774CB2E + FBFF7C1D6D07E8F39FFD67D9734FFDC2065B2747C7C7C6E8C285F3B2973A2E78 + 2EF6F52D9B68B958362D5A448585D78E8E1EFFD94FE9BFBEF598EC79046605F6 + BEBB5EF35A7AFD1FBC49F6D2F3F18FDCFFBBD97DB76EDB4E6FFFDB771BEB76F0 + 1585F7BFE79DAE4E1DBEA47929DDFBC083B297BE5F3FF314FDC7D7BE227BC9A9 + AEAEA15D2F7F25DDFCB25D140EDF7882D6E79EFD15FDDB571E953D8FC0ACC0DE + 67F7F6DB9191613A7DEA25D9233A72F89031E5B75DBCD775FB09C1582C26D7EC + B9558C881A1A9B64EFFAF8842C4FC7CEA3320EE7648ADF8F10001AF00FE5C286 + 46D94BCFA1AE4E9A9E9E963DA2D1D1089D3C715CF6ECD9EEF24D417D572ECB35 + FBB66EDF21D766C7B330BDFAEED7D1C73EF988F14E86021B871D7E8000D040C7 + C337073BDAE5DA8C839DD76E4B071FFBD6D4D6CA5EE68D89E3F7B8A651C08A15 + ABE4DAB59A972EA3FB3FF2717ADD1BDE48C1223E1A851B4100D894979747DBB6 + EF94BDF44C4E4E5057D7B5D7FE3BDBDBE49A7D6E3F9F3038C887AFF635CDF28C + 03FF3FE061FEFBEFFB90F11C04240F016013EF75ECCEFC7BF4C8618A8E8ECADE + 8C73677BE8D2C55ED9B3C7ED670346359D84E44B9B9555D5B247C665BB77BCEB + BDC60958DCFA9C3AFC8BD9B45DC37CFCED07F6CBB56BF1653C1DF81C4563D322 + D9CB3C5D27025975B519003CFFE13D7B3E683C7E0DE94100D8C07B9CADDBAE7F + 522A199DD729F2B603FBE49A7D6E8E02740600BF6DA9221CA6DD7BEEC363CF36 + 21006C58B57AADF18368C74BDD2FD2C040BFEC5DEBE4F163E2F87940F6ECE107 + 95F878D90D3A2E692AB5B575F49E7BF6183717813D08001BEC3EF9C73ADAE61E + FE33BE34A8EB30A04A1C3BAF5CB55AF6322B1ED7370278C39BDE9CF4FD00707D + 088034F1F5E62DDBECDF6073A30060EDFBF51D06B87D4F800E78C0491F04409A + D66F6831CE48DB71F9D2253ADBD3237B733B7AE41045A351D9B3876F31E6F0CA + 349D8700A00F02204D3AAEAB27B3F767FC8460D72C370AA5A3B8A48436B46C92 + BDCC89C5F40418E8850048035F7BD671E929D900601D6D1A0F03349CBB48D9CC + 5DCEE0210880346CDABC75D6474953111919A1E3294CFD75B0B343CB5C81AC65 + D31663249049D1E8B5373A81FB100069D8AE61F8CF937FA6725CCCD7D18F1E3E + 247BF6184F086A388109D90F0190A2D2D232E32DBC76B5A771834FDBFEBD72CD + 3E1D7730A682A73B03EF4100A4881F47E5B7F0DAC14FC7F1ECBFA9E25183F591 + 613B78F252EB3DF54EE31399D9607040CF4D57D9023302A568F79E0FDABE9986 + F7FE5FF8DC67642F357BEEFF30352F5D2E7BF67CEF3BDFA49FFFF4C7B2E7AC57 + DEF97BF4A637FFB1EC65D6F8F89831D9CAE9975EA2DE0BE7E9F2E54B343C3464 + CCB93039691E86E5E7E5197307F0AFEB0A596D30239037F01E939FADB78B27FF + 4857479BBE47847764F8302093CEF69CA19FFCE807F48F1F7F90DEF3376FA74F + 3DF4207DEBB1AFD393BFFC857149956FC1BED8DB4B57441870BB74E9225D387F + CE7BC5EF3004400AF86D3B3AEEA53F682300D239773097C6A6C5B66732F29291 + E1616344F3E1FB3E400FDE7F2FFDF0BFBF4B278E1FD376F52417210052A0E3E6 + 1F7EC6DFCE1459E7CF9D3586A9BAE4C23B04FBFAAED0635FFF1AEDD9FD6EE3B0 + 86FF8D2039088024CD5F504F8B9734CB5EFABA3AEC0FE1AF377F40AA38D4DC7A + 42D0AE919111FAE67FFE3BDDFF81DDF4CC93BF14C7FAE3F25720590880246D13 + C37F1D744CF3B57FEF6FE49A7D3C57E0B2E52B652F7BF013921FBAF71E7A4A1C + D363889F3E044092B6DB7CEB0F1B1A1AD432D32F9FD1E633D9BAECB839BB0E03 + 7A4E9FA22F7CEED3C60800EC4100248127A2D431D924EFB5749C65E63F63FF0B + FA4601FC4E43BBF73664D2E8E8A8EFCED63B050190041DB7FEB2368DCFF5EB3C + 0C28292DA5F52D1B650FFC040170037C824CC7F1FF682442470F1F943DFBF815 + 627CFD5A171DEF3680EC8300B881E52B561AEF97B38B27F7D47D3BACCE0943F9 + F166BB139C40F64100DC80AE176AECFBCD73724D9FEBCD269C2A7EBC79F3D656 + D903BFC0B300D7C127C61EFEF4E78CF9E7EDE0EBD35FFDD2E7B54F8B959F5F40 + 6F7BC73BB5BD10E3C8A12EFACC3F3D2C7B7AE97C16E0D8D123F4C8C30FC99E0F + E0F5E0EE58B76123BDFBEFDF277BB98F038AEFA673E2893804800D7818C81DAE + 4C9DE5221E49B46EF7D7F7EC77088039F0D4D31B376F953DFFC8F44421E02E04 + C01CD6B76CF2E559717EDE6141FD42D9835C87009883DF86FF56B827C03F1000 + B3E019737904E0577C1890AD4F08426A1000B330A7FDCEFCDB73BCA2AE6E9EB6 + 69C7C0DB1000B3D0F1D2CF6C879381FE800048505E51416BD6AE973DFFDAA661 + F663F03E044082ADAD3BB4DD5997CDF8EEC7B5EBECBFFF00BC0D3FE90974DDFB + 9F0B7261BE40B83E048045754DADF1F41F98F809417E112AE42E0480859FAFFD + CF265854645C1181DC8500B0E079FFE16A380CC86D0800896F7FE51765C0D5D6 + AC5B6F5C1981DC84009072F9355976184F08E2C468CE420048F8219F9B8E29D1 + C19B302188B0A47929DDFBC083B2674F57677BC6DEB83B171ECDDCBAEBE5B2A7 + C7FD7B761B2FD34C172604B101330239EB8D7FF456BAE35577C99E3D8FFEEBBF + D0817D7B65CF1D0D8D4DF4C0473F217B7AFCE807DFA3FFF9E1F7652F7508001B + 30239073F8A9375D67FFF93DF4765EFDAD0BBF1A5BF70B3271352037F93E0056 + AE5E43E1CA2AD9B3E7606707C5E31CCEEEDBAB7916E279F31718874A905B7C1F + 00ADDBF55DFBD7F9D65EBBF6697C7598822704738FAF03809F76E3877F74989C + 9CA08E767DF3F4DBD57BE1BCF112519D78C2503C28955B7CFD7F73DDFA16E3BD + 783A1C3D7298A2A3A3B2E70DBA470115E1301E95CE31BE0E009D73DF1DD8FB82 + 5CF30EDDE701180E03728B6F0320182CA296CD9B65CF1E7EA1869786FF4ADF95 + CBD47DF2A4ECE9B169CB3663CA74C80DBE0D00E351D7223D8FBA9E38F65B1A1E + 1A923D6F79E1F967E59A1EA150C897EF4BC855BE0D009DB7FEB6ED77F7C69FEB + E19B92A6A7A7654F0FDC13903B7C19007CE26FDD8616D9B34FE76BBA751B18E8 + A7DF1E3D2C7B7AAC5DBF81CACACB650FB2992F0360CBD6560A0402B2670F1F63 + F7F7F5C99E37EDD77C82D2B87CBA6DBBEC4136F36500E89CF6BBDDC37B7F85AF + 504C4EF2ADE3FAE0302037F82E00C29595B472D51AD9B36FFF3EEF5DFE4B3432 + 324C478F1C923D3D96AD5849B57575B207D9CA7701B04DE3B4DFFCD0CDA58BE9 + 3F229B497B9F77E09E00BC4330EBF92E005A354E6E910D7B7FA5BD6D3F4D4C4C + C89E1E0880ECE7AB00A89B379F9A972D933DFBDAF77BFFF85FE1DB940F7675C8 + 9E1EF50B1BA869F112D9836CE4AB00E0D75DE9C20FDBF0214036D9F79BE7E59A + 3E3B300AC86ABE0A009D43562F3DFA9BACCE8E368AC763B2A707BF4B01AF12CF + 5EBE098086C6465AD8D0287BF61DC8A2E37F251E8B515747BBECE9C193A9AC5E + B356F620DBF826002AABAAE59A7D3D674ED3A997BA652FBB3CFBAB67E49A3E0D + 4D8BE4DADC0607FAE59A7D030303720DECF2CDA4A03C4C5DB57A0D858A8BE596 + F44C4D4ED1F16347291A8DCA2DD96771F352AAAAD2330D1ADF60C49374263315 + DA8A55ABA9D4E6FC0BFCEF7FE2C4311A8DF0DC983E815981017C0CB302038013 1000003E860000F0310400808F2100007C0C0100E0630800001F430000F81802 00C0C71000003E860000F0310400808F2100007C0C0100E0630800001F430000 - F8180200C0C71000003E860000F0310400808F2100007C4C770044E552AC45F5 - BE8A16C0AF2EAFA5D91AD3C0B91140349ABE6FCE00F012076BC98900E0848AD2 - CCE490D905005BCC5A32EB4A33A74600518A0CE97B191C809F4586FAC47FB517 - 3FD315002A9D66DBCCC479B10400BBCC5ABAB2C63470E22420B7191AEB3F636C - 01007BCC5AE2F7006A2B7CC5894300FEA03362D872522CB57E58001FE2C3E957 - C4D2AC2BCD740680B9E7576D6A7C84A6C6300A00B0836B886BC95A5B1A77ACBA - 0380F107E457174F53F8429BB105009263D690594F666D31CF0580B5F855004C - D148CF3EDE080049326B886F045201A035049C3A07600640F8ECFF89CFA93E30 - 002444D48E514397058056BA0F01B8CD064024DC4B637D07C43A00248A6B876B - E8F2005075A685EE1180FA706600104DD2C0995F8B250024CAAC9D49D1540068 - 2D7EE6EC08C0088053BF149BC6C53A00C44DD48C513B970540DA8C00F883F287 - 9EA0A9F17E1AECE46F0400E2C535C3B5C33564D692F6E2674E9C04B40600A757 - 842E1E794C6E07806B8BCA9A8988A646002A00B4727A04C01F7E82C6FA8ED3F0 - D927C43A005C0BD70AD78CB9F78F0D00AD21E0E408808F59CC00E024EB697B54 - FC0A6F0380F9708D70AD987B7F1500D6E37FAD9C0800661D05F037316E24DAC0 - A91F897500980FD788B9F7E713E7B1C7FFDA393502B08E02CC11007F43E7F67F - 85A626F9D9660088C5B5C1356216BF1A013872F65FC9964BDD0272C9789D8326 - 8BA2D333343D76814A6A6F337E0500669D7DF9211AED6D176B61D1781A30EB08 - C0114E05402C0E013308C6FBCF527EE952CA0FAD367E0500F8B2DFCFC5B1FF37 - C41A3FF9372A1A8F02D4F1BF237B7FE66400A851802A7E3300B88DF4B453E9F2 - 5D941D2C137D007F9B0C9FA2D34FEF1123E401D153C56F1DFE3B26552300C50C - 023E1418E969A3B2FAD753202BCFFC25001F9A991AA6534FFC1D4D8E748A1EEF - FD79E8AFAEFF3B76ECAFA42200D448403143802739880C1E172381DB4437D541 - 04E001D109EA7CE65E0A5F6C151D3EEE4FD9D05F71B3F0021419BA4093439D54 - 5C7B0B05024E5D9204F01E7ED947F7F30FD260D733A2C77B7EEB893FEB997F47 - B911002AD5CC91C1F860374D881028A9BD192100BEC0C5DF258A7FE0CCE3A2A7 - 4EFA7173FCB25F2C374700B3DFDCF86097180D9CA0E29A9B2890952BB702649E - 99E951EA7AEE1F68B0F349D1537B7E55FC7CC92F657B7F96EA00E0BDBEF51B9B - FD462383E728DCB35F84C04ECACE59606C03C82493E33D74E6A9DD34726EAFE8 - 71F1ABBDBFB5F8B91E5252FCCCAD11C05C2110A5C9D13EEA3FF3041556ACA260 - 518DF1AB0099207CE1657AE589DD34317842F462F7FC7CD28F0320A5C5CFBC70 - 08A0BE69B34527C7A9FF151E1E8D52D1C2EB2810C811EB00E9291A8DD0858EAF - 50D70B8F889FED4B628B2A7E75B98F0BDF5AFCDC52C6CD0060EA9BE5258F0454 - 8B8AC43C4243AF3E4B0565CB2817A3014843A317F78A21FF7DE278FF69D1B30E - F9ADB7F9BA56FC2CF61A7D2A99F703988D8388F7F47C02305FB642D10A8C565A - 7F0B2D6A7C3705172C177D006F9B1839433DED5FA581535CF85CECDCB8F0F91A - BFBACECF856F3DE64F79F133370340E1CF60DE226C860037BE3B901B07811902 - 1C08652B6FA3CA0D7F48F9C5788E00BC677CF838F51EFA1EF59FE4CB7B6A4FCF - 8D8B9E87FBD621FFEC68D7455E0800A646021C02D6D180350854CBA3E29A262A - ABFF7D2AAE7D0D6565713800B86366668C86C5A16AFFA99FD170778BD8A28A5D - EDED55E15BF7FAAAF05D2D7EE69500602A04B87108C40641502E550B52765EB1 - 71D9B064C9F554B47833E5E42D12DB019C3515E9A1F0F9561A3AFB8228FA1769 - 3A322CB6F231BD2A76D5AC67F8B9F05D1FF2C7F2520030F57978A94603D620E0 - C641606D6A7B2EE597555341F97ACA2B594179A165145CB09082459594955D2C - FE48FE5A8038452334333D4213E15E714C7F8122839DC65B7AC7FA0ED378FF39 - F1055CD8AA71A15B9BDA3EDF70DF13C5CFBC16000A7F2ED5D4F9011506AAE0AD - A1A0FADCD4D771E3DF67FDB300E265DD5373F1AA3D383755D8D6105005CF4BF5 - 75D6C257CD53BC5E14D6E255C56C2D706BD1C7163F376B0030B504B81A55A8AA - 686303801B17BB5AAA75D5D4EF51BF9F9B27A54B41A822564D15B61A19A8A55A - B736A67E1F40BCAC85ABF6E4AAA94257EBBCE4AF554B6BF3B4742B0A6B21AB75 - 6E5CE8732D55636A09100F55BCD6628E2DF4D88267D675CF4BE7A298ABB8D5B6 - D8EDCCBA0E702DD6228E2D6E6B5F2DD57A5AC994A298AFD051F4A083B5B8E75B - 4F4B995A20287C7042DA173C0000000000000000000000000000000000000000 - 000000000000000000000000000000780FD1FF0383AC3BC58CEEDD9200000000 - 49454E44AE426082} + F8180200C0C71000003E860000F0310400808F2100007C0C0100E063BA03605A + 2E79C262BDAFA205F0ABAB6B69A6C634707004309DBD6FCE00F014E76AC98900 + E0849AA6A9F121B30B00B698B564D695664E8D00A6293EA4EF6570007E161FEA + 13FFD55EFC4C5700A8749A69536317C41200EC326BE9DA1AD3C0899380DCA628 + DA7FCAD80200F698B5C4EF01D456F88A138700FC41A7C4B0E5A4586AFDB0003E + C487D32F8AA559579AE90C0073CFAFDA446C8426A2180500D8C135C4B564AD2D + 8D3B56DD01C0F803F2AB8B2729D2DB616C0180F4983564D693595BCC7301602D + 7E1500133472711F6F0480349935C43702A900D01A024E9D0330032072EEFF88 + 62EA0303404A44ED183574550068A5FB1080DB4C00C42397293A7240AC0340AA + B876B886AE0E0055675AE81E01A80F670600D1380D9CFE85580240AACCDA1917 + 4D0580D6E267CE8E008C00E8FE9988B298580780A4899A316AE7AA00C89A1100 + 7F50FED0633411EBA7C15EFE460020595C335C3B5C43662D692F7EE6C449406B + 00707AC5E9D291C7E47600B8B169593371D1D408400580564E8F00F8C38F51B4 + EF380D9F7B42AC03C08D70AD70CD987BFFC400D01A024E8E00F898C50C004EB2 + DE8E47C516DE060073E11AE15A31F7FE2A00ACC7FF5A391100CC3A0AE06F2266 + 24DA50F7F7C53A00CC856BC4DCFBF389F3C4E37FED9C1A01584701E60880BFA1 + F3FBBF48A3E3FC6C330024E2DAE01A318B5F8D001C39FBAF14C8A56E7972C978 + 9D83269FA627C53712BD48154D7718BF0200337A5F7890462F778AB588683C0D + 987504E008A702201187801904B1FE7354146EA450E50AE357008068E0D44FC4 + B1FF57C51A3FF9372A1A8F02D4F1BF237B7FE66400A851802A7E3300B8457A3B + A972F12E2A0856893E80BF8D47BAE9D4D37BC4087940F454F15B87FF8EC9D408 + 403183800F05467A3BA8AAF95594975F64FE12800F4D4D0C53F7137F47E323A7 + 458FF7FE3CF457D7FF1D3BF6573211006A24A09821C0931CC4078F8B91C01DA2 + 9BE92002F080E9313AFDCCFB2972A95D74F8B83F63437FC5CDC2CBA3F8D0451A + 1F3A4DC1A6DB2990E7D4254900EF894D4FD085671FA0C19E67448FF7FCD6137F + D633FF8E72230054AA992383D8E0599A122150D4741B42007C818BFF9228FE81 + 538F8B9E3AE9C7CDF1CB7E89DC1C01CC7C73B1C11E9A1C3A41A1865B29905F28 + B702E49EF8E4285DFCF53FD0E0E927454FEDF955F1F325BF8CEDFD59A60380F7 + FAD66F6CE61B8D0F9EA768EF7E2A6DD849814099B10D2097C463BDD4F3D46E1A + 39BF57F4B8F8D5DEDF5AFC5C0F19297EE6D60860B61098A6F1D13E312C7A824A + AA9753B0ACC1F855805C10E97D81BA9FDC4D638327442F71CFCF27FD3800325A + FCCC0B8700EA9B36DBF4788CFA5FE4E1D12895CEDB48797901B10E909DA6A7E3 + 74B1EB8BD4F3FC23E267FB8AD8A28A5F5DEEE3C2B7163FB78C71330098FA6679 + C92301D5A62972F1080D9DF91515572EA2C2528C0620FB8C5EDC4BA79EBE571C + EF3F2D7AD621BFF5365FD78A9F255EA3CF24F37E00B37110F19E9E4F0086642B + 11ADD86895CDB753DD86B751A87CB1E803785B6CF8145DEAFA120D7473E173B1 + 73E3C2E76BFCEA3A3F17BEF5983FE3C5CFDC0C00853F83798BB01902DCF8EE40 + 6E1C0466087020542DBB836AD7FDA108023C4700DE131B3E4E970F7D9BFA4FF2 + E53DB5A7E7C645CFC37DEB907F66B4EB222F04005323010E01EB68C01A04AA15 + 5179C366AA6AFE7D2A6B7A1915E4733800B863722A4A23E250B5BFFBC7347CB6 + 4D6C51C5AEF6F6AAF0AD7B7D55F8AE163FF34A00301502DC38041283202897AA + 05A9A0A85C84C14EAAA8BF89420B36515168BED80EE02CBE9C17BBD04E43E79F + 1345FF3C4DC687C5563EA657C5AE9AF50C3F17BEEB43FE445E0A00A63E0F2FD5 + 68C01A04DC3808AC4D6D2FA450553D1557AFA560C5520A851751A0741E85CA6A + 29BFA05CFC91FCB500499A8ED3D4E408C5462ED344E422C5064FD3D8D08B14ED + 3B4CB1FEF3E20BB8B055E342B736B57DAEE1BE278A9F792D0014FE5CAAA9F303 + 2A0C54C15B4341F5B9A9AFE3C6BFCFFA670124CBBAA7E6E2557B706EAAB0AD21 + A00A9E97EAEBAC85AF9AA778BD28ACC5AB8AD95AE0D6A24F2C7E6ED600606A09 + 703DAA5055D1260600372E76B554EBAAA9DFA37E3F374FCA96825045AC9A2A6C + 3532504BB56E6D4CFD3E8064590B57EDC9555385AED679C95FAB96D6E669D956 + 14D64256EBDCB8D0675BAAC6D4122019AA78ADC59C58E88905CFACEB9E97CD45 + 315B71AB6D89DB99751DE046AC459C58DCD6BE5AAAF5AC922B453157A1A3E841 + 076B71CFB59E9572B54050F8E084AC2F78000000000000000000000000000000 + 0000000000000000000000000000000000000000F01EA2FF072EBB36B6686FC3 + 4A0000000049454E44AE426082} FileName = 'C:\YandexDisk\Development\Delphi\AErender Launcher\icons\png\ps\' + 'icon_256.png' @@ -385,462 +385,463 @@ object AboutForm: TAboutForm PNG = { 89504E470D0A1A0A0000000D4948445200000200000002000806000000F478D4 FA000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 - 38EA49444154785EEDDD09745D577DEFF1BFAE46CB8306CB63EC7876E278942D - D991ED8404021DD65BEDEB6BF35A4A0BB4A5B4D042A1616A6820CCA581426115 - FABABA586D7985D2BCA604286D19D2308490D8F1183B89E3788E675B1E65C91A - FCCEFFDEBDAB7D8FEFD560DD7BCF3EF77C3F6B6DEFBDCF55827224FCFB9F710B + 38EC49444154785EEDDD09745DD75DEFF1BF862BC9B23CC896C7789E12CF962D + 59F1903469DA32ACB7E0F1200F4AA12D500A2D505AD28940DB74A684D252162D + 8FC5EA02FA68297984A62D054A87A46D9AC18EC7D8491CC7F33CC9832CC9D6E0 + 77FEF7EE8DF63DBE578375EF3DFBDCF3FD746DEFBD8F94443E52F5FB9F710B00 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000000000000000000000000000000000C03315A6 - 87FFF85901888B6BA687C70815FFE4FB99F0B3021017F90A000A038F102AD1CB - F53318C9367E76007C110EF65C413FD26D281142241AC385B99D8FF4EB00202A - C385BF9D8FF4EB50220448E9B8FB3A5F90877B35D26D0010855C013F926DEE67 - 2AD7D7A2880890E2CA15DA2A1CE06E1FFEBA5C9F857BE58E01A0987285B5DBE7 - 1AABF067B97A956F8C0222348A235F30EBD8CEED383C57EE67B99A0AF7CA1D03 - 4031E40A67B71FAAA95CE35C9FA97C631400815138F98258C7766EC7B9E6DA52 - 436C533A56F63315EE01A0D8DCC0B6BD1D0F985EE73AB69FD9966B9BCA37B7F2 - 8D7183088DB173F761AE50B6631BDE6E6F3FD77178EEF699D63067AA548FBB55 - 2AAAE64ADDA459327EEA54A9AC9E2552D51CFCFFA15E2A2A67045F55197C2D00 - 14DE35E9976BFDC782BF8EBA44FACE4A7FEF11B97CF2A4745F3822D7FA0E48EF - 95E7E5FCC193E9AF1C6C36F0DDE0D77178AEC2BDFD5C857BE58E314A1A2CB831 - EEBEB3631BD6CA8EDD160E76ED6D73E715D234E766A91ABF5AC64D592D13A6AD - 90CACAC5C1479382CF00C0630317A4BF7F8F5C3AB143AE9CDA227D97B748E7C1 - 43C1071AD66EF0DBB13B77FB7053E1B1E58E31421A3A183DBBDFDC3E3CD66683 - DD8EF3B78619D3A476F25DD230AF43EA266E0CFE91E9C176002803D78E4BF7C5 - 1FCBF9FD4F4ACF99C7E5FCB113C146B700C8D56CD8BB631BF4E1B1DB63843498 - 3072767FB9BD3BD630B7DBECD886BC9E9AB7E34C6B9C375F26CEF8059934EB55 - 92AA6E0DB60140F91BE8DD2A178E7C5F2E1EFB869CDBBF4FB7845ABF33D660B7 - BD3B56769B0AF718860D2F0CCDEE27777F69882B37ECEDD86D36F8337D7D638B - 342CFA5FD234FF97A4B26A79B00D0092ABBF6FA774EEFB5739FFE223D275EE74 - B0C52D00DC42C0361BFA76AC746C51088C901B68C8CDEE23B7779B86BBED7387 - BEF62D4B36C8E4456F909A89AF0CE6B54103000CEA91AB171F93332FFEBD9C7E - EE89601E2E02C2C5805B04B84D857BE4A0C185DCECBE71FB7073433F3BF0B5D5 - 4EAA97C90B7F519A16BF59527A131F00605803FD7BA473CFDFC8995D8F484F4F - 4FB045C33F5F2190AB08B0C11FEEE1D010C3F5EC7E717B1BF8E17E30F0DDE06F - B9EDF5D234FF2D5251D1126C03008CD6B56BA7A573DF17E5F4EE7F909E0B5DC1 - 165B08B805812D00C27D38FC6D0FC3061C32ECFE707BB7D9C0CF13FCB5B532A5 - F537A571FEDB087E0028102D04CEEDFBBC9CDAFAE5D019817021609B2D006C53 - E13EF16CD061705FB8BD0D7DDBBBC1AF7D951957C9F455FF435A6E7DAF5454CE - 09E6008042BBD67F504E3FFF4939BEED5BC1AC2F681AFEDA6BE8870B010D7AB7 - 185014010E1B7649E786BEB2A11F0E7E6DF6885FC3BF4A1A6E5E2C33D77C58AA - EA3704730040B1F5753D21479FF9809C3FB44767A60D773640C78A22C0A000C8 - 0E7FB7D9C0D7B10DFDC1F0AF99385E66ACFE239938EBF783AFD06D008052D1D7 - 125F3CF2D7726CCB5FCAD58B97832D6E11609B0D7EB710B04DD93E9134DC92CC - 86BDB2631BFAE123FE4CF0A78FFAE7B7CBACF64F49AA6A7E3007004465A06F9F - 1CD9F42E39BF6F53300B9F0DD0E616006E21A0DC71E224F5C8D586BD3665C7E1 - D0CF04BE4875BAD5D6D6C9EC8DEF91294BFF5C52A9C9C1360040942A524D3269 - F6AF487D739D5C39BE49FA35F3B3FE6E77FBB0E13E2F6B49FC8F0EFFC0ED11BF - B67C47FDD5523765AECCBBF3F35255B72A9803007CD3DFB353F6FDE0ADD27DEA - 4030EB0DDA506703B4E958B967041243032E49F2857F38F407835FA446A62DFD - 19B9B9E3CB92AAE60E7F00F055AA6A9A4C9E77AF545CDB2B97D34540983DD8B3 - 74ACA16FB7B99F95BD241500E11FB01BFEB66507BFB639AFB84F9A177F2CF852 - 5EDF0B00DE0BFEAE1E3FFD17645C73A59C3FA8F7050C17EAFA79228B80A41400 - E11FECF0E15F33A15116DCF345193FEDB5C11C001027B593D649E3EC6572F1D8 - E3D27F552F050C45F320714540120A80F00F341CFEBA0F6CF86BAB91719367CA - BC57FD9DD44C5C1FCC01007154356EBE34CCD920974F3E2E7D57AE045BDC6BFC - E190D779A28A80722F00C23FC8A1C23F73E43F7EEA2D32F7957F2F55B54B8239 - 0020CE2AABA70745C0ABA4EBD493D27BF99CD99A8FE643628A80241400F60798 - 2FFCB5651EF31B3FF5569977CF3F49AAF2A6600E002807A9CA26699CFFF372F9 - C40F8222A0D36C75CF06B83427DC22A06C957301309AF0D7237F0DFFAFB2880F - 0094A18A8A7AA708B06702125D04946B0140F80300B2651701893F13508E0580 - FD6169EF06BF5B00B8D7FC35FCBF42F8034002648A809FCB5104E42B04ACB22B - 04CAAD000887BF5B00D8A37E1BFED532AE79A6CC7BF55725959A1ECC010049A0 - 4540C3BC57CAA5A3DF96BE2B5D66AB6BA8B30265A39C0A8091867FE651BFEAF1 - 8DB2F067BF26A9AAB9C11C009024151593A471EE5D72EEC0A332D0ABAF0D1EEE - 0C8055364540B91500F6076383DF2D00068FFC6B6AEA65FE6BFE46AAC6B50673 - 00401255544E9649372D978BFBBF2DFDFDEEBA00B98A01DD5636E1AFCAA500B0 - 3F14ED35F06D6F8FFCB565C25F8FFE676FBC5FEAA7FCCF600C0048B2CADA3952 - DB502FE70E3E11CC6CF0BB05801D6BAEB8E3D82B8702C00D7F1BFCE123FFCC69 - 7F2D0066B6FF8A34CE7B5F300600405F1BBC5AAAEA8EC8C5A32F982DB90A81B0 - D81701E55200B82D57F8678EFE27DEB44C66ACFEA25454E81C00808C71CD1BE5 - CAD9C7E5EAC5D3C14C83DF2D02862A04622BEE05800D7DA5A1AF63FD6FD2B11B - FE3552DDD824F3EFFE92A42AB9E31F00904D0F0C27DDB456CEBDFC0D19E8BE1A - 6C091701E1DE664F6CC5B900B03BDF1601F6C83F1CFE9902604EC707A5B6F115 - C1180080EBE94D8175139AE4DC81C78359BEF00F8B6D2110F702C06D1AFCFADF - 63DBE0D1FFD4E5AF96E6857F128C0100C8AF66E2B2E0CFDD72F9E481A0D7D0B7 - CDCA5708C44E5C0B005B71D9E0D75EFF5B6C113078F45FDF30596EDAF0B75251 - 312198030030B4FA296BE5F2E147A4B7A73B98B945800DFF706F332956E25C00 - D8664FFB5F1FFEDAE6BCF2A35253DF168C0100189E1E308E6B992A67F77E2F98 - B9E16F5B59D0D08C1B1BFC2A5C086801608B802A99BC60838C6BFEA5600C00C0 - C86976342D5A178C327932982F9A356EF628771C1B712C002CF707A0FF1D6E01 - 502935357532ADFD43C1180080D19BB1E663E92C71B365306FDC0C8AA5B81500 - EECEB6E370F867AAB529AB7E5D2A2BE705630000464F3344B324F75900B70850 - EE3816E25600587647DB965D00D437344BF38277046300006E9C668966CAF505 - 40388762274E0580BB93ED58BF7FDB32E1AF7DCBCA3F08364D0CC600008C4190 - 25E94C7132263B7B7265532CE8371F377607DB66C33FD3EA9AA64BC3ECD70563 - 0000C64E3345B3C5CD9AECF0B72D56E25200B83BD78EF57BCF0E7FADCEA6ADF8 - BDA0D7857F000028841A932DEE65006D3687726594F7E252005876C7DA965D04 - 68853669D6AF056300000A47B325FB2C4038FC6D8B8D381400EE0EB53B383BF8 - 33AD4AA62C7D63D073F40F0028B41A933123390BA0DCB197E2500028BB63DD96 - 5D0454374C92C6D9BF1A8C0100283CCD18CD9AFCE1EF36EFF95E00B83BD1DDB1 - D9E1AF1559CB825F0E3671E73F00A048F48900CD9AACB300B98A00CB1D7BC7F7 - 0240B93BD48E6DF80F1601CD8B38FA07001457266BDCF0B77DAEACF25A1C0A00 - CBEE50BBA307C3BF69FE6A49552D0CC60000148F668D664E7611E06693B658F0 - B9007077A2DDA9DA6CF00F1600CD0B7E25E8010028BE4CE6B805805B08D866B9 - 63AFF85C00287767DAA6DFF360F857D7D7CBB8293F1F8C0100283ECD1CCD9EEC - 22205C00D8E62DDF0B006577A0BB43EDCE4E49E3DC3BA5A2625C300600A0F834 - 73347BDC2CCACE28657B6FE937EDA3F08EB33BD5DDD999CAAB61DECF043D0000 - A593C99EF019006D36AF5CE1B917F49BF595DD896E7377722A7D0AA6AEE195C1 - 180080D2D1ECC95C06C8CEA5DCD9E525FD66E3C0DD91FA3D67AAAE49B3D771FA - 1F0050729A3D9A41D96701DCACF29EEF0580BB33F57BCD6EE3A7BD22E8010028 - BD4C065D9F4DD9D9E52DFD467D13DE71EEDCDDC19532716647D00300507A990C - CA770F8036159E7B43BF599FE5DA81999D3C61FA544955CE0DC60000949E6690 - 6691CDA5ECAC52B6F792CF0580BB03B5D91D9C69E39AD6063D0000D1C9645176 - 3E0DE696B2BD77F41BF599DD89E19692BAC92B831E0080E864B2C80DFD70F396 - 6F05407867D9B9F6B6B2CAB449335B831E0080E864B2283B9FB2B3CB159E474A - BF51DFE80EB24DB9F3CCCEADAEAE9654358BFF0000A2A559A49964F3293BB354 - 78EE0D1F0B0097DD69EE4E4D49FDEC05415F13340000A2546332293BA706C7DE - F2B50070779A1D0FEED09ADA45E92D000044ADAA6E7EF0A70D7C9BABB972CC2B - BE1600CAEE4CBB436D9F92AAF1F3821E0080E8D5D4EB25E94C3E6567966D5ED2 - 6FD277EE4ED4969289336E0E7A0000A297C9A470E86BF39A4F054078A7E59F57 - D751000000FC50593B33F8337F666584E791F3F50C80BBC36CAFCD545895FAE6 - 250000A25759392DF8D3C9A87453E1DE2BBE16002EBB33075B8A020000E0898A - AA19FA678EE6359F0B805C3BB342C64F9B12F40000F823934DB973CB53713803 - A0EC0EAC90EADA7A330600C00F996C1ACCAA18F0B100702BA6EBC71575D33353 - 00003C91C9A6A1F3CB33BE5F02B0BCDC7900008484F3CADBEC8ACB4D80568554 - 5670090000E09754AA36F83316C16FC5E91E00B3332B1B333D00009EA8484DB6 - 23D3BCE77B0110DE89B1D8A90080448A5566C5ED1200000071E07D76C5E51280 - B23B93820000E09BD865549C0A00000050201400000024100500000009440100 - 0040025100000090401400000024100500000009440100004002510000009040 - 1400000024100500000009440100004002510000009040140000002410050000 - 0009440100004002510000009040140000002410050000000944010000400251 - 0000009040140000002410050000000944010000400251000000904014000000 - 241005000000094401000040025598DE07FABD68D3A2445B65D0AA8356635A5D - BAB5DC76AFCC687D301803FF6DFE8285525DADBF2EF1D23F3020470E1D94EEEE - 6EB305402C1DDBFAA09CDEFD7030D2FF336BBB6A5A6FD0FA833660DA35D32247 - 0180D87BE39B7E4F3A36DC6166F173A5AB4B3EFDC98FC9E1A010001053312C00 - B80480D85BD7B1C18CE2695C7DBDDC7DCFABCD0C004A830200B1974AC5FFD778 - 656B9B5457EB892E00280D0A00C00313264C90A5CB57981900141F0500E089B8 - 5FCA00102F140088B5BA3ABD37B43CAC58B9AAACFE7B00F88D0200B1367EC244 - 338ABFAAEA6A695BD7616600505C140088B5868606332A0FED6B6F372300282E - 0A00C45A4343A31995875B6F5B2A4DCDCD660600C5430180586B2CC3B06CE732 - 008012A00040AC4D9D3ACD8CCA074F030028050A00C4DA9469E55700CC9A7DB3 - CC9831D3CC00A0382800106B3367CE32A3F2B2763D67010014170500624B6F96 - 9BDCD26266E565DDED1400008A8B0200B1B5A66DAD19951F2D6C162EBEC5CC00 - A0F02800105BAD655C00286E0604504C140088253DFDBF70D162332B4FAB8302 - A7B2B2D2CC00A0B02800104BAB56B79951F9D2150297AF6C353300282C0A00C4 - D2AAD6356654DE56B797F7650E00D1A10040EC4C98385116DFBAC4CCCADB9A35 - EDAC1008A0282800103BFAAADC542A19BFBABA42E0CAD5C938DB01A0B4280010 - 3B6D095B316FFD863BCD08000A870200B19284BBFFC3F47247B9AD7A08207A14 - 0088958E8DC93B1AD6CB1DEDEB9275D60340F151002056CAF9ED7F4359CB4B81 - 0014180500624357C8D395F29268CEDC793275DA74330380B1A300406C247D85 - BC8E8D779811008C1D050062A33D6177FF8725FDBF1F406151002016E6CE9B2F - 53A64E33B364D2FFFEF90B169919008C0D0500628195F132781A0040A1500020 - 1674653C649E066085400085400100EF2D59BA4C1A9B9ACC2CD97485C025B72D - 333300B8711400F05ED4A7BD9FF8E10FCCC80F497F1A0240615000C06B7ABA7B - 656BB46BFFFFD7F7BF23E73A3BCD2C7ABA14322B0402182B0A00786DF9CAD6F4 - 69EFA8F4F4F4C8E1430765D7B3DBCD96E8D5D6D6B242208031A30080D756B747 - 7BF3DFC103FBD3FDAE9D3BD2BD2F6EEFD868460070632800E0ADEAEA9AF4E9EE - 28ED7F696FBAD702606060203DF6C1ADB72D950913279A19008C1E0500BCB5BA - BD3D7DBA3B4A7B5F7C21DD77777707E33DE9B10F322B04769819008C1E0500BC - E5C3CA7F7BF70C86FE73BB9F35233FB4F16A6000634001002FE9E9EDA5CB5698 - 59348E1C3E245D5D97CDCCBFFB00162E5ACC0A81006E180500BCB46A759B5455 - 579B5934F63CFF9C19651CDCBF4F2E9C3F6F667E68E3D5C0006E904FEF14AD08 - 352D4EF4FBB3AD2ADDEAA72C958933EE0AC62863BFFCBF5F2B2D53A69A5934FE - F3DBDF92E3C78E9A59C6EC397365D6ACD96616BDC99327CB63DFFB8E9901C3D3 - 7748CC9879932C5A748BDCB66CB9AC58D92A1D1BEE4817DD1BEFBC5BEEB8EB6E - 59BFF14E59B67CA59C3A79C2BBA2D75B978E3F2E5DA77607A33ED3FA4DD3BB87 - AF39CD1B1AB4BE7083DF86BF1E02D698A66F3EA99396DBEE9519AD0F066394A9 - A6E666F9F8439F4DDFE816A577FEC1EF655D0250EBD66F90DFFEDDB798991F3E - F1E10FC881FDFBCC0CC8367FC1429917B48541E0CFBEF9E651ADAA79E9D22579 - FFBBDF91BE0916C338B6F54139BDFBE160A43B4BDB55D37A83660B01B718881C - 0500BC73CF6B7E56EE7DED6F985934F4FAFF473E70BF990DD27B133EFDB92F9A - 991F1EFBEE7FCAD7BEF265334BB6A5C1516B4343839945E36470D4BC774FE6E9 - 9128E811FECAD635E97DB162E52A19575F6F3EB9319FFAC447E4C508FF7B6283 - 02604C280090F6EEFB3F90BEC12D4A7AFAFF9187FFC9CCB2DDFFC18FC89CB9F3 - CC2C7AFA9AE2FB83A3B4FE7EFD3B26B9D6B4AF9537BFF5ED6616ADE777EF922F - 7EFE33253D72BEE5D625B2E1CEBB654D5B7B41EF9FF98B4F7E4C5E08DD0F831C - 625800447B8E1508D1BBDAA30E7F35D4237FBB9EF5EB69005D297171F0977FD2 - CDBC699619454F5FD4F49BBFF526332B1E7D59D6DDAF7A8D7CF8130FC91FBFF7 - FDB2AE637DE437CF223E2800E0151FEE6AEFEBEDCD7AFE3FCCB7C701D5BA0E56 - 083C73FAB419F941DFD33075DAC8AFB78F8606FF3DAFF939F9F8439F915FFB8D - D7CBB4E933CC27C0C85100C02BED1EBCDC66CF0BCF496FAF9EB9CB4D5F0F7CA5 - ABCBCCFCB0BA6D6D3A1492ECCCE95366E40F3D3A2F245D1D53EFD0D7E0BFF7B5 - AF934911DFEF8078A300803766DF3CC78BD3B83BB66F33A3DCF45ABB6F9701F4 - 95C9AB12BE42E069CFCE00282DCC0A65C9D265F2A71FFA98BCE177DE4CF0A320 - 2800E08DA857FEB346728ADFC7CB00ED097F29908FCFABEBFD193366CC34B31B - A38FC5FEEE5BFE50DEF1AEF779759F03E28F0200DE58777BF4D7B1F5C527274F - 1C37B3FC7C2C0096AF6C4DF40A817AD9C6B74B336AC1E25BCC68F4EEBEE735F2 - A18F3FC4BA0F280A0A00786161F097E4E49616338BCE96CD9BCC6868E7CF9F93 - FDFB5E32333FE88B937C5840294AFAE21ADFE88B78464B8FFAEF7BDFFBE5D75E - F7FAC857C444F9A20080177C09AE1DDBB79AD1F046F3B5A5B236E14F0374769E - 31237FCC9A7DB3198D8CBECFE0831FF933597C0B8F76A2B828001039BDB3D987 - 539C7A0D79346F70DBB9CDBF0240DFA1A0478F49E5E319809B4678DD5EFF7FF0 - DADF7843FA6546637D7B1F30121400889CBEC4C687BB9A77EE185DA01F3E7450 - CE7A78E779C7C63BCD28797A3C7C67BDBE9867B8659B1B1A1AD36FC0BCEB55AF - 365B80E2A30040E47CB97B7DD3533F35A391DBB6F51933F2870FEF52888AAF2B - D74D1D62011E7DFCF5FE0F7E58E6CD5F60B600A541018048E9CB6BDAD6769859 - 747A7A7A867CFB5F3E3EDE07A08F8A69A824D1502F708A52BE335CFA6CBF1EF9 - 373625F7B20DA2430180482D5DBEC28BBB9CF548FE46C263CFF3CF7979DD5997 - 2D4E222DE47C94EB099735EDEBE4ED7FFC1EEEF24764280010295F4EFFEFDAB9 - DD8C4647DF0AB8D3C3B300ED1E9C5589C2A58B17CDC82FB575BA98E9A0DBD76F - 9437FDFE1FA41FDD04A2C26F1F22A3EB96AF6A8DFEF5B5030303B27DCB8D5FCB - DF36867FB658F40D747A7A197E983061F0054DEB82F0FFADDFFD7DC21F91E337 - 109159B97A8D174B97EA69FCB1ACDBAE6F05F4F1D473D25F0DEC137B06404FFB - BFF177DE9C1E0351A30040647C394D3DD63BF9F5DE011F2F03E8CD95495B21D0 - C75701AB091326A4CFC870DA1F3EE1371191D077D6EB0D803ED8B665B319DD38 - 1F9F06D09BCB7CD9C7A5D2D575D98CFCA28F01BEE56DEF24FCE1157E1B118955 - ABDBBCF8CBF0C8E143D279F6AC99DD38BD87A0AFB7D7CCFCB17EE31D668428E9 - 637EDCED0FDF500020121D1BFC08A642DDC0A7F710EC79E13933F3C7D2652BA4 - BE7EBC9901C0200A00949CBEAB5EDF59EF83429CFEB79E19E14A82A5A43759AE - 6E4FF60A810072A30040C9F9B2F2DFB9CECEF4FBFC0BA590C54421AD4BF80A81 - 0072A30040C9F9B258CDB6AD850D6C7D09CDDE1747FF3AE1625B7CCBAD895921 - D0D73701023EA2004049E9AA68A35D1FBD588AF1029FED1E2E0EA4D6756C34A3 - F276D1D33701023EA2004049B579F2721A3D52D41700159A8F6F0554BC140840 - 1805004A6ABD2F77FF0747EAFA1EFF423B79E2B81C7DF98899F943CFBADC346B - B699010005004A4897A89D32C4BAE8A574A38BFF8CC458DF2C582CBE9C7D2926 - 5DD701C0C85000A0647C59A2565FD83396C57F86E3EB6580F51BFCB8F9B2983A - CF9E312300C3A10040C9F8F2EE7FBD537F2C8BFF0CE7E0FE7DE9470C7DA32B04 - 2E5C7C8B9901483A0A009484068F06900F363DFD53332A9E423F625828BC1A18 - 8045018092F0E96534C5BCFE6FF97A1960656B5BE2560804901B05008AAEB2B2 - 52567BF2F63F3DFD5F88C57F86A38F185EBA74C9CCFCA1CBD296FB0A81BC0C08 - 18190A0014DDE25B97A483C707BB9EDD6146C5A58F186EF7F43240B9BF1A58DF - C80860781400283A5F5EFDAB363F55FCEBFFD68E6DDBCCC82F2B56AE92BABA3A - 330386C6A395E58B020045A5D79B57B5AE31B3689D38762CFDA29E52797EF7B3 - E9470E7D935E21D0934B32F0DBF1E3C7E4C0FEFD66867253617A1FE8F7A24D8B - 126D9541AB0E9ADEB1A44D0F59EAA4E5B67B6546EB83C11831B0A67DADBCF9AD - 6F37B3687DFB5B8FCAA3FFF2B09995C61FDDF71EB96D997FD7DC9FDFBD4B3EF3 - D027CCACBC7CFCA1CFCAE49616334B36BD0FE5C4B1A372FAF4A9F4A3A97A79E4 - D2A58BD2D5D52557BA2E9BAFCAA645FBA486063913FC33FB5E7A497A7BAF9A4F - 30A4635B1F94D3BBF52F187DC6589BEE386D7A14A0AF1DD55329DAAE9916390A - 0014D55BDFFE4E59E9C919804F7EF4C1E02FB4BD66561AAFB8FB55F2EBAFFF2D - 33F3879ED6BDFFDDEF28C90D91A596D402E0D4C913E9C03E78605FD0F6CBD123 - 4782A0CF1DF228821816005C0240D1E875E6A59E1CFD5E098E78F42FC552DBB1 - 7DAB19F925954AC91A2E03C4DA99D3A7E5878F3F267FFBD77F25EF79C71FCA9F - BEF73EF9D2DF7C41BEFF9DFF90BD7B5E20FC312C0A00148D5E67D6EBCD3ED0BB - FF8BB1F8CF70F4083B8AC263247CBA39132373E4F021F9C623FF4F3EFCC09FA4 - CFE0FCE3DF7F49363DF5A49C3F7FCE7C0530721400281ABF5EFE539AC7FF72F1 - 7571205D2170C68C9966065FE991FEBF7FF35179E07DEF928F7CE07EF9B76F7E - 5D5E3E72D87C0ADC380A0014C5848913D3CFFFFB22CA02A0980B0F8DD55A4F16 - 684236BD47637B50387EEE2F1E4A1FE97FFD91874BFA040B9281020045D1BEAE - 237D9DD9077A0A3ECA53A47AB4A63768F968DDED14003ED1C7461FFBEE7FCA03 - EFBD4FBEF0B9CF94E4B5D5482E0A001445DB5A7FD69E2FD5DBFF86B265F32633 - F28BDE2DCF0A81D1B3C17FFFBBDF295FFBCA97D38FED01C5460180826B6A6E96 - 858B169B59F4766E8BFE4E7C5F9F0650EDEBFC29D692261CFCDCCC8752A20040 - C1F97477F985F3E74BFEEC7F2EFA5896BE88C5476D6B3BD20B36A1B4F4E6D00F - 3DF03E821F91A10040C1F9F47CF9CE1DFE1C796FD9FCB419F925092B04FA448B - D2BFFACB4FCB173FF7193979C2CF7B43900C140028287DAC4C1F2FF3854F0BF2 - 3CE36901A0DAD67598118A4997A3FEE807DF1FFC5EFA7B4908C941018082F2E9 - B1325D173ECAC7FFC2F6BFB437FD6E761FAD59D3CE0A8145B6E785E7E5B30FFD - 19A7FBE10D0A001454BB4777FFEB6A7C3E2D64A26F227CFAC927CCCC2FFAC6C6 - 95ABFD58B3A15CED797E370BEBC02B14002898B9F3E6CB94A9D3CC2C7A3E9E72 - F7F932C0FA0DBC1A1848120A00148C4FAFFED537A9EDF4E8FABFE5F3D300FAE6 - 467D83238064A00040C1E8E23FBED8F3FC73DEAE86E6EBD300FAE6C6DB3D2AE2 - 00141705000A62C9D265D2D8D46466D1DBF4F44FCDC83F3C0D00C00714002808 - 9FDE26A7A7FFB76DD96C66FEF1F932C0BCF90B64EAB4E96606A09C510060CCF4 - 2D722B5BDBCC2C7A7AFAFFD2C58B66E6A79D1EBF1AD8A77B3900140F0500C66C - F9CAD6F4DBE47CE1F3E97FCBE7CB00EB3AD69B118072460180315BDDEECFCD7F - BE9FFEB7F42CC595AE2E33F38B3ECA397FC122330350AE28003026D5D535B2AA - D59F17C83CBF7B97F7A7FF95BE1468C70EFF1E53B4582110287F14001893D5ED - ED525B5B6B66D1FBE9933F3623FFEDDAB9DD8CFCB3B663032B0402658E020063 - E2D3CA7FBAB6FAF62DCF9899FFF445457AC9C2477A4F87BE180840F9AA30BD0F - F47BD1A64589363DFCA80E5A8D69BA52499DB4DC76AFCC687D30182362FAD6B8 - 4F7EFA73E9F7C8FB409759DDF5AC3F8BFF8C84BE3CC9A73328AEA77EFA13F9D2 - FFF98299C5C7C71FFAAC4C6E6931337F7CEBD147E49B5F7FC4CC50768E6D7D50 - 4EEF7E3818759BA60B3F68EB0D5A7FD0B4DAD776CDB4C85100E0866D7CC5DDF2 - 9B6FFC1D3343B9D1D514EF7BDB5B62B7800D05002211C302804B00B8613EADFC - 87C2D333137A8F0780F24401801BD2D4DCCC35E204685FCBAB8181724501801B - A237FFE9E231286F4B97AF608540A04CF137386E48AB4777FFA378B4C86B6781 - 20A02C510060D474B198858B169B19CA5D1BF77A0065890200A3D6C65BE21245 - 8B3D560804CA0F0500468DBBFF9387A20F283F14001895D937CF919937CD3233 - 24C5ED2C110C941D0A008C8A4F2BFFA174A64D9F912EFE00940F0A008CCABADB - 39124CAAF51BEF342300E580020023B670F12D5EBE6215A5A1EB16B04220503E - 280030623EADFC87D26B6C6AE2ED8F4019A100C088E8911FCF83631D37030265 - 83020023A2477E931A1ACC0C49A59701AAAB75714E00714701801169E7397004 - 7485C015AB5699198038A300C0B0F488AF8D55E160701900280F14001896AE08 - A7477E805ABA8C150281724001806171FA1FAEAAEA6A59B5BACDCC00C4150500 - 8654575727AB5AD7981990D1B1E10E33021057140018D2CAD56BD2477C804B57 - 086C6A6E3633007144018021B573F31FF2E8E0D5C040AC5100202FBDD14B6F00 - 047261596820DE28009097DEE8954AF12B82DC745968560804E28BBFDD911737 - 7A6138EDEBB84404C415050072D21BBCF4462F6028BC1408882F0A00E4C4CA7F - 18095D21F0965B6F333300714201809CB8C31B23B56EFD7A330210271400B8CE - D469D365D6EC9BCD0C18DAEA35AC1008C4110500AED3C6AB7F310AE3EAEB795C - 1488210A005C673D77FF6394D66FE47706881B0A0064D1E7BAA74C9D6666C0C8 - E80A81F5F5E3CD0C401C500020CBBAF53CD685D1D3F52256B7F3E40810271400 - C8C2BBFF71A3783530102F15A6F7817E2FDAB428D15619345D864E6F2FD65697 - 6E2DB7DD2B335A1F0CC628B0858B6F9177FFC90366E68FED5B9F91C3870E9A59 - 328DAB1F2FAF7AF5CF9899BFDE77DFDBA5F3EC59338BC6C71FFAAC4C6E693133 - 7F7CEBD147E49B5F7FC4CC50768E6D7D504EEF7E3818759B76D5B4DEA0F5076D - C0B46BA6458E0200FFED756FF86DB9F3AE579A993F1E78DFBBE4E489E366965C - 1FFDE4A7BDBF3FE35FFEF9ABF29D7FFF37338B0605002211C302804B0048ABAC - AC94D51EBEFDEFC8E14384BFB1E9E99F9A91BF783530101F1400485B7CEB1299 - 30618299F9E399CD4F9B11B66CF27F5FE80BA46E9A35DBCC00F88C020069BEBE - FA77FB9667CC087A1FC4A99327CCCC5FBC480A88070A00A45FE3BAAA758D99F9 - 43C3EEE52387CD0CEA274FFCC88CFCB57E03EB48007140010059B16A95D4D6D6 - 9A993FE270CDBBD4363FE5FF3ED11502F58912007EA30080B7376EC5E19A77A9 - E90D917A63A4EFB81910F01F0540C2D5D5D5A55FE3EA9B739D9D897FF63F9F38 - DC18A94F94E8932500FC45019070FA17B5BEC6D5375BB8FB3FAF277FFC4333F2 - 973E51B27C65AB9901F0110540C2F97AAA96C7FFF2D337EDED7D718F99F9AB9D - A70100AF510024D8848913D3CFFFFBE6C2F9F3B277CF0B66865CB6C6A040D227 - 4BF41213003F51002458FBBA0E49A5FCFB15D8B963AB19219F389C2149AF10E8 - E1DB250164500024589BA7ABB76D8AC1A36E51D3CB007B5E78DECCFCC5D30080 - BF280012AAA9B959162E5A6C66FEB874E992EC79FE3933C3509E7AF20933F297 - 5E62D2DF3500FEA10048285F5FFDBB73FB56E9EFD785B3309C6D5B36CBC0802E - 2EE62FBDC4B486CB008097280012CAD7BF94B7F1EEFF11BB74F1622CCE96ACE5 - 3200E0250A80049A3163667AD536DFF4F4F4C8AE9D3BCC0C231187D725CF993B - 4FA64E9B6E66007C410190406BD7FB7944B66DEB33D2DB7BD5CC30129B9F7A52 - FA7A7BCDCC5F1D1BEF302300BEA00048A0764FEFFEDFB573BB1961A4BABBBB65 - D7B3FE9F35F1F5770E48320A8084993B6FBE4C993ACDCCFCA147B1ACFD7F63E2 - F04E00FD9D638540C02F140009E3EB73D97A14AB47B3183D2D9CE27019805703 - 037EA10048185FDFCCC6BBFF6F9C164ECF3CB3C9CCFCD5B6B6831502018F5000 - 24C892A5CBA4B1A9C9CCFCA1CFB273F7FFD86CD9E47F01A52B042E5DEEDFD2D3 - 405251002488AFA760F559767DA61D374E0B287D8CD2776DEB3ACC0840D42800 - 12424FBDAE6C6D3333BFC4E15976DFE9E393FA18A5EF582110F0070540422C5F - D99A3E05EBA39DDB58FDAF109EFE89FF6B03D4D6D6CACAD56BCC0C4094280012 - 6275BB9F37FFED7D718F9C3F7FCECC3016CFED7E36BD9892EF6EEFD8684600A2 - 44019000D5D535E953AF3EDACADDFF05A38B286DDFBAD9CCFC75EB6D4B65C2C4 - 896606202A140009B0BABD3D7DEAD5473CFE57589B9EF2FF7E0A5D21F0761608 - 022247019000BEAEFC77F0C07EE93C7BD6CC5008FA44C585F3E7CDCC5F3C0D00 - 448F02A0CCE9A9D6A5CBFC7CF63A0E77ADC78D5E06D81C83A72AE6CD5FC00A81 - 40C42800CADCAAD56D52555D6D667ED91C83D3D5711497CB2A6DBC1A18881405 - 4099F37515B6A32F1F9193278E9B190A69EF9E17E45C67A799F96BFD06960806 - A2440150C69A9A9B65F1AD4BCCCC2F9CFE2FAE2D3159215057A704100D0A8032 - A637FFE91DD73E8AC3BBEBE3EC273FFEA119F9CDD7D5298124A0002863AD9EDE - FD7FEAE409397CE8A099A11874FFEA7EF65DDBDADB5921108808054099D23BAC - 172E5A6C667ED9B2D9FFA56BCB411CD65898D4D0E0ED652AA0DC510094299FEF - B0DEB19D77FF97425C2EB3746CBCD38C009412054099F2F5EE7FBD3B5DEF5247 - F1E9658023870F9999BFF435D5FABA6A00A54501508666DF3C4766DE34CBCCFC - 1287BBD3CB491CDE09A0AFA9D6D75503282D0A8032A42FFFF115A7FF4B2B2E2F - 5BF2F575D54039A3002843935B5ACCC82FBA54ADBEAB1EA5A32F5B8AC3658079 - F3179AD1D80D0C0C98915FE2B04603928502A00C9D397DDA8CFCA17F29FFF357 - FF6FFA5DF528AD471F79D8DB50B47A7A7ACC68EC9E7CC2CF7720EC7BE9253302 - FC50617A1FE8F7A24D8B126DFA70B0BEC45EEF0ED256976E2DB7DD2B335A1F0C - C6C8436FA8DA78E75D32FBE69B25E5C133D65D5D5DB2F9A92783BF00F79A2D28 - B5858B6F49DF185A5BA7FF37F2CBA58B1783D0FE91BC7CE4B0D93276EBD66F90 - 5B6E59E2CDEFFFCEED5BE5B95DCF9A2D284BC7B63E28A7773F1C8CBA4DBB6A5A - 6FD0F4C847AB706DD74C8B1C050000006315C302804B00000024100500000009 - 4401000040025100000090401400000024100500000009440100004002510000 - 0090401400000024100500000009440100004002510000009040140000002410 + 000000000000000000000000000000000000000000000000000000C03315A687 + FFF85E01888B1BA687C70815FFE4FB9EF0BD021017F90A000A038F102AD1CBF5 + 3D18CE36BE77007C110EF65C413FDC6D281142241A4385B99D0FF7F300202A43 + 85BF9D0FF7F350220448E9B8FB3A5F90877B35DC6D0010855C013F9C6DEEC754 + AECF45111120C5952BB45538C0DD3EFC79B93E16EE953B068062CA15D66E9F6B + ACC21FCBD5AB7C631410A1511CF98259C7766EC7E1B9723F96ABA970AFDC3100 + 1443AE7076FBC19ACA35CEF531956F8C0220300A275F10EBD8CEED38D75C5BE5 + 20DB948E95FD980AF700506C6E60DBDE8EFB4DAF731DDB8FD9966B9BCA37B7F2 + 8D718B088DD173F761AE50B6631BDE6E6F3FAEE3F0DCED336DC2DCA9921A7387 + 5454CF93BAF1B364ECD4A952553D4B243549FAFAEAA5323543AA82FF014031F4 + 05FFEBEF392955559D223D17A4AFF7985C3D7346BA2F1F931BBD87A4A7EB45B9 + 74F84CF09936BCB5D9C077835FC7E1B90AF7F6E32ADC2B778C11D260C1AD71F7 + 9D1DDBB05676ECB670B06B6F9B3BAF90C6B973A47AEC5AA99BB2561AA6AE92EA + BE252263C6071F03008F755D96DEAA7DD2716697749FDD26BD57B749FBE123C1 + 0734ACDDE0B76377EEF6E1A6C263CB1D63983474307276BFB97D78ACCD06BB1D + E76F13664C93DAC9F7C884F91BA46EDCE6E01F991E6C07803270E394745FF991 + 5C3AF8945C3BFFB85C3A793AD8E81600B99A0D7B776C833E3C767B0C93061386 + CFEE2FB777C71AE6769B1DDB90D753F3769C6913E72F9071337E46C6DF769F54 + D63407DB00A0FCF55FDF2E978F7F57AE9CFCBA5C3C7840B7845A9F33D660B7BD + 3B56769B0AF718820D2F0CCEEE27777F69882B37ECEDD86D36F8337DFDC42699 + B0F87F49E3829F93AAEA95C1360048AEBEDEDDD27EE05FE5D2CB8F4AE7C573C1 + 16B700700B01DB6CE8DBB1D2B14521304C6EA02137BB8FDCDE6D1AEEB6CF1DFA + DA372DDD249317BF496AC6BD3A98D7060D0030E09A5CBFF23D39FFF2DFCBB917 + 9E0CE6E122205C0CB84580DB54B8470E1A5CC8CDEE1BB70F3737F4B3035F5BED + F87A99BCE867A571C95BA5B26A49B00D003094FEBE7DD2BEEF6FE4FC9E47E5DA + B56BC1160DFF7C8540AE22C0067FB88743430C37B3FBC5ED6DE087FB81C07783 + BF69D91BA571C1DBA4A2A229D8060018A91B37CE49FB812FC8B9BDFF20D72E77 + 065B6C21E01604B60008F7E1F0B73D0C1B70C8B0FBC3EDDD66033F4FF0D7D6CA + 94E65F95890B7E8FE0078002D142E0E281BF94B3DBBF143A23102E046CB30580 + 6D2ADC279E0D3A0CEC0BB7B7A16F7B37F8B5AF36E36A99BEE67F48D392F74945 + 6A6E30070014DA8D9EC3726EDFA7E4D48E6F06B3DEA069F86BAFA11F2E0434E8 + DD62405104386CD8259D1BFACA867E38F8B5D9237E0DFF6A99306789CC6CFE88 + 54376C0AE6008062EBED78524E6CFFA05C3AB24F67A60D753640C78A22C0A000 + C80E7FB7D9C0D7B10DFD81F0AF19375666ACFD7D193BEBB7832DBA0D00502AFA + 5AE2ABC7FE5A4E6EFB0BB97EE56AB0C52D026CB3C1EF1602B629DB2792865B92 + D9B057766C433F7CC49F09FEF451FF825699D9F267529D5A10CC010051E9ED39 + 2027B6BE5B2E1DD8A233D3DC22C02D00DC4240B9E3C449EA91AB0D7B6DCA8EC3 + A19F097C9154BAD5D6D6C9ECCDEF95C9CBFF54AAAB2607DB000051AAAC6A9486 + D9BF206327D549D7A92DD2A7999FF5BBDDEDC386FA78594BE25F3AFC0DB747FC + DAF21DF5A7A46ECA3C997BD75F4ACD9835C11C00E09BBEAEDD72E0876F97EEB3 + 8782594FD0063B1BA04DC7CA3D2390181A7049922FFCC3A13F10FC2235326DF9 + 4FC89C3BBF245535DCE10F00BEAA4C4D93C9F3EE978A1BFBE56ABA0808B3077B + 968E35F4ED36F763652F490540F81BEC86BF6DD9C1AF6DEEAB1E90494B3E1E7C + 98D7F70280F782DFD563A7FF8C8C995425970EEB7D014385BA7E3C914540520A + 80F03776E8F0AF6998280BEFFB828C9DF6FA600E008893DAF16D3271D60AB972 + EA71E9BBAE970206A37990B82220090540F81B1A0E7FDD0736FCB5D5C898C933 + 65DE7D7F17FC006D0CE6008038AA1EB340C6CFDD249D671E97DEAEAE608B7B8D + 3F1CF23A4F541150EE0540F81B3958F8678EFCC74EBD5DE6BEFAEF2555BB3498 + 0300E2AC2A353D2802EE93AEB34F49CFD58B666B3E9A0F892902925000D86F60 + BEF0D79679CC6FECD43B64FE6BFE49AAAA6E0BE6008072A08F0A4E5CF0D372F5 + F4134111D06EB6BA67035C9A136E1150B6CAB9001849F8EB91BF86FF5758C407 + 00CA504545BD5304D83301892E02CAB50020FC0100D9B28B80C49F0928C702C0 + 7EB3B47783DF2D00DC6BFE1AFE5F26FC0120013245C04FE52802F2150256D915 + 02E5560084C3DF2D00EC51BF0DFF948C993453E6BDF62B5259393D9803009240 + 8B80F1F35F2D1D27BE25BD5D9D66AB6BB0B30265A39C0A80E1867FE651BFD4D8 + 89B2E827BF2A55D5F382390020492A2BC6CBC479F7C8C5438F497F8FBE3678A8 + 330056D91401E55600D86F8C0D7EB7001838F2AFA9A99705AFFD1BA9AE6F0EE6 + 008024AAA89A2CE367AE942B87BE257D7DEEBA00B98A01DD5636E1AFCAA500B0 + DF14ED35F06D6F8FFCB565C25F8FFE676F7E50EAA7FCCF600C0048B2AADAB952 + 3BA15E2E1E7E3298D9E0770B003BD65C71C7B1570E05801BFE36F8C347FE99D3 + FE5A00CC6CFD059938FFFDC11800007D6DF05AA9AE3B26574EBC64B6E42A04C2 + 625F04944B01E0B65CE19F39FA1F77DB0A99DCFC05A9AED039000019558D9BE5 + 7AFBE372FDCAB960A6C1EF1601831502B115F702C086BED2D0D7B1FE9D74EC86 + 7F8DA42636CA827BBF28A96AEEF8070064D303C3F1B7AD978BC7BF2EFDDDD783 + 2DE12220DCDBEC89AD38170076E7DB22C01EF987C33F5300CCDDF021A99DF8AA + 600C00C0CDF4A6C0BA8646B978E8F160962FFCC3625B08C4BD00709B06BFFE7D + 6C1B38FA9FBAF2B53269D11F06630000F2AB19B722F873AF5C3D7328E835F46D + B3F21502B1A3A119476EC5E516006E2190390B503F61924C5CF191600C00C0D0 + 3433343B06CE266BA6B8196373C772C7B1A17FA938B23B5F9B7E336C738FFC33 + 6DEEAB3F2675F52DC1180080A1555734C898A6A97261FF7782997B16C0B6B2A0 + A1193736F855B810D00260E0E87FF2C24D3266D2CF05630000864FB3A371715B + 3072CF0268D3AC71B347B9E3D888630160B9DF00FD7BB8054095D4D4D4C9B4D6 + 0F07630000466EC6BA8FA7B3C4CD9681BC71332896E25600B83BDB8EC3E19FA9 + D6A6ACF965A9AA9A1F8C01001839CD10CD92DC6701DC2240B9E358885B0160D9 + 1D6D5B7601A0376F4C5AF0CE600C00C0ADD32C19B821D02D00C239143B712A00 + DC9D6CC7FAF5DB96097FED9B56FD4ED08D0BC600008C429025E94C7132263B7B + 7265532CE8171F377607DB66C33FD3EA1AA7CB84396F08C600008C9E668A668B + 9B35D9E16F5BACC4A5007077AE1DEBD79E1DFE5A9D4D5BF55B41AF0BFF000050 + 0835265BDCCB00DA6C0EE5CA28EFC5A500B0EC8EB52DBB08D00A6DFCAC5F0AC6 + 0000148E664BF6598070F8DB161B712800DC1D6A777076F0675AB54C59F6E6A0 + E7E81F00506835266386731640B9632FC5A1005076C7BA2DBB08484D182F1367 + FF62300600A0F03463346BF287BFDBBCE77B01E0EE4477C76687BF56644D0B7F + 3E1872E73F00A048F48900CD9AACB300B98A00CB1D7BC7F70240B93BD48E6DF8 + 0F1401931673F40F0028AE4CD6B8E16FFB5C59E5B538140096DDA176470F847F + E382B55259BD28180300503C9A359A39D945809B4DDA62C1E702C0DD8976A76A + B3C13F50004C5AF80B410F0040F16532C72D00DC42C036CB1D7BC5E70240B93B + D336FD9A07C23F555F2FB5537E3A180300507C9A399A3DD94540B800B0CD5BBE + 1700CAEE407787DA9D5D2913E7DD2D55156382310000C5A799A3D9E366517646 + 29DB7B4BBF681F85779CDDA9EECECE545EE3E7FF44D00300503A99EC099F01D0 + 66F3CA159E7B41BF585FD99DE836772757664EFF4F7875300600A074347B3297 + 01B2732977767949BFD8387077A47ECDE6E87F761BA7FF010025A7D9A319947D + 16C0CD2AEFF95E00B83B53BFD6EC3676EAAB821E0080D2CB64D0CDD9949D5DDE + D22FD437E11DE7CEDD1D5C25E36EDB10F40000945E2683F2DD03A04D85E7DED0 + 2FD667B976606627374C9F2A9555F382310000A5A719A4596473293BAB94EDBD + E47301E0EE406D760767DA98C6F5410F0040743259949D4F03B9A56CEF1DFD42 + 7D667762B8554ADDE4D5410F0040743259E4867EB879CBB70220BCB3EC5C7B5B + 5965DAF899CD410F0040743259949D4FD9D9E50ACF23A55FA86F7407D9A6DC79 + 66E7A65229A94CB1F80F00205A9A459A49369FB2334B85E7DEF0B10070D99DE6 + EED44AA99FBD30E86B82060040946A4C2665E7D4C0D85BBE1600EE4EB3E3811D + 5A53BB38BD050080A855D72D08FEB4816F7335578E79C5D70240D99D6977A8ED + 2BA57AECFCA00700207A35F57A493A934FD999659B97F48BF49DBB13B555CAB8 + 1973821E0080E86532291CFADABCE6530110DE69F9E7A95A0A0000801F2A5233 + F54FA7A9A1E691F3F50C80BBC36CAF2D5361F555EA9B970000885EAA7A5AF0E7 + 4046659A0AF75EF1B50070D99D39D052290A0000801F2A5233F4CF1CCD6B3E17 + 00B97666858C9D3625E80100F047269B72E796A7E2700640D91DA8D7FFEBCD18 + 00003F64B26920AB62C0C702C0AD986E1E57D44DCF4C0100F044269B06CF2FCF + F87E09C0F272E701001012CE2B6FB32B2E37015A155255C1250000805F2A2B6B + 833F6311FC569CEE01303BB36A62A60700C013159593EDC834EFF95E00847762 + 2C762A00209162955971BB040000401C789F5D71B904A0ECCEA4200000F82676 + 1915A70200000014080500000009440100004002510000009040140000002410 0500000009440100004002510000009040140000002410050000000944010000 4002510000009040140000002410050000000944010000400251000000904014 0000002410050000000944010000400251000000904014000000241005000000 0944010000400251000000904014000000241005000000094401000040025100 - 0000904014000000241005000000094401000040025100000090401400000024 - 1005000000094401000040025100000090401400000024100500000009440100 - 004002C5B000E83F6706000078227ED914C30260A0CB0C0000F044FCB2294E05 - C035D30300E0ABD864551C0A80EC9DD9D77DD28C0000F0C3F5D9E47D21E07B01 - 10DE81D7A4B7874B000000BF64B2E9FACCF2585C2E01E84ECCECC8CB27CFA47B - 00007C31984D8379E5B9B85D02C8ECD88181539929000011BBD6774CFF34CDF2 - BE08F0B900B83EF833AE053B9BFB0000007EE8EFD74C1ACCA8C1B172C75EF1B1 - 0070775EAEF135E9BD7238BD050080A8F575BB6700C299A5DCB137E2740F80ED - AFC9C5A347325300002296C92437E4BD0BFB5C7CBF0490BBF55D3910F4000044 - AFB7EBA5E0CFDC7995695E8ACB4D80D9EDEA95BD410F0040F47ABBF7077F5E9F - 559EF3B500B03BCEEDB50DA4FBAE237A06E06AD0000088D2559349831995692A - DC7BC5A702C0EE347787E59EF7F5F54ADFD57DE9AD00004445B34833C9CDA88C - E1E6918BE325804C8575F9D8F6A00700203A992C1ACCA6ECE6B5B8DC046877AC - F699D6756667D00300109D4C160D66537666D9E625DFEF015076ECEED0A00038 - B54537020010994C1665E75386CD2EE58EBDE1FB25007787BAE3A000387D4A06 - FA0E056300004A4F3348B3C8E652EECCF2968F0580DD6976C7B973BB9333EDD2 - D1A7831E0080D2CB6450762E6567960ACFBDE15B0110DE41EE0E0CEFE401B97C - E289A00700A0F43219747D366567972B3C8F545C2E01849BEEE07E397768B35C - BB7625180300503A9A3D9A419A4583A19FAB79CBE702C0EE38BB13DDEA2AD3FA - BABBE5CA991F056300004A47B347332857366587BFEDBD13873300B6B7CDDDC9 - FD726EFFF7831E0080D2C9648F3DFAB7CDCD2A657B2FC5F926C0CC8E3F7FE849 - 2E0300004A463347B3C7CDA2C1E666960ACFBD11A77B00DC1D6C5BBFF4755F91 - AE13DF0BC60000149F668E66CFF5E16F9B9B5DDEF2BD00B0DC9DA93B5777FA60 - EBDCF78DA00700A0F83299939D43310A7ECBF79B00C3CDADB0060B81CEFD3BA5 - BF5797630400A078346B3473B283DF6DB9B2CB4BBE1600E11D6677A2BB93EDCE - D7D62767F6FC6BD00300503C99ACE90B9A9B416E36E50AFDF0DC0B71B8046077 - 9CDDA9DADC9D9DF9019C7BF1DF828F2E056300008A20C89874D60C19FCDA94ED - BD15A79B006DCB0E7EDB7A2E5F9473FB1F0DC60000149E668C664D387F721701 - B679CBF77B002C7767DAF0778B003D1DD327279EFBA7A0BF1A3400000AE9AAC9 - 984CDE6487BFEDDDACB2DCB157E27009C0B23BD5EE64B700C8B4ABE74ECA8543 - 9C0500001496668B664C3877B233C9E6542CC4E51E00BB43EDD886BF5B0464AA - B2633BBF1CF49C05000014CA55932D2339FA57EED85B71B807C0B23B549BEEEC - 70F867FAABE74EC8F9438F04630000C64E3345B3C5CD9AC1FCB179E46694E58E - BD13974B00EE8EB52D7F117062FBDF055FC213010080310AB2249D29230E7FDB - BC57697ADF5598A6DCDE362D646C9F92FE9E3E49D5F4CAF896DB8339000037E6 - D40B5F90F307360523BDB4DC6B7A2D026CB3854038F8BD2F02E27206C0B23BD8 - B65C670132EDF4F64764A0F75030060060F43443344BDC6C19FEE83F36E27609 - 40D97138FCB30B80BEBE6E79F9E94F05630000464F3344B3C4CD96ECCC091701 - CA1D7B2D6E670094DDB9B6E52F02CE1DD82C974FFE4730060060E4343B3443DC - 4CC9CE1A37F86D8B95381500EE0EB6635B7DD922C0FE80F43A4DE607F6F2537F - 2903FDA782310000C3D3CCD0EC180C7ECD143763DCECC9954DB110979B002D7B - D39FB2E37C4D8B9B0AE9EFE99581BEE33271E63DC11C0080A11DDBFA51B9F8F2 - 73C1C8BDF16FF0C032BB088855E8BBE25600581AF0F9FA704BC995D32FCBB8E6 - 29523BE996600E00406E178E7C438E3DF395606483DF86BF5B00C4FEE85FC5F1 - 1E00CBEE6C6DF687A155996DF60795F9C11DDFF457D2DF7D20180300703DCD08 - CD8AEB03DFCD9670F86B8BA5B89E01507A746F7B3B5676EEB694F4F7F64B77E7 - B3D238F767834D55C13600008C816E39F4C3774957E7D160A2E13FD4D17F38FC - 635908C4FD1280B2E35CBD367B962325572F9D9754E519193FF50EB30D000091 - 53BBFE5CCEBEF4D360A4A1DF13341BFCB6D933001AF49C0188980D7897BBCD8E - B50D1601974EEC97718D13A4B661A9D9060048B20B87FE595E7EFA1F83911BFE - E1A37F7BEADF0D7F2B964540395C02B0DCB91BFECA9D57C8A597B7CB849B964A - F5B89BF4430040425DE9DC24871EFF845CBBA62FFC714FFB6B1FBE07207CE41F - CBE0B7E25C00A870C8E7EBB3DBB5E06776F9E527A571DE4649553506DB000049 - D3DBFD921CFCDEBBA5F7AA2E1E67C3DF1600F6C83FDFA97F2BB64540DC0B00CB - 867D98BBDD1600AA42FA7BFBE4D2D127A461DE5D92AA9C60B6030092A0BFF784 - 1CF8EE1F49F7A533C1CC0D7EDB878FFCC3E11F2E0462A71C0A8070F8BB41AF06 - 433FDCF7F574CBE5E39BA571EE5D52911A67B60300CAD9405FA71CF8FE1FCB95 - CEC3C12C1CFE1AFC3A76C3DF86BDDB62AF1CCF00E41BBB068B80DE2B17E4F2B1 - A7A5711E450000943B0DFFFDDF7D87749D7D299885C35F7BF7E8DF1EF9878B00 - 15FB22A05C0A00A5A1AE4D7F28761C16DE969953040040F9CB1DFE6E11A0C11F - 3EF56F435FC756ECC35F955B01E0F6AE5CC1EF6EE34C000094B3FCE16F8FFAF3 - 1DF9DB22409545F05BE55400A85CE13F528345C0A4D96D92AA6A30DB010071D6 - D77D580E3E765F10FEFB839986BE3EEB1F2E02721DFDDBF0B74D954D11506E05 - 801AEE68DF75FDD7A68B80A33F960933564865ED14B31D001047572F3E2707FF - EB3DD2D5F9B2CE82E6867FBEA37F37F46D53B62F0BE558002837F4AF0FF90CFB - 830C7F1EFC1AF45C918B877F20E3A6CE939AFAD9662B00204EBA4EFD480E3EFE - 80F4643DEAE786BFEDF39DF67703BFACC25F956B016069B8EB0FEDFA90CFC85F - 04E87B023AF7FE406A26A6645CD34AB3150010079DFBFF2108FFCF047F977705 - B3E1C23FD7697FED958ECB2EFC55B917006AA44580953DBF707887F475EF9509 - D3D74945AAC66C0500F868A0FFB21CDDFC6139B1FDD1603654F0273AFC5512CE - 00D85E7F88232D02ACCCF62B678FC8C5233F9449372D95CA9A96F43600805F7A - 2F3F2FFBBFF76EB9787467300B87BE1BFC230DFFB296943300B6CF5704D81FB4 - FBB98E077F01FABA2F49E78BDF95EAF15552D7B834F8B27CC50400A0A4AE0DC8 - B9035F95838F7D5C7AAFE8F57E37F4DDE0D7B1BDDB5F837EB8F01FCC80329484 - 02408DA408B0C23F709D67B65D0B7EC92E1CDE26DD9D5B64C2CC1592AA9C94DE - 0E0088465FCF6139FCC403726AD7BF077F47DB3BFC6D6F83DF36F7513F1BFC89 - 0C7F959402408DB408D0CFDC1FBCFBCB90693D174E49E74BFF21D5E3529C0D00 - 802898A3FE038F7F2C382873DFE96F83DF1DDBF00F9FF24F6CF8ABA405975B04 - A854D074ACBDDBB430AA32AD7AC83671DA3C99D1FE36A96D680DE6008062EB39 - BF558E6DFABC5C3CB12F9869B0DB90CFD5F21DF5273AFC55128F5CF315016E21 - A005806DB608081703EEBC4AA62CB95BA62E7F93A4AA6704730040A10DF41E93 - 933BFF564E3DF75FC1CC0DFE701160E736F8C347FE1AF2890E7F95C40240858B - 807001102E04ECD9805CC5C0E0B6CACA3A99BAE217A479F1AF4BAAAA29D80600 - 182B7D8FFFD93D5F91933BBE21FDFDDDC11637E07385BE6DE1E00F17002A91E1 - AF925A005836F8955B04D8DE2D02DC42C006BF3B1EDC5659532F53970585C0A2 - 5FA51000801B940EFE17BF26279F0D82FFAABED0C7067B38F0F3057FF8A83F57 - F8272EF82D1B7E49162E006CB305808EDD22C02D04B2833FDC2A2B6BA5E5B6D7 - 48F3E25F92AABAF9C13600C070FABAF70547FCFF2AA7777F2738E2D73BFADD70 - B72D1CFADADCE0D76643DF0D7E37F46D9F481A6E18DC0FB6B7C1AFCD1602B685 - 8B80A10A82C1CF9A16B4CAE485BF2875CDFA4641FD1A0080756DA057BACF3E25 - 67F63E2A9D2F6D0DB684C33D5FD3A0B7BD361BF8E1E0D7B122FC0D0A8041E122 - C02D006CEF1601DABB211F2E04C2DB32E39A8666699A774F5010BC52AAEB1605 - DB0020B97ABB5F0C02FF31E9DCFF3DB97AFE6CB0C50DF570C887E76E9F2BF86D - 1F0EFDC487BFB261870C37FC6DEF36B708B08540B8B9C16FFBF0B64C9B386DB6 - 4C987D9734CE59275575B706DB00A0FCF5753F2FE70E3E25970E3F2E174FE833 - FC1AE0B6B9C19E2FEC6DD3B986BC8E7385BE6D2ADC279E0D3A64B3FBC5ED6D01 - 10EE872B04861ADB9692BAA6169938BD5D26CE5A198C574865F5D4603B00C45F - 7FEF49E9EEDC21178F6C978BC73705E3D3C1561BDCE1401F6EEC36FD77B8C11F - 0E7F15EE61D880C3F5ECBE71FB70B305805B08E42B086C730B00F76BDD7F3E25 - F5D367487DC312193779898C9FB6582A6BE748AA727CF01900F84B57E3EBEF39 - 28974FEC912B679E93AEF3413B7E4C3F31CD06B71BE2769C2FE86D73FF79B7B9 - A16F9B0AF77068886168761FB9BDDB34B06D6F5B38D06DC8DB966F9BFBCFD836 - F8BF51D73259C635CE0B8A8199523B7E9AD435364B75D0A7AA26051F8F93CAAA - 96A0D7AF0580C2D31BF506FA3B83C11519E8BB20BD974F48F7B9B3D213F4FD3D - 47E5CAB9FDD27D5A17E3D1C0B5C1EC06B51BDE6EB0DBEDF9B685FF596DEEFF86 - DB54B8470E1A2E189EDD4FEEFEB2413B18D08363B7D9400F877C78BBFB79AE16 - FEDFB14DD95EB9630028243750DD90759B1BCEF95AAE70CF15F4EED8B6F0FF8E - 6DCAF6CA1D2307C26274C281ABBD3B7603DA0D6D6DB9023EBC2DD7D7B8FF0EFB - EF0E37657BE58E01A0107285ABF6B99A1BD6766C5B38D4879BDB7F87FBEFD65E - D96D2ADC631804C58D0987AEF6E1B13637B46D888FB485FF995CFF4EE58E953B - 06804272C3351CBEDAC2416D5B783E9296EBDFA94D85C76E8F11222C6E5CAED0 - D53E3C769B1BECB6B7CD9DE7FADAF0D836E58E01A0D8C201ECB65CE1EDF6E1B1 - 3B77FB7053E1B1E58E314284C6D8B9FBD00D64DBDBB18677B8B79FEB383C77FB - A19A65C7EE360028A47CE13B54CB15EC3A0ECF55B8B79F6BB3F28D314A8445E1 - E40A63A5633BB7E35C736DB902DF6E533A56F63315EE01A0D86CF0BABD1DBBE1 - ED86BC6DB9B6A97C732BDF183788D0280E77BF86C7766EC7E1B9723FCBD554B8 - 57EE18008A215710BBFD504DE51AE7FA4CE51BA300088CE2CA17CE769CAB0F7F - 5DAECFC2BD72C700504CB982D9ED738D55F8B35CBDCA374601111AA5335458DB - 79B85723DD060051182AC087DAE67EA6727D2D8A8800894678BFE79B8FF4EB00 - 202A4305B9B2F3917E1D4A8400895EAE9FC148B6F1B303E08B9184F948B7A144 - 0811FFE4FB99F0B3021017F9829DC0F788BE7A1600804222E801000000000000 + 0000904015A6F7817E2DDAB428D15615B454D06A4CAB4BB7A665F7CB8CE68782 + 31F0DF162C5C24A994FEB8C44B5F7FBF1C3B7258BABBBBCD1600B17472FB4372 + 6EEF23C148FFCFACEDBA693D41EB0B5ABF69374C8B1C050062EFCD6FF92DD9B0 + E92E338B9FAECE4EF9F4A73E2E47834200404CC5B000E0120062AF6DC326338A + A731F5F572EF6B5E6B6600501A140088BDCACAF8FF18AF6E6E91544A4F740140 + 695000001E68686890E52B57991900141F0500E089B85FCA00102F140088B5BA + 3ABD37B43CAC5ABDA6ACFE3E00FC460180581BDB30CE8CE2AF3A959296B60D66 + 0600C5450180589B306182199587D6F5779A110014170500626DC2848966541E + EE58B65C1A274D323300281E0A00C4DAC4320CCB562E030028010A00C4DAD4A9 + D3CCA87CF034008052A00040AC4D99567E05C0ACD97364C68C99660600C54101 + 80589B397396199597F51B390B00A0B82800105B7AB3DCE4A626332B2F6D7752 + 0000282E0A00C4D6BA96F566547EB4B059B4E476330380C2A300406C35977101 + A0B81910403151002096F4F4FFA2C54BCCAC3CAD0D0A9CAAAA2A330380C2A200 + 402CAD59DB6246E54B57085CB9BAD9CC00A0B02800104B6B9AD79951795BDB5A + DE97390044870200B1D3306E9C2CB963A99995B775EB5A592110405150002076 + F455B99595C9F8D1D5150257AF4DC6D90E00A5450180D86949D88A791B37DD6D + 460050381400889524DCFD1FA6973BCA6DD54300D1A30040AC6CD89CBCA361BD + DCD1DA96ACB31E008A8F0200B152CE6FFF1BCC7A5E0A04A0C02800101BBA429E + AE94974473E7CD97A9D3A69B19008C1E05006223E92BE46DD87C971901C0E851 + 0020365A1376F77F58D2FFFE000A8B0200B1306FFE029932759A992593FEFD17 + 2C5C6C6600303A1400880556C6CBE06900008542018058D095F190791A801502 + 0114020500BCB774F90A99D8D86866C9A62B042E5DB6C2CC00E0D65100C07B51 + 9FF67EF2074F98911F92FE340480C2A00080D7F474F7EAE668D7FEFFFE77BF2D + 17DBDBCD2C7ABA14322B0402182D0A00786DE5EAE6F469EFA85CBB764D8E1E39 + 2C7B9EDF69B644AFB6B6961502018C1A0500BCB6B635DA9BFF0E1F3A98EEF7EC + DE95EE7D71E786CD660400B7860200DE4AA56AD2A7BBA374F095FDE95E0B80FE + FEFEF4D807772C5B2E0DE3C69919008C1C0500BCB5B6B5357DBA3B4AFB5F7E29 + DD77777707E37DE9B10F322B046E30330018390A0078CB8795FFF6EF1B08FD17 + F63E6F467E68E1D5C000468102005ED2D3DBCB57AC32B3681C3B7A443A3BAF9A + 997FF7012C5ABC84150201DC320A007869CDDA16A94EA5CC2C1AFB5E7CC18C32 + 0E1F3C20972F5D32333FB4F06A6000B7C8A7778A56849A1627FAF5D9569D6EF5 + 5396CBB819F7046394B19FFFDFAF97A62953CD2C1AFFF9AD6FCAA99327CC2C63 + F6DC79326BD66C338BDEE4C993E57BDFF9B6990143D37748CC98799B2C5E7CBB + 2C5BB15256AD6E960D9BEE4A17DD9BEFBE57EEBAE75ED9B8F96E59B172B59C3D + 73DABBA2D75B1DA71E97CEB37B8351AF697DA6E9DDC3379CE60D0D5A5FB8C16F + C35F0F016B4CD3379FD449D3B2FB6546F343C11865AA71D224F9C4C39F4DDFE8 + 16A577FDCE6F655D02506D1B37C9AFFFE6DBCCCC0F9FFCC807E5D0C103660664 + 5BB07091CC0FDAA220F067CF9933A255353B3A3AE48FDEF3CEF44DB018C2C9ED + 0FC9B9BD8F0423DD59DAAE9BD613345B08B8C540E42800E09DD7BCEE27E5FED7 + FF8A994543AFFF7FF4830F9AD900BD37E1D39FFB8299F9E17BFFF59FF2D52F7F + C9CC926D7970D43A61C204338BC699E0A879FFBECCD32351D023FCD5CDEBD2FB + 62D5EA3532A6BEDE7CE4D6FCD9273F2A2F47F8F7890D0A8051A10040DA7B1EFC + 60FA06B728E9E9FF471FF92733CBF6E0873E2A73E7CD37B3E8E96B8A1F0C8ED2 + FAFAF4774C72AD6B5D2F6F7DFB3BCC2C5A2FEEDD235FF8CBCF94F4C8F9F63B96 + CAA6BBEF95752DAD05BD7FE6CF3FF5717929743F0C7288610110ED39562044EF + 6A8F3AFCD5608FFCED79DEAFA70174A5C425C12FFFA49B79DB2C338A9EBEA8E9 + 577FED2D66563CFAB2AC7BEF7B9D7CE4930FCB1FBCEF8FA46DC3C6C86F9E457C + 5000C02B3EDCD5DEDBD393F5FC7F986F8F03AAB60DAC1078FEDC3933F283BEA7 + 61EAB4E15F6F1F090DFED7BCEEA7E4130F7F467EE957DE28D3A6CF301F01868F + 02005E69F5E0E536FB5E7A417A7AF4CC5D6EFA7AE0AECE4E33F3C3DA96F5E950 + 48B2F3E7CE9A913FF4E8BC9074754CBD435F83FFFED7BF41C6477CBF03E28D02 + 00DE983D67AE17A77177EDDC6146B9E9B576DF2E03E82B93D7247C85C0739E9D + 01505A9815CAD2E52BE48F3FFC7179D36FBC95E047415000C01B51AFFC670DE7 + 14BF8F97015A13FE52201F9F57D7FB3366CC986966B7461F8BFDCDB7FDAEBCF3 + DDEFF7EA3E07C41F0500BCD17667F4D7B1F5C527674E9F32B3FC7C2C0056AE6E + 4EF40A817AD9C6B74B336AE192DBCD68E4EE7DCDEBE4C39F7898751F50141400 + F0C2A2E097E4E4A626338BCEB6AD5BCC6870972E5D9483075E31333FE88B937C + 5840294AFAE21ADFE88B78464A8FFA1F78FF1FC92FBDE18D91AF8889F2450100 + 2FF8125CBB766E37A3A18DE4734B657DC29F06686F3F6F46FE98357B8E190D8F + BECFE0431FFD1359723B8F76A2B828001039BDB3D987539C7A0D79246F70DBBD + C3BF0240DFA1A0478F49E5E31980DB8679DD5EFF7FF0FA5F7953FA6546A37D7B + 1F301C1400889CBEC4C687BB9A77EF1A59A01F3D72582E7878E7F986CD779B51 + F25CF3F09DF5FA629EA1966D9E306162FA0D98F7DCF75AB305283E0A0044CE97 + BBD7B73CF3B4190DDF8EEDCF99913F7C789742547C5DB96EEA200BF0E8E3AF0F + 7EE823327FC142B305280D0A00444A5F5ED3B27E839945E7DAB56B83BEFD2F1F + 1FEF03D047C534549268B017384529DF192E7DB65F8FFC273626F7B20DA24301 + 80482D5FB9CA8BBB9CF548FE56C263DF8B2F7879DD59972D4E222DE47C94EB09 + 9775AD6DF28E3F782F77F92332140088942FA7FFF7ECDE694623A36F05DCEDE1 + 5980560FCEAA44A1E3CA1533F24B6D9D2E663AE0CE8D9BE52DBFFD3BE9473781 + A8F0D387C8E8BAE56B9AA37F7D6D7F7FBFECDC76EBD7F2778CE29F2D167D039D + 9E5E861F1A1A065ED0D41684FFAFFDE66F13FE881C3F8188CCEAB5EBBC58BA54 + 4FE38F66DD767D2BA08FA79E93FE6A609FD833007ADAFFCDBFF1D6F418881A05 + 0022E3CB69EAD1DEC9AFF70EF87819406FAE4CDA0A813EBE0A58353434A4CFC8 + 70DA1F3EE1271191D077D6EB0D803ED8B16DAB19DD3A1F9F06D09BCB7CD9C7A5 + D2D979D58CFCA28F01BEEDF7DE45F8C32BFC3422126BD6B678F1CBF0D8D123D2 + 7EE18299DD3ABD87A0B7A7C7CCFCB171F35D668428E9637EDCED0FDF50002012 + 1B36F9114C85BA814FEF21D8F7D20B66E68FE52B56497DFD5833038001140028 + 397D57BDBEB3DE078538FD6F3D37CC95044B496FB25CDB9AEC150201E4460180 + 92F365E5BF8BEDEDE9F7F9174A218B89426A4BF80A810072A30040C9F9B258CD + 8EED850D6C7D09CDFE9747FE3AE1625B72FB1D895921D0D73701023EA2004049 + E9AA68235D1FBD588AF1029F9D1E2E0EA4DA366C36A3F276C5D33701023EA200 + 4049B578F2721A3D52D41700159A8F6F0554BC1408401805004A6AA32F77FF07 + 47EAFA1EFF423B73FA949C387ECCCCFCA1675D6E9B35DBCC0080020025A44BD4 + 4E19645DF452BAD5C57F8663B46F162C165FCEBE1493AEEB00607828005032BE + 2C51AB2FEC19CDE23F43F1F532C0C64D7EDC7C594CED17CE9B1180A15000A064 + 7C79F7BFDEA93F9AC57F8672F8E081F42386BED11502172DB9DDCC00241D0500 + 4A42834703C8075B9E7DDA8C8AA7D08F18160AAF0606605100A0247C7A194D31 + AFFF5BBE5E0658DDDC92B8150201E4460180A2ABAAAA92B59EBCFD4F4FFF1762 + F19FA1E823861D1D1D66E60F5D96B6DC5708E46540C0F05000A0E896DCB1341D + 3C3ED8F3FC2E332A2E7DC470A7A79701CAFDD5C0FA46460043A30040D1F9F2EA + 5FB5F599E25FFFB776EDD861467E59B57A8DD4D5D5991930381EAD2C5F140028 + 2ABDDEBCA6799D9945EBF4C993E917F594CA8B7B9F4F3F72E89BF40A819E5C92 + 81DF4E9D3A29870E1E3433949B0AD3FB40BF166D5A9468AB0A5A2A687AC79236 + 3D64A993A665F7CB8CE687823162605DEB7A79EBDBDF6166D1FAD6371F93C7FE + E511332B8DDF7FE0BDB26C857FD7DC5FDCBB473EF3F027CDACBC7CE2E1CFCAE4 + A626334B36BD0FE5F4C91372EEDCD9F4A3A97A79A4A3E38A7476764A57E755F3 + 59D9B4681F3F61829C0FFE9903AFBC223D3DD7CD4730A893DB1F92737BF5178C + 3E63AC4D779C363D0AD0D78EEAA9146D374C8B1C05008AEAEDEF7897ACF6E40C + C0A73EF650F00B6DBF9995C6ABEEBD4F7EF98DBF6666FED0D3BA0FBEE79D25B9 + 21B2D4925A009C3D733A1DD8870F1D08DA413971EC5810F4B9431E4510C30280 + 4B00281ABDCEBCDC93A3DFAEE088477F2996DAAE9DDBCDC82F959595B28ECB00 + B176FEDC39F9C1E3DF93BFFDEBBF92F7BEF377E58FDFF7807CF16F3E2FDFFDF6 + 7FC8FE7D2F11FE181205008A46AF33EBF5661FE8DDFFC558FC67287A841D45E1 + 311C3EDD9C89E13976F4887CFDD1FF271FF9C01FA6CFE0FCE3DF7F51B63CF394 + 5CBA74D17C06307C1400281ABF5EFE539AC7FF72F17571205D2170C68C996606 + 5FE991FEBF7FE331F9C0FBDF2D1FFDE083F26FDFF89A1C3F76D47C14B8751400 + 288A8671E3D2CFFFFB22CA02A0980B0F8DD67A4F16684236BD47636750387EEE + CF1F4E1FE97FEDD1474AFA040B9281020045D1DAB6217D9DD9077A0A3ECA53A4 + 7AB4A63768F9A8ED4E0A009FE863A3DFFBAFFF940FBCEF01F9FCE73E5392D756 + 23B9280050142DEBFD597BBE546FFF1BCCB6AD5BCCC82F7AB73C2B0446CF06FF + 83EF79977CF5CB5F4A3FB607141B05000AAE71D22459B4788999456FF78EE8EF + C4F7F56900D5DAE64FB19634E1E0E7663E941205000ACEA7BBCB2F5FBA54F267 + FF73D1C7B2F4452C3E6A59BF21BD60134A4B6F0EFDF007DE4FF0233214002838 + 9F9E2FDFBDCB9F23EF6D5B9F3523BF246185409F6851FA577FF169F9C2E73E23 + 674EFB796F089281020005A58F95E9E365BEF069419EE73C2D00544BDB063342 + 31E972D41FFBD01F053F97FE5E1242725000A0A07C7AAC4CD7858FF2F1BFB083 + AFEC4FBF9BDD47EBD6B5B2426091ED7BE945F9ECC37FC2E97E7883020005D5EA + D1DDFFBA1A9F4F0B99E89B089F7DEA4933F38BBEB171F55A3FD66C2857FB5EDC + CBC23AF00A05000A66DEFC053265EA34338B9E8FA7DC7DBE0CB07113AF060692 + 84020005E3D3AB7FF54D6ABB3DBAFE6FF9FC3480BEB951DFE008201928005030 + BAF88F2FF6BDF882B7ABA1F9FA3480BEB9F14E8F8A3800C54501808258BA7C85 + 4C6C6C34B3E86D79F66933F20F4F0300F00105000AC2A7B7C9E9E9FF1DDBB69A + 997F7CBE0C307FC142993A6DBA99012867140018357D8BDCEAE616338B9E9EFE + EFB872C5CCFCB4DBE35703FB742F0780E2A100C0A8AD5CDD9C7E9B9C2F7C3EFD + 6FF97C19A06DC346330250CE2800306A6B5BFDB9F9CFF7D3FF969EA5E8EAEC34 + 33BFE8A39C0B162E363300E58A0200A3924AD5C89A667F5E20F3E2DE3DDE9FFE + 57FA52A05DBBFC7B4CD1628540A0FC51006054D6B6B64A6D6DAD9945EFE9A77E + 6446FEDBB37BA719F967FD864DAC100894390A008C8A4F2BFFE9DAEA3BB73D67 + 66FED31715E9250B1FE93D1DFA622000E5ABC2F43ED0AF459B1625DAF4F02315 + B41AD374A5923A695A76BFCC687E28182362FAD6B84F7DFA73E9F7C8FB409759 + DDF3BC3F8BFF0C87BE3CC9A73328AE679EFEB17CF1FF7CDECCE2E3130F7F5626 + 373599993FBEF9D8A3F28DAF3D6A66283B27B73F24E7F63E128CBA4DD3851FB4 + F504AD2F685AED6BBB615AE4280070CB36BFEA5EF9D537FF8699A1DCE86A8A0F + FCDEDB62B7800D05002211C302804B00B8653EADFC87C2D333137A8F0780F244 + 01805BD2386912D78813A0753DAF0606CA1505006E89DEFCA78BC7A0BC2D5FB9 + 8A15028132C56F70DC92668FEEFE47F16891D7CA02414059A200C088E962318B + 162F313394BB16EEF500CA12050046AC85B7C4258A167BAC1008941F0A008C18 + 77FF270F451F507E28003022B3E7CC9599B7CD323324C59D2C110C941D0A008C + 884F2BFFA174A64D9F912EFE00940F0A008C48DB9D1C0926D5C6CD779B118072 + 400180615BB4E4762F5FB18AD2D0750B582110281F140018369F56FE43E94D6C + 6CE4ED8F4019A100C0B0E8911FCF83A38D9B0181B241018061D123BFF1132698 + 19924A2F03A452BA382780B8A300C0B0B4F21C3802BA42E0AA356BCC0C409C51 + 0060487AC4D7C2AA7030B80C0094070A000C495784D3233F402D5FC10A814039 + A000C09038FD0F57752A256BD6B6981980B8A200C0A0EAEAEA644DF33A330332 + 366CBACB8C00C415050006B57AEDBAF4111FE0D215021B274D32330071440180 + 41B572F31FF2D8C0AB818158A300405E7AA397DE0008E4C2B2D040BC5100202F + BDD1ABB2921F11E4A6CB42B34220105FFC76475EDCE885A1B4B6718908882B0A + 00E4A43778E98D5EC060782910105F1400C88995FF301CBA42E0ED772C333300 + 714201809CB8C31BC3D5B671A3190188130A00DC64EAB4E9326BF61C330306B7 + 761D2B0402714401809BB4F0EA5F8CC098FA7A1E17056288020037D9C8DDFF18 + A18D9BF99901E286020059F4B9EE2953A79919303CBA42607DFD583303100714 + 00C8D2B691C7BA3072BA5EC4DA569E1C01E28402005978F73F6E15AF0606E2A5 + C2F43ED0AF459B1625DAAA82A6CBD0E9EDC5DAEAD2AD69D9FD32A3F9A1608C02 + 5BB4E47679CF1F7EC0CCFCB173FB7372F4C861334BA631F563E5BED7FE8499F9 + EBFD0FBC43DA2F5C30B3687CE2E1CFCAE4A62633F3C7371F7B54BEF1B547CD0C + 65E7E4F687E4DCDE478251B769D74DEB095A5FD0FA4DBB615AE42800F0DFDEF0 + A65F97BBEF79B599F9E303EF7FB79C397DCACC92EB639FFAB4F7F767FCCB3F7F + 45BEFDEFFF6666D1A000402462580070090069555555B2D6C3B7FF1D3B7A84F0 + 37B63CFBB419F98B570303F1410180B425772C9586860633F3C7735B9F35236C + DBE2FFBED01748DD366BB69901F0190500D27C7DF5EFCE6DCF9911F43E88B367 + 4E9B99BF789114100F140048BFC6754DF33A33F38786DDF16347CD0CEAC74FFE + D08CFCB57113EB48007140010059B5668DD4D6D69A993FE270CDBBD4B63EE3FF + 3ED11502F58912007EA30080B7376EC5E19A77A9E90D917A63A4EFB81910F01F + 0540C2D5D5D5A55FE3EA9B8BEDED897FF63F9F38DC18A94F94E8932500FC4501 + 9070FA8B5A5FE3EA9B6DDCFD9FD7533FFA8119F94B9F2859B9BAD9CC00F88802 + 20E17C3D55CBE37FF9E99BF6F6BFBCCFCCFCD5CAD30080D7280012AC61DCB8F4 + F3FFBEB97CE992ECDFF792992197ED312890F4C912BDC404C04F140009D6DAB6 + 412A2BFDFB11D8BD6BBB19219F389C2149AF10E8E1DB250164500024588BA7AB + B76D89C1A36E51D3CB00FB5E7AD1CCFCC5D30080BF280012AA71D22459B47889 + 99F9A3A3A343F6BDF882996130CF3CF5A419F94B2F31E9CF1A00FF50002494AF + AFFEDDBD73BBF4F5E9C25918CA8E6D5BA5BF5F1717F3975E625AC76500C04B14 + 0009E5EB2FE51DBCFB7FD83AAE5C89C5D992F55C0600BC440190403366CC4CAF + DAE69B6BD7AEC99EDDBBCC0CC31187D725CF9D375FA64E9B6E66007C41019040 + EB37FA7944B663FB73D2D373DDCC301C5B9F794A7A7B7ACCCC5F1B36DF654600 + 7C41019040AD9EDEFDBF67F74E33C270757777CB9EE7FD3F6BE2EBCF1C906414 + 0009336FFE029932759A99F9438F6259FBFFD6C4E19D00FA33C70A81805F2800 + 12C6D7E7B2F528568F6631725A38C5E13200AF0606FC42019030BEBE998D77FF + DF3A2D9C9E7B6E8B99F9AB65FD065608043C420190204B97AF90898D8D66E60F + 7D969DBBFF4767DB16FF0B285D2170F94AFF969E06928A0220417C3D05ABCFB2 + EB33EDB8755A40E96394BE6B69DB604600A2460190107AEA7575738B99F9250E + CFB2FB4E1F9FD4C7287DC70A81803F28001262E5EAE6F429581FEDDEC1EA7F85 + F0EC8FFD5F1BA0B6B65656AF5D676600A2440190106B5BFDBCF96FFFCBFBE4D2 + A58B6686D17861EFF3E9C5947C77E786CD6604204A140009904AD5A44FBDFA68 + 3B77FF178C2EA2B473FB5633F3D71DCB964BC3B8716606202A140009B0B6B535 + 7DEAD5473CFE57585B9EF1FF7E0A5D21F04E1608022247019000BEAEFC77F8D0 + 4169BF70C1CC5008FA44C5E54B97CCCC5F3C0D00448F02A0CCE9A9D6E52BFC7C + F63A0E77ADC78D5E06D81A83A72AE62F58C80A8140C42800CADC9AB52D529D4A + 99995FB6C6E074751CC5E5B24A0BAF060622450150E67C5D85EDC4F16372E6F4 + 29334321EDDFF7925C6C6F37337F6DDCC412C140942800CA58E3A449B2E48EA5 + 66E6174EFF17D7B698AC10A8AB53028806054019D39BFFF48E6B1FC5E1DDF571 + F6E31FFDC08CFCE6EBEA944012500094B1664FEFFE3F7BE6B41C3D72D8CC500C + BA7F753FFBAE65FD9DAC1008448402A04CE91DD68B162F3133BF6CDBEAFFD2B5 + E5200E6B2C8C9F30C1DBCB5440B9A30028533EDF61BD6B27EFFE2F85B85C66D9 + B0F96E3302504A140065CAD7BBFFF5EE74BD4B1DC5A797018E1D3D6266FED2D7 + 54EBEBAA0194160540199A3D67AECCBC6D9699F9250E77A7979338BC13405F53 + ADAFAB06505A140065485FFEE32B4EFF97565C5EB6E4EBEBAA81724601508626 + 373599915F74A95A7D573D4A475FB61487CB00F3172C32A3D1EBEFEF3723BFC4 + 618D06240B0540193A7FEE9C19F9437F29FFF357FE6FFA5DF528ADC71E7DC4DB + 50B4AE5DBB6646A3F7D4937EBE03E1C02BAF9811E0870AD3FB40BF166D5A9468 + D38783F525F67A7790B6BA746B5A76BFCC687E2818230FBDA16AF3DDF7C8EC39 + 73A4D28367AC3B3B3B65EB334F05BF00F79B2D28B5454B6E4FDF185A5BA7FF37 + F24BC7952B4168FF508E1F3B6AB68C5EDBC64D72FBED4BBDF9F9DFBD73BBBCB0 + E779B30565E9E4F687E4DCDE478251B769D74DEB099A1EF96815AEED866991A3 + 00000060B4625800700900008004A200000020812800000048200A0000001288 + 0200008004A200000020812800000048200A00000012880200008004A2000000 + 20812800000048200A00000012880200008004A200000020812800000048200A + 00000012880200008004A200000020812800000048200A000000128802000080 + 04A200000020812800000048200A00000012880200008004A200000020812800 + 000048200A00000012880200008004A200000020812800000048200A00000012 + 880200008004A200000020812800000048200A00000012880200008004A20000 + 0020812800000048200A00000012880200008004A20000002081280000004820 + 0A00000012880200008004A200000020812800000048A01816007D17CD000000 + 4FC42F9B625800F4779A0100009E885F36C5A900B8617A00007C159BAC8A4301 + 90BD337BBBCF981100007EB8399BBC2F047C2F00C23BF086F45CE3120000C02F + 996CBA39B33C16974B00BA13333BF2EA99F3E91E00005F0C64D3405E792E6E97 + 00323BB6AFFF6C660A0040C46EF49CD43F4DB3BC2F027C2E006E0EFE8CA0EFE5 + 3E0000801F7AFB35939C8CFAEFB172C75EF1B10070775EAEF10DE9E93A9ADE02 + 0040D4FABADD3300E1CC52EED81B71BA07C0F637E4CAF1639929000011CB6492 + 1BF2DE857D2EBE5F02C8DD7ABB0F053D0000D1EBE97A25F833775E659A97E272 + 136076BBDEB53FE80100885E4FF7C1E0CF9BB3CA73BE160076C7B9BDB6FE74DF + 794CCF005C0F1A000051BA6E326920A3324D857BAFF85400D89DE6EEB0DCF3DE + DE1EE9BD7E20BD150080A868166926B9199531D43C7271BC0490A9B0AE9EDC19 + F400004427934503D994DDBC16979B00ED8ED53ED33ACFEF0E7A0000A293C9A2 + 816CCACE2CDBBCE4FB3D00CA8EDD1D1A140067B7E94600002293C9A2EC7CCAB0 + D9A5DCB1377CBF04E0EE50771C1400E7CE4A7FEF91600C0040E969066916D95C + CA9D59DEF2B100B03BCDEE38776E7772A6759C7836E8010028BD4C0665E75276 + 66A9F0DC1BBE1500E11DE4EEC0F04EEE97ABA79F0C7A00004A2F934137675376 + 76B9C2F348C5E51240B8E90EEE938B47B64ADF8DAE600C0040E968F668066916 + 0D847EAEE62D9F0B00BBE3EC4E74ABAB4CEBEDEE96EEF33F0CC60000948E668F + 6650AE6CCA0E7FDB7B270E67006C6F9BBB93FBE4D2C1EF063D0000A593C91E7B + F46F9B9B55CAF65E8AF34D80991D7FE9C8535C060000948C668E668F9B4503CD + CD2C159E7B234EF700B83BD8B63EE9EDEE92EED3DF09C60000149F668E66CFCD + E16F9B9B5DDEF2BD00B0DC9DA93B5777FA406B3FF0F5A00700A0F83299939D43 + 310A7ECBF79B00C3CDADB0060A81F683BBA5AF4797630400A078346B3473B283 + DF6DB9B2CB4BBE1600E11D6677A2BB93EDCED7D62BE7F7FD6BD00300503C99AC + E90D9A9B416E36E50AFDF0DC0B71B80460779CDDA9DADC9D9DF9065C7CF9DF82 + 0F75046300008A20C89874D60C1AFCDA94EDBD15A79B006DCB0E7EDBAE5DBD22 + 170F3E168C0100283CCD18CD9A70FEE42E026CF396EFF70058EECEB4E1EF1601 + 7A3AA6574EBFF04F417F3D68000014D275933199BCC90E7FDBBB5965B963AFC4 + E112806577AADDC96E019069D72F9E91CB47380B0000282CCD16CD9870EE6467 + 92CDA95888CB3D007687DAB10D7FB708C8546527777F29E8390B00002894EB26 + 5B8673F4AFDCB1B7E2700F806577A836DDD9E1F0CFF4D72F9E964B471E0DC600 + 008C9E668A668B9B3503F963F3C8CD28CB1D7B272E9700DC1D6B5BFE22E0F4CE + BF0B3E8527020000A31464493A53861DFEB679AFCAF4BEAB304DB9BD6D5AC8D8 + BE52FAAEF54A454D8F8C6DBA33980300706BCEBCF479B974684B30D24BCB3DA6 + D722C0365B088483DFFB22202E67002CBB836DCB751620D3CEEF7C54FA7B8E04 + 630000464E3344B3C4CD96A18FFE63236E9700941D87C33FBB00E8EDED96E3CF + FE5930060060E43443344BDC6CC9CE9C7011A0DCB1D7E2760640D99D6B5BFE22 + E0E2A1ADD271E63F82310000C3A7D9A119E2664A76D6B8C16F5BACC4A9007077 + B01DDBEACB1601F61BA4D76932DFB013CFFC85F4F59D0DC600000C4D3343B363 + 20F83553DC8C71B3275736C5425C6E02B4EC4D7FCA8EF3352D6E2AA4EF5A8FF4 + F79E9271335F13CC010018DCA9ED1F932BC75F0846EE8D7F030796D94540AC42 + DF15B702C0D280CFD7875BA5749D3B2E63264D91DAF1B70773000072BB7CECEB + 72F2B92F07231BFC36FCDD0220F647FF2A8EF7005876676BB3DF0CADCA6CB3DF + A8CC37EED496BF92BEEE43C11800809B69466856DC1CF86EB684C35F5B2CC5F5 + 0C80D2A37BDBDBB1B273B7554A5F4F9F74B73F2F1367FCA448AA3AD8060080D1 + D52D477EFC6EE96C3F114C34FC073BFA0F877F2C0B81B85F0250769CABD766CF + 7254CAF58E4B5259735EC64EBDCB6C030040E4EC4B7F2A175E793A1869E85F0B + 9A0D7EDBEC19000D7ACE0044CC06BCCBDD66C7DA068A808ED30765CC8406A99D + B8DC6C030024D9E5C3FF2CC7B7FC633072C33F7CF46F4FFDBBE16FC5B2082887 + 4B00963B77C35FB9F30AE938BE531A6E5B2EA931B7E907010009D5D5BE458E3C + FE49B971435FF8E39EF6D73E7C0F40F8C83F96C16FC5B90050E190CFD767B71B + C1F7ECEAF1A764E2FCCD52593D31D80600489A9EEE57E4F077DE233DD775F138 + 1BFEB600B047FEF94EFD5BB12D02E25E005836ECC3DCEDB6005015D2D7D32B1D + 279E94B173EE91EAEA06B31D009004D7BA4FCB91EFFCBE74779C0F666EF0DB3E + 7CE41F0EFF7021103BE5500084C3DF0D7A3510FAE1BEF75AB7749DD92AF5B705 + 45406A8CD90E002867DD5DED72FC893F90AEF6A3C12C1CFE1AFC3A76C3DF86BD + DB62AF1CCF00E41BBB068A809EAECBD27DFA59A99F45110000E52E1DFE8FBF53 + 3A2FBC12CCC2E1AFBD7BF46F8FFCC345808A7D11502E0580D250D7A6DF143B0E + 0B6FCBCC290200A0FCE50E7FB708D0E00F9FFAB7A1AF632BF6E1AFCAAD00707B + 57AEE077B771260000CA59FEF0B747FDF98EFC6D11A0CA22F8AD722A0054AEF0 + 1FAE8122A061768B54554F30DB01007176BDFBA81C7FE28120FC0FEA2C68FAAC + 7FB808C875F46FC3DF3655364540B915006AA8A37DD7CD9FAB4540E7891F49C3 + F45552553BC56C0700C4D1F5CB2FC891EFBF573ADB8FEB2C686EF8E73BFA7743 + DF3665FBB2508E05807243FFE690CFB0DFC8F0C7831F836B5D72E5D813523B75 + BED4D6CF365B010071D279FA8772F8071F906B598FFAB9E16FFB7CA7FDDDC02F + ABF057E55A00581AEEFA4DBB39E433F21701FA9E808BFB9F909A719532A671B5 + D90A008883F683FF20879FF84CF0BBBC33980D15FEB94EFB6BAF745C76E1AFCA + BD0050C32D02ACECF9E5A3BBA4B77BBFA41ADB2495AA315B01003EEAEABC2A67 + B67F444EEF7C2C980D16FC890E7F95843300B6D76FE2708B002BB3BDEBC231E9 + 3CF503193F73B954D534A5B70100FCD2D3F1A21C79FC3D72E5C4EE60160E7D37 + F8871BFE652D2967006C9FAF08B0DF68F7E33A1EF801E8EDEE90F6FDFF25A9B1 + D5523766B94875BE6202005052DDFD72F1E857E4F0F73F213D5D7ABDDF0D7D37 + F8756CEFF6D7A01F2AFC0732A00C25A10050C32902ACF0375CE7996D376EF4CB + E5A33BA4FBCA36193B739554558D4F6F070044431FF13BF6CC07E4EC9E7F0F7E + 47DB3BFC6D6F83DF36F7513F1BFC890C7F959402400DB708D08FB9DF78F78721 + D3AE5D3E2BEDAFFC87A4C65472360000A2608FFA9FF8B87467BDD3DF06BF3BB6 + E11F3EE59FD8F057492A00D4708A804CC80F3415DE76436EF4F5A6CF06745DF8 + A18C993447AAEB6604DB0100C576EDE27639F6F41FCBD917BF13FC2E76D7F177 + 9B0D7E37FCDDE04F74F8AB241EB9BA4580AA0C9A8EB5E9589B1646B655072DE5 + F4B6B9F36A99B2F45E99BAF22D5299A210008062E8EF39296776FFAD9C7DE1FB + C14C43DD0DF870E0DBDE1EF5BB05803D984B6CF8AB2416002A5C04840B807021 + A0616FDBCDE16FFBAAAABAA008F8196958F0CB5237A631D80600182D7D8F7FC7 + 812F07E1FF75E94B1FF1BB019F2BF46D0B077FB80050890C7F95D402C0B2C1AF + DC22C0F66E11E0160236F8DDF1C0B6AA9A7A99BA222804E6FD22850000DCA274 + F01FFAAA9C793E08FEEBFA421F1BECE1C0CF17FCE1A3FE5CE19FB8E0B76CF825 + 59B800B0CD16003A768B00B710C80EFE70ABAAAA95A665AF93494B7E4EAAEB16 + 04DB000043E9ED3E2017F6FDAB9CDBFBEDE0885FEFE877C3DDB670E86B73835F + 9B0D7D37F8DDD0B77D2269B861603FD8DE06BF365B08D8162E02062B08063ED6 + B8B059262FFC59A9686893BA31FA390000ABBBAB476E743C23E75F794CDA5FD9 + 1E6C09877BBEA6416F7B6D36F0C3C1AF6345F81B140003C245805B00D8DE2D02 + B477433E5C0884B765C635132649E3FCD7C8F885AF96BABAC5C1360048AEEEEE + 97E5F22BDF93F683DF91EB972E045BDC500F877C78EEF6B982DFF6E1D04F7CF8 + 2B1B76C870C3DFF66E738B005B08849B1BFCB60F6FCBB471D3664BC3EC7B64E2 + DC36A9AEBB23D80600E5AFB7FB45B978F819E938FAB85C39ADCFF06B80DBE606 + 7BBEB0B74DE71AF23ACE15FAB6A9709F7836E890CDEE17B7B70540B81FAA1018 + 6C6C5BA5D43536C9B8E9AD326ED66AA9695C25A9D4D4603B00C45F4FCF19B9DE + BE4BAE1CDB29574E6D91EEF673C1561BDCE1401F6AEC36FD77B8C11F0E7F15EE + 61D880C3CDECBE71FB70B305805B08E42B086C730B00F773DD7FBE52EAA7CF90 + FAF14B654CD352A99FB624F8519F2B63EAC7061F03007FE96A7C5572583A4FEF + 93AE732F48E7E5A09D3A197CC406B40D6E37C4ED385FD0DBE6FEF36E7343DF36 + 15EEE1D010C3E0EC3E727BB76960DBDEB670A0DB90B72DDF36F79FB16DE0BF51 + D73459C64C9C2F95B533A56EEC34A99B3049520DD3A4B27ABCF4578C91545F93 + 489D7E2E00149EDEA85755DD2E9537BAA4BFF7B2F4749C96EE4B17A4FBEA69E9 + BF7642BA2E1E94EE73BA188F06AE0D6637A8DDF07683DD6ECFB72DFCCF6A73FF + 1B6E53E11E3968B86068763FB9FBCB06ED40400F8CDD66033D1CF2E1EDEEC773 + B5F07FC736657BE58E01A090DC407543D66D6E38E76BB9C23D57D0BB63DBC2FF + 1DDB94ED953B460E84C5C88403577B77EC06B41BDADA72057C785BAECF71FF1D + F6DF1D6ECAF6CA1D034021E40A57ED733537ACEDD8B670A80F35B7FF0EF7DFAD + BDB2DB54B8C710088A5B130E5DEDC3636D6E68DB101F6E0BFF33B9FE9DCA1D2B + 770C0085E4866B387CB58583DAB6F07C382DD7BF539B0A8FDD1EC34458DCBA5C + A1AB7D78EC3637D86D6F9B3BCFF5B9E1B16DCA1D0340B18503D86DB9C2DBEDC3 + 6377EEF6E1A6C263CB1D6398088DD173F7A11BC8B6B7630DEF706F3FAEE3F0DC + ED076B961DBBDB00A090F285EF602D57B0EB383C57E1DE7E5C9B956F8C11222C + 0A2757182B1DDBB91DE79A6BCB15F8769BD2B1B21F53E11E008ACD06AFDBDBB1 + 1BDE6EC8DB966B9BCA37B7F28D718B088DE270F76B786CE7761C9E2BF763B99A + 0AF7CA1D034031E40A62B71FACA95CE35C1F53F9C6280002A3B8F285B31DE7EA + C39F97EB63E15EB9630028A65CC1ECF6B9C62AFCB15CBDCA374601111AA53358 + 58DB79B857C3DD060051182CC007DBE67E4CE5FA5C141101128DF07ECF371FEE + E7014054060B7265E7C3FD3C94080112BD5CDF83E16CE37B07C017C309F3E16E + 43891022FEC9F73DE17B05202EF2053B81EF117DF52C00008544D00300000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000888EC8FF07E56367B80631B8280000000049454E44AE426082} + 000000000000000000101D91FF0FE47B6F59FFDB0BC70000000049454E44AE42 + 6082} FileName = 'C:\YandexDisk\Development\Delphi\AErender Launcher\icons\png\ps\' + 'icon_512.png' @@ -852,11 +853,11 @@ object AboutForm: TAboutForm PNG = { 89504E470D0A1A0A0000000D49484452000004000000040008060000007F1D2B 83000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 - 738C49444154785EEDFD0BB465D75918E8AE7AA9ACB2F5AC12B664A9846D9025 - 1BA82A6130A592743BA914527A241D028671E9011DB866E09BD1971E18C2E036 - A69BE4764C9A3834DC6664D070318F847B1983102021B8FD883B69CB42066CA9 - 6483F5F053926DD95649D65B964A5575F77FF69E3EF3CC33D77E9CB3CF3E7BEF - F57D63FC99FF9C6B1F39A95ABB72FE7FCDB55603000000000000000000000000 + 73A949444154785EEDFD0BB465D75918E8AE7AA954A5A755256CBDC10659328F + AA1206BB54926E2795424A8FA443C0309A1ED0816B06DC8CBEF4C01006B771BA + 496EC7A48943C36D46060D17F348B8CD1884100881183B1E21966599604B2503 + B2243FF5B0655B25590FEB592AD5DDFFD97BFACC33CF5CFB71CE3EFBECBDD7F7 + 8D3199FF9C6B9F129C33D7E1FCFF9A6BAD060000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -866,908 +867,909 @@ object AboutForm: TAboutForm 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000080CE + D831E881D970CE0100AC7576D0035B4C3202D3E59C0200982E05029812C90A6C + CC66CE1DE71D0040DF66927B850198904404469BF43C715E01004CC7A449BEA2 + 000C215181F5C63D2F367AFE38EF0000FA369AB08FFB750A02909188C078E7C1 + 24E7CAA8CF3AEF0000FA4625E89324F0E37C5641804E9388D045D34AF8DB3E33 + AD7F1F0060996D26619F56B2AF2040A74842E88A516B7D23C7877DCDA49F6FB3 + 91AF0100D84E1B49AA6B5F33ECDF99F4F361B3C761E1492E58669326E8B9F278 + DBE737FAB9D0F6590080653749025FCE6FF673C9B0E3A3BE161692048465336C + 4D4F72ACF6D97C6EB3C793DA1C00C032AB25D7A3E6367B3CD43E936CF4182C14 + C907CB60D83A1EF758ED73696E9263F978D8D785DAF1716CF4EB0000A66DA3C9 + 71FE75B57F63D8F1341EF675C38E85DAF164A3C760EE492458646DEB77DCF9B6 + F166E6DBE230EC586ED831008045326E325D7EAEED588ADB3E3FE97C528E9349 + E761AE493458346D6B769CF9F233693CCEFC34E6421E27E3CE01002C925A923C + 6AAE164F6B2E8C9A0FE5B164D279983B920C1645DB5A1D355F1EAFCD8F3337AA + 0FE37C26D4BEA666D831008079362C291E966CA7715B1F467DA6ECC3B873A16D + 3E99741EE686048379D6B63EC799AFC5C3E66A7D8A433E1ED58788CB71DE27A3 + C600008BAE2DC14ED2389F8FB81C8FEA531CF2F1A83E0C9B0B799C9B741EB695 + 648379D4B62E6BF3F95C2D2EE7DAC6B5BE2D2EFB61C7F23ED4E69272AEF61900 + 80455026C0B58438CDE5C7CAB95A3FEEB1DAF1D4A738D4C6791FDAE2A43617DA + E6615B483098276DEB7158B25C1E8B713E376C3CCDB8ECDB8E35CDE547AE6ACE + 3970D54ABCF7FCA32BFD8E1D1736BBF6BEE12BFF3F62E7E95EBCEFC2FE000060 + D13CFF74F3CA9E7BFB71EFCFA0332FDEDB9C3DFBF4CAF0C52FDFB9D2BFF4F8C3 + CDE7EE7E7825EE4BC972DED7E6523FED388C1A87342EE7436D2EB4CDC34CAD26 + 25B07D6AEB70D45C2D1ED68F1BD7E6427EAC9C0B6BE3CB8F5CB992E44782BF92 + DC9FF386E6CCD92B9B3D7BAE1C7C06008070FAF423CDAE1D8F34675EEA1709A2 + 40D02F0E3CD23B9A27DBC3E2DA5CC88F957361583CAC0F6D7132EE1CCC4C4A58 + 603BD4D6DFB0B9F2588CF3B97C3C2A9EDEDC57FF8DA3CDDEF3DED0ECD8FDF5CD + AEDD57363B77BF79700C0080CD78E5E50F35675E7EA439FBF25F352F3E7B6FF3 + 99FF18BB0752121D7DDEC234E6425B1CCA71C83F5B1A770EB65C4A6260966AEB + 6ED85C7EAC9C8BBE6DAE364E733B077D792CB5B07EFEF2C35735E75FF9E666E7 + 9EAF6F76EF7D73B363D71B7AF30000CCCAD933F7362FBFF8A1E695D37FD57CF9 + 910F359F3B19B71144425DB6509B8F165E19F4B563B571EA6B73496D2E19770E + B64C4A7460166AEB6DD85C7EAC9C8B7E585CB6302AE95FDF22E13FEF8AA3CDEE + FDDFD69CDDF1065BF80100E64CDC42B0E3ECBDCDCBCFBDA779F6B3770E2908B4 + B5D0560C482D0C8BF33ED4E69271E760EA22C9815928D75A6DEDA5B9FC58C4B5 + 719A2BC7E326F9E97379BFA379D56B2F6A2E79FDD1664F2FE16F76BD59C20F00 + B060A220D09CF95073FAB9F7344FDC7F67F3A54F3DD59B8D043B25F9791FF3C3 + 5AA8150742390EB571DEE7CAB9DA6760AA221182AD545B63E55C1AE7F31197F3 + 69AE361EA7AD4DF6538BABFC175C736BB3F39C3737BBCFE925FE00002C8D975F + 7A4FF3CA4B1F6A9E79F04F2ABB03262906942DD4C6A94F71288F27E538D4E660 + 2A220182AD505B5BE55C1AE7F311E7F3B53825F2692EB5B589FDDA5649FAAFBE + ADD9B3FF3BDDC70F00D011F1FC80D3CFFD9BE69987DEDD520CC8C779AB1D0BE5 + EE80D016877C3E578E436D0E3625922198A6DA9A2AE7D2389F8F389F2FE37C6E + FC443F9F8BEDFD07AFBBADD97BE10F48FA01003A2E8A012F3EFDEBCDA9FBDE5D + DC26107DDE46150642391FDAE290CFE7CA71A8CDC186447204D352AEA7DAFA4A + 4979928F6BF1A85626FCEBC7AFFB9BB7367B2FF8AE66D79E13BD310000AC75E6 + F47B9B179FF9D7CD27FFC39FF44665C23F6A3CAC85B63894E3A49CAB7D062616 + 09126C566D1D9573695CEB530BF9B8AD0D4BFAFBF16587AE6E2E7AEDFFBD69F6 + 7C9B07F9010030969507089E7E4FF3D4A77EAD79F49E877A339178E709FF468B + 01A136AEF549390EB539185B244CB019E51A6A1B0FEBC769EB93FC5AFCBA6FBB + ADD97BF15B5CED070060535676053CF9BBCD27DFF3EEDEA8AD0830AC3830AC85 + 517D326A0C638BA40936A2B676CAB9949827F938C5A35A2DD95FDB5FFC351737 + AFFEC6EF6A769CFB03AEF603003055B12BE0EC0BBFDE7CE12FFE75F3E4A79FEC + CD44029E92FDB22FE3512DE47128C7A11C87DA1C0C1549144CAA5C376DE3BC2F + E37C2E4FF2531B95F8EF6C2E3B745573D16BBFABD9B3E3079A66DF85BD390000 + D822CF3FDD9C3EFBEBCDE74FBEAB79F2D3F1D0C048F4272D04C45C28E74319E7 + 7D326A0C43453205E3AAAD977C2EC5B53EB5908FA3D592FD3C5E9FF85FFC756F + 6B76EFFDCEDE18000066EBE517FF4DF3E4C77FBE79F49E78956024F56501204F + FEDBE2D4426D5CEB431E27B5395827922A1847B956DAC6795FC66DAD96E8977D + 2FF1FFA6AB9B8BAFFD51893F00007361A510F0C02F348F7E341E1818C97D5900 + 68EB87B550C6799F8C1AC33A915CC128E53AC9C729AEF5A35A4AF0532CF10700 + 60F18C5708C893FF3C1ED6425B1FF23894635823922C6853AE8FB671DE97716A + 79B29F8FEB497FB478B8DF6B8EFC68B367DF0FF4C6000030DF4E3FFFEBCDE7EF + FE85C1C30253D29F92FDB63EB5721C2D9471DE27A3C6B022122EA829D7466D9C + E6F2BEADA5043F8FD727FD315E49FC0FBFD5C3FD0000583C6B1E1698BF3520B5 + 34CEFB32AEB590F7294E468D6125F98252B92EF2718AF3BE8C534B097E2D5E4D + F8F3F1D7FDD7DFD5ECB9E8479B5D3BAFE88D010060319D79E5B3CDE9A77EA1F9 + F81FFFEBDE2825FF79E29F8FD35C2D4E2D9471487DC8E3508EE9B848BE20A9AD + 877C2EC5793FACA5043FC565C2BF1A5F71E33734175FF1BF343BCF79536F0C00 + 00CBE19597FEAC79F2B3FFEFE6B31FFCCB180D5A24E66D711AA7B8AD85B20F79 + 9CD4E6E8A048C020946BA1364E73B538B594D8E7F1DA643F6FEEF30700A00BDA + 9F0F905A24E9655FC6A985B6381935A683222983721DE4E314E77DDE424AF0A3 + 95716AE57867F3BA6FBBB5D97FFE3BDDE70F0040373CFF74F3DC977FA2F9E47B + FEA43748897F6A91A097E33497C7218D530B651FF23894633A269232BAAD5C03 + F938C579DFD6F224BFECD7B678ADDF25AFFFE7B6FB0300D049715BC013F7FF83 + E2B581798B44BDAD6F6BA1EC431E87724C87EC1AF4745324E8B97C1C71DE5242 + 5F9B2F5BACABD4E76D7773EDDFFEC1E6C24BFF8F66C7B9AFEB8D0100A07B76EC + BAB2D97FE15B9A8BBFF6E5E6F107EE49B3590BA90FB5B95CEDB3C9A8311DE287 + DF5DA37E49A4B93C8EA43EF5693EC5D197F16ABBEC1BAF692EB9EE9DAEFA0300 + 40666537C07D3FD13CFA170FC6A8D2E28A7D19479FE290FA341FF238C9C7E531 + 3A20AECAD22D29714FCA383F9E8FF3E43EF5A9C53ACAE3BCED6EBEEEBFFEEEE6 + C257FF9FAEFA030040A1BF1BE03B9B8BBEE689E6898FDF9766B396D4E2B2CFD5 + 8E9571EDEB58627EE0DD52FEBCCB5F00655F6B91E4977DBDC513FE2FFF967FDE + ECDA73A237060000863973FABDCDE7FEFC1F0C7953406A71F5BEEC6B2D947DC8 + E3508E595291C0D10DE5CF3A1FA738FAD4428A23A12FE394E8A738DF05B0B3B9 + E6AFDDD89CF79A7736BB765ED11B0300006379FEE9E6E92FFD3F9A07FFD3077B + 833CE93F33E823594F73298EBE8C438AF37192C7A11CB384226963F945929ECB + C711972DE4C97D9A5F4DF0575BBEDDBFDFAEFB3B3FD6EC3FF0CF9A9D3BBCDE0F + 000026B2676FB3F782EF6C2E79EDCEE6D4FD7FD69BC8FF464F7DD2368E3E12FA + FCF8B85FCB12F3435E7EC34EEC88D338C5B516897EEADBDBC55FFDAAE68A6FF9 + 650FFA030080298807047EF6CF7FB879F2335F8AD18816097FEADB5AC8E390C7 + A11CB34422A96379953FDF7C1C711AA7B86C91D8977DD9E2AAFFCEE6EAA3DFD0 + 5C74D9FFD534FB5CF5070080A979FEE9E6A947FFBBE6A13BFFB23788043FDD0A + 50B648DCCBBED6421E873C0EE5982511C91BCB2912F65C3E8E388D535CB648EE + 539F12FDB2ED5EE9E329FFE75FFEEB2BDB9500008029EAFD8D7DEEABFEBBE6A2 + AB3ED73CF1F18FF526E26FF490FFED9EE692725C1AF5F9515FCF828A248EE533 + EC048E388D535CB694F4D7DADA22C0F56FF9B9E69CF3FFC75E0C00006C95DDFB + 4E34075E7F7573EADEFF3898497FBBD7B4CDE7CACF8C1AB304FC5097CFB01337 + E2344E71DE22C14F7D1E47B29FE6FAE38BBFFAE2E6CA37FF76B363D7F5BD3100 + 00300B67CF7CAC79E443DFD33CF999785560793BC0386F0AC85BC8E390C7A11C + B3C0EC00582E91B0E7F271C4699CE2D452629FC7FD447F6DF2DF1FC7FDFE07BE + F1B79B9DBB5EDB1B030000B3B263E7A5CDF957FEED66DF05FFA579EA915331D3 + 3FB022FD7D5F6A9B0FE5FCA8310B4C0160790C3B51234EE314A716897D1ED75A + 2A04F493FF78D8DFCE732EED8D010080598BD76D9F7BEEDF6ACEBDF8F6411120 + C4DFF3A3B47DA69C1F35664129002C87612768C4699CE2D422B94F7D5B5B4DFE + BFF66F7AD81F0000CC85C1C3012FBCF2D1E6894FE40F076C938EB77DAE9C1F35 + 660129002CBE612766C4699CE2D422B92FFBBCAD26FE318EE47FDF253FDB8B01 + 008079B167DF894111E0DEDE28FEAE0FA92F8D7B3C193566C128002CB6612764 + C4699CE2D4F2A43FF579CB93FFFE93FEF75EE049FF0000308FA208B0FE0D016D + D2B1B6CF94F3A3C62C100580C535EC448C388D539C5A9EF4A7BE96F8F7C7D7BF + E59F37BBF77E472F060000E6D5CEDDD737075E7F55A50890FADCB063A19C1F35 + 664128002CAEFCA42BE3344E716A79D29FFAD45693FED44BFE01006071CCB608 + C0025200584CF9C957C6699CE2D422A92FFBD424FF0000B00C66570468FB1AE6 + 9802C0E2693BE9224EE314A716497DD9A79627FFD1764BFE01006081AD1601DE + 379849221728A5B9DAB150CEE7E3B6AF614E29002C96B6932DE2344E716A79D2 + 9FFAD4CAE43FAEFCBF53F20F00000B6EFD4E80247282529AAB1D0BE57C3E6EFB + 1AE69002C0E2683BC9224EE314A79627FDA94F4DF20F0000CB4C11808202C062 + 683BD9F2BED66A897F4AFA532FF907008065355911601C6D5FB7D17F8F195200 + 580CF9C994E2BCAFB548F0539F37C93F000074C9E44580B6F9241D1FF539E68C + 02C0FCCB4FAA32CE5B88C43E8DF3A43F6F29F18F787773EDB7FF6873CEBEEFEF + C50000C0B28A22C0C5AFDBD93C7EDF7FE98DCEF65ACA21C631ECF3F9FC24FF26 + DB400160BEB59D4C11A77124F2A94FF329D92F5B9EFCEF6ABEF66F7E5773EE45 + 6FEFC50000C0B2DB7DCE9B9A0BAFFC5CF3C4273E3698C9738C61E273A908502B + 06E4E371FF4DB68102C0FC6A3B89224EE31447429FC7B5B63EF9DF77C9CFF662 + 0000A02BF6EC3BB1C92240527E5D3E1EF7DF64C61400E653DBC9147D19A79612 + FD3C4E097F8AFBEDF2377F4373E16BFE3FBDE9BDBD310000D0257BCE7973B3FB + FC0F34CF3C726A3053AA25FAF95C928ED50C3BC6365100984FF9C992E2BC2F5B + 99F8E7497FEAFBED35DF707573F0DADFED8517F4C6000040E7ECDCDBECBFE86F + F532853F6EBEFCC5670693A344BED1261D1BF619E68002C0FCC94F9A32AEB548 + F0535FB6B505808BAE795573D937FF5AB363D715BD310000D0595104B8F44DCD + 8BCFFC71F3E2532F0E264789BC6394FC33E37C9E198AE490F9D176B2449CC679 + DFD6D627FFD1AEF8967FD64BFEAFEFC5000040D7456E1039429E33ACCD256AB9 + 466A21EF531CDA62B659FC60991FB51325FA32CE4FC688CB969FBCBB57FA6BFF + CEDB9A3DFBFFDB5E0C0000D0B773F76B9B8B5FBBB379FCFE3FEB8D22BFA8DDEB + 5F537E36C6CC390580F9919F3029CEFBB295497FDE5201A0DFBEE6F8ADCDFE4B + FE712F060000586BF739DFDA9CF755F7374F7EFA53839971B4150A2257C9FB90 + C76C230580F9D07672445C6B91E4A73E4FFAF3E43FE2DDCD556FFA86E6C22B7E + A937F4C47F0000A0EE9C7DB7347BCFFB40F3F467E3CD0091DC47BE912B13FEF2 + 784DFE99713ECF165300980FE964284F90348E643EF531177DD9CA02C0AEE6A2 + AB5FD51CF8865F6A76EEF6D03F000060889D7B9BDD171C694E4FF450C024150C + 6A858372CC365200D87EF90991E2E8CB3892FB3CCE5B4AFAF37877F3DABFF1BF + 36BBF7DEDC8B01000086DBB9EB6073DEABBFAA39F5B1F7F546B52DFEB5B91039 + 4A7E2CC6356DF3CC8802C0F6CA4F8032AEB532F14F2D25FDABED6B6F7B4BB3F7 + C21FE9C5000000E3D9B9FBFAE6C22B3ED73CF189FB0633E3682B0C2491CB2479 + CC8C29006CAFB4F8CB13228D23B94FE31497897FEA57DB65DFFA8DCD4597FD7C + EF90FBFE010080C9ECD9FBA666D7FE3B9A2F7FF6B1C14CA94CF853FE92C4F172 + AE1CB30D2279647BD44E80984BF3795FB6BC0890B77E01E0E2AFFEDF7ADD05BD + 1800006042BD5C6225A7F8CA45C65AEE11AD96AB84BC4F71AE36C70CC40F93D9 + CB177C19D75AED64CB4FC678D77F7FFCFA6FFF9F9B3DE71EEFC50000001B13CF + 0378D5EB2E6A1EBFEFF6C14CC8AFFCD7B6FDBB1560CE29006C8FDAC28F3EC591 + D4A7718AF3C43FF56BE3ABFF6F479BF30E7ADF3F0000B079BBCE39D49C7BC99F + 374F3DF8D9C1CCA8A43FE533491C2BE7D846913C325BF90990E2B6B9B2C5CF2B + F5A9F58B00175EF5AAE6FCCB639B0E0000C074448E11B9469E7BACB63C47295B + 487D1836C78CC40F8BED512EF618E72DA4B83CC1D6B7CBBEF9479A5D3BBDEF1F + 0000989EC83122D7A8E520FD56E62BD1428AF3B9A41C332351C16176F2859EE2 + FC84C84F9AF2645ABBDD7FB5ED1E6CFDFF47BD18000060BAFAB7027C78702B40 + DB7DFE1BBD15A06D9E2D100925B3912FECDA224F73D19771590C586D175E7571 + 73FEE5FFB4170300006C8DC83922F7A8E5246B739668A18C4BF95CED385B207E + 486C9F7452E42D445F3BA1CAB6CBD67F000060CBADDE0A90762697AD96C384E8 + CBC636891F0C5B2F5FE429AE2DFE3497B7FC24CA5B2FF9FFD6AF6FCE39EFBFEF + C50000005B2B728FC841DA8B00D16A394D2E9FCB8F959F630BC40F88D9A92DEA + 74020C6BE944CA4FAC9DCDC55F6DEB3F0000303B175DFD53BDFFB9362F599BB3 + 8C6AA5DA1C5B242A376CAD7C41A7385FFC292E4F9EB2AA16E3D5F6B57FEB079A + BDFBFF6E2F060000988D5DBBAF682EBCE6CBCD130F9C1CCC8478C85F6A491E87 + 7C9C72A152DB3C53128925B3515BCC3197B7908FF302C06ABBF0CA5735FBCEFF + 7FF662000080D98A5C2472925AAED26F794E13F2719ACBD5E6D802F1C361EBB4 + 2DEE349FE2D46A274D3ED76F97BDB197FCEFBAA017030000CC582F1759C9492A + B9CAF0DC26B590C7B9DA1C53123F0CB6DEB0859D167ED9F21366B57DD5F5577B + F01F0000B0AD222789DCA496B3F45B2DC78916529FABCD3165F183616BB42DEA + 7CD197716AF94993E27EBBE4EB3DF80F0000D87EFDDC646DBEB23E9FC95B688B + 73B539A6207E286CAD610B3A2DF8BCE5274A3A71FAEDAA5BDEDCECD9FB2DBD18 + 0000607B456E12394A99B7D4739BBC85D4E76A734C51FC4098BEB6C59C2FF632 + CE5B79F2F4E3F35FF33FF57A000080F9D0CF51D6E72EABE3B285B638579B6393 + E287C2D619B690D342CF5B7992AC9E3CAFBBF53B9BDD7BAEEBC5000000F32172 + 94C855F2DC657D4E938F530BA9CFD5E69892F861305D6D8B385FE4651C2D9D18 + E9A459DBF65DE2B57F0000C0FCE9E72AF53C666DAE935A688B73B53936217E10 + 6C8D610B382DF0D4F213637D7BDDADDFD1ECD879792F060000982F91AB44CE52 + CB65FA2DCF79F216529FABCD3105F143607ADA166FBEB8CBB8ADAD9E30AEFE03 + 0000F36CFD2E805A8E93B7D016E76A736C50FC6098BE610B372DECD4D2C9919F + 2CABCDD57F000060DED905B010E207C074B42DDA7C5197715B5B3D495CFD0700 + 0016413F77599BCF0C6FA12DCED5E6D8000580E91BB660D3824E2D9D14E90459 + DB5CFD07000016855D00732FBEF96C5EDB62CD177319B7B5D513C4D57F000060 + 917816C05C8B1F085BAB5CC865CB4F8ED576D5CD6F72F51F0000582891C3442E + 53CB71FAAD9613450BA9678BC40F80E9C917EEB0B8ADAD9E18E7BDFA7FE8F500 + 00008BA59FCBACE636F5DC276F6158CC94C40F83CD19B620F3636911A7964E84 + FCC4E8B72BBFE5FA66CFDE6FE9C50000008B257299C8696AB9CEDA5C286F491E + 97861D630CF18D673A462DD45ACB17FE6A7CFE557FAFD70300002CA67E4E333C + EF59DFDA0C3BC604140036A7B610F3059CB790E272D1A7F1CEE6C22B2F6AF6EC + FB3BBD1800006031454E13B94D9EEBD473A068213F96B7526D8E31C5379DAD95 + 166EDB82CFFB9DCDAB0FC56B33000000165B3FB7E9E739F51C28B57CCC168A6F + 349B97166ABE686B0B38CDA5969F00FDB6F7C2EFEBF50000008BAD9FDBACE63A + 6B73A0BCE5F2B9326693E29BCFC60C5B80E5826D6BF989B0A3B9EAE66FF5EA3F + 00006029F45F09F8AD110DDADAFCA7BD85D4D70C3BC6100A009B575B7CE5C2AD + 8DF385DF3F11CEBBF4EFF67A000080E5D0CF71CAC43F8F438ACB71A936C704E2 + 1BCF74A4459A2FCA7C2E5A5AE8E5E2DFD95C708587FF010000CB25729CC87552 + DE333C374A2DA9CDB109F1CD6672E32CC07CB1E6AD5CF4FDF6555FFF377A3D00 + 00C072E9E73AABB94F3D372ADB28E37C86427CC3D9B8B4E8F2459AC7499ACBDB + DAC5BEF7551EFE0700002C9F7EAED39E0BADB65C3E57C66C9002C074950BB4AD + A5051FFDCEE6D2AFBFAAD9B5FBF5BD18000060B944AE13394FCA7FD6E644C35A + 483D5310DF742633EE02AC2DDC7ABBF8EABFDEEB01000096533FE7A9E743FD16 + CAF128E37E8E0105808D2B1769C8E324CD952D55BF76367B2EFCF65E0F0000B0 + 9CFA39CF6A0E54CF91A2E5F2B9326603E21BCF74940BB3ADAD5DF0977EFD95B6 + FF0300004BAD7F1BC095BDA89E17B5B7907A3649016032E32EBCDA828D962FF0 + FE82BFF89AE3BD1E000060B9F5739F32F1CFE390E2341E65DCCFD113DF6C2657 + 2ECE90C7498CD382CE17F66ADB738177FF030000CBAF9FFBACCF89D6E74CB9F4 + 9950C64C4801603ACA0599B790F7F13DEF2FEC4BAEB3FD1F0000E886C87D2207 + 2AF3A2BEBC2F5B483D9BA00030BE71175C6DA1464B8B7B757CE0B5B6FF030000 + DDD1CF81D6E746AB71C88F8D63DCCF759E02C0E46A8BABB638D35C7BDBBDFF5B + 7A3D00004037F473A07A7EB4B6E56A73A136C7100A001B971661BEE8F2B95A5B + 5BE9DABDF7AFF57A0000806EE8E740ED3952BD25B53926A000303DF9624C0BB2 + 7DEEABFF2BDBFF010080EEE9E742EB73A4D1736C9202C07836B2E0CA051B2DBE + DFFDB6E7A26FEDF5000000DDD2CF855673A37AEE34A98D7C4DE7C4379BF1A545 + 952FCA14D7C6ED6DCFB96FECF5000000DDD2CF85EA79D2FA16DAC621F58C4101 + 6073CA4557EBD7B70B2EBFD0EBFF0000804E8A5C2872A25AAED46F6154CF0628 + 004C4F2CC4D442DEAF6D07AEB3FD1F0000E8AE7E4EB43E57EACBFB7C9E4D5200 + 186DD8626B5B8C69BEDEF65CE0F57F00004077F573A27ABEB4DA4A6DF3C9B063 + F428008C2F2DA6DAA24B73E3B49DEEFF0700003AAD9F13453E5ACB99DA5A2E9F + 2B8FD1420160E36A8B2D2DC2BC85B563F7FF0300005DB69A13ADCD95D68EF3F9 + 90E27C8E0928004C47B9309398CBAB5A3B9B2B8FB9FF1F0000A09F1BADCD97FA + 7D291D67931400A62F2DCE7C91AEC6FB2F71FF3F0000C06A6E54CB9DF239A644 + 0160B8610BAE5C90693CACED6C76EDB5FD1F0000A09F1BE53B0086B5A41C9786 + 1DEB3C0580F1A445545B6CF95CED7329EE8F77ED510000000058CD8DD6E64CEB + E3D4A738A97D8E21140036A6B6C8CAB9E8D7B6F32FBBA8D9B1F3F25E0C0000D0 + 6D911B458E54E64DFD16CA3ED4E6189302C0E6C5C2CB1761DB784773F16B5DFD + 07000048FA39D2DABCA9AF6DCC2628006C5CB9F86A8B736DDB7BE175BD1E0000 + 80D0CF91EAF9535F1E27E598312900B41BB6A8CAC5987FB676ACDFF6ECB30300 + 000020D9794EDC22BD3E77EA4B7D1876AC34EC58A729008C962FB0711659DBE7 + 76343B775F3188010000D8B337ED0028E57955ED7832EEE7E85100985C6D7195 + 73D1AF6F3B775EDBEB01000008FD1CA99E3FF5957DA8CD31060580CD8905972F + BEB671BC01E08266C7AE0BE2000000003D912345AE54E64F7D6D6336480160FA + EA8BF4E2D77A0020000040A99F2BADCFA156C74C8902C0C6940BB15CA0EBFB5D + BB2F1CC400000024FD5CA93D975A6DB972CC181400EA862DA6742C2DC2B6CFAE + 3DBEF7426F0000000028ADE64A6B73A8F5CAE36D9F0BC38E759602C070F9C21A + 6771A5CFE59FED8F77EE8ED75B000000B056FE0C80248DD35C7EAC34EEE73A4F + 016032B54555CEE5FD6AAC00000000B0DEEE736307403D8FAAF7A136C7080A00 + 1B170BAD6DB1A563AB9FD9F18A3700000000B45B9F47AD37EC182328004CC7E8 + 45BAF3DC78BF25000000B95DE77C73EF7FB6E752C3732D26A000305DF9E2CC1B + 000000C3D572A9684C8902C0E4CA05582ECCF5C70F7EDD158318000080523F67 + AAE55AA94F2D578E1941016073DA16DCDA057AEEA51E00080000D06635675A9B + 4BADD736CF181400D61BB6A0D2B1B60559FFDAB343FF4D0000806E6BCF99DAF2 + AE343F2CD71A76AC931400366FD8C28BB91DCDEE3DE7F787000000ACD3CF99FA + F9D37AC3722E26A000305ADB22CCE5C7D3E7D3DC8E66EF05D70D620000004AFD + 9C6935875A9B53853CAE293F4F850240BB72F1D416D3A8CF5880000000E3DB48 + 8E250F1B9302C0E4D2626A5B54319F1A00000093199553A57939D784140036A6 + 5C68C316270000001B57CBB7E45F1BA000B079A3169E85090000309ADC6A8B29 + 006CADFE02DD75CEEB577A0000002AF65C3E0824F95B480160BAF2C5BA1AEFD8 + E535800000006D76EFBE6C10857A5EC5A629004C4F5A98D15BB00000009329F3 + A83496534D890200000000748002C0E6E455A91A952A000080F18DCAAFE4589B + A000000000001DA0003099B66A539ACF8FAB4C0100004CAE9657B5E557F2AE09 + 28004C5F2CC062119EB5280100005AADCB992A79159BA500000000001DA00000 + 0000001DA000000000001DA000000000001DA000B071E33E90C2832B00000046 + 93636D310500000000E8000500000000E8000500000000E8000500000000E800 + 0500000000E8000500000000E8000500000000E8000500000000E80005000000 + 00E8000500000000E8000500000000E8000500000000E8000500000000E80005 + 00000000E8000500000000E8000500000000E8000500000000E8000500000000 + E8000500000000E8000500000000E8000500000000E8000500000000E8000500 + 000000E8000500000000E8000500000000E8000500000000E8000500000000E8 + 000500000000E8000500000000E8000500000000E8000500000000E800050000 + 0000E8000500000000E8000500000000E8000500000000E8000500000000E800 + 0500000000E8000500000000E8000500000000E8000500000000E80005000000 + 00E8000500000000E8000500000000E8000500000000E8000500000000E80005 + 00000000E8000500000000E8000500000000E8000500000000E8000500000000 + E8000500000000E8000500000000E8000500000000E8801D839E55E97B92F7A9 + 45C124F5BBB23EB5DD95B6A779C35B7EB5D9B5F7865E0CD0EAE84DB734070F1E + 1C8C9885E79E7BAE79E0BE8F350F3FF4E0600600D816675EBCABB9F7777FB017 + 9DEEB5972BED4CD65EC9FAB38371F4A985B2A72725B9AC4ADF93BC4F4D010098 + BAFDFBF7373FF6936F6FAEBAFA9AC10CB31645805FFAC59F5F29080000DB4001 + 6026228105601B7DF7F77C9FE47F9B5D7BDDF5CDDF7BEB0F0F460000CB490100 + 609B1DBAE19B0711DBE970EFE710BB31000096950200C0369374CE8F4337BC71 + 1001002C1F05000018387CC46E0C006079290000C040DC0670E0E0A5831100C0 + 72510000804C140100009691020000648E1EBB791001002C17050000C8C42B19 + DD0600002C23050000281C3F71EB200200581E0A00005038EC758000C0125200 + 00D846B1DD9CF973E0E0413F1B0060E92800006CA37DFBF70F22E6CDF113B70D + 220080E5A00000001587BC0E100058320A0000DBC8D3E6E7D7FEFDFB9BC38A00 + 00C012510000D846070F1E1C44CCA3C3473C0C1000581E0A0000D0E2E84D37AF + EC04000058060A0000DBE8DAD75F3F88985787BC12100058120A000030C4E123 + 9E0300002C070500806D74A577CDCFBD7810A087350200CB400100601BB9BF7C + 31781B0000B00C140000B6C9B5D7B9FF7F511C3D76F3200200585C0A0000DBC4 + D5FFC571D5D5D7B80D000058780A0000DB24924A16C78D37D90500002C360500 + 806D72E5550A008BE4E8B15B061100C062520000D826070E1E1C442C82F879D9 + B501002C320500806D10F7FF4B26178F870102008B4C0100601B1CBAE18D8388 + 4572F426B70100008B4B0100601B1C3EE2BDF28B28766E1CBEC1CF0E00584C0A + 00003326895C6C878FD8BD01002C2605008019B3FD7FB11DBAE19B578A380000 + 8B46010060C66CFF5F6C91FC2BE200008B48010060866CFF5F0E8A3800C02252 + 00009821578E97431471DC0600002C1A0500801972E5787978252000B0681400 + 0066C8F6FFE571F4D8CD8308006031280000CC88E47FB95C75F535CD8183970E + 460000F34F01006046BC3F7EF928EA00008B4401006046E2FDF12C97E3276E1B + 440000F34F010060063C357E391D387870E55600008045A000003003B6FF2F2F + 0F03040016850200C0168B2BFF476F92242EABC33728EE00008B410100608B1D + 92202EB5B80DC0C300018045A00000B0C50E1F911C2E3BB77800008B40010060 + 0BC5F67F5787979F373C00008B400100600BD9FEDF0DFDE73CDC32180100CC27 + 0500802D74FCC4AD838865E7560F0060DE2900006C9103072FF58EF80E895B3D + 62270000C0BC520000D822EEFDEF1EB77C0000F34C0100608B1C3DE6DDFF5DE3 + 960F00609E2900006C01DBFFBB297EE6F1B3070098470A00005BE0C69B5CFDEF + 2AB77E0000F34A0100600B1C3DE695705D75FCC46D83080060BE2800004C597F + 1BF8C1C188AE899FBDDB3F008079A4000030651EFE87350000CC23050080293B + EC55709D670D0000F3480100608A6CFF27C41AB8F6BAEB07230080F9A0000030 + 451E004772A30741020073460100608A0E79051C03D60200306F140000A624DE + FFBE7FFFFEC188AE8BB5106B0200605E2800004CC9E1231EFCC65A47DD060000 + CC1105008029B1E59B925D2100C03C5100009882A337DD22D1A3EA9057020200 + 73420100600A0E1F71F59FBA1B8FDD3C880000B6970200C02675FD616FCF3DF7 + 5C73E7076E1F8C285D7BDDF5CD8183970E460000DB4701006093BABEC5FB81FB + 3ED6BCEFBDEF1E8CA8F1360000601E2800006C52D7B7FF3FF2F083CDC30F3DB8 + B21380BAA36E030000E6800200C02678D77BD3DC7FDFC756FA7BEEFAC84ACF7A + 575D7DCD4A0300D84E0A00009B104FFFEFBAB80520DC7F7FBFA7CE2E000060BB + 2900006C42D793BAD8FA9FDC73D78707113587BD0E1000D8660A00001B144F76 + EFFAB6EE471E7A6810F5DF0690170458EBC0C1832B6F040000D82E0A00001BE4 + C9EEEBB7FDDF73B7E7000C73E331B78C0000DB4701006083DCD31D3B00D65EF1 + 3FE94180431D52340200B6910200C006D8FE5FDFF2EF7580C3796B0400B09D14 + 000036E0F8895B075177A5A7FF97BC0E70B8C3473C0C1000D81E0A00001BE089 + EE4DF3C8C3F507FE791DE070476FBA7965270000C0AC2900004C28B6FEC713DD + BBEEFE961D006D3B03587548010900D8060A000013F2F0BFBEB644FFF1538F79 + 1DE008878F780E0000307B0A000013B2FD7FF4557EBB00868B0701C683240100 + 664901006002FDC4CDF6FF0746DCE77FF26E0F021CC5DB000080595300009880 + 27B8F7B5DDFF9FC40E00AF031CCEAD2400C0AC2900004CE090ABB62BC6D9E2EF + 3680E1FA0F93741B0000303BBB063DAB7654FA5A8BE249EA87B55DCDA56FF86F + 9A9DBB2FEBC5C0028B2DDB37DE74CB60D45D91D8DF79C7ED8351BB8B2EBEB8F9 + FA6FFCA6C188367FF5971F1D4400B317AF25FD9AD77DED4A4132B528507ECB9B + 8E36AFBFEEFA352DE65F3E7DBA79FAA9A7065F0D5374F6CCA3CD63F7FEBB5EF4 + 4A4B3BDBD242EA19211258D64ADF93BC4F2D12FAD447F124F5A9EDAEB43DCD1B + DEF2ABCDAEBD37F46260817DFF5B7F78E51DEE5DF7EFFFE0F79A3FFCFDDF1B8C + DAC51F913FF3CE9F1F8CA879FCD4A9E6A77EE247072380E98BA47D5F2FC98F04 + 7EDFBEFD2BE3706D6FBC5127EFFA48F39BEFFA65B77A315D675EBCABB9F7777F + B0179DEEB5972BED4CD6A22090FA48FECB0241287B7A5292CBAAF43DC9FBD414 + 00A0A3E20AC93BDEF90B2B7DD7FDDCCFBE63ECEDFD3FD3FB9E7968E270FFE4A7 + DFEEB589C05444521F09FE55575DD35C79F5D55F49F6B74214017EE917157999 + 2205809988041680110EDDF046C9FFC024F7F69FBCEBC3838836C74FDC368800 + 2613B7A67DF7F77C6FF3E33FF9F6E6977FFDB756FA18C76EB5AD4CFE43FCB7B7 + FABF014C9F0200C0180E1FF1F0BF30E983FD46BD2E100F9604C617B7561DFFB6 + DBBE92F0FFFD1F79DBCA7833DBF93763BBFEBBC0C6A56DEEAC4ADF93BC4FCD2D + 00D04171E5FFE7FFC5AF0C46DD36EEFDFFB9F82395E1621B6D6CA785E4E84DB7 + 34377A55E4CA73324EDEFDE14E9F1F71953D5E1B7AF88637CEDD2D551BF9FF09 + D0CA2D003391925C56A5EF49DEA7A600001D147F887FFF5B7F6830EAB68DDCAF + 1E57AA5C251AEECE0FDCDEFCC6BB7E7930A2EBE28A6E6CE36655FCDEF9CD77FD + 4A679E971157FA638B7DDC2234CFCF51510060AA1400662212580086B0FDBF2F + 9EF6BC913FBE4FDEEDCAF628711B80674C90782EC47A7115FCC77EF2ED4B7FCF + 7924FDB1AD3FDEA01245200F5105A64D01006088741586C9EFFF4F36FA755D12 + C97F3C681282A4AF2ECE9328022C5BB12CFEEFF9DBDFFE1D2B6F4D89E4DFFFCF + 01B6920200C010FE105BB5D12BF9B16B20EEE365383B4D60B44896BFFB7BBE6F + 305A6C5160FEFEB7FEF0CA3366FED6DFF90E851F60261400008688072FD1B799 + 2BF976018C16C5A665BBB2C9C6385F868B57DC2DF2B99212FFD8E61FFFB700CC + 920200408BF823CD3B8EFBE20AFEE3A71E1B8C26174FF166B478E024305A3C28 + 71D148FC8179A00000D0C2F6FF5527EFDA5C02EF8AE678EC38213C70BFF36594 + BFBE400F4A8CDD0A127F605E280000B4F024EE559B4D48E20D028A00A3C58E93 + B84A080C1749F5BC1769E37FC778B8DF3BDEF90B127F606E28000054F413310F + 644A4EDEB5F957F9791DE0786E942874DEFD8A6563397C647EDF9C11B7F344E2 + 1F0FF7F36C0F609E28000054D88ABD6A1AC97FB003603C478F790E008CE3D01C + EE00B8F6BAEB9B7FF88FDFD17CFF5B7F48E20FCC250500808AC3DEC9FE15D3BA + 1FD9EB00C7133B4F3C7CB2DB9C27E389047B5ECE95F8DF25EEF3FFF19F7CBBF3 + 17986B0A000005DBFFD79AD60E806017C078EC40E9B6CDBC71A36BE28AFB768B + 3712B8CF1F58140A000005C9D7AACDBEFEAFE47580E3F13A4018CFB5AFDFBE02 + 40148B63BBFF777FCFF7DAEE0F2C0C05008082E46BD5665FFF57B203603C914C + 780D65B73957C6B35DDBEDE3E9FE91FCDBEE0F2C1A0500804C245DAEE4ACBAF3 + 8EDB07D174C4EB00A7794BC1329BE7279CC3BC88DBB566F9EACC74D53F9EEE0F + B0881400003292AE5591ACC783FBA66D5A0F155C76F18473C5A8EE8AF38FF15C + 75F5D583686BC5BDFEAEFA038B4E010020338FAF95DA2EF76CD1957A3B00C613 + C9FF216FA3E8AC471E9E7EF16D596D75421EE7623CDD3FEEF50758740A000003 + B6FFAFB5550FEC8B870A6EC5CE826574F88882148C72E5555B570088FFBF104F + F89F87B70D004C830200C080EDFFABB6FA5E7D0F381B8FA25477B905607C5BB5 + 0320AEF8FFFD1F799B7310582A0A00003DF1079E7738AFDAEA047DDA0F175C66 + 6E03E826BB64C6170F029CA6B4E53FEEF90758360A00003D92ACB54EDEBDB5F7 + E94772F3F8A9538311C31C3F71EB2002DA4C6B8B7EEC26B0E51F58660A00003D + EEB55EEB9EBBB6E6FEFF9CDB00C61309C92C5F73068B681ADBF48FDE74CBCA53 + FE6DF90796990200D079F1C75EDC6B4D5FDCFB3F8BFB8FB7EA2183CBC8FAEC1E + 3B6426B3D9E700C4FDFEDFFFD61F1A8C0096970200D079B6FFAFB5D5DBFF9359 + 151A96C1F113EE45EE9A785B06E33B706063BB64A2001C0FFA73BF3FD0150A00 + 40E7B9C77AAD596ECD771BC078E221675BFDAE7358641B79106024FF3FF6936F + B7C306E8140500A0D3E2DE6A89D5AAFEC3F96677E57156BB0D96C1D163DE5201 + D312BFF723F9F7FB1FE81A0500A0D35CF9596BD6AFE79BC5C30697C561B7AA40 + AB499EDA2FF907BA4C0100E8345755D78AFBF267299E0130EBFFE6A28A2DCE0A + 56DD123B7298AE94FC7BD23FD0550A004067D9FEBF563C757C3B1E3CE63680F1 + 1D3E621740973CEF21995325F9075000003AECC69B5CFDCF9DDCA6EDF81E0438 + BE43760040AB6105DDD83D23F9075000003AECE8B15B061161D6F7FF27B1EBC0 + 56E7F144F272F426EB166AF6B524F791FCC7ABFE24FF000A004047C595A28DBC + 366A59C5BDF8DB99846F57F161111D3E6217008C2B7ED7FFBDB7FEF060048002 + 00D0491EFEB7D63DDBFC203E0F021C5F5CCD7425134673CF3FC07A0A00402779 + A5DA5A27EFDEDED7F1B90D603287AC5F58277F0680E41FA04E0100E81CDBFFD7 + 9B872BF06E0318DFF113B70E222049C9BEE41FA09D0200D039C74FDC368808F3 + B2FDDEDB00C6D72F625D3A18B1AC1EB8DF3931A948FAFFDE5B7F48F20FD04201 + 00E81CAF525B6B5EDEC31FB7003C7EEAD460C428F12C0060D5BE7DFB57AEFCE7 + B70200B0960200D0291EA0B6DE3D776DEFFDFFB99373F4BFCBBCF3204B58EBF8 + B7DD26F90718410100E894C3473C3C2D1757DDE31580F3C27300C617898E6407 + 0098840200D029B6FFAF356F09B7DB00266317000030090500A0338EDE748BED + FF85797CFFBEDB00C6E7759600C024140080CE387CC4D5FF5C5C698FF7EFCF1B + 4F3E1F5FBCCEF2DAEBAE1F8C0000865300003A21AEFC7B6AFA5AF37AA53D7625 + CCD37309E6DD8DC76E19440000C32900009D70C856E975E6F9817BF7CCE1AD09 + F3CA732D0080712900009D60FBFF5A71853D1EB837AF4EDEED3900E3B2BB0500 + 18970200B0F42448EBCDFB15F6797C38E13C3BEA360000600C0A00C0D28BA7FF + B3D6225C615704185F14B8BCE1020018450100587ADE95BEDE2224D727EF5600 + 9884E75C2C9F79BE4D0780C5A400002CB503072F6DAEBAFA9AC188B02857D6EF + 99D3B714CCAB1B15BA968EB76100306D0A00C05273EFFF7A8B72653D929F07EE + FBD860C428D75E77FD4AC10B00A08D0200B0D46CFF5F6F91AEACBB0D60320A5E + 00C0300A00C0D2B2FD7FBDB8A77891B6157B10E06414BC008061140080A575FC + C4AD8388E4CE3B6E1F448BE1F1538F7910DA04A2E0E5360000A08D0200B0B40E + 7B2AFA3A8B7845FD1EB7014C44E10B0068A300002CA5FE95D0838311E1F153A7 + 56AEA82F1AB7014C46E10B0068A300002C25F742AF7772415FAB17B70044F182 + F144E1CBB32F96C3F35E0308C0942900004BC955D0F516EDFEFFDCA2162FB6CB + F113B70D221699E75F00306D0A00C0D28957A1D9FEBF565C415FE464C2EB0027 + 73C8EB0001800A050060E91C3EE2EA7FE981FB3E36881653FCEFBF48AF2FDC6E + FBF7EF5F29840100E4140080A5E3EAE77A27EF5EFC2DF4F77818E04414C20080 + 920200B054E2AA675CFD64555C395F8627E92F431163968EDE74B37301005843 + 0100582AAE7AAEB72C57CEBD0E7072873C0C1300C82800004B23AE76DAFEBFDE + FDF72FF6FDFF394580C91C3EE27C0000562900004B23AE76DAF2BCDE3D4BF40A + 3D6F03984CFF8D18970E460040D72900004BC3D5CEF5E28AF9323D3D7F998A19 + B3E26D000040A200002C05AF3DAB5BB62BE6CBF240C3593A7AECE641C4227AF8 + A1070711006C9E0200B0143CECAC2EDE9FBF6CDC063099ABAEBEC66D000BECF9 + 25DAC103C0F65300009682EDFFEBC595C3C74F3D36182D0FB7014CEEF8895B07 + 1100D0650A00C0C28BAB9BB6FFAF77E71DB70FA2E512B701D8163D99C376C800 + 003D0A00C0C293FCD72DF3BDF2CB5ADCD82A070E1E5CB91500609A96E921B3D0 + 150A00C0C2F390B3F59675FB7FB28CCF36D86ACE1360DA3C9415168F0200B0D0 + 62FBBF2B9BEB2D7B82DC2F709C1A8C18C7D19B6E1944009BF71BEFFA95A52E34 + C3B2DA31E85995BE27799F5A144C52BF2BEB53DB5D697B9A37BCE5579B5D7B6F + E8C5C0941DFFB6DB9AEFFE9EEF1D8C48FEC94FBF7DE9EF938F9F7BFCFC19DF2F + FDE2CFBB62B7607EFC27DFDE5C7BDDF583118C2FFE7F40FE168907EEDF5861F8 + C0814B576E230A2BC5D7C74FADFC1E91FC3375675EBCABB9F7777FB0179DEEB5 + 972BED4CD65EC9FAB3599F5A287B7A5292CBAAF43DC9FBD4140060CEFCCC3B7F + E12B7F98D01757C67FEA277E74305A5EF1EC87BFFF236F1B8C18C79D1FB8BDF9 + 8D77FDF260C4225000A026EEBD7FA4978CAF24F9CFF71F8C1A73F1FB5F62CEC2 + 5200988994E4B22A7D4FF23E3505009823B1F5FF1FFEE3770C4624EF7BCFBB9B + DFF9EDDF1A8C96DBCFFF8B5F69F6EFDF3F18314A24086FFF891FF5E0AE05A200 + 40DCD21509FEC30F3FB492DC7B060A4B4B01602622810558481E6A56B7D16D9E + 8BC81FC2938962C921AF0484B915897E7FA7CEAFACDCCAF5C33FF0BDCDCFFDEC + 3B568ABA777EE0FD7EE7019BA600002C2CEF36AFEBD21F8827EF763FFBA40E1F + F1DA4C981791F0C7AEAD783EC7DBFE871F5A49FAE3369D48F6E318C0B4290000 + 0B29B6FFBBF77FBD48FEBBB4BDFB9EBB3E3C8818573C3BC16D13B03DE21EFDB8 + C29F27FC71753F1EAAE7D61C60161400808564FB7F5DD7AE88C71FCCB6C44ECE + 2B016176E24AFEBFFF83DF5B49F6E301AD71855FC20F6C17050060214960EABA + 980CBB0D60720A68B0B522E98F2BFB3FF5136F5B49FCFFF0F77FCF967E602E28 + 00000BC716E6BAD85ADAC53F30BDD77E72FD5B682E1D8C806988DFC179D21FF7 + F67B251F306F1400808573F88887FFD574752B7CFC81EDCADAE46EBCC92E00D8 + ACD8C61F897EDADE2FE907E69D0200B0700EDDE029E63527EFEEEE03F1EE711B + C0C48E1E731B0D6C54145CE3557DF120BFB8EAAF08092C0A050060A1D8FEDFAE + CB0FC3731BC0E4E22D1A712B00309EB8DA1F4FF08F2DFEF16EFE78551FC0A251 + 0000168AEDFF7591FC77F989D271F52DEEBF65321E0608A3A57BFBDF3E7882BF + 2DFEC02253000016465CF93FEABEE52A4FC28F5D00DDBD0562A3BC4D03DA45E2 + 1FDBFCD3BDFD5EDB072C03050060611CBAC1D5FF365DDEFE9FDC79C7ED838871 + 45512D6EAB0156E589BF6DFEC0B251000016C6E12312959AF863D503A8FAB701 + B8423739B7D5409FC41FE80205006021B852D9CED6F755F77818E0C4BC5583AE + 93F8035DA200002C04DBFFDB3D70BFEDFF49975F85B851FD676B781600DD23F1 + 07BA4801005808C74FDC3A88C8C59677AFC05B15DF0BB7014CCEED357449FC8E + F8F77FF07BCD3FF9E99F92F8039DA30000CCBD03072FF5BEF2161EFEB79EDB00 + 2617B7D7C44E0058765124FC273FFDF6E60F7FFFF7140B814E520000E69E7BFF + DB79FDDF7A6E03D818B7D9B0CC62BBFFCFFDEC3B9A5FFAC59FEFC5DEE30F7497 + 020030F78E1EF3EEFF36F77800E03A6E03D818B7D9B0ACEEFCC0ED2BDBFDED98 + 02500000E69CEDFFEDBCF6AE9DDB002617E7599C6FB02CE2F7633CE4EF37DEF5 + CB7E57020C28000073EDC69B5CFD6F73E71DB70F224A6E03D818B7DBB02C22E1 + FFDF7FF61D1EF20750500000E6DAD1635E4FD6C6D3FFDBD9EABB31C74FDC3688 + 6071C5EEA878D05FF400ACA50000CCADFE96E4838311B9F8C3D683ACDAC5D53F + 0592C9C5F9E6961B16DD6FBEEB57FC7E0468A10000CC2D0FFF6BE70AF76877DE + 61EBEF4638EF5874AEFC03B4530000E6D661AF256BE5FEFFD1BC0D60639C7700 + B0BC140080B964FB7FBB789FB52B5CE3F13680C9C579E7618000B09C140080B9 + E46164ED4E7AF7FFD8BC0D60630E1FB10B00009691020030970EB902D9EAE4DD + AE6A8FCB6D001BE3FC0380E5A40000CC9DD87EBC7FFFFEC1885C24B31E003819 + B7014C2ECE3FB70100C0F2510000E68EEDC7ED24B393731BC0C61C3D76CB2002 + 009685020030776C3F6E27999D9CDB0036C64E1C00583E0A00C05C397AD32D92 + 8E1691C44632CBE4EC9CD898435E0908004B450100982B878FB8FADF4612BB71 + 764E6CCC8DC76E1E4400C032500000E686078F0D2789DD38B7016CCCB5D75DDF + 1C3878E96004002C3A0500606ED86EDCCEF6FFCDB383626314E5006079280000 + 73C3F6FF7692D7CDB38362638EBA0D00009686020030176CFF1F4EF2BA790FDC + F7B141C424AEBAFA9A9506002C3E0500602EC4D3FFA9B3FD7F3A7C1F37CE2E00 + 00580E0A00C05C9060B4B3FD7F7A4EDEED7BB911873D9F030096820200B0EDE2 + 29E3B618B7B3FD7F7AEEB9CBF772230E1C3CB8F246000060B1290000DBCEBDFF + ED6C5B9FAEF87E7A16C0C6DC78CC6D3A00B0E81400806D67FB7F3BDBFFA7CF6D + 001B7348A10E00169E0200B0AD6CFF1FEE8377BC7F10312D76546C8C377500C0 + E2530000B6D5F113B70E224A8F9F3A65BBFA1678FCD4632BDF5B2677D46D0000 + B0D01400806DE5E9E2ED4E7A60DD96F1BDDD98D801103B010080C5A400006C9B + D8FA1F4F17A7EECE3B6E1F444C9BE7006CDC21453B0058580A00C0B6F1F0BF76 + B145FDE1871E1C8C98B6B8B522DE08C0E40E1FF11C000058543B063DABD2F724 + EF538B8249EA77657D6ABB2B6D4FF386B7FC6AB36BEF0DBD18C8FCCC3B7FC10E + 8016777EE0760F00DC62DFFD3DDFEB01941BF4533FF1B6956729B0F57EFC27DF + DE5C7BDDF58311E3F8E11FF8DE41042C94332FDED5DCFBBB3FD88B4EF7DACB95 + 76266BAF64FDD9AC4F2D943D3D29C96555FA9EE47D6A0A003025712FF1DFFF91 + B70D46C022F99DDFFEADE67DEF79F760C4565200989C02002C28058099880416 + 60E60E1F711F312C2AB7EF00C062520000B6C521EF138785D57F80E7A5831100 + B02814008099F32A31587CC74FDC3A88008045A10000CC9CEDFFB0F80E7B1D20 + 002C1C050060A6E2CABFEDFFB0F8E20D1EDEA200008B45010098A94337BCD1F6 + 7F5812C74FDC3688008045A00000CCD4E123AEFEC3B2B09B0700168B02003033 + 71E53F1E00082C07E734002C160500606662FB3FB05C3CD41300168702003033 + B6FFC3F2397AD3CD9EEB01000B420100988903072FB555189694DD3D00B01814 + 00809990FCC3F2B2BB0700168302003013478FDD3C8880651305BED8E50300CC + 37050060CB456270D5D5D70C46C032B2CB0700E69F0200B0E52406B0FCECF201 + 80F9A700006CB9E3276E1B44C0B28A5D3E6E030080F9A600006CA97E52707030 + 0296D98D37D9050000F34C0100D852B60543771C3D76CB200200E6910200B0A5 + 0E7B3F387446ECF6F1C04F00985F0A00C096B1FD1FBAC7AE1F00985F0A00C096 + 910840F71CBDC96D000030AF1400802D231180EED9BF7FBF577F02C09C520000 + B6442400910800DD73F888677F00C03C520000B6840400BAEB90022000CC2505 + 00604B440200745324FF87BC010400E68E02003075B6FF03878F280202C0BC51 + 0000A6CEF67F40211000E68F02003055F107FFD19BBCFE0FF026100098370A00 + C054B9EF17488E1E530C048079A200004C95FB7E81E4AAABAF690E1CBC743002 + 00B69B02003035B1FD3FEEFB0548FC4E0080F9A100004C8DEDFF40E9F889DB06 + 1100B0DD140080A9397EE2D64104D077E0E0C1955B010080EDA700004C45DCE7 + EB8F7CA0C6C30001603E28000053E13E5FA0CD61B70701C05C500000A6C2153E + A04DDC06A0480800DB4F0100D834DBFF81510E1FB10B0000B69B0200B06937DE + E4EA3F30DC213B000060DB2900009B76F4D82D8308A06EFFFEFDCDD19BFCAE00 + 80EDA400006C4A6CFD8FFB7B0146397CC42E0000D84E0A00C0A678F81F30AE78 + 1060EC040000B6870200B0295EEF054CE290DF1900B06D1400800DB3FD1F98D4 + F113B70E220060D61400800D3B7EE2B64104309E7EE1F0D2C108009825050060 + C3BCD60BD88878160000307B0A00C086789817B051760F01C0F650000036E4F0 + 110FF20236269E1D12B7020000B3A500006C88EDFFC06678852800CC9E020030 + B1A337DD62FB3FB0295E210A00B3A700004CECF01157FF81CD89DB00AEBDEEFA + C1080098050500602271E5DF13BC8169B8F1D82D830800980505006022876CDB + 05A6C4B3440060B614008089D8FE0F4C8B1D4500305B0A00C0D8FCB10E4CDB51 + B70100C0CC280000638BA7FF034C531415BD55040066430100189BF776035BC1 + B345006036140080B11C38786973D5D5D70C4600D373A3E22200CC8402003016 + F7FE035BE5DAEBAE5F293202005B4B0100188BEDFFC05652640480ADA700008C + 64FB3FB0D514190160EB290000231D3F71EB2002D81A516454680480ADA50000 + 8C74D813BA8119B00B0000B696020030545C913B70F0E06004B075141B01606B + 29000043B92207CC4A141BE38D0000C0D65000008672450E98A51B8FDD328800 + 80695300005AC56BB96CFF0766E990D70102C0965100005A1D3EE2EA3F305BFB + F7EF5F293E0200D3A70000B472250ED80E8A8F00B035140080AAB8021757E200 + 66EDE84D37FBFD03005B60C7A06755FA9EE47D6A513049FDAEAC4F6D77A5ED69 + DEF0965F6D76EDBDA117C3C2F8FEB7FEF0CA1FE18CF6C07D1F6B7EEE67DF3118 + D165F104FB1FFFC9B70F466CC66FBCEB579A3B3FF0FEC1A8BB623D7933C2647E + F807BE7710010BE5CC8B7735F7FEEE0FF6A2D3BDF672A59DC9DA2B597F36EB53 + 0B654F8F1D00C03A71E5CDF6FFF19DBCFB238388AE8B62D0E3A74E0D466CC6E1 + 237E0701C0B4290000EB1CBAE18DB6DF4EE0E45D0A00AC3A79D78707119BD17F + 0BC9A5831100300D0A00C03AAEBC8DEFE1871E6C1E3FF5D860044D73E71DB70F + 2236CBDB000060BA14008035BC826B32923D4AFDA290DB00A6E1E831CF210180 + 69520000D688EDFF8CCFF67F6ADC06301D575D7D8DDB0000608A140080356CFF + 1F9FEDFFB4B133647A8E9FB8751001009BA500007C455C69B3FD7F7CF778FA3F + 2DDC06303D87ED4A0280A9510000BE42F23F19DBFF19C66D00D371E0E0C1955B + 010080CD530000BEC203B7C6175777E32A2FB479DF7BFF6410B159C74FDC3688 + 0080CD50000056C4F67F57D9C6E7EA2EA3C4F3211489A6E390DD490030150A00 + C00ADBFF27E3216F8CC33A990EAF270580E950000056D8623B3EDBFF1997E744 + 4CCFE1231E0608009BA500000CDEB57D70306214DBFF1997DB00A6276E03889D + 0000C0C62900001EFE3721DBBA9984F5321D91FC1FF24A4000D8140500C07BB6 + 27F0DC73CFB9A2CB44DC06303D878F780E00006C860200749CEDFF93B94732C7 + 84DC06303DF12040B70100C0C6290040C7D9FE3F999377BBFF9FC9BDEFBD7F32 + 88D8ACA337DD3288008049290040C7F9637A7CB1FDDF766E36E21E0F8E9C1A45 + 4B00D8380500E830DB692763FB3F1BA578343DFDDB962E1D8C00804928004087 + 79AFF6646CFF67334EDEAD00302D37DE641700006C8402007458BC579BF1B882 + CB66B90D607A8E1E73EB12006C8402007494EDFF9379E0BE8F0D22D81845A4E9 + 893797C4AD0000C0641400A0A36CFF9F8CEDDB4C8375343D1E06080093530080 + 0E8A2BFF47DD433B11DBB79906EB687ABCC1040026A700001D74E80657FF2711 + DBB663FB366C96DB00A6270A99712B1300303E0500E8A0C347FCD13C09DBB699 + A63BEF78FF2062B3DCCA0400935100808E71D56C72B66D334D76944C4FBCC9C4 + C34C01607C0A00D031B6FF4F46B2C656B8C76D005311C9BFDF6900303E0500E8 + 98E3276E1D448CC3F67FB6C2C9BBED2A9916B73401C0F81400A0430E1CBCD4BB + B327F4C07D1F1B44303D76964C4FDCD2E4360000188F020074887BFF27F3F043 + 0F368F9F7A6C3082E9721BC0F4B80D0000C6A300001D72F49877FF4FE2CE3B6E + 1F44307D6E03981EB73601C0781400A0236CFF9F9CF7B5B395DC06303DF1BB2D + 7EC70100C329004047DC7893ABFF93B0FD9F59701BC0F4B8C50900465300808E + 387AEC9641C4386CFF6716DEF7DE770F2236EBF889DB061100D04601003AA0BF + 3DF6E060C4386CFF6716FA3B4D4E0D466C46FC8E739B13000CA700001DE0E17F + 938984CCF67F66E5E45D1E06382D7ED701C0700A00D00187BD226B22123266C9 + ED26D3E3771D000CA700004BCEF6FFC949C89825B7014C4FFCAEF330400068A7 + 00004BCE83B1261389582464304B769D4CCFE123760100401B05005872875C0D + 9B88448CED60D7C9F4F89D0700ED14006089C556D8FDFBF70F468C4322C67670 + 1BC0F4C4EFBCA33779ED2900D42800C012B3157632B6FFB39DDEF7DE770F2236 + EBF011BB0000A04601009698ADB093B1FD9FED74F2AE8F0C2236CBEE2700A853 + 008025155B60FD013C9907EEFFD82082D97BFCD46376A04CD121AF0404807514 + 006049D9023B99E79E7BCE1558B69D67504CCFF113B70E220020510080251457 + FEBD0B7B32F748FE99038A50D373D5D5D734070E5E3A1801004101009690ADAF + 933B79B7FBFFD97E6E03982E855000584B01009690EDFF93B1FD9F79E23680E9 + 397AECE64104000405005832B6FF4FCEF67FE68962D4F4C46D00D100803E0500 + 5832F1F47F2663FB3FF3246E0378E03E6FA49816BB0000609502002C197FEC4E + 4EB2C5BCF9A0DB00A6E6B067A200C0572800C01289275EDBEE3A99D86E1DCF00 + 807972CF5D76A54CCB8183079B6BAFBB7E3002806E53008025E2DEFFC99DBCDB + FDD6CC1F0FA69CAE1B8FB9350A008202002C11DBFF27E74A2BF34A716A7A0E29 + 8E02C00A05005812B6FF4FCEF67FE699E2D4F4783B0A00F42900C092387EE2D6 + 41C4B85C61659EB90D60BA8EBA0D00001400605978D2F5E45C6165DE29524D4F + EC00889D0000D0650A00B00462EB7F3CE99AF1C5ABFF6CFF67DE29524DD72185 + 52003A4E0100968087FF4DCE9555164114A9EEFCC0ED83119B75A3DF9500749C + 02002C01DBFF27E7DE6A16C5C9BBED0298966BAFBB7EE581A900D0550A00B0E0 + E2BE56DBFF27F3F0430F368F9F7A6C3082F9E66D15D3E56D0000749902002CB8 + C3475CFD9FD49D77D852CD62B9C78E95A971CB14005DA600000BEE90AB5913B3 + FD9F45E33680E9E93F34D56D0000749302002C30AFB59A9CEDFF2C22B7014CD7 + F113B70E2200E81605005860B6FF4FEE1E4FFF6741B90D607A3C381580AE5200 + 80051557FE6DFF9F9CEDFF2C2AB7014C4F3C38356E050080AE5100800575E886 + 37DAFE3FA1C74F9D5AB905001691DB00A6EBF889DB061100748702002CA8C347 + 5CFD9FD4C9BB5C4165B1DDF981F70F2236CB0E2A00BA48010016505CF9F72EEB + C979FD1F8BCE1A9E1EBF4701E82205005840B1FD9FC9D8FECF32E8BFC5E2D460 + C46679902A005DA300000BC8F6FFC9D9FECFB2B096A7E7E84D377B960A009DA2 + 00000BE6C0C14B6D5BDD005BA75916D6F274D9510540972800C08291FC4F2E9E + 9C6EFB3FCBC26D00D3654715005DA200000BE6E8B19B0711E3BAC7BBFF59326E + 03989E28AAC6CE2A00E80205005820F147EA55575F331831AE93774B96582E6E + 03982E3BAB00E80A05005820FE489D5C6CFF3F6907004B266E03705BCBF4D859 + 0540572800C002397EE2B641C4B86CFF6759D905303DB1B3CA6D000074810200 + 2C88FE1FA8070723C665FB3FCBCACE96E93A7EE2D6410400CB4B010016842DAA + 93B3FD9F65F6F8A9C7DC06304587BD0E10800E50008005E18FD3C93D70DFC706 + 112C27B7014C4FECB0F2905500969D02002C80B837D5F6FFC99DBCDBD57F969B + 1D2ED365A71500CB4E01001680E47F63EEF1AE74969CDB00A6CB0E80C5F7F8A9 + 538308801A05006029C595D17806002C3BB7014CCF3CBE09C0EFB1C944510C80 + 760A00B0009EF707E044E20FE6DFF9EDDF1A8C60B9DDF981F74B12A7E4B9E79E + 1D44F3E3CE3BDE3F8818871D0000C32900C002882DBEB6F98E2725FFAE02D115 + B1E6FFF79F7D8722C0143CF2D04383687EC46EA63B3F6097C7B8FEF00F7E6F10 + 0150B36BD0B36A47A5AFB5289EA47E58DBD55CFA86FFA6D9B9FBB25E0C1BF657 + 7FF9172BDB535F73D9E583194AF187F26FBEEB579ABFFA8B8F0E66A01B9E7EEA + A9E6DEBFFCE8CAEF8779DCC6BE0822C9FE9DDFFE57CDE9D3A70733F3231E68BA + A3F717C795575FD3ECD9B367304B2E8AE4BFFA7FFE8BE611C572585C67CF3CDA + 3C76EFBFEB45AFB4B4B32D2DA49E11228165ADF43DC9FBD422A14F7D144F529F + DAEE4ADBD3BCE12DBFDAECDA7B432F86A9880755EDDBBF7F302278E51FF4EDEF + FD6E884491F1C42D568BB4C3CAEFFFF5FCFE872571E6C5BB9A7B7FF7077B5154 + 625FAEB433598B8240EA23F92F0B04A1ECE949492EABD2F724EF535300000000 + 983605809988041600000058720A00000000D0010A00000000D0010A00000000 + D0010A00000000D0010A00000000D0010A00000000D0010A00000000D0010A00 + 000000D0010A00000000D0010A00000000D0010A00000000D0010A00000000D0 + 010A00000000D0010A00000000D0010A00000000D0010A00000000D0010A0000 + 0000D0010A00000000D0010A00000000D0010A00000000D0010A00000000D001 + 0A00000000D0010A00000000D0010A00000000D0010A00000000D0010A000000 + 00D0010A00000000D0010A00000000D0010A00000000D0010A00000000D0010A + 00000000D0010A00000000D0010A00000000D0010A00000000D0010A00000000 + D0010A00000000D0010A00000000D0010A00000000D0010A00000000D0010A00 + 000000D0010A00000000D0010A00000000D0010A00000000D0010A00000000D0 + 010A00000000D0010A00000000D0010A00000000D0010A00000000D0010A0000 + 0000D0010A00000000D0010A00000000D0010A00000000D0010A00000000D001 + 0A00000000D0010A00000000D0010A00000000D0010A00000000D0010A000000 + 00D0010A00000000D0010A00000000D0010A00000000D0010A00000000D0010A + 00000000D0010A00000000D0010A00000000D0010A00000000D0010A00000000 + D0010A00000000D0010A00000000D0010A00000000D0010A00000000D0010A00 + 000000D0010A00000000D0010A00000000D0010A00000000D0010A00000000D0 + 010A00000000D0010A00000000D0010A00000000D0010A00000000D0010A0000 + 0000D0010A00000000D0010A00000000D0010A00000000D0010A00000000D001 + 0A00000000D0010A00000000D0010A00000000D0010A00000000D0010A000000 + 00D0010A00000000D0010A00000000D0010A00000000D0010A001B7776D08F32 + EEE7000000BA4C8EB5C5140066E1EC2BCF0C220000004A72A69950009885D32F + 3C308800000028C999664201000000003A4001000000003A400160FAE28114C5 + 43297C9B010000DAADCB992A79159B25339D4CDB024CF3F9718B1500006072B5 + BCAA2DBF92774D400160164E3F7DFF20020000A024679A090580CD896AD3B08A + 53FFD8CB2F7D79A507000060BDD59C69547E35EC38232800000000400728004C + 4FAA449555A9B3CD0BA73E378801000028F573A6B579D4EA389F67131400A6AB + 5CB07D8F7FE2D14104000040696DCE54CFABD8340580AD9516AB450B0000D04E + EE34030A009B376A81F68FBF72FAE32B3D000000ABCEBC78D7201A2FB762C314 + 0036A65C78311EB618CF36675F796610030000B0D6F07C6AFDF1619FA78502C0 + E4D2426B5B706971AE3D7EE6B4E70000000094CEBCF0C0204AEA39D5AA34DF76 + 9C160A00EDCAC5545B5CA33EB33A3EF3B20200000040E9CCD92F0FA2307E8EB5 + 6A9CCFD0A300305A2C9E510B283F9E3E9FE6FAF14B4F97552D000000FAB9D2FA + 1C6A751CF2B8A6FC3C150A009B9716596DB1AD2EC2974F7B0600000040693557 + 5ACD9FD64A73B5634C400160BD618B2A5F78B5CFB57DEDD9E6A94FDB01000000 + 50EAE74AEDB9D47A793ED6F67561D8B14E5200D89CB6059516E4EAF167BFF074 + 7376CDBD2D000000DD163952E44AABD6E7526BB5CD33060580C9950BAE5CA06D + C79BE69597EC02000000485673A43CA74AD2381D6B3BCE981400A62B5F98790B + 67BD0A10000020F3D28B1FEFFDCFD59CA9DE98120580E918B538FBC75E7E2116 + 37000000E1EC4B719174742ED57E9C0928006CDCB88B74F533CF3F75FF200200 + 00606D8E54CFA3D61A768C1114002693165ABEE0CAB9BC5F1B3FF5293B000000 + 00927E8EB43E77EA6BEB436D8E11140086CB17D5B085557E2EFFECEADCB35F7C + BA39EB39000000002BB951E44879CEB4AA9CCB8F95C6FD5CE72900D48D5A5CA9 + 4FADA676FC6C73FA8C5D00000000FDDC686DBEB43E87CA95C7DB3E17861DEB2C + 05808D2917535A8469BED6F7E3573C0810000020CB8D56F3A57A9F1F4FCA3163 + 500098BE7281E6E3B3CDB3A73E12930000009DD6CF8DD6E64B7DE598295100D8 + 9C618B341FAFCE7DEECF1400000000FAB9D1F0FCA93E6683140026972FBEA49C + 8BBEBDBD72DA6D0000004077F573A27ABEB4DA42D987DA1C635000182D5F5CC3 + 16D8A8CFA5F9B3CD8BCFDFB532030000D045FD9C6835475A2F9FAF1D4FC6FD1C + 3D0A00ED462DB2D4A796D48EE5AD695EFA9202000000D05DAB39512D678A1652 + 1F861D2B0D3BD6690A001B572EAA7231B6B7C71F5000000000BAAB9F13D5F3A5 + D516F23829C78C490160F36A8BB3365E9D7BF68B4F7B0E000000D049910B454E + 94E7486B5B681BB3090A001B932FC2A49C8BBE6CAF7C25F61C000000A08BD6DE + FFBF9A23AD6DA1EC436D8E3129008C275F64E542CBE76A9F4BF1DAB1E7000000 + 005DD4CF85D6E748EBC7A13697D43EC7100A00C30D5B44F9620B693CACAD56B7 + 1EFAC07FEEF5000000DDD2CF85D6E748C35B528E4BC38E759E02C0F4A505992F + CC5A7CB679E9D9F7AFCC00000074413F075ACD89FA6A713EC79428004C47DBE2 + 8CB9BCA215F1EAF8E5E7EEEEF5000000DDD0CF81EAF9D16A5C4AC7D92405808D + 4B0B305F886961E62DD4C75FFA84DB00000080EEE8E740EB73A3FA389F0F29CE + E7988002C0F8F2C5562EB834374E5BAD723DF1A9CF791D200000D00991FB440E + 54E645E3B75C3E571EA38502C068C31653BEE872697E747BE1C93FEEF5000000 + CBAD9FFBD4F3A27A2BB5CD27C38ED1A300303D6931A64597F7B5D6AF767DE913 + 1E040800002CBF7EEEB39A0BD55BC8FB7C9E4D5200D89CDA022DFB61ED15B701 + 0000004B6F75FBFF38DBFEC3A89E0D5000984CBEE8CAB8361EA7BDE236000000 + 60A9F5739E49EFF98F16DAC621F58C4101603C1B59546951E62D167CDEFAF36E + 0300000096D9EAF6FFF6BC686D9BD446BEA6731400A6A7B660C799F336000000 + 6079AD7DFA7FD9C2B8736C9202C0C6D516633E576B65756BB5EAF5EC63FFBAD7 + 0300002C977EAEB39AFBACCF89F271AD25B53926A00030B9DA62AB2DC234375E + 7BECAFFEB4D70300002C977EAE53CF83DA5BAE36176A730CA10030BE7117575A + 9CE9F3291E5EE97AF68BCF342F3DF31F7A310000C072881C27729D3CF7199E1B + 85FCD838C6FD5CE729004C476DA1A616F23E16775AE029EEB7673EFF47BD1E00 + 006039F4739CB579CFFABC28E47DD942EAD90405808DC917612D4E629C2FF0F4 + 997AFBDC7FB9AB397BE6F3BD18000060B1456E13394E99F7AC6F65CE944B9F09 + 65CC8414002633EE224B0B335F9CD1F22240C479EBCF3FFFC4EFF47A000080C5 + D6CF6D86E73F6BE390E2341E65DCCFD1A300303DB5055B6BE5825F3BFFE8DD6E + 03000000165F3FB7199EFFAC9F2F5B483D9BA400B071F962ACC5499A2B5B5AF0 + 6BDB738F3DED61800000C0428B9C26729B5ACED36FB51C295A2E9F2B63364001 + 6072E32EB6B440F3453A5E7BE2D36E0300000016573FA7A9E73BF516CAF128E3 + 7E8E010580E9AA2DDC5A4B15AFB20AD66F8FFDC5FDCD4BCF9FECC50000008B25 + 7299C8696AB94EBFE539D1B01652CF1428006C4EBE286B7192E6F2367CC13FFD + F0AFF57A000080C5D2CF65EA794EBFB5E542B97CAE8CD92005808D1967D1A545 + 5AB67CB1475C6F8FFEF9479A57BC12100000582091C3442E53E6376B5B2D372A + DB28E37C868202C0F4D4166B3E172D2DF072D1D7DBB35FB00B000000581CFD1C + A69EDFF4DBB0DC28B5A436C72628006C5E6D31E68B34C5E5B85CFCEBDB67FED3 + 1FD9050000002C84C85D228729F39AD556CB85428ACB71A936C7041400366ED8 + E22B176E5B2B4F84F5CD2E0000006011F473977A5ED36FA3F39F7E0BA9AF1976 + 8C211400A6235FA4B5384973A9A5C59F4E84F5ED33FFE98FED02000000E65AFF + EAFF1F4734A4E53950DE72F95C19B3490A005B2F2DDA72A1972740F4F5F6ECE7 + 7FBDD7030000CCA77ECE52CF67FAAD9603A5968FD9420A009B535BA069E1962D + A4B86DC147BFBE7DE64F3D0B000000984F2B57FF7B394B99C7ACB6613950B490 + 1FCB5BA936C7981400A667D842CC1770DEF2455FC66B9B5D000000C03C6ABFFA + DF96EBA4B86C6D861D63020A009B37EE424D8B3AB5B4F0D3C991B7F5F32BBB00 + 4E7FA217030000CC87C851EA57FF47E53AD1E72DC9E3D2B0638C410160BAD282 + CC17712D6E6BE5C9B1B63DF1E95FECF5000000F3A19FA3D4F397D556CB7DF216 + 86C54C8902C0D62B1771D96A2748B4F5C71EFDF38F342F3D7FB2170300006CAF + C84D224729F396D1794EAD85D4B3451400A6A3B650CB855CC66DAD7692ACB6C7 + EEFE995E0F0000B0BDFAB9493D6F596DB59C276FA12DCED5E6989002C0F40D5B + AC6931A7964E88F224696F4F7CFA73CD0B4FFD6E2F060000D81E9193446E52CB + 59DA5B9E03E52DA43E579B63131400A6A76DC1E60BBA8CDB5A7982AC6D9FFDB3 + 773567CF7EB917030000CC56E4229193D47295F5F9CCB016DAE25C6D8E0D5000 + D81AC3166D5AD4A99527C9E8F6DC634F37CF3EE6B5800000C0EC452E1239492D + 57696F79EE93B790FA5C6D8E4D520098AEB6859B2FEC326E6BE50993DA9995FE + D3EFFD1DAF05040000662A7290C845F2DCA4DE6A394EDE425B9CABCDB1410A00 + 5B67D8E24D8B3BB574829427CDF0F6857BFF69AF070000988D7E0E52CF4FDA5B + 9EF3E42DA43E579B630A1400A6AF6D01E70BBC8CA3E527465B5B5B613BF5970F + 78202000003013917B440E92E724C3770144CB739DD4425B9CABCDB1090A005B + 6BD8224E8B3C6FE589919F38F513EBB31FFAB5E695339FEFC50000005B23728E + C83DCA7CA4DFCA5CA5CC69F2716A21F5B9DA1C53B26BD0337D3B8A3EC9C7F967 + F216521C459AFC58DE9AE6F473A79BDDE77EAAD97FF0B695310000C0B43DFEF1 + 7FD87CE9139FEE4529D98F3E6F29F9CFE348E6539F5A688B73B53936490160EB + F413F4BE14AF26EEEB8F97C7CAB86CA11F7FF9739F6F2EBAE6C266F7B96FE84F + 0300004C496CFD7FF04FFF6D2F4A097E4AF2539C27FD1147F29EC629C1CF5B48 + 7DAE36C714B90560EBB42DE87CC197716AF9C992E2BC952758DC0AF0EB6E0500 + 0000A6AABFF53F5E415ECF43D6B7329FC95B688B73B539A6C00E80AD95AED487 + B557EDFBCAE3790BE55C391FFAB15B0100008069EB6FFDFF4C2F8A843FB548EE + CB3825FDA9A5E4BE6C21F5B9DA1C53A600B0F5F2443D37CE38FFDAB285B5E32F + 7FEE0BCD45D75CE05600000060D3FA5BFF7FBF1795497F99F8A73E25FE29CEE7 + F216F238579B634A1400B65E4AD64399B8E7F2B9F2781AE7F3B571D33CF1C087 + 9B4BAEBDA5D9B5FB9295310000C0A44EBFF0C9E6813F787B2FAA25FBA9A5043F + 8FA345129FFA9092FDD44AB539B68067006CBDB6055ECEA7B9D4F293271FE72D + 3FF1564FBA2FDDF74F9BB3AF7CB9170300004C267289C829D6E61D65FE51B6B6 + 3C26B55C6D2ED4E698223B0066235DA50FF915FB7C3E94C7F2CF9473790BABF1 + B38F7DA9D977E0C966EF8537AD8C010000C6F5CC677FBEF9EC9F7FA817D512FF + B2CF5B24F0A96F6BA5DA1C5B4401607652A21ECA783579EF1B3597E6F37EEDDC + 530F7EB2B9E8AB2F6F76EFFDDA95310000C0282F3CFD27CDA7DEF36BBDA896F0 + 0F4BFE532B13FE32C1CFE7F263E5E7D8020A00B39312F490C7A5DAB13CB9CF5B + A8F5FDF885273EDA5C70E59B3C0F0000001829EEFB7FE403FFB839FDDCF3BD51 + 24F329E91F27F98F04BE1C87E8CBC636510098AD94A487F5097BFBF1B2AFB5B0 + 363EFDDC4BCDCE9DF735E77DD55F6F76EC3867300F0000B056DCF77FEAAFFEE7 + E6C9073FDB1B45029F27FC79D25F2B0044529FFA94E09771299FAB1D670B2800 + CC5E9EACE7CA7148097D7E2C9FABCD87D5FED9C79E68CEB9E09166DFABFEFA60 + 0E000060AD273FFDBF368FDEF5915E14897C9EFCA73EB518D75A4AF8A395E390 + C7B9DA1C5B440160F6CAA43DEF73B563F95CAD25F97847F3F4230F37175EBEAB + D9B3FFD0600E0000A0EFF953FFB2F9CCCAFBFE23716F4BFADB92FF48E0F33825 + F429CEE79272CC8C28006C8F32594F7D1E27E55CDE9773A1FEB9273E794F73C9 + 6BBFAED975CED5FD690000A0F34E7FF98EE6813FFAB95E14097C9EF4E7897F1E + A7643F5A24F2A92F5B487D1836C78C28006C8F5AC29E94E3D04FE2D77F5D1A97 + C7EBFD738F7FD8430101008015F1D0BF876EFF878387FED512FD32E12FC7D122 + 894FAD1C873C669B29006C9F949C873C51CFE7437E2CA9CD8518B77DBEFF50C0 + 33CF4511E0360F050400800E8B87FE3DFA676F6B9E79F4B1DE2812F75400A825 + FFF97C6A91D4E77199F0A7712E9FAB1D678B29006CAF5AB21EDA92F8BC0FF95C + 6D3EE49F699A179E7AB679E5958F34E7BFFAAF29020000400745F2FFF97B7EAC + 79E2139FE98D52729F12FCB6B8D6F2643FB590F729CED5E698010580EDD596B4 + 87721C622E6FC9B0F924C53B9AE71E7BA2D977E0C966EF85370DE6000080AE88 + 27FE7FFEEEBB7A514AF0F316897D1ED75A4AEC532BE7421E873C669B28006CBF + 7A92BE763E94E3DCA8CFAF8F9F7AF093CDBE4B1E6BF65E786C650C00002CBFA7 + 1FF967CDC31FF88FBD284FFA53B25F8BD3B8AD95097F2DD1CFE76AC799110580 + F99012F4B6243EFA3851F271DE42792C698FA30870E1E53BBD1E1000003A205E + F7F7E9F7FD4E2F8AC4BD96EC9771D952825FB63816224E7D8A73B53966480160 + 3EB425E9218D877D26E49FAB7D4D583F1FAF07BCE8AB2F6B76EFFDDAC10C0000 + B06C5E78FA4F9A4FFCF12FF6A25AB29FB7349F92FEB69692FC94D4E77D8A431E + B3CD1400E6479EACB725F0B93896B7D2A8B9D5F889073ED85CFC359737BBF7BE + 6E300300002C8B179F794FF3F13FFCDF7A519EE8BF5C8CF316097E1E97097FB4 + DA5CB45C3E2E8FB10D1400E64B2D418F3E9F0FE5B8947F4DD987F5F1E3F7DFA1 + 080000004B2692FF07FEDD3FED45B5C4BE8CF37E584BC97C4AFA6B897E6D8E6D + A600305FDA92F490C6D1C709948F4B3197CFB77D26E9C78A000000B03CD626FF + D1F2ABFEE50E8048EC53DFD6220F492DC62125F7699E39A600307F8625EE695C + FB4CF4A925799C6BFF8C220000002CBEF5C97F9EE49771DED27C99F0972DE47D + 8A435BCC365300984FB504BD2D990F6DC7F2AFCD5B69ED9C220000002CAE7AF2 + 1FAD76D57FDC16897CEACB96CBC7E531B69902C07C2A93F4346E4BE043ED58DB + 6773F5CF28020000C0E2694FFE53C25F9B4F2D4FF8534B497E1EA796A4389F63 + 0E2900CCAF3C311F95D8979F4D2D579B4B6AF33B140100006081AC26FF91ACD7 + 12FCDA93FFF3643FB53CC94FE390CF873C2EB5CDB38D1400E65B9E98D712FAD4 + C7C9554BE26BDA3E579F5704000080F9F7DC53BFD77CE20F7FAE1795097E6A6D + C97F1ED75A4AF2230E29B14FF3495BCC1C5100987F79625E26E9691C7D9C64F5 + 247EBDFCEB52DFFEF55104D8F7AAC79ABD171D1BCC000000F3E2E987DFD97CFA + BDFFBF5E9427F7798BE43F12F888CB3EC5B5163942B488434AECD37CD2163367 + 140016439E9897C97B326A9C945F1F7D9CA479BFDE530F7E5211000000E64C24 + FF0FBEFF8F7B514AE6CB9692FFB62240AD455E90B7508E937C5C1E63CE28002C + 863229CF93F761DA8ED7FEBD3859F37EBD2802BC72E6CEE6FC57FFB566C78E73 + 06B30000C0AC9D7DE5CBCDE74FFE48F3E8873FD41BE5097FDE6AC97F6A699C92 + FED4221F487DAD85B2674128002C8E3C292FE37AC2BE3A5F3B5ECEC5384EE0BC + 5FEFB9C7BED4BCF2CA879B735EF5ADCDEEDDE70F660100805939FDC2279B2FFE + E5FFD29CBAF7E3BD519ED4E76DD2E43F7280612DC9E35CDB3C73440160B1E449 + 792D81AF49F3B5E3B57F233F71D3786D1F4580E7BEF8DEE6822BBFB5D9B5FB92 + DE1C0000300B91FC3FF8A73FD63CFDD0E77AA394C497C97EF465B25F8EA34F2D + FED62FFBBC853C0E6D31734C0160F1E4497B1E87729CA4F9DAF171FF8DB55E7E + FEA5E6D4C7FEA8B9F86B2EF386000000988178CDDFFDBFFFFFEAFD2DFE7C6F94 + 27F56D2D92F9DA38FAD422792FFBBC853C0E6D31734E016031E549FAB8097C9A + AF1DCFE7263B811FBFFF83CDBE577DD1C3010100600BC5C3FE3EF59EDFEC4579 + 423F4E8BA4BEEC538BBFFDCB3E6F218F435BCC025000585C79D25E26F5B5243F + A4F9DAF161C7727192C767564FF67838E099958703FE571E0E08000053140FFB + 7BF4E4FFD83CFAE13FEB8DCAC4BE767F7FDED2B1BC4F2DFE9E2FFBBC853C0E6D + 310B420160719589FAA87192E66BC7DB8EC5C91D73ED27F9F38F3DD13CF3E81F + 37175EF68666E739AF1ECC0200001BF5F2B31F6D3EFD9F7EA479FAA1CFF64691 + A4E7C97DDEE258590C4871DEA7167FD7977DDE421E873C664129002CB632511F + 354ED27CDBF1901F8BB876C2C7DCEAB195E702DCF79EE6FC2B7636E7EC3FB432 + 0700004CEED9C7FF55F3F17FFFB3BDBFB15FE88DF2A4BEEDAA7F3E57C6798BBF + DDCB3E6F218F431E8772CC825000587C65123F6A9CA4F9B6E3B9DA09DE3EF7A5 + 4F7CB4D9B9E72F9ADD171CF2AA40000098C08B2F7CA1F9D2C7FF51F3F0EDEFEE + 8D6A09FD3873799FB7F87BBDECF316F238E47128C72C100580E5B0D54580F278 + EDA45FFB4BE2CB8F7EA179EE8BFFB1B9E0F2AB9B5D7BAE1ACC0300006D4E3FF7 + C1E6A1FFFC53CD939FFA4C6F9427F2655C9B2BE3B2C5DFEB659FB790C7218F43 + 3966C128002C8F51497F5B923F2AF92F0DFB851056E75E7EFEC5E6D47DFF79E5 + 2D01AFEC39D4ECD9E301810000507AFEB9679BE73FFF7F349FFC93FFEFE0157F + 91A0D712FBDA5C8AF3BED6E2EFF468799C5AC8E390C7A11CB380140096CBAC8A + 0061D82F8790E6CEAEBC25E095E7FEB439EFE0D77A4020000064E2417F5FBCEB + 7F6ABEF0D1BB7BA35A429FB77CAEFC5CF46D2DFE368F96C7A9853C0E791CCA31 + 0B4A0160F96CB40810CA63E9441FF6356DBF28D6C62F3CF5ECCA0302CFFBAAE7 + 9A333BAFB71B0000804E8BABFE2F9C7A57F389FFF00BBDBF959FEECD94097EDE + F2F914E77D6A691C7F8BA7B914475FB690C7218F4339668129002CA7CD140146 + 69FBDAB65F1A29EEF74F7EFA6376030000D069E9AAFFE74FFE97DE284FDCF37E + 549C5A398E167F7BE771AD853C0E791CCA310B6E338920F36D58D21F711AA7B8 + 6C3BB3BEAD4501298FD3B88C6BFDCEE68AA33737FB5EF30F9A7DFBCFEB8D0100 + 60B9F5EFF5FFE7CD67EFBCBD374A097A5B729F8F6BC7525C6B91B8A7BED6421E + 873C0EE5982510C918CB2B12F8DCA871293F5EFB05D0F64BA2ECC3FAB9671E79 + A879FEB13F6AF65DB2B7D9B3EFFAC12C00002C9FE79FF8B7CD673FF8D3CD130F + 3CD01BA5443D25F629A1CFC7F95CAD2F5BFC9D5DF6B516F238E47128C72C0905 + 80E5B7D922C0B8F25F26791F22AE8F5F7EFEA5E6894F7CB817DCD99C7BE1D56E + 0B000060A9C476FFC7FEF21F350FDFF9EEDEDFBE2FF46652729F5A24EBB571AD + 1FD6E2EFEBD4B7B590C7218F433966894C2BF963BE0D4BFA234EE33C8E6DFAA9 + 4FF3FDADFB6BE3D456B7F6AF1D8FEAD7C6D7DC726BB3F7D2EF6BF69EAB100000 + C0E27AF1852F342F3EF6AF9A07DFFF27BD514AD26B097D5BB29F7FA6368E16C9 + 7A1EA771487D9A0F791CF2389463964C4AF6587EE5CF3A1FA738FAD4428A2339 + 2FE394BCA7384FE8CBF1B0A4BFFCBA9DCDBE031736977DF377363BCFFBBB9E0F + 0000C04289FBFC5F79F6DF368F7EE4DF34CF3F1E4FF74F097A6AB5047FD85C19 + 47925EC6D1977148713E4EF23894639650246F7447F9F3CEC729CEFB5A8B24BD + EC87B54992FFB5E37D975CD85CF1E6FFBED9F7AA6FEF8D010060BE3DFFA5DF6F + 3EFBA17FD93CFF449EF8E7C97B39AEC5E5E76B2D92F5B2AFB550F6218F433966 + 49450247B7943FF37C9CE2BC6F6B91A4A7BE8CF3D696E40F4FFEF3F105575FD6 + 5C76F8FB9ABD179CE88D010060BEBCF8CC7B9B2F9EFC97CD930F7DBE378A847C + 58D29F8F477D2E6F91A49771F46D2D947DC8E3508E596291B4D14DF9CFBE5C07 + 314E73791C0979EAD37C8AFBC9FADA386F79823F7EF29F3785000000E64924FE + 8F9EFC57CD330F3DDA1BA5E43C6F79423F2CD91F96F8478B24BDEC531C529FE6 + 431E27F9B83C4607A4C48E6E2A7FFEF938E234AEC5A945725EF6659C5A2DB11F + 2FF9CF9B42000000DB6974E29FDAB0A47FD85CB448D0CB719A4B716AA12D0E79 + 1CCA311D11491ADD56AE817C9CE2BC6F6B919CB7F56D6DF2E43F6FF18C80CBDE + F8773D2C1000802DF79587FB7DF8DF16F7F88F6AE31401CA16097ADEA778580B + 651FF23894633A24123428D7413E4E71DEE72D44429EC6659C5A39CEDB64897F + D9A21070F00D3736FB5EFDBD5E1F0800C054C5EBFC9EFFC26F35A7EEFDE08489 + 7FDEC649FAA345729EC7699CC7218D530B651FF23894633A26923208E55AA88D + D35C2D4E2D92F232CEFB8DB4B240D0F66FED68AE78D34DCD79979F68F6EE3FDA + 1B0300C0C6BCF8DC9DCDB39F7B6FF3D93FFB406F1489734ACCB7AAA5FF46DE97 + 716AA12D4E468DE9A048A420A9AD877C2EC5793FACF593F2D5388D6B715B6BDB + 1D50FBDAD5B90BAE7E4DF3EA6FF88E66E7BEA3760500003096B8DAFFCAF37736 + 5FF8CBDF6B9EF9CA13FDF3A47C9A2DFF37531C7D19B7B550F6218F93DA1C1D14 + 091394CA75918F539CF7659C5A4ACA6B716AE578DCD6F675F97FAB3F77C59B8E + D915000040ABD5ABFD77F446B5A43CCD0D6BE37E2E5AFED9FCBF935A398E16CA + 38EF431E87724CC745920435E5DAA88DD35CDEB7B59494E7F1DA44BD3E6E6B6D + 9FCBE7D7FE37F65D724173E9D71F6BCE7BCDB737BBCF796D6F0E0080AE7AF9A5 + 4F35CF7EFEF79BC7FEEA8EE6F9279EE9CD94C978F4655C6B1B391E73E57F6354 + 0B799FE264D4185612236853AE8FB671DE97716A29112FC7B53E6FB5B971E7CB + 388D77ACDC2270F0EB8E35E75E7242310000A02322E97FE189F736A73E7EC760 + 8B7F24C92901AFF5655CB6B663E57CDBBF9BCFD75A28E3BC4F468D6145244430 + 4AB94EF2718A6BFDA85626E6699CF7E57CDBB89CAF7DBE3CD69FBBF8AACB9A57 + 5D7B63B3E7C26F729B0000C09289EDFDA79FFE68F3A5073ED83CF970BCB73F92 + E368B5C43CF5C3E2B6B9619FC9FB5A1C529FE6A385B63EE47128C7B046244030 + 8E72ADB48DF3BE8CDB5A9994D7FAD4F271792C9FAB7D6E58DF6F719BC0255F77 + A839EFD5479B66CF3779802000C0828907F935A73FDA3CFB853B9B273E7ECF60 + 7B7F24C6A9950979AD1F168F7BACFC4C3E3FAC8532CEFB64D418D689A407C655 + 5B2FF95C8A6B7D6A211F47CB93F05A9CF7C3E27C5CFBCCB03E6FAB73175FF59A + E6C2AF3ED49C7BD13735CDDE6F5410000098332B09FF8B7FD1BCF0D4479BA73F + 734FF3E4C3696B7FB45AC29D27E76DFDB0381FD73E53EB532BC7D1426D2EE4C7 + 933C4E6A73B04E243930A972DDB48DF3BE8CF3B9E149F8FA643DFACDCC453F6E + BCB6A582C03917BCB6D973DE37797E0000C08CC57DFCA79FFD68F3D2339FAA24 + FC65CB13EE5171DEB7CDD5E66B7D19E77321F5693E9471DE27A3C630542435B0 + 11B5B553CEA5C439C9C7291ED56A89F9247D8ADBC6A3E251AD695E7DC3A166FF + AB5ED7ECD9F7BA66D739AF6E76EFFBC69579000036E7E5E7FFA239F3D2179AD3 + CF7FB279EE4B9F6CBE70D73D832391F88ED3DA12F2326E1BE77DDB67F2CF95F1 + A816F23894E3508E436D0E86EA2730B071E51A6A1B0FEBC769E326EEA3C6B5BE + 8C87CD952DAC9F8B9D027B0FBEA639FFABBEA9D9B1EBBC66CFB9AF6BCEECF82A + B710000014620BFFAEB35F6C4EBFF0C9E6EC99679B2F7FF1A3CD8BA73E3FB8B2 + 1F52429C5A28E7CA564BC26B497AD9A778D438EFCBF9715AC8E390CFE7468D61 + 6C298181CDA8ADA3722E8D6B7D6A211FB7B53231AF25F2653FEA586AE5E743ED + 73211DAF1D2BE3D57EA53870E9AB7BBFBB77AC1408C24A91206E27D8D9FFCCE9 + B3AF6DF6ED3F6F250600583429A95FF1CAD9E6F44B9F5A49EE4324F8CD8EB3CD + 8B8F7DA148F2CBBE8CF3B948B643792CCDE7C9782D314F73653FEEB1321EA785 + 32AEF549390EB539185B4A4C601ACAF5545B5F3197CFE7E35A3CAA95C979DB38 + 9F6F8B6BE3BCC5B190FADA67A285321ED627E538D4E60000E6D938896B1A0FEB + CBB86C2192F0D4D73E13AD3CD696C4A7B8EDF8B0B9B61686C5799F94E3509B83 + 89492E98B67192D834CEE723CEE7CB389F1B95A40F9B2B8F8F1A4FD2426D9CFA + 1487729C9473B5CF0000CCB37113DA7C3E1FE77D39BF915626ECC3C6A33E5BB6 + 381ECAF9D016877C3E376A0C9B22B960AB4C92DCE6F311E7F3B53892F490E652 + 1B96BCD78EB5CD8561FF56D9C2B0B930AACF8D3B0700304F6AC9EAB0B9617D19 + 0F9B6B6B2939AF25F193CC85DAB1908EE7736D71C8E773E538D4E6605324156C + B57192D934CEE7232EE7D35C6D3C4E1B27B99FA4001046CD85723E298FE76A73 + B951C70100B6DAA8047558529B1F8BB89C4F73B571DB5CD98625EFA98DF399B6 + 166AE3D4A73894C793721C6A733015920866A55C6BC392DEFC58C4B5719A2BC7 + 2981CFE76B2D4FF4535FFB5CAD85DA7CB4302CCEFB509BCBB5CD0300CCABB604 + B696049773D10F8BCB166AF3B59627FBA9AF7D2E6F217DBE9C2FC7A136CEFB5C + 3957FB0C4C95E48259AAADB76173F9B1722EFA6171D9C2B8C581512D4C3237AC + 0F6D719B713E0300300BE324ADF9676AF1B03E6F619CB9495BA825F9790BC3E2 + BC0FB5B964DC39983A8904DBA1B6EE86CDE5C7CAB9E8DBE66AE33437AA18106A + F3D1C2B0B9D016877C3E698B010016592D290E292EE7F2F961F1B0B9D4426D3E + 5A684BFA43DB38B4F5A136978C3B075B46A2C176AAADBF6173E5B118E773F978 + 543CEDB9304E1CF2F9DCA83100C0A22813DBB6713E1F713E3F6E3CEDB9D01687 + DA38C9E364DC39D872120CE6416D1D8E9AABC5C3FA71E3DA5CC88F9573A18CCB + 3EC5A13C9E1B770E00601E4D9A00E7C7222EE7F37E585C9B0BF9B1722E0C8B87 + F5A13697ABCDB77D16664262C13C695B8FC392E2F2588CF3B961E369C665DF76 + 2CD4E69271E70000E6D1B8496F9ACB8F9573D1D7E6523FED388C1A87342EE743 + 6D2EB4CDC34C492C98476DEB7254725C8BCBB9B671AD6F8BCB7ED8B1BC0FB5B9 + A49CAB7D06006011B425CDB934971F2BE76AFDB8C76AC7539FE2501BE77D688B + 93DA5C689B876D21C1609EB5ADCF71E66BF1B0B95A9FE2908F47F521E2729CF7 + C9A83100C0A22B93E0B6713E1F71391ED5A738E4E3517D183617F23837E93C6C + 2BC9068BA26DAD8E9A2F8FD7E6C7991BD587713E136A5F5333EC1800C03C1B96 + 000F4BACD3B8AD0FA33E53F661DCB9D0369F4C3A0F734382C1A2695BB3E3CC97 + 9F49E371E6A73117F23819770E006091D412E25173B5785A7361D47C288F2593 + CEC3DC9164B0C8DAD6EFB8F36DE3CDCCB7C561D8B1DCB06300008B6458723C2C + E96E3B96E2B6CF4F3A9F94E364D279986B120D96C14693E9FC58ED73696E9263 + F978D8D785DAF1716CF4EB0000A66DA38970FE75B57F63D8F1341EF675C38E85 + DAF164A3C760EE49245836C3D6F424C76A9FCDE7367B3CA9CD01002CB351C979 + 92CF6DF678A87D26D9E8315828920F96D9B0F53D6AED97C7DB3EBFD1CF85B6CF + 02002CBB7112F6A49CDFECE79261C7477D2D2C2409085D316AAD6FE4F8B0AF99 + F4F36D36F2350000DB6923C973ED6B264DD047FD77377B1C169EE4822E1A67DD + 6FE633D3FAF7010096D9380977DB6736F3B539493F9DB26BD04397CD3A6197FC + 0300F48D4AC02749D025FC30820200AC376E822E910700D89C8D26E4E37E9D84 + 1F321218186DD2F3C4790500301D9326F0127E1842A2021BB39973C7790700D0 + B799845DB20F139288C07439A70000A64BA20F53225981D972CE0100AC25C107 0000000000000000000000000000000000000000000000000000000000000000 - 4067EC188CC06CF8CE0100AC756E30025B4C3102D3E53B0500305D1A0430258A - 15D898CD7C777CEF0000FA3653DC6B0CC084142230DAA4DF13DF2B0080E998B4 - C8D7148021142AB0DEB8DF8B8D7E7F7CEF0000FA365AB08FFB731A02905188C0 - 78DF8349BE2BA33EEB7B0700D037AA409FA4801FE7B31A02749A42842E9A56C1 - DFF69969FDF7010096D9660AF66915FB1A02748A2284AE1875AE6FE4F8B09F99 - F4F36D36F2330000DB69234575ED6786FD7726FD7CD8EC7158788A0B96D9A405 - 7AAE3CDEF6F98D7E2EB47D160060D94D52C097EB9BFD5C32ECF8A89F8585A400 - 61D90C3BA7273956FB6CBEB6D9E3496D0D006099D58AEB516B9B3D1E6A9F4936 - 7A0C168AE2836530EC3C1EF758ED73696D9263F97CD8CF85DAF1716CF4E70000 - A66DA3C571FE73B5FFC6B0E3693EECE7861D0BB5E3C9468FC1DC5348B0C8DACE - DF71D7DBE69B596FCBC3B063B961C7000016C9B8C574F9B9B663296FFBFCA4EB - 49394F265D87B9A6D060D1B49DB3E3AC979F49F371D6A7B116F23C19770D0060 - 91D48AE4516BB57C5A6B61D47A288F2593AEC3DC5164B028DACED551EBE5F1DA - FA386BA3C630CE6742ED676A861D03009867C38AE261C5769AB78D61D467CA31 - 8CBB16DAD69349D7616E283098676DE7E738EBB57CD85A6D4C79C8E7A3C61079 - 39CFC764D41C0060D1B515D8499AE7EB9197F35163CA433E1F3586616B21CF73 - 93AEC3B6526C308FDACECBDA7ABE56CBCBB5B6796D6CCBCB71D8B17C0CB5B5A4 - 5CAB7D06006011940570AD204E6BF9B172AD368E7BAC763C8D290FB5793E86B6 - 3CA9AD85B675D8160A0CE649DBF938AC582E8FC53C5F1B369F665E8E6DC79AE6 - 8A235735E7EDBF6A25DFFBB2A32BE38E9D1736BBCE7BDDD7FEFF889D3B7B796F - 0D0060219D7DB2397BF6E3FDBCF76BD099173EDE9CEBAD85E79FBE63657CE1D1 - 879A2FDCF5D04ADE978AE57CACADA571DA7918350F695EAE87DA5A685B87995A - 2D4A60FBD4CEC3516BB57CD8386E5E5B0BF9B1722DACCDAF3872E54A911F05FE - 4A71BFA757D0EFB8B2D9B9EBCAC16700000867CF7CAE571F7FAE3973BADF2488 - 0641BF39D05B5F536C0FCB6B6B213F56AE8561F9B031B4E5C9B86B3033A96081 - ED503BFF86AD95C7629EAFE5F351F9F4D6BEFE6F1D6DF6BEF475CDCE3DAF5F29 - F077EEFE8EC131000036E3EC8B1F5A69109C3DFDD7CDF3CF7CBCF9EC7F8CDD03 - A9888E318F308DB5D09687721EF2CF96C65D832D978A1898A5DA79376C2D3F56 - AEC5D8B6569BA7B59D83B13C9622AC5FBFE2F055CDCBAEFC8E66E779AF6F769F - F71DCD8E5DAFEBAD0300302BE7CE7CBC79F1850F35675FF8EBE6E9CF7DA8F9C2 - C9B88D200AEA32426D3D229C1D8CB563B5791A6B6B496D2D19770DB64C2A7460 - 166AE7DBB0B5FC58B916E3B0BC8C30AAE85F1F51F0BFF495479B3DFBBE73A5D8 - B7851F0060BEC40E81680A9C7EF6BDCD339FBF634843A02D425B3320451896E7 - 63A8AD25E3AEC1D4459103B3509E6BB5732FADE5C722AFCDD35A391FB7C84F9F - CBC71DCD25AFBEA8B9F4B5479BF35EFA9D2B5BF915FC00008B65E59681173FD4 - BCF0CC7B9BC7EEBBA3F9CAA79FE8AD46819D8AFC7C8CF561116ACD8150CE436D - 9E8FB972ADF61998AA2884602BD5CEB1722DCDF3F5C8CBF5B4569B8F136B8BFD - 147195FF82AB6F69769DF71DBDF8CEF80000004BE2CC0BEFEDC5879AA71E784F - 6577C024CD8032426D9EC69487F27852CE436D0DA6220A20D80AB573AB5C4BF3 - 7C3DF27CBD96A7423EADA5585BD8AF8D4AD17FF0D666CFBEEF711F3F004047F4 - 6F15F8B7CD530FBEBBA51990CFF3A81D0BE5EE80D096877C3D57CE436D0D3625 - 8A2198A6DA3955AEA579BE1E79BE5EE6F9DAF8857EBE16DBFB0F5C7B6BB3F7C2 - 1F56F40300745C34039E7FF2B79A53F7BEBBB84D20C63C46350642B91EDAF290 - AFE7CA79A8ADC186447104D3529E4FB5F32B15E5493EAFE5A3A22CF8D7CF5FF3 - B76F69F65EF0BDCDAE3D277A73000058EBCCE9F735CF3FF56F9A4FFDEFEFE9CD - CA827FD47C5884B63C94F3A45CAB7D06261605126C56ED3C2AD7D2BC36A608F9 - BC2D8615FDFDFCF243079B8B5EF37F5BB9A7DF83FC000018473C40309E19F0C4 - A77EB379F8EE077B2B5178E705FF469B01A136AF8D49390FB535185B144CB019 - E539D4361F368E13EB8BFC5AFE9AEFBCB5D97BF19B5CED070060535676053CFE - 07CDA7DEFBEEDEACAD0930AC39302CC2A831193587B145D1041B513B77CAB554 - 9827F93CE5A3A256ECAF1D2F7ED5C5CDCBBFF97B9BDDFB7ED8D57E0000A62A76 - 05BCF8EC6F355FFAD8BF691EFFCCE3BD9528C053B15F8E653E2A429E87721ECA - 79A8ADC1505144C1A4CAF3A66D9E8F659EAFE5457E8A5185FFCEE6F243573517 - BDFA7B9B3D2FF9E1DEF4C2DE1A00006C91B34F36A7BFFA5BCD174FBEB379FC33 - F1D0C028F4276D04C45A28D74399E763326A0E43453105E3AA9D2FF95ACA6B63 - 8A90CF236AC57E9EAF2FFC2FFEC6B736BBF77E4F6F0E0000B3F5E2F3FFB679FC - 13BFD43C7C77BC4A308AFAB2019017FF6D798A509BD7C690E7496D0DD689A20A - C6519E2B6DF37C2CF3B6A815FAE5D82BFCBFE56073F1353FAEF00700602EAC34 - 02EEFFE5E6E18FC60303A3B82F1B006DE3B008659E8FC9A839AC13C5158C529E - 27F93CE5B57154A4023FE50A7F000016CF788D80BCF8CFF36111DAC690E7A19C - C31A5164419BF2FC689BE76399A7C88BFD7C5E2FFA23E2E17EAF38F2E3CD9EF3 - 7FB837070080F976FAB9DF6ABE78D72F0F1E16988AFE54ECB78D29CA794428F3 - 7C4C46CD6145145C50539E1BB5795ACBC7B648057E9EAF2FFA63BE52F81F7EB3 - 87FB0100B078D63C2C307F6B408A34CFC732AF45C8C79427A3E6B0527C41A93C - 2FF279CAF3B1CC53A402BF96AF16FCF9FC1BFFCBEF6DCEBBE8C79B9D3B5FD99B - 0300C0623A7BF6F3CD0B4FFC72F38977FD9B9865118579394F6BB53C4528F390 - C690E7A19CD371517C41523B1FF2B594E7E3B048057ECACB827F357FE50DDFD4 - 5C7CE5FFD8ECDCF3C6DE1C000096C3D9D37FDE3CFEB9FF57F3F93FFBAB980D22 - 0AF3B63CCD53DE16A11C439E27B5353A280A3008E5B9509BA7B55A9E2215F679 - BEB6D8CFC37DFE00007441FBF3015244915E8E659E22B4E5C9A8391D14451994 - E7413E4F793EE61152811F51E629CAF9CEE635DF794BB36FFF3B7AA9FBFC0100 - E880B34F36CF3EFA53CDA7DEFB9E981411057A394F6B791ED23C4528C790E7A1 - 9CD3315194D16DE53990CF539E8F6D9117F9E5B836E2B57E975EFB2F6CF70700 - A093E2B680C7EEFD47C56B03F38842BD6D6C8B508E21CF4339A743760D46BA29 - 0AF45C3E8F3C8F54D0D7D6CB88F32A8D79EC6EAEF9BB3FD25C78E5FFDAECD8FD - 9ADE1C0000BA67C7AE2B9B7D97BDA9B9F8552F368FDE7F775ACD22A431D4D672 - B5CF26A3E67488BFFCEE1AF58F445ACBF328EAD398D6531E6399AFC6E5DF7C75 - 73E975EF70D51F0000322BBB01EEF9A9E6E18F3D10B34AC415FB328F31E5218D - 693DE47992CFCB6374405C95A55B52E19E94797E3C9FE7C57D1A53C47994E779 - EC6EBEF1BFFCBEE6C283FF9BABFE000050E8EF06F89EE6A2838F358F7DE2DEB4 - 9A4552CBCB31573B56E6B59F6389F90BEF96F2EFBBFC07A01C6B11457E39D623 - 9EF07FC5B7FD8B66D79E13BD39000030CC99D3EF6BBEF097FF68C89B0252C4D5 - FB72AC4528C790E7A19CB3A4A280A31BCABFEB7C9EF21853849447415FE6A9D0 - 4F79BE0B606773F5DFB8A179D92BDED1ECDCF9CADE1C000018CBD9279B27BFF8 - 7F6F1EF84F7F16932CCE0CC628D6D35ACA632CF390F27C9EE47928E72CA128DA - 587E51A4E7F279E46584BCB84FEBAB05FE6AE4DBFDFB71EDDFFB8966DFFE7FDE - ECD8E1F57E000030911D7B9BBD177C4F73E9AB7736A7EEFBF35818444863D236 - 8F310AFAFCF8B83FCB12F397BCFC867DB1234FF394D7220AFD34B6C7C55F7F49 - F3CA6FFF350FFA030080298807047EFE2FDED23CFED9AFC46C4444C19FC6B608 - 791EF23C9473964814752CAFF2EF379F479EE6292F230AFB722C23AEFAEF6C0E - 1EFDA6E6A2AFFFFFF55257FD0100606ACE3ED93CF1D9FFBA79F08EBF8A492FD2 - AD006544E15E8EB508791EF23C94739644146F2CA728D873F93CF2344F791951 - DCA73115FA65EC5E19E329FF2FBBE2B77A1FDFDB9B03000053D3FB1DFB2597FC - D7CD45577DA179EC13F7C4427F7DCDEFEE692D29E7A5519F1FF5F32CA828E258 - 3EC3BEC091A779CACB48457F2DD63601AE7BD32F36E7BDECBFEBE50000C056D9 - 7DFE8966FF6B0F36A73EFE1F072BE977F79AB6F55CF99951739680BFD4E533EC - 8B1B799AA73C8F28F0D398E751ECA7B5FEFCE2AFBFB8B9F23B7EAFD9B1EBBADE - 1C000098857367EE693EF7A1EF6F1EFF6CBC2AB0BC1D609C3705E411F23CE479 - 28E72C303B00964B14ECB97C1E799AA73C452AECF3BC5FE8AF2DFEFBF3B8DFFF - C037FF5EB373D7AB7B730000605676ECBCACB9E0CABFDB9C7FC15F344F7CEE54 - ACF40FAC48BFDF97DAD643B93E6ACE02D300581EC3BEA891A779CA5344619FE7 - B5488D807EF11F0FFB8B7F78000080D98BD76DBFE4A2BFD3BCE482DB064D8095 - D5C1384CDB67CAF55173169406C07218F6058D3CCD539E228AFB34B6C56AF1FF - 0D7FDBC3FE0000602E0C1E0E78E1950F378F7D327F38609B74BCED73E5FAA839 - 0B480360F10DFB62469EE6294F11C57D39E6B15AF8C73C8AFFF32FFD855E0E00 - 00CC8B3DE79F1834013EDE9BC5EFF5218DA5718F27A3E62C180D80C536EC0B19 - 799AA73C455EF4A7318FBCF8EF3FE97FEF059EF40F0000F3289A00EBDF10D026 - 1D6BFB4CB93E6ACE02D100585CC3BE8891A779CA53E4457F1A6B857F7F7EDD9B - FE45B37BEF77F7720000605EEDDC7D5DB3FFB557559A0069CC0D3B16CAF55173 - 168406C0E2CABF74659EE6294F9117FD694CB15AF4A751F10F00008B63B64D00 - 169006C062CABF7C659EE6294F11457D39A650FC0300C032985D13A0ED679863 - 1A008BA7ED4B17799AA73C4514F5E598222FFE23762BFE01006081AD3601DE3F - 5849A21628A5B5DAB150AEE7F3B69F614E69002C96B62F5BE4699EF21479D19F - C61465F11F57FEDFA1F807008005B77E274012354129ADD58E85723D9FB7FD0C - 7348036071B47DC9224FF394A7C88BFE34A650FC0300C032D304A0A001B018DA - BE6CF9588B5AE19F8AFE342AFE010060594DD6041847DBCF6DF4BFC70C69002C - 86FCCB94F27CAC4514F869CC43F10F00005D327913A06D3D49C7477D8E39A301 - 30FFF22F5599E711A2B04FF3BCE8CF2315FE91EF6EAEF9AE1F6FCE3BFF877A39 - 0000B0ACA20970F16B76368FDEFB17BDD9B95EA41A621CC33E9FAF4FF2DF641B - 6800CCB7B62F53E4691E857C1AD37A2AF6CBC88BFF5DCD37FCEDEF6D5E72D1DB - 7A390000B0EC769FF7C6E6C22BBFD03CF6C97B062B798D314C7C2E35016ACD80 - 7C3EEE7F936DA00130BFDABE4491A779CAA3A0CFF35AAC2FFECFBFF4177A3900 - 00D0157BCE3FB1C9264052FE5C3E1FF7BFC98C6900CCA7B62F538C659E2215FA - 799E0AFE94F7E38AEFF8A6E6C2CBFFDFBD8FEEEDCD0100802ED9B3F73B9ADD2F - FB60F3D4E74E0D564AB5423F5F4BD2B19A61C7D8261A00F329FFB2A43C1FCB28 - 0BFFBCE84F633F5EF14D079B03AFFD83DEF205BD390000D0393BF636FB2EFE3B - BD4AE15DCDD35F7E6AB0384AD41B6DD2B1619F610E6800CC9FFC4B53E6B58802 - 3F8D65AC6D005C74F525CDE5DFFA9BCD8E5DAFECCD010080CE8A26C0656F6C9E - 7FEA5DCDF34F3C3F581C25EA8E51F2CF8CF37966288A43E647DB9725F234CFC7 - B6585FFC47BCF2DBFE79AFF8BFAE970300005D17B541D40879CDB0B696A8D51A - 29423EA63CB4E56CB3F88B657ED4BE28319679FE658CBC8CFCCBBB7B65BCE6EF - BDB5D9B3EFFFDACB010000FA76EE7E7573F1AB77368FDEF7E7BD59D417B57BFD - 6BCACFC69C39A701303FF22F4CCAF3B18CB2E8CF233500FAF1AAE3B734FB2EFD - 27BD1C000060ADDDE77D7BF3D2AFBBAF79FC339F1EAC8CA3AD5110B54A3E863C - 671B6900CC87B62F47E4B588223F8D79D19F17FF91EF6EAE7AE33735175EF9AB - BD8F7BE23F00005077DEBE9B9BBD2FFD60F3E4E7E3CD0051DC47BD912B0BFEF2 - 784DFE99713ECF16D300980FE9CB507E41D23C8AF934C65A8C65940D805DCD45 - 072F690E7CF3AF363B3DF40F00001866C7DE66CF85479A17267A2860921A06B5 - C64139671B69006CBFFC0B91F218CB3C8AFB3CCF2315FD79BEBB79F5DFFA9F9A - DDE7DDD4CB01000086DBB9F340F3D2977F5D73EA9EF7F766B52DFEB5B510354A - 7E2CE6356DEBCC8806C0F6CABF00655E8BB2F04F918AFED5F8865BDFD4ECBDF0 - C77A390000C07876EEBEAEB9F0955F681EFBE4BD839571B4350692A865923C67 - C63400B6573AF9CB2F449A47719FE6292F0BFF34AEC6E5DFFECDCD4557FC52EF - E3EEFB07000026B3E7256F6C76EDBBBD79FAF38F0C564A65C19FEA97248E976B - E59C6D10C523DBA3F60588B5B49E8F65E44D803CFA0D804B5EF53FF7A617F472 - 00008009F56A89959AE26B17196BB54744AD5609F998F25C6D8D1988BF4C662F - 3FE1CBBC16B52F5BFE658C77FDF7E7AFFDAEFFA1D9F392E3BD1C00006063E279 - 0097BCE6A2E6D17B6F1BAC84FCCA7F6DDBBF5B01E69C06C0F6A89DF831A63C8A - FA344F795EF8A7716D7EF0FF72B479E901EFFB070000366FD779879A975CFA97 - CD130F7C7EB032AAE84FF54C12C7CA35B651148FCC56FE054879DB5A19F1F795 - C614FD26C085575DD25C70456CD3010000988EA831A2D6C86B8FD5C86B943242 - 1AC3B0356624FEB2D81EE5C91EF33C42CACB2FD8FAB8FC5B7FACD9B9D3FBFE01 - 0080E9891A236A8DB2FE588DB25E890829CFD79272CE8C440787D9C94FF494E7 - 5F88FC4B537E99D66EF75F8DDD83ADFFFFB8970300004C57FF56800F0F6E0568 - BBCF7FA3B702B4ADB305A2A06436F213BB7692A7B518CBBC6C06ACC685575DDC - 5C70C53FEBE50000005B236A8EA83D6A35C9DA9A25229479295FAB1D670BC45F - 12DB277D29F20831D6BE5065ECB2F51F0000D872ABB702A49DC965D46A981063 - 196C93F88B61EBE52779CA6B277F5ACB23FF12E5D12BFEBFFDF5CD792FFD6F7A - 390000C0D68ADA236A90F6264044ADA6C9E56BF9B1F2736C81F80B62766A2775 - FA020C8BF445CABF583B9B4B5E65EB3F0000303B975CFD33BDFF736D5DB2B666 - 1915A5DA1A5B243A376CADFC844E797EF2A7BCFCF2945DB598AFC637FC9D1F6E - CEDBF7F77B390000C06CECDCF5CAE6C2AB9F6E1EBBFFE46025C443FE5224791E - F279AA854A6DEB4C491496CC46ED648EB53C423ECF1B00AB71E1959734E75FF0 - FFE8E5000000B315B548D424B55AA51F794D13F2795ACBD5D6D802F197C3D669 - 3BB9D37ACA53D4BE34F95A3F2E7F43AFF8DF79412F07000098B15E2DB2529354 - 6A95E1B54D8A90E7B9DA1A53127F196CBD6127763AF1CBC8BF30ABF175D71DF4 - E03F0000605B454D12B549AD66E947ADC6890869CCD5D698B2F88B616BB49DD4 - F9495FE629F22F4DCAFB71E09B3CF80F0000D87EFDDA646DBDB2BE9EC923B4E5 - B9DA1A53107F296CAD6127743AE1F3C8BF28E98BD38FAB6EFE8E66D779DFD6CB - 010000B657D42651A394754BBDB6C923A431575B638AE22F84E96B3B99F393BD - CCF328BF3CFDFC82CBFFFBDE080000301FFA35CAFADA65755E4668CB73B53536 - 29FE52D83AC34EE474A2E7517E4956BF3CAFB9E57B9A5DBBAFEDE5000000F321 - 6A94A855F2DA657D4D93CF538434E66A6B4C49FC65305D6D27717E92977944FA - 62A42FCDDA38FF52AFFD030000E64FBF56A9D7316B6B9D14A12DCFD5D6D884F8 - 8B606B0C3B81D3099E22FF62AC8FD7DCF2DDCD8E9D57F472000080F912B54AD4 - 2CB55AA61F79CD93474863AEB6C614C45F02D3D376F2E6277799B7C5EA17C6D5 - 7F0000609EADDF0550AB71F2086D79AEB6C606C55F0CD337ECC44D27768AF4E5 - C8BF2CABE1EA3F000030EFEC025808F117C074B49DB4F9495DE66DB1FA2571F5 - 1F00005804FDDA656D3D333C425B9EABADB1011A00D337EC844D27748AF4A548 - 5F90B5E1EA3F0000B028EC02987BF187CFE6B59DACF9C95CE66DB1FA0571F51F - 000058249E0530D7E22F84AD559EC865E45F8ED5B8EAA637BAFA0F00002C94A8 - 61A296A9D538FDA8D54411218D6C91F80B607AF2137758DE16AB5F8C0B5EF1DF - F646000080C5D2AF65566B9B7AED934718963325F197C1E60C3B21F363E9244E - 91BE08F917A31F577EDB75CDAEF3BEAD970300002C96A865A2A6A9D53A6B6BA1 - 3C923C2F0D3BC618E20F9EE91875A2D6223FF157F3975DF50F7A230000C062EA - D734C3EB9EF5D166D83126A001B039B513313F81F308292F4FFA34DFD95C78E5 - 45CD9EF3FF5E2F070000584C51D3446D93D73AF51A2822E4C7F228D5D61853FC - A1B3B5D289DB76C2E7E3CEE6E587E2B5190000008BAD5FDBF4EB9C7A0D94229F - B385E20F9ACD4B276A7ED2D64EE0B49622FF02F463EF853FD81B010000165BBF - B659AD75D6D64079E4F2B5326793E20F9F8D19760296276C5BE45F841DCD5537 - 7DBB57FF0100004BA1FF4AC06F8F6C106BEB9FF60869AC19768C21340036AF76 - F295276E6D9E9FF8FD2FC24B2FFBFBBD1100006039F46B9CB2F0CFF390F2725E - AAAD3181F883673AD2499A9F94F95A443AD1CB937F6773C12B3DFC0F0000582E - 51E344AD93EA9EE1B5518AA4B6C626C41F36931BE704CC4FD63CCA93BE1F5FF7 - FABFD51B010000964BBFD659AD7DEAB55119A38CF3190AF107CEC6A5932E3F49 - F33C496B79AC3DD9F75EE2E17F0000C0F2E9D73AEDB5D06AE4F2B53267833400 - A6AB3C41DB229DF031EE6C2E7BFD55CDAEDDAFEDE5000000CB256A9DA87952FD - B3B6261A16218D4C41FCA13399714FC0DA895B8F8B0FFECDDE080000B09CFA35 - 4FBD1EEA4728E7A38CFB3906340036AE3C49439E2769AD8CD4FDDAD9ECB9F0BB - 7A230000C072EAD73CAB3550BD468AC8E56B65CE06C41F3CD3519E986DB1F684 - BFECF557DAFE0F00002CB5FE6D0057F6B27A5DD41E218D6C9206C064C63DF16A - 276C447E82F74FF88BAF3EDE1B010000965BBFF6290BFF3C0F294FF351C6FD1C - 3DF187CDE4CA9333E47912F37442E727F66AECB9C0BBFF010080E5D7AF7DD6D7 - 44EB6BA65CFA4C287326A401301DE5099947C8C7F833EF9FD8975E6BFB3F0000 - D00D51FB440D54D6457DF9584648239BA00130BE714FB8DA891A914EEED5F9FE - 57DBFE0F00007447BF065A5F1BADE6213F368E713FD7791A0093AB9D5CB59333 - ADB5C7EE7DDFD61B010000BAA15F03D5EBA3B591ABAD85DA1A4368006C5C3A09 - F3932E5FABC5DA4ED7EEBD7FA3370200007443BF066AAF91EA91D4D6988006C0 - F4E427633A21DBD7BEFEBFB0FD1F0000E89E7E2DB4BE461ABDC62669008C6723 - 275C79C246C49F773FCEBBE8DB7B23000040B7F46BA1D5DAA85E3B4D6A233FD3 - 39F187CDF8D249959F9429AFCDDB63F74BDED01B010000BAA55F0BD5EBA4F511 - DAE6218D8C41036073CA93AE36AE8F0BAEB8D0EBFF0000804E8A5A286AA25AAD - D48F306A64033400A6274EC414211FD7C6FE6B6DFF070000BAAB5F13ADAF95FA - F2315F67933400461B76B2B59D8C69BD1EE75DE0F57F00004077F56BA27ABDB4 - 1AA5B6F564D8317A3400C6974EA6DA4997D6C6899DEEFF0700003AAD5F13453D - 5AAB99DA2297AF95C768A101B071B5932D9D847984B573F7FF0300005DB65A13 - ADAD95D6CEF3F590F27C8D0968004C47796226B19677B57636571E73FF3F0000 - 40BF365A5B2FF5C7523ACE2669004C5F3A39F3937435DF77A9FBFF010000566B - A35AED94AF31251A00C30D3BE1CA1332CD87C5CE66D75EDBFF010000FAB551BE - 03605824E5BC34EC58E769008C279D44B5932D5FAB7D2EE5FDF9AE3D1A000000 - 00ABB5D1DA9A697D9EC69427B5CF318406C0C6D44EB2722DC6B5F1B2CB2F6A76 - ECBCA297030000745BD44651239575533F423986DA1A63D200D8BC38F1F293B0 - 6DBEA3B9F8D5AEFE03000024FD1A696DDDD4D7366713340036AE3CF96A27E7DA - D87BE1B5BD11000080D0AF91EAF5535F9E27E59C316900B41B7652952763FED9 - DAB17EEC39DF0E0000008064D779718BF4FADAA92F8D61D8B1D2B0639DA60130 - 5A7E828D7392B57D6E47B373F72B0739000000BBF7A61D00A5BCAEAA1D4FC6FD - 1C3D1A0093AB9D5CE55A8CEB63E7AE6B7A23000000A15F23D5EBA7BE720CB535 - C6A001B03971C2E5275FDB3CDE007041B363E70571000000809EA891A2562AEB - A7BEB6391BA401307DF593F4E2577B0020000040A95F2BADAFA156E74C8906C0 - C69427627982AE1F77EDBE709003000090F46BA5F65A6A3572E59C316800D40D - 3B99D2B17412B67D76EDF1BD177A030000004069B5565A5B43AD571E6FFB5C18 - 76ACB3340086CB4FAC714EAEF4B9FCB3FDF9CEDDF17A0B000000D6D8913F0320 - 49F3B4961F2B8DFBB9CED300984CEDA42AD7F27135D700000000586FF7DED801 - 50AFA3EA63A8AD318206C0C6C589D676B2A563AB9FD9B1D2D5020000A06E7D1D - B5DEB0638CA001301DA34FD29D7BE2FD96000000E4769DF7ADBDFFB3BD961A5E - 6B31010D80E9CA4FCE3C00000018AE564B4530251A00932B4FC0F2C45C7FFCC0 - 37BE729003000050EAD74CB55A2B8D2972E59C11340036A7ED845B7B82BEE432 - 0F0004000068B35A33ADADA5D66B5B670C1A00EB0D3BA1D2B1B613B2FEB3E786 - FE37010000BAADBD666AABBBD2FAB05A6BD8B14ED200D8BC61275EACED6876EF - 79597F0A0000C03AFD9AA95F3FAD37ACE662021A00A3B59D84B9FC78FA7C5ADB - D1ECBDE0DA410E000040A95F33ADD6506B6BAA90E735E5E7A9D00068579E3CB5 - 9369D4679C80000000E3DB488DA50E1B9306C0E4D2C9D47652C57A0A00000026 - 33AAA64AEB6AAE0969006C4C79A20D3B39010000D8B85ABDA5FEDA000D80CD1B - 75E2393101000046535B6D310D80ADD53F41779DF7DA9511000080F576ECB922 - 6583912DA001305DF9C9BA9AEFD8E535800000006D76EDBE7C90857A5DC5A669 - 004C4F3A316374C20200004CA6ACA3D25C4D35251A00000000D0011A009B9377 - A56A74AA000000C637AABE52636D820600000000748006C064DABA4D693D3FAE - 3305000030B95A5DD5565FA9BB26A001307D71021627E1392725000040AB7535 - 53A5AE62B33400000000A0033400000000A0033400000000A0033400000000A0 - 033400366EDC07527870050000C0686AAC2DA601000000001DA001000000001D - A001000000001DA001000000001DA001000000001DA001000000001DA0010000 - 00001DA001000000001DA001000000001DA001000000001DA001000000001DA0 - 01000000001DA001000000001DA001000000001DA001000000001DA001000000 - 001DA001000000001DA001000000001DA001000000001DA001000000001DA001 - 000000001DA001000000001DA001000000001DA001000000001DA00100000000 - 1DA001000000001DA001000000001DA001000000001DA001000000001DA00100 - 0000001DA001000000001DA001000000001DA001000000001DA001000000001D - A001000000001DA001000000001DA001000000001DA001000000001DA0010000 - 00001DA001000000001DA001000000001DA001000000001DA001000000001DA0 - 01000000001DA001000000001DA001000000001DA001000000001DA001000000 - 001DA001000000001DA001000000001DA001000000001DA001000000001DA001 - 000000001DB06330B22AFD99E4638A6898A4715736A6D85D893DCDEBDEF41BCD - AEBDD7F7728056476FBCB93970E0C060C62C3CFBECB3CDFDF7DED33CF4E00383 - 1500605B9C79FECEE6E37FF023BDEC742F5EACC4992CCE66E3B9C13CC614A11C - E949452EABD29F493EA6D00000A66EDFBE7DCD4FFCF4DB9AAB0E5E3D5861D6A2 - 09F0ABBFF24B2B0D0100601B6800CC4414B0006CA3EFFBFE1F54FC6FB36BAEBD - AEF9076F7ECB600600B09C340000B6D9A1EBBF7590B19D0EF7FE1E62370600C0 - B2D20000D8668ACEF971E8FA370C320080E5A301000003878FD88D01002C2F0D - 00001888DB00F61FB86C300300582E1A00009089260000C032D2000080CCD163 - 370D320080E5A2010000997825A3DB00008065A401000085E3276E19640000CB - 430300000A87BD0E100058421A0000DB28B69B337FF61F38E0EF0600583A1A00 - 00DBE8FC7DFB0619F3E6F8895B071900C072D00000808A435E0708002C190D00 - 806DE469F3F36BDFBE7DCD614D000060896800006CA303070E0C32E6D1E1231E - 0608002C0F0D00006871F4C69B56760200002C030D00806D74CD6BAF1B64CCAB - 435E0908002C090D000018E2F011CF01000096830600C036BAD2BBE6E75E3C08 - D0C31A018065A00100B08DDC5FBE18BC0D000058061A0000DBE49A6BDDFFBF28 - 8E1EBB699001002C2E0D00806DE2EAFFE2B8EAE0D56E030000169E0600C03689 - A292C571C38D760100008B4D0300609B5C799506C022397AECE6410600B09834 - 0000B6C9FE030706198B20FEBEECDA000016990600C03688FBFF15938BC7C300 - 018045A60100B00D0E5DFF8641C622397AA3DB000080C5A50100B00D0E1FF15E - F945143B370E5FEFEF0E00584C1A000033A6885C6C878FD8BD01002C260D0080 - 19B3FD7FB11DBAFE5B579A3800008B46030060C66CFF5F6C51FC6BE200008B48 - 030060866CFF5F0E9A3800C022D200009821578E97433471DC0600002C1A0D00 - 801972E5787978252000B06834000066C8F6FFE571F4D84D830C006031680000 - CC88E27FB95C75F0EA66FF81CB06330080F9A701003023DE1FBF7C3475008045 - A201003023F1FE7896CBF113B70E320080F9A7010030039E1ABF9CF61F38B072 - 2B0000C022D000009801DBFF9797870102008B420300608BC595FFA3372A1297 - D5E1EB35770080C5A00100B0C50E2910975ADC06E0618000C022D00000D86287 - 8F280E979D5B3C008045A00100B08562FBBFABC3CBCF1B1E008045A00100B085 - 6CFFEF86FE731E6E1ECC0000E6930600C0163A7EE29641C6B273AB070030EF34 - 0000B6C8FE039779477C87C4AD1EB1130000605E6900006C11F7FE778F5B3E00 - 8079A60100B0458E1EF3EEFFAE71CB070030CF340000B680EDFFDD147FE7F177 - 0F00308F340000B6C00D37BAFADF556EFD0000E6950600C016387ACC2BE1BAEA - F8895B071900C07CD1000098B2FE36F00383195D137FF76EFF0000E6910600C0 - 9479F81FCE0100601E6900004CD961AF82EB3CE70000308F340000A6C8F67F42 - 9C03D75C7BDD600600301F340000A6C803E0486EF020480060CE6800004CD121 - AF8063C0B90000CC1B0D00802989F7BFEFDBB76F30A3EBE25C88730200605E68 - 00004CC9E1231EFCC65A47DD060000CC110D008029B1E59B925D2100C03CD100 - 009882A337DEACD0A3EA905702020073420300600A0E1F71F59FBA1B8EDD34C8 - 0000B6970600C02675FD616FCF3EFB6C73C7076F1BCC285D73ED75CDFE03970D - 660000DB4703006093BABEC5FBFE7BEF69DEFFBE770F66D4781B0000300F3400 - 0036A9EBDBFF3FF7D003CD430F3EB0B21380BAA36E030000E6800600C02678D7 - 7BD3DC77EF3D2BE3DD777E646564BDAB0E5EBD120000DB4903006013E2E9FF5D - 17B70084FBEEEB8FD4D90500006C370D00804DE87A51175BFF93BBEFFCF020A3 - E6B0D7010200DB4C03006083E2C9EE5DDFD6FDB9071F1C64FDB701E40D01D6DA - 7FE0C0CA1B010000B68B0600C00679B2FBFA6DFF77DFE53900C3DC70CC2D2300 - C0F6D10000D820F774C70E80B557FC4F7A10E05087348D00806DA40100B001B6 - FFD7B7FC7B1DE070DE1A01006C270D00800D387EE29641D65DE9E9FF25AF031C - EEF0110F030400B6870600C00678A27BD37CEEA1FA03FFBC0E70B8A337DEB4B2 - 13000060D634000026145BFFE389EE5D775FCB0E80B69D01AC3AA48104006C03 - 0D00800979F85F5F5BA1FFE8A947BC0E7084C3473C070000983D0D008009D9FE - 3FFA2ABF5D00C3C58300E341920000B3A4010030817EE166FBFFFD23EEF33F79 - 9707018EE26D0000C0AC6900004CC013DCFBDAEEFF4F620780D7010EE7561200 - 60D63400002670C855DB15E36CF1771BC070FD8749BA0D0000989D5D8391553B - 2A632DA27992C661B1ABB9EC75FF55B373F7E5BD1C5860B165FB861B6F1ECCBA - 2B0AFB3B6EBF6D306B77D1C51737AFFFE66F19CC68F3D77FF5D14106307BF15A - D257BDE61B561A9229A241F96D6F3CDABCF6DAEBD644ACBF78FA74F3E4134F0C - 7E1AA6E8DC99879B473EFEEF7BD9D99638D712218D8C10052C6BA53F937C4C11 - 057D1AA37992C614BB2BB1A779DD9B7EA3D9B5F7FA5E0E2CB01F7AF35B56DEE1 - DE75FFE1DFFD61F3277FFC878359BBF825F2E7DFF14B8319358F9E3AD5FCCC4F - FDF86006307D51B49FDF2BF2A3803FFFFC7D2BF3704D6FBE5127EFFC48F33BEF - FC35B77A315D679EBFB3F9F81FFC482F3BDD8B172B71268B6808A4318AFFB241 - 10CA919E54E4B22AFD99E4630A0D00E8A8B842F2F677FCF2CAD875BFF80B6F1F - 7B7BFFCFF7FECC3C3471B87FFA736FF3DA44602AA2A88F02FFAAABAE6EAE3C78 - F06BC5FE568826C0AFFE8A262F53A401301351C00230C2A1EBDFA0F81F98E4DE - FE93777E7890D1E6F8895B0719C064E2D6B4EFFBFE1F687EF2A7DFD6FCDA6FFD - EECA18F3D8ADB695C57F88FFEDADFEDF00A64F0300600C878F78F85F98F4C17E - A35E1788074B02E38B5BAB8E7FE7AD5F2BF8FFE18FBD7565BE99EDFC9BB15DFF - BBC0C6A56DEEAC4A7F26F998C22D00D04171E5FF97FEE5AF0F66DD36EEFDFFB9 - F82595E1621B6D6CA785E4E88D3737377855E4CA73324EDEF5E14E7F3FE22A7B - BC36F4F0F56F98BB5BAA36F2FF27402BB700CC442A725995FE4CF23185060074 - 50FC22FE436FFED1C1ACDB3672BF7A5CA9729568B83B3E785BF3DBEFFCB5C18C - AE8B2BBAB18D9B55F1EFCEEFBCF3D73BF3BC8CB8D21F5BECE316A1797E8E8A06 - 0053A501301351C0023084EDFF7DF1B4E78DFCF27DF22E57B64789DB003C6382 - C47321D68BABE03FF1D36F5BFA7BCEA3E88F6DFDF10695680279882A306D1A00 - 0043A4AB304C7EFF7FB2D19FEB9228FEE3419310147D75F13D8926C0B235CBE2 - FF3D7FF7BBBE7BE5AD2951FCFBFF7380ADA4010030845FC4566DF44A7EEC1A88 - FB7819CE4E13182D8AE5EFFBFE1F1CCC165B34987FE8CD6F5979C6CCDFF97BDF - ADF103CC840600C010F1E025FA367325DF2E80D1A2D9B46C5736D918DF97E1E2 - 15778BFC5D49857F6CF38FFFB700CC920600408BF825CD3B8EFBE20AFEA3A71E - 19CC26174FF166B478E024305A3C2871D128FC8179A00100D0C2F6FF5527EFDC - 5C01EF8AE678EC3821DC7F9FEFCB287F73811E9418BB1514FEC0BCD0000068E1 - 49DCAB365B90C41B043401468B1D27719510182E8AEA796FD2C6FF1DE3E17E6F - 7FC72F2BFC81B9A1010050D12FC43C90293979E7E65FE5E77580E3B941A1D079 - F769968DE5F091F97D7346DCCE13857F3CDCCFB33D8079A2010050612BF6AA69 - 14FFC10E80F11C3DE63900308E4373B803E09A6BAF6B7EF69FBCBDF9A137FFA8 - C21F984B1A00001587BD93FD6BA6753FB2D7018E27769E78F864B7F99E8C270A - EC79F9AEC4FF5DE23EFF9FFCE9B7F9FE02734D0300A060FBFF5AD3DA0110EC02 - 188F1D28DDB699376E744D5C71DF6EF14602F7F9038B420300A0A0F85AB5D9D7 - FF95BC0E703C5E0708E3B9E6B5DBD7008866716CF7FFBEEFFF01DBFD8185A101 - 0050507CADDAECEBFF4A76008C278A09AFA1EC36DF95F16CD776FB78BA7F14FF - B6FB038B460300201345972B39ABEEB8FDB641361DF13AC069DE52B0CCE6F909 - E7302FE276AD59BE3A335DF58FA7FB032C220D00808CA26B5514EBF1E0BE699B - D64305975D3CE15C33AABBE2FBC778AE3A7870906DADB8D7DF557F60D1690000 - 64E6F1B552DBE5EE2DBA526F07C078A2F83FE46D149DF5B987A6DF7C5B565B5D - 90C777319EEE1FF7FA032C3A0D008001DBFFD7DAAA07F6C54305B76267C1323A - 7C44430A46B9F2AAAD6B00C4FFBF104FF89F87B70D004C830600C080EDFFABB6 - FA5E7D0F381B8FA65477B905607C5BB50320AEF8FFC31F7BABEF20B054340000 - 7AE2173CEF705EB5D505FAB41F2EB8CCDC06D04D76C98C2F1E04384D69CB7FDC - F30FB06C3400007A14596B9DBC6B6BEFD38FE2E6D153A7063386397EE2964106 - B499D616FDD84D60CB3FB0CC3400007ADC6BBDD6DD776ECDFDFF39B7018C270A - 9259BEE60C16D134B6E91FBDF1E695A7FCDBF20F2C330D00A0F3E297BDB8D79A - BEB8F77F16F71F6FD543069791F3B37BEC9099CC669F0310F7FBFFD09B7F7430 - 03585E1A0040E7D9FEBFD6566FFF4F66D5685806C74FB817B96BE26D198C6FFF - FE8DED928906703CE8CFFDFE40576800009DE71EEBB566B935DF6D00E389879C - 6DF5BBCE61916DE4418051FCFFC44FBFCD0E1BA0533400804E8B7BAB1556ABFA - 0FE79BDD95C759ED365806478F794B054C4BFCBB1FC5BF7FFF81AED100003ACD - 959FB566FD7ABE593C6C70591C76AB0AB49AE4A9FD8A7FA0CB3400804E735575 - ADB82F7F96E21900B3FEDF5C54B1C559C3AA5B62470ED3958A7F4FFA07BA4A03 - 00E82CDBFFD78AA78E6FC783C7DC0630BEC347EC02E892E73C2473AA14FF001A - 004087DD70A3ABFFB993DBB41DDF8300C777C80E006835ACA11BBB6714FF001A - 0040871D3D76F32023CCFAFEFF24761DD8EA3C9E285E8EDEE8BC859AF35B8AFB - 28FEE3557F8A7F000D00A0A3E24AD1465E1BB5ACE25EFCED2CC2B7ABF9B0880E - 1FB10B00C615FFD6FF8337BF653003400300E8240FFF5BEBEE6D7E109F07018E - 2FAE66BA9209A3B9E71F603D0D00A093BC526DAD93776DEFEBF8DC06309943CE - 5F58277F0680E21FA04E0300E81CDBFFD79B872BF06E0318DFF113B70C322049 - C5BEE21FA09D0600D039C74FDC3AC808F3B2FDDEDB00C6D76F625D3698B1ACEE - BFCF77625251F4FF8337FFA8E21FA0850600D0395EA5B6D6BCBC873F6E0178F4 - D4A9C18C51E25900C0AAF3CFDFB772E53FBF150080B53400804EF100B5F5EEBE - 737BEFFFCF9D9CA3FFBBCC3B0FB284B58E7FE7AD8A7F80113400804E397CC4C3 - D37271D53D5E01382F3C07607C51E828760080496800009D62FBFF5AF35670BB - 0D60327601000093D000003AE3E88D37DBFE5F98C7F7EFBB0D607C5E6709004C - 420300E88CC3475CFDCFC595F678FFFEBCF1E4F3F1C5EB2CAFB9F6BAC10C0060 - 380D00A013E2CABFA7A6AF35AF57DA6357C23C3D9760DEDD70ECE6410600309C - 0600D009876C955E679E1FB877F71CDE9A30AF3CD7020018970600D009B6FFAF - 1557D8E3817BF3EAE45D9E03302EBB5B0080716900004B4F81B4DEBC5F619FC7 - 8713CEB3A36E030000C6A001002CBD78FA3F6B2DC215764D80F14583CB1B2E00 - 8051340080A5E75DE9EB2D42717DF22E0D804978CEC5F299E7DB7400584C1A00 - C052DB7FE0B2E6AA83570F668445B9B27EF79CBEA5605EDDA0D1B574BC0D0380 - 69D30000969A7BFFD75B942BEB51FCDC7FEF3D8319A35C73ED752B0D2F008036 - 1A00C052B3FD7FBD45BAB2EE3680C968780100C36800004BCBF6FFF5E29EE245 - DA56EC418093D1F0020086D1000096D6F113B70C32923B6EBF6D902D86474F3D - E2416813888697DB000080361A00C0D23AECA9E8EB2CE215F5BBDD0630118D2F - 00A08D0600B094FA57420F0C6684474F9D5AB9A2BE68DC0630198D2F00A08D06 - 00B094DC0BBDDEC9057DAD5EDC0210CD0BC6138D2FCFBE580ECF790D200053A6 - 01002C255741D75BB4FBFF738BDABCD82EC74FDC3AC858649E7F01C0B4690000 - 4B275E8566FBFF5A71057D918B09AF039CCC21AF0304002A340080A573F888AB - FFA5FBEFBD67902DA6F8BFFF22BDBE70BBEDDBB76FA511060090D30000968EAB - 9FEB9DBC6BF1B7D0DFED618013D10803004A1A00C05289AB9E71F5935571E57C - 199EA4BF0C4D8C593A7AE34DBE0B00C01A1A00C05271D573BD65B972EE758093 - 3BE461980040460300581A71B5D3F6FFF5EEBB6FB1EFFFCF69024CE6F011DF07 - 0060950600B034E26AA72DCFEBDDBD44AFD0F33680C9F4DF8871D9600600749D - 0600B0345CED5C2FAE982FD3D3F397A999312BDE060000241A00C052F0DAB3BA - 65BB62BE2C0F349CA5A3C76E1A642CA2871E7C609001C0E66900004BC1C3CEEA - E2FDF9CBC66D0093B9EAE0D56E035860CF2DD10E1E00B69F0600B0146CFF5F2F - AE1C3E7AEA91C16C79B80D6072C74FDC32C800802ED30000165E5CDDB4FD7FBD - 3B6EBF6D902D97B80DC0B6E8C91CB6430600E8D10000169EE2BF6E99EF955FD6 - E6C656D97FE0C0CAAD0000D3B44C0F9985AED00000169E879CADB7ACDBFF9365 - 7CB6C156F33D01A6CD435961F16800000B2DB6FFBBB2B9DEB217C8FD06C7A9C1 - 8C711CBDF1E64106B079BFFDCE5F5FEA46332CAB1D839155E9CF241F5344C324 - 8DBBB231C5EE4AEC695EF7A6DF6876EDBDBE97035376FC3B6F6DBEEFFB7F6030 - 23F9A73FF7B6A5BF4F3EFEDEE3EF9FF1FDEAAFFC922B760BE6277FFA6DCD35D7 - 5E3798C1F8E2FF0FC8DF2271FF7D1B6B0CEFDF7FD9CA6D4461A5F9FAE8A9957F - 4714FF4CDD99E7EF6C3EFE073FD2CB4EF7E2C54A9CC9E26C369ECBC614A11CE9 - 49452EABD29F493EA6D0008039F3F3EFF8E5AFFD62425F5C19FF999FFAF1C16C - 79C5B31FFEE18FBD7530631C777CF0B6E6B7DFF96B83198B4003809AB8F7FE73 - BD627CA5C87FAEFF60D4588B7FFF15E62C2C0D809948452EABD29F493EA6D000 - 8039125BFF7FF69FBC7D302379FF7BDFDDFCFEEFFDEE60B6DC7EE95FFE7AB36F - DFBEC18C51A24078DB4FFDB807772D100D00E296AE28F01F7AE8C195E2DE3350 - 585A1A003311052CC042F250B3BA8D6EF35C447E119E4C344B0E792520CCAD28 - F4FB3B757E7DE556AEB7FCF00F34BFF80B6F5F69EADEF1C10FF8370FD8340D00 - 606179B7795D977E413C7997FBD92775F888D766C2BC88823F766DC5F339DEFA - DFFEE84AD11FB7E944B11FC700A64D03005848B1FDDFBDFFEB45F1DFA5EDDD77 - DFF9E141C6B8E2D9096E9B80ED11F7E8C715FEBCE08FABFBF1503DB7E600B3A0 - 01002C24DBFFEBBA76453C7E61B62576725E0908B31357F2FFC3BFFBC395623F - 1ED01A57F815FCC076D10000169202A6AE8BC5B0DB0026A781065B2B8AFEB8B2 - FF333FF5D695C2FF4FFEF80F6DE907E6820600B0706C61AE8BADA55DFC05D37B - ED27D7BF85E6B2C10C9886F837382FFAE3DE7EAFE403E68D0600B0700E1FF1F0 - BF9AAE6E858F5FB05D599BDC0D37DA05009B15DBF8A3D04FDBFB15FDC0BCD300 - 0016CEA1EB3DC5BCE6E45DDD7D20DEDD6E0398D8D1636EA3818D8A866BBCAA2F - 1EE41757FD35218145A101002C14DBFFDB75F961786E03985CBC45236E0500C6 - 1357FBE309FEB1C53FDECD1FAFEA0358341A00C042B1FDBF2E8AFF2E3F513AAE - BEC5FDB74CC6C30061B4746FFFDB064FF0B7C51F58641A00C0C2882BFF47DDB7 - 5CE549F8B10BA0BBB7406C94B76940BB28FC639B7FBAB7DF6BFB8065A001002C - 8C43D7BBFADFA6CBDBFF933B6EBF6D9031AE68AAC56D35C0AABCF0B7CD1F5836 - 1A00C0C2387C44A15213BFAC7A0055FF360057E826E7B61AE853F8035DA00100 - 2C04572ADBD9FABEEA6E0F039C98B76AD0750A7FA04B3400808560FB7FBBFBEF - B3FD3FE9F2AB1037AAFF6C0DCF02A07B14FE40176900000BE1F8895B0619B9D8 - F2EE1578ABE2CFC26D0093737B0D5D12FF46FC877FF787CD3FFDB99F51F8039D - A30100CCBDFD072EF3BEF2161EFEB79EDB002617B7D7C44E005876D124FCA73F - F7B6E64FFEF80F350B814ED20000E69E7BFFDB79FDDF7A6E03D818B7D9B0CC62 - BBFF2FFEC2DB9B5FFD955FEAE5DEE30F7497060030F78E1EF3EEFF36777B00E0 - 3A6E03D818B7D9B0ACEEF8E06D2BDBFDED9802D00000E69CEDFFEDBCF6AE9DDB - 002617DFB3F8BEC1B2887F1FE3217FBFFDCE5FF36F25C080060030D76EB8D1D5 - FF3677DC7EDB20A3E436808D71BB0DCB220AFEFFE517DEEE217F00050D0060AE - 1D3DE6F5646D3CFDBF9DADBE1B73FCC4AD830C1657EC8E8A07FDC508C05A1A00 - C0DCEA6F493E3098918B5F6C3DC8AA5D5CFDD320995C7CDFDC72C3A2FB9D77FE - BA7F1F015A68000073CBC3FFDAB9C23DDA1DB7DBFABB11BE772C3A57FE01DA69 - 000073EBB0D792B572FFFF68DE06B031BE7700B0BC340080B964FB7FBB789FB5 - 2B5CE3F13680C9C5F7CEC30001603969000073C9C3C8DA9DF4EEFFB1791BC0C6 - 1C3E621700002C230D00602E1D7205B2D5C9BB5CD51E97DB0036C6F70F009693 - 0600307762FBF1BE7DFB06337251CC7A00E064DC0630B9F8FEB90D0000968F06 - 0030776C3F6EA7989D9CDB0036E6E8B19B071900B02C340080B963FB713BC5EC - E4DC06B03176E200C0F2D10000E6CAD11B6F5674B48822368A592667E7C4C61C - F24A4000582A1A00C05C397CC4D5FF368AD88DB37362636E3876D32003009681 - 060030373C786C3845ECC6B90D6063AEB9F6BA66FF81CB06330060D169000073 - C376E376B6FF6F9E1D141BA3290700CB430300981BB6FFB753BC6E9E1D141B73 - D46D0000B034340080B960FBFF708AD7CDBBFFDE7B061993B8EAE0D52B01002C - 3E0D00602EC4D3FFA9B3FD7F3AFC396E9C5D0000B01C340080B9A0C06867FBFF - F49CBCCB9FE5461CF67C0E00580A1A00C0B68BA78CDB62DCCEF6FFE9B9FB4E7F - 961BB1FFC08195370200008B4D0300D876EEFD6F67DBFA74C59FA767016CCC0D - C7DCA603008B4E0300D876B6FFB7B3FD7FFADC06B0318734EA0060E1690000DB - CAF6FFE1FEECF60F0C32A6C58E8A8DF1A60E00587C1A00C0B63A7EE2964146E9 - D153A76C57DF028F9E7A64E5CF96C91D751B00002C340D00605B79BA78BB931E - 58B765FCD96E4CEC00889D0000C062D20000B64D6CFD8FA78B5377C7EDB70D32 - A6CD730036EE90A61D002C2C0D0060DB78F85FBBD8A2FED0830F0C664C5BDC5A - 116F046072878F780E00002CAA1D839155E9CF241F5344C3248DBBB231C5EE4A - EC695EF7A6DF6876EDBDBE9703999F7FC72FDB01D0E28E0FDEE601805BECFBBE - FF073C8072837EE6A7DEBAF22C05B6DE4FFEF4DB9A6BAEBD6E30631C6FF9E11F - 1864C04239F3FC9DCDC7FFE0477AD9E95EBC588933599CCDC673D9982294233D - A9C86555FA33C9C7141A003025712FF13FFCB1B70E66C022F9FDDFFBDDE6FDEF - 7DF760C656D200989C06002C280D809988021660E60E1F711F312C2AB7EF00C0 - 62D20000B6C521EF138785D57F80E765831900B02834008099F32A31587CC74F - DC32C8008045A10100CC9CEDFFB0F80E7B1D20002C1C0D0060A6E2CABFEDFFB0 - F8E20D1EDEA200008B45030098A943D7BFC1F67F5812C74FDC3AC8008045A001 - 00CCD4E123AEFEC3B2B09B0700168B0600303371E53F1E00082C07DF6900582C - 1A00C0CCC4F67F60B978A827002C0E0D0060666CFF87E573F4C69B3CD7030016 - 8406003013FB0F5C66AB302C29BB7B00603168000033A1F887E565770F002C06 - 0D0060268E1EBB699001CB261A7CB1CB0700986F1A00C0968BC2E0AA83570F66 - C032B2CB0700E69F0600B0E51406B0FCECF20180F9A701006CB9E3276E1D64C0 - B28A5D3E6E030080F9A601006CA97E517060300396D90D37DA050000F34C0300 - D852B60543771C3D76F3200300E6910600B0A50E7B3F387446ECF6F1C04F0098 - 5F1A00C096B1FD1FBAC7AE1F00985F1A00C096510840F71CBDD16D000030AF34 - 00802DA31080EED9B76F9F577F02C09CD20000B6441400510800DD73F888677F - 00C03CD20000B6840200BAEB90062000CC250D00604B440100745314FF87BC01 - 0400E68E06003075B6FF03878F680202C0BCD10000A6CEF67F40231000E68F06 - 003055F10BFFD11BBDFE0FF026100098371A00C054B9EF17488E1ED30C048079 - A201004C95FB7E81E4AA835737FB0F5C36980100DB4D0300989AD8FE1FF7FD02 - 24FE4D0080F9A101004C8DEDFF40E9F8895B071900B0DD340080A9397EE29641 - 06D0B7FFC081955B010080EDA701004C45DCE7EB977CA0C6C30001603E680000 - 53E13E5FA0CD61B70701C05CD00000A6C2153EA04DDC06A0490800DB4F0300D8 - 34DBFF81510E1FB10B0000B69B0600B06937DCE8EA3F30DC213B000060DB6900 - 009B76F4D8CD830CA06EDFBE7DCDD11BFD5B0100DB490300D894D8FA1FF7F702 - 8C72F8885D0000B09D3400804DF1F03F605CF120C0D80900006C0F0D006053BC - DE0B98C421FF6600C0B6D1000036CCF67F6052C74FDC32C8008059D3000036EC - F8895B0719C078FA8DC3CB06330060963400800DF35A2F6023E2590000C0EC69 - 00001BE2615EC046D93D0400DB430300D890C3473CC80BD898787648DC0A0000 - CC960600B021B6FF039BE115A200307B1A00C0C48EDE78B3EDFFC0A678852800 - CC9E060030B1C3475CFD0736276E03B8E6DAEB063300601634008089C4957F4F - F006A6E18663370F32006016340080891CB26D179812CF120180D9D200002662 - FB3F302D761401C06C69000063F3CB3A306D47DD06000033A301008C2D9EFE0F - 304DD154F4561100980D0D00606CDEDB0D6C05CF160180D9D00000C6B2FFC065 - CD5507AF1ECC00A6E706CD450098090D00602CEEFD07B6CA35D75EB7D2640400 - B69606003016DBFF81ADA4C908005B4F030018C9F67F60AB693202C0D6D30000 - 463A7EE2964106B035A2C9A8D108005B4B030018E9B027740333601700006C2D - 0D0060A8B822B7FFC081C10C60EB683602C0D6D200008672450E98956836C61B - 010080ADA101000CE58A1C304B371CBB79900100D3A60100B48AD772D9FE0FCC - D221AF0304802DA30100B43A7CC4D57F60B6F6EDDBB7D27C0400A64F030068E5 - 4A1CB01D341F01606B6800005571052EAEC401CCDAD11B6FF2EF0F006C811D83 - 9155E9CF241F5344C3248DBBB231C5EE4AEC695EF7A6DF6876EDBDBE97C3C2F8 - A137BF65E5977046BBFFDE7B9A5FFC85B70F6674593CC1FE277FFA6D83199BF1 - DBEFFCF5E68E0F7E6030EBAE389FBC1961326FF9E11F1864C04239F3FC9DCDC7 - FFE0477AD9E95EBC588933599CCDC673D9982294233D760000EBC49537DBFFC7 - 77F2AE8F0C32BA2E9A418F9E3A3598B119878FF8370800A64D030058E7D0F56F - B0FD760227EFD40060D5C93B3F3CC8D88CFE5B482E1BCC008069D00000D671E5 - 6D7C0F3DF840F3E8A9470633689A3B6EBF6D90B159DE060000D3A50100ACE115 - 5C9351EC51EA3785DC06300D478F790E09004C930600B0466CFF677CB6FF53E3 - 3680E9B8EAE0D56E03008029D20000D6B0FD7F7CB6FFD3C6CE90E9397EE29641 - 06006C960600F03571A5CDF6FFF1DDEDE9FFB4701BC0F41CB62B0900A6460300 - F81AC5FF646CFF6718B7014CC7FE0307566E050000364F0300F81A0FDC1A5F5C - DD8DABBCD0E6FDEF7BCF2063B38E9FB8759001009BA10100AC88EDFFAEB28DCF - D55D4689E74368124DC721BB9300602A34008015B6FF4FC643DE1887F3643ABC - 9E1400A643030058618BEDF86CFF675C9E13313D878F781820006C9606003078 - D7F681C18C516CFF675C6E03989EB80D20760200001BA7010078F8DF846CEB66 - 12CE97E988E2FF90570202C0A6680000DEB33D81679F7DD6155D26E23680E939 - 7CC473000060333400A0E36CFF9FCCDD8A3926E43680E9890701BA0D0000364E - 03003ACEF6FFC99CBCCBFDFF4CEEFDEF7BCF2063B38EDE78F320030026A50100 - 1DE797E9F1C5F67FDBB9D988BB3D38726A342D0160E33400A0C36CA79D8CEDFF - 6C94E6D1F4F46F5BBA6C30030026A101001DE6BDDA93B1FD9FCD38799706C0B4 - DC70A35D0000B0111A00D061F15E6DC6E30A2E9BE53680E9397ACCAD4B00B011 - 1A00D051B6FF4FE6FE7BEF1964B0319A48D3136F2E895B010080C968004047D9 - FE3F19DBB79906E7D1F4781820004C4E03003A28AEFC1F750FED446CDF661A9C - 47D3E30D260030390D00E8A043D7BBFA3F89D8B61DDBB761B3DC06303DD1C88C - 5B990080F1690040071D3EE297E649D8B6CD34DD71FB0706199BE5562600988C - 0600748CAB6693B36D9B69B2A3647AE24D261E660A00E3D300808EB1FD7F328A - 35B6C2DD6E03988A28FEFD9B0600E3D300808E397EE29641C6386CFF672B9CBC - CBAE9269714B13008C4F03003A64FF81CBBC3B7B42F7DF7BCF2083E9B1B3647A - E29626B70100C0783400A043DCFB3F99871E7CA079F4D42383194C97DB00A6C7 - 6D0000301E0D00E890A3C7BCFB7F1277DC7EDB2083E9731BC0F4B8B50900C6A3 - 01001D61FBFFE4BCAF9DADE43680E9897FDBE2DF380060380D00E8881B6E74F5 - 7F12B6FF330B6E03981EB73801C0681A00D011478FDD3CC81887EDFFCCC2FBDF - F7EE41C6661D3F71EB200300DA68004007F4B7C71E18CC1887EDFFCC427FA7C9 - A9C18CCD887FE3DCE60400C36900400778F8DF64A220B3FD9F593979A787014E - 8B7FEB0060380D00E880C35E9135110519B3E47693E9F16F1D000CA701004BCE - F6FFC929C89825B7014C4FFC5BE7618000D04E0300969C07634D260AB128C860 - 96EC3A999EC347EC020080361A00B0E40EB91A36118518DBC1AE93E9F16F1E00 - B4D3008025165B61F7EDDB3798310E8518DBC16D00D313FFE61DBDD16B4F01A0 - 4603009698ADB093B1FD9FEDF4FEF7BD7B90B159878FD8050000351A00B0C46C - 859D8CEDFF6CA793777E6490B159763F01409D06002CA9D802EB17E0C9DC7FDF - 3D830C66EFD1538FD881324587BC121000D6D1008025650BEC649E7DF6595760 - D9769E41313DC74FDC32C8008044030096505CF9F72EECC9DCADF8670E68424D - CF5507AF6EF61FB86C3003008206002C215B5F2777F22EF7FFB3FDDC06305D1A - A100B09606002C21DBFF2763FB3FF3C46D00D373F4D84D830C00081A00B0646C - FF9F9CEDFFCC13CDA8E989DB002200803E0D005832F1F47F2663FB3FF3246E03 - B8FF5E6FA49816BB0000609506002C19BFEC4E4EB1C5BCF933B7014CCD61CF44 - 0180AFD1008025124FBCB6DD7532B1DD3A9E0100F3E4EE3BED4A9996FD070E34 - D75C7BDD600600DDA601004BC4BDFF933B7997FBAD993F1E4C395D371C736B14 - 00040D005822B6FF4FCE9556E695E6D4F41CD21C0580151A00B0246CFF9F9CED - FFCC33CDA9E9F1761400E8D300802571FCC42D838C71B9C2CA3C731BC0741D75 - 1B00006800C0B2F0A4EBC9B9C2CABCD3A49A9ED801103B0100A0CB34006009C4 - D6FF78D235E38B57FFD9FECFBCD3A49AAE431AA500749C06002C010FFF9B9C2B - AB2C826852DDF1C1DB063336EB06FF5602D0711A00B0046CFF9F9C7BAB591427 - EFB20B605AAEB9F6BA9507A60240576900C0828BFB5A6DFF9FCC430F3ED03C7A - EA91C10CE69BB7554C97B70100D0651A00B0E00E1F71F57F5277DC6E4B358BE5 - 6E3B56A6C62D5300749906002CB843AE664DCCF67F168DDB00A6A7FFD054B701 - 00D04D1A00B0C0BCD66A72B6FFB388DC06305DC74FDC32C800A05B34006081D9 - FE3FB9BB3DFD9F05E53680E9F1E05400BA4A030016545CF9B7FD7F72B6FFB3A8 - DC06303DF1E0D4B8150000BA46030016D4A1EBDF60FBFF841E3D756AE5160058 - 446E0398AEE3276E1D6400D01D1A00B0A00E1F71F57F5227EF740595C576C707 - 3F30C8D82C3BA800E8220D00584071E5DFBBAC27E7F57F2C3AE7F0F4F8771480 - 2ED200800514DBFF998CEDFF2C83FE5B2C4E0D666C9607A902D0351A00B0806C - FF9F9CEDFF2C0BE7F2F41CBDF126CF5201A053340060C1EC3F70996DAB1B60EB - 34CBC2B93C5D765401D0251A00B06014FF938B27A7DBFECFB2701BC074D95105 - 40976800C082397AECA641C6B8EEF6EE7F968CDB00A6279AAAB1B30A00BA4003 - 001648FC927AD5C1AB0733C675F22EC512CBC56D00D3656715005DA101000BC4 - 2FA9938BEDFF27ED0060C9C46D006E6B991E3BAB00E80A0D005820C74FDC3AC8 - 1897EDFF2C2BBB00A6277656B90D00802ED0008005D1FF05F5C060C6B86CFF67 - 59D9D9325DC74FDC32C80060796900C082B0457572B6FFB3CC1E3DF588DB00A6 - E8B0D70102D0011A00B020FC723AB9FBEFBD6790C172721BC0F4C40E2B0F5905 - 60D96900C002887B536DFF9FDCC9BB5CFD67B9D9E1325D765A01B0EC34006001 - 28FE37E66EEF4A67C9B90D60BAEC00587C8F9E3A35C800A8D1000096525C198D - 6700C0B2731BC0F4CCE39B00FC3B3699688A01D04E030016C0737E019C48FCC2 - FCFBBFF7BB83192CB73B3EF80145E2943CFBEC33836C7EDC71FB070619E3B003 - 0060380D005800B1C5D736DFF1A4E2DF5520BA22CEF9FFE517DEAE0930059F7B - F0C141363F6237D31D1FB4CB635C7FF2EFFE70900150B36B30B26A4765AC4534 - 4FD2382C763597BDEEBF6A76EEBEBC97C386FDF55F7D6C657BEA2B2EBF62B042 - 297E51FE9D77FE7AF3D71FFBE86005BAE1C9279E683EFE571F5DF9F7611EB7B1 - 2F8228B27FFFF7FE7573FAF4E9C1CAFC88079AEEE8FDC671E5C1AB9B3D7BF60C - 56C94593FC37FEB77FD97C4EB31C16D7B9330F378F7CFCDFF7B2B32D71AE2542 - 1A19210A58D64A7F26F998220AFA3446F3248D297657624FF3BA37FD46B36BEF - F5BD1CA6221E5475FEBE7D8319C12BFFA06F5FEFDF862814194FDC62B5483BAC - FCFBBF9E7FFF61499C79FECEE6E37FF023BD2C3AB12F56E24C16D110486314FF - 65832094233DA9C86555FA33C9C7141A00000000D3A601301351C0020000004B - 4E03000000003A4003000000003A4003000000003A4003000000003A40030000 - 00003A4003000000003A4003000000003A4003000000003A4003000000003A40 - 03000000003A4003000000003A4003000000003A4003000000003A4003000000 - 003A4003000000003A4003000000003A4003000000003A4003000000003A4003 - 000000003A4003000000003A4003000000003A4003000000003A400300000000 - 3A4003000000003A4003000000003A4003000000003A4003000000003A400300 - 0000003A4003000000003A4003000000003A4003000000003A4003000000003A - 4003000000003A4003000000003A4003000000003A4003000000003A40030000 - 00003A4003000000003A4003000000003A4003000000003A4003000000003A40 - 03000000003A4003000000003A4003000000003A4003000000003A4003000000 - 003A4003000000003A4003000000003A4003000000003A4003000000003A4003 - 000000003A4003000000003A4003000000003A4003000000003A400300000000 - 3A4003000000003A4003000000003A4003000000003A4003000000003A400300 - 0000003A4003000000003A4003000000003A4003000000003A4003000000003A - 4003000000003A4003000000003A4003000000003A4003000000003A40030000 - 00003A4003000000003A4003000000003A4003000000003A4003000000003A40 - 03000000003A4003000000003A4003000000003A4003000000003A4003000000 - 003A4003000000003A4003000000003A4003000000003A4003000000003A4003 - 000000003A4003000000003A4003000000003A4003000000003A400300000000 - 3A4003000000003A4003000000003A4003000000003A4003000000003A400300 - 0000003A4003000000003A400360E3CE0DC651C6FD1C00004097A9B1B69806C0 - 2C9C3BFBD420030000A0A4669A090D805938FDD5FB07190000002535D34C6800 - 00000040076800000000400768004C5F3C90A27828853F6600008076EB6AA64A - 5DC566A94C27D37602A6F5FCB8931500006072B5BAAAADBE52774D400360164E - 3F79DF20030000A0A4669A090D80CD896ED3B08E53FFD88B2F3CBD32020000B0 - DE6ACD34AABE1A769C113400000000A0033400A62775A2CAAED4B9E6ABA7BE30 - C801000028F56BA6B575D4EA3C5F67133400A6AB3C61FB1EFDE4C3830C000080 - D2DA9AA95E57B1691A005B2B9DAC4E5A000080766AA719D000D8BC512768FFF8 - D9D39F58190100005875E6F93B07D978B5151BA601B031E58917F36127E3B9E6 - DCD9A706390000006B0DAFA7D61F1FF6795A68004C2E9D686D275C3A39D71E3F - F3A2E70000000094CE3C7FFF204BEA35D5AAB4DE769C161A00EDCA93A976728D - FACCEAFCCC690D00000080D299B34F0FB2307E8DB56A9CCFD0A301305A9C3CA3 - 4EA0FC78FA7C5AEBE72F3C5976B5000000E8D74AEB6BA8D579C8F39AF2F35468 - 006C5E3AC96A27DBEA49F8E269CF0000000028ADD64AABF5D35A69AD768C0968 - 00AC37ECA4CA4FBCDAE7DA7EF65CF3C467EC0000000028F56BA5F65A6ABDBC1E - 6BFBB930EC582769006C4EDB09954EC8D5E3CF7CE9C9E6DCB9FCDE160000806E - 8B1A296AA555EB6BA9B5DAD6198306C0E4CA13AE3C41DB8E37CDD917EC020000 - 0048566BA4BCA64AD23C1D6B3BCE983400A62B3F31F308E7BC090000002073FA - F94FF4FECFD59AA91E4C8906C0748C3A39FBC75EFC6A9CDC00000084B32FC445 - D2D1B554FB7126A001B071E39EA4AB9F79EE89FB06190000006B6BA47A1DB5D6 - B0638CA001309974A2E5275CB9968F6BF3273E6D0700000040D2AF91D6D74E7D - 6D63A8AD318206C070F94935ECC42A3F977F7675ED992F3FD99C7BD173000000 - 00A2368A1A29AF9956956BF9B1D2B89FEB3C0D80BA5127571A53D4D48E9F6B5E - 7CD12E000000807E6DB4B65E5A5F43E5CAE36D9F0BC38E759606C0C69427533A - 09D37A6DECE7673C0810000020AB8D56EBA5FA981F4FCA3963D00098BEF204CD - E7E79A674E7D24160100003AAD5F1BADAD97FACA3953A201B039C34ED27CBEBA - F6853FD700000000E8D746C3EBA7FA9C0DD200985C7EF225E55A8CED71F6B4DB - 00000080EEEAD744F57A6935423986DA1A63D000182D3FB9869D60A33E97D6CF - 352F3C77E7CA0A00004017F56BA2D51A69BD7CBD763C19F773F46800B41B7592 - A53145523B9647D33CFF150D000000A0BB566BA25ACD1411D218861D2B0D3BD6 - 691A001B579E54E5C9D81E8FDEAF010000007457BF26AAD74BAB11F23C29E78C - 490360F36A27676DBEBAF6CC979FF41C000000A093A2168A9A28AF91D646689B - B3091A001B939F8449B916631967BF967B0E000000D0456BEFFF5FAD91D64628 - C7505B634C1A00E3C94FB2F244CBD76A9F4BF9DAB9E7000000005DD4AF85D6D7 - 48EBE7A1B696D43EC7101A00C30D3B89F2932DA4F9B058ED6E3DF8C1FFB33702 - 0000744BBF165A5F230D8FA49C97861DEB3C0D80E94B27647E62D6F273CDE967 - 3FB0B2020000D005FD1A68B526EAABE5F91A53A201301D6D2767ACE51DADC857 - E7A79FB9AB370200007443BF06AAD747AB79291D67933400362E9D80F989984E - CC3C427DFE954FBA0D000000E88E7E0DB4BE36AACFF3F590F27C8D0968008C2F - 3FD9CA132EAD8D13AB5DAEC73EFD05AF030400003A216A9FA881CABA68FCC8E5 - 6BE5315A68008C36EC64CA4FBA5C5A1F1D5F7DFC5DBD11000060B9F56B9F7A5D - 548F52DB7A32EC183D1A00D3934EC674D2E5632DFADDAEAF7CD28300010080E5 - D7AF7D566BA17A847CCCD7D9240D80CDA99DA0E5382CCEBA0D000000587AABDB - FFC7D9F61F468D6C8006C064F293AECC6BF371E2ACDB00000080A5D6AF7926BD - E73F22B4CD431A198306C078367252A593328F38E1F3E8AFBB0D0000005866AB - DBFFDBEBA2B531A98DFC4CE768004C4FED841D67CDDB00000080E5B5F6E9FF65 - 8471D7D8240D808DAB9D8CF95A2DCAEED66AD7EB9947FE4D6F040000582EFD5A - 67B5F6595F13E5F35A24B53526A00130B9DAC9563B09D3DA78F1C85FFFE7DE08 - 0000B05CFAB54EBD0E6A8F5C6D2DD4D6184203607CE39E5CE9E44C9F4FF9F04E - D7335F7EAA79E1E9FFBD970300002C87A871A2D6C96B9FE1B551C88F8D63DCCF - 759E06C074D44ED414211FE3E44E2778CAFBF1D4C37FDA1B0100009643BFC659 - 5BF7ACAF8B423E9611D2C82668006C4C7E12D6F224E6F9099E3E538F2FFCC59D - CDB9335FECE50000008B2D6A9BA871CABA677D9435532E7D26943913D20098CC - B827593A31F39333226F02449E477FFDB9C77EBF370200002CB67E6D33BCFE59 - 9B8794A7F928E37E8E1E0D80E9A99DB0B5284FF8B5EB0FDFE53600000060F1F5 - 6B9BE1F5CFFAF532421AD9240D808DCB4FC65A9EA4B532D209BF369E7DE4490F - 03040000165AD43451DBD46A9E7ED46AA4885CBE56E66C8006C0E4C63DD9D209 - 9A9FA4E3C5639F761B000000B0B8FA354DBDDEA94728E7A38CFB39063400A6AB - 76E2D62275BCCA2E583F1EF9D87DCD8B5F3DD9CB010000164BD43251D3D46A9D - 7EE435D1B00869640A340036273F296B7992D6F2187EC23FFEE06FF646000080 - C5D2AF65EA754E3FDA6AA15CBE56E66C9006C0C68C73D2A593B48CFC648FBC1E - 0FFFE5479AB35E090800002C90A861A29629EB9BB551AB8DCA18659CCF50D000 - 989EDAC99AAF45A413BC3CE9EBF1CC97EC020000001647BF86A9D737FD18561B - A5486A6B6C8206C0E6D54EC6FC244D79392F4FFEF5F1D9FFF4A776010000000B - 216A97A861CABA66356AB5504879392FD5D6988006C0C60D3BF9CA13B72DCA2F - C2FAB00B0000005804FDDAA55ED7F46374FDD38F90C69A61C7184203603AF293 - B49627692D453AF9D317617D7CF63FBDCB2E00000060AEF5AFFEBF2BB22191D7 - 4079E4F2B53267933400B65E3A69CB13BDFC02C4588F67BEF85BBD110000603E - F56B967A3DD38F5A0D94229FB385340036A77682A613B78C90F2B6133EC6F5F1 - D9FFEC59000000C07C5AB9FADFAB59CA3A663586D54011213F9647A9B6C69834 - 00A667D889989FC079E4277D99AF0DBB0000008079D47EF5BFADD64979196D86 - 1D63021A009B37EE899A4EEA14E9C44F5F8E3CD6AFAFEC0238FDC95E0E000030 - 1FA246A95FFD1F55EBC4984792E7A561C7188306C074A513323F896B795B945F - 8EB5F1D8677EA537020000CC877E8D52AF5F56A356FBE41186E54C8906C0D62B - 4FE2326A5F9088F5C71EFECB8F342F7EF5642F070000D85E519B448D52D62DA3 - EB9C5A8434B2453400A6A376A296277299B745ED4BB21A5FBAF3E77B230000C0 - F6EAD726F5BA65356A354F1EA12DCFD5D6989006C0F40D3B59D3C99C227D21CA - 2F497B3CF6992F345F7DE20F7A390000C0F6889A246A935ACDD21E790D944748 - 63AEB6C62668004C4FDB099B9FD065DE16E517646D7CFECFDFD99C3BF7742F07 - 000098ADA845A226A9D52AEBEB996111DAF25C6D8D0DD000D81AC34EDA7452A7 - 28BF24A3E3D9479E6C9E79C46B01010080D98B5A246A925AADD21E79ED934748 - 63AEB6C62669004C57DB899B9FD865DE16E51726C59995F133EFFB7DAF050400 - 00662A6A90A845F2DAA41EB51A278FD096E76A6B6C9006C0D61976F2A6933B45 - FA82945F9AE1F1A58FFFB3DE080000301BFD1AA45E9FB4475EF3E411D298ABAD - 31051A00D3D77602E727789947E45F8CB658DB613BF557F77B20200000301351 - 7B440D92D724C3770144E4B54E8AD096E76A6B6C8206C0D61A7612A7933C8FF2 - 8B917F71EA5FACCF7FE8379BB367BED8CB010000B646D41C517B94F5483FCA5A - A5AC69F2798A90C65C6D8D29D9351899BE1DC598E4F3FC337984944793263F96 - 47D39C7EF674B3FB259F6EF61DB875650E0000306D8F7EE2679BAF7CF233BD2C - 15FB31E6918AFF3C8F623E8D29425B9EABADB1491A005BA75FA0F7A57CB5705F - 7FBC3C56E665847EFEF417BED85C74F585CDEE97BCAEBF0C00003025B1F5FF81 - FFFC47BD2C15F8A9C84F795EF4471EC57B9AA7023F8F90C65C6D8D29720BC0D6 - 693BA1F313BECC53E45F9694E7517EC1E25680DF722B0000003055FDADFFF10A - F27A1DB23ECA7A268FD096E76A6B4C811D005B2B5DA90F6BAFDAF795C7F308E5 - 5AB91EFAB95B0100008069EB6FFDFF6C2F8B823F4514F7659E8AFE14A9B82F23 - A431575B63CA3400B65E5EA8E7C699E73F5B46583B7FFA0B5F6A2EBAFA02B702 - 0000009BD6DFFAFFC7BDAC2CFACBC23F8DA9F04F79BE9647C8F35C6D8D29D100 - D87AA9580F65E19ECBD7CAE3699EAFD7E64DF3D8FD1F6EF65F7B73B373D7A52B - 7300008049BDF8C2A79AFBFEF86DBDAC56ECA748057E9E4744119FC6908AFD14 - A5DA1A5B40036036D616E9AB52015F1ECF3F571ECF23ACCF77EDB8A7D9F7757F - B3D9B1E3BCFE320000C098CE9D7DBA79F4AF7EB679E69153BD595EEC97792AF8 - 238F223ECD23F282BF2CF06B6BA1B6C6146900CC462AD043AD704FCA63F967CA - B53CC26AFECC235F69CEDFFF78B3F7C21B57E6000000E37AEAF3BFD47CFE2F3F - D4CB8615FE69CC230AF834B645A9B6C616D100989D54A887325F2DDEFB46ADA5 - F57C5CBBF6C4039F6A2E7ED515CDEEBDDFB03207000018E5F9A7DED37CFABDBF - D9CB6A05FFB0E23F4559F097057EBE961F2B3FC716D000989D54A0873C2FD58E - E5C57D1EA136F6F3E71EFD6873E1C1377A1E0000003052DCF7FFD06DFFA439FD - EC73BD5914F3A9E81FA7F88F02BE9C8718CB609B6800CC562AD2C3FA82BDFD78 - 39D622ACCD4F3FFB42B373C7BDCD4B3D0F0000001822EEFB3FF557FF43F3F803 - 9FEFCDA280CF0BFEBCE8AF3500A2A84F632AF0CBBC94AFD58EB3053400662F2F - D673E53CA4823E3F96AFD5D6C3EAF8CC238F35E75DF0B9E6FC4BFEE6600D0000 - 60ADC73FF33F350FDFF9915E16857C5EFCA73145CC6B910AFE88721EF23C575B - 638B6800CC5E59B4E763AE762C5FAB4592CF77344F7EEEA1E6C22B76357BF61D - 1AAC010000F43D77EA5F359F5D79DF7F14EE6D457F5BF11F057C9EA7823EE5F9 - 5A52CE99110D80ED5116EB69CCF3A45CCBC7722DD43FF7D8A7EE6E2E7DCD3736 - BBCE3BD85F0600003AEFF433B737F7FFE92FF6B228E0F3A23F2FFCF33C15FB11 - 51C8A7B18C90C6306C8D19D100D81EB5823D29E7A15FC4AFFFB9342F8FD7C767 - 4F7DD8430101008015F1D0BF073FF0B38387FED50AFDB2E02FE71151C4A728E7 - 21CFD9661A00DB2715E7212FD4F3F5901F4B6A6B21E66D9FEF3F14F0CC331F6E - 2EB8F2560F050400800E8B87FE3DFCA1B7364F3DFC486F16857B6A00D48AFF7C - 3D4514F5795E16FC699ECBD76AC7D9621A00DBAB56AC87B6223E1F43BE565B0F - F9679AE6AB4F3CD39C3DFB91E6652FFF1B9A000000D04151FC7FF1EE9F681EFB - E4677BB354DCA702BF2DAF455EECA708F998F25C6D8D19D000D85E6D457B28E7 - 21D6F24886AD2729DFD13CFBC863CDF9FB1F6FF65E78E3600D0000E88A78E2FF - 17EFBAB397A5023F8F28ECF3BC16A9B04F51AE853C0F79CE36D100D87EF5227D - ED7A28E7B9519F5F9F3FF1C0A79AF32F7DA4D97BE1B195390000B0FC9EFCDC3F - 6F1EFAE07FEC6579D19F8AFD5A9EE66D5116FCB5423F5FAB1D67463400E6432A - D0DB8AF818E38B92CFF308E5B1A43D8F26C08557ECF47A400000E88078DDDF67 - DEFFFBBD2C0AF75AB15FE665A402BF8C3816224F63CA73B535664803603EB415 - E921CD877D26E49FABFD4C58BF1EAF07BCF8559737BBF77EC3600500005836CF - 3FF59EE613EFFA955E562BF6F348EBA9E86F8B54E4A7A23E1F531EF29C6DA601 - 303FF262BDAD80CFC5B13C4AA3D656F347EFFBB3E6E2575DD1ECDEFB9AC10A00 - 00B02C9E7FEABDCDFDFFFE7FEE6579A1FF6231CF230AFC3C2F0BFE88DA5A442E - 9F97C7D8061A00F3A556A0C798AF87725ECA7FA61CC3FAFCD1FB6ED704000080 - 25D32FFEFF592FAB15F6659E8FC32215F3A9E8AF15FAB535B69906C07C692BD2 - 439AC7185FA07C5E8AB57CBDED33493FD704000080E5B1B6F88FC8AFFA973B00 - A2B04F635B441D9222E62115F7699D39A601307F8615EE695EFB4C8C29923CCF - B57F461300000016DFFAE23F2FF2CB3C8FB45E16FC65847C4C7968CBD9661A00 - F3A956A0B715F3A1ED58FEB37994D6AE69020000C0E2AA17FF11B5ABFEE34614 - F2692C2397CFCB636C330D80F95416E969DE56C087DAB1B6CFE6EA9FD1040000 - 80C5D35EFCA782BFB69E222FF853A4223FCF532429CFD798431A00F32B2FCC47 - 15F6E56753E46A6B496D7D87260000002C90D5E23F8AF55A815F7BF27F5EECA7 - C88BFC340FF97AC8F352DB3ADB480360BEE58579ADA04F637CB96A457C4DDBE7 - EAEB9A00000030FF9E7BE20F9B4FFCC92FF6B2B2C04FD156FCE7792D52911F79 - 48857D5A4FDA72E68806C0FCCB0BF3B2484FF318E34B562FE2D7CB7F2E8DED3F - 1F4D80F32F79A4D97BD1B1C10A0000302F9E7CE81DCD67DEF7FFED6579719F47 - 14FF51C0475E8E29AF45D40811918754D8A7F5A42D67CE68002C86BC302F8BF7 - 64D43C297F3EC6F892E6E37A4F3CF0294D000000983351FC3FF08177F5B254CC - 97918AFFB626402DA22EC82394F3249F97C798331A008BA12CCAF3E27D98B6E3 - B5FF5E7C59F371BD68029C3D7347F3B297FF8D66C78EF306AB0000C0AC9D3BFB - 74F3C5933FD63CFCE10FF56679C19F47ADF84F91E6A9E84F11F5401A6B11CA91 - 05A101B038F2A2BCCCEB05FBEA7AED78B916F3F802E7E37ACF3EF295E6ECD90F - 37FB2EFBF666E7CE970D560100805979F1854F355FFED8FFD89CFAF8277AB3BC - A8CF63D2E23F6A806191E479AE6D9D39A201B058F2A2BC56C0D7A4F5DAF1DA7F - 23FFE2A6F9DA319A004F7FF17DCD8507BFBDD9B9EBD2DE1A0000300B51FC7FF6 - FFF889E6C907BFD09BA522BE2CF6632C8BFD721E638AF85DBF1CF308791EDA72 - E69806C0E2C98BF63C0FE53C49EBB5E3E3FE37D67AF1B9179A531FFFD3E6E257 - 5DEE0D0100003003F19ABFFBFEE8FFD9FB5DFCB9DE2C2FEADB228AF9DA3CC614 - 51BC97631E21CF435BCE9CD300584C79913E6E019FD66BC7F3B5C9BEC08FDEF7 - 67CDF9977CD9C3010100600BC5C3FE3EFDDEDFE96579413F4E44515F8E29E277 - FF72CC23E47968CB59001A008B2B2FDACBA2BE56E487B45E3B3EEC582EBEE4F1 - 99D52F7B3C1CF0CCCAC301FF0B0F07040080298A87FD3D7CF2BF6B1EFEF09FF7 - 6665615FBBBF3F8F742C1F53C4EFF3E59847C8F3D096B3203400165759A88F9A - 2769BD76BCED587CB963ADFD4BFEDC238F354F3DFCAEE6C257BEAED9B9E7E583 - 55000060A35E7CEEA3CD67FE8F1F6B9E7CF0F3BD5914E979719F471C2B9B0129 - CFC714F17B7D39E611F23CE4390B4A0360B19585FAA87992D6DB8E87FC58E4B5 - 2F7CACAD1E5B792EC03DEF6D5EF6CA9DCD79FB0EADAC010000937BE6D17FDD7C - E24F7EA1F73BF6577BB3BCA86FBBEA9FAF95791EF1BB7B39E611F23CE47928E7 - 2C080D80C55716F1A3E6495A6F3B9EAB7DC1DBD7BEF2C98F363BF77CAC79C925 - 87BC2A1000002670E6C52F358FDEF78F9B876E7B77CC0611857ACAC759CBC73C - E2F7F572CC23E479C8F350CE59201A00CB61AB9B00E5F1DA977EED3F124F3FFC - A5E6E92FFEC7E6822B0E36BBF65C3558070000DA9C7EF6CF9ACFFEA79F691EFF - F4677BB3BC902FF3DA5A999711BFAF97631E21CF439E8772CE82D100581EA38A - FEB6227F54F15F1AF60F42585D7BF1B9E79B53F7FE9F2B6F09D8F3B243CD8E9D - 1E10080000A5B3679E699EFAFCFFDA7CEA3DFF9FC12BFEA240AF15F6B5B594E7 - 632DE2F7F4883C4F11F23CE47928E72C200D80E532AB264018F68F43486BE756 - DE1270FAC9FFDCBCF4EBBEC10302010020130FFAFBC29FFFF7CD973E7A576F56 - 2BE8F3C8D7CACFC5D816F1BB79449EA708791EF23C9473169406C0F2D9681320 - 94C7D2177DD8CFB4FD43B136FFEA13CFAC3C20F0A55FF76CB3FBFCEBEC060000 - A0D3E2AAFFD35F7E67F3C977FD72EF77E5277B2B65819F47BE9EF27C4C91E6F1 - BB785A4B798C65843C0F791ECA390B4C0360396DA609304ADBCFB6FDA391F2FE - F8F867EEB11B0000804E4B57FDBF78F22F7AB3BC70CFC751798A721E11BF7BE7 - 792D429E873C0FE59C05B7994290F936ACE88F3CCD535EC6CE6C6C8B6820E579 - 9A97796DDCD9BCF2E84DCDC557FFA366E7AE97F6E60000B0DCE2AAFFE30FFC8B - E6F377DC16B341B415F7F9BC762CE5B588C23D8DB508791EF23C947396401463 - 2CAF28E073A3E6A5FC78ED1F80B67F24CA31AC5F7BEA730F364F3FFCA7CDF9FB - F7367BCEBF6EB00A0000CBE7B9AFFC51F3E0077EAE79ECFEFB7BB354A8A7C23E - 15F4F93C5FAB8D65C4EFD9E5588B90E721CF4339674968002CBFCD3601C695FF - 63928F21F2FAFCC5E75E681EFBC4877BC91DCD4B2E3EE8B6000000964A6CF77F - E463FFB879E88E77F7F2AFF65652719F228AF5DABC360E8BF8FD3A8D6D11F23C - E47928E72C9169157FCCB761457FE4699EE7B14D3F8D69BDBF757F6D9E62756B - FFDAF9A8716D7EF5CDB7342F7DC50F36BB340200005860674E7FA979E68BFFBA - 79E003EFE9CD52915E2BE8DB8AFDFC33B5794414EB799EE6218D693DE479C8F3 - 50CE5932A9D863F9957FD7F93CE531A608298FE2BCCC53F19EF2BCA02FE7C38A - FEF2E77636E7EFBFB0B9FC5BBFA739FFD2BFEFF90000002C94B8CFFFB9C7FEA8 - 79F823FFB679EED178BA7F2AD053D40AFC616B651E457A99C758E621E5F93CC9 - F350CE594251BCD11DE5DF773E4F793ED6228AF4721C169314FF6BE7E75F7A61 - F3CAEFF86F9AF32FF9AEDE1C0000E6DB735FF9E3E6F31FFA57CD738FE5857F5E - BC97F35A5E7EBE1651AC97632D4239863C0FE59C2515051CDD52FE9DE7F394E7 - 635B44919EC632CFA3ADC81F5EFCE7F30B0E5EDE5C7EF8079BBD179CE8CD0100 - 60BE3CFFD4FB9A2F9FFC57CDE30F7EB1378B827C58D19FCF477D2E8F28D2CB3C - C6B608E518F23C94739658146D7453FE775F9E07314F6B791E05791AD37ACAFB - C5FADA3C8FBCC01FBFF8CF4323000080791285FFC327FF75F3D4830FF766A938 - CF232FE88715FBC30AFF8828D2CB31E5218D693DE47992CFCB6374402AECE8A6 - F2EF3F9F479EE6B53C4514E7E558E6296A85FD78C57F1E1A0100006CA7D1857F - 8A6145FFB0B58828D0CB795A4B798AD096873C0FE59C8E88228D6E2BCF817C9E - F27C6C8B28CEDBC6B698BCF8CF239E1170F91BFEBE87050200B0E5BEF670BF0F - FF51718FFFA818A709504614E8F998F26111CA31E47928E774481468509E07F9 - 3CE5F9984788823CCDCB3C4539CF63B2C2BF8C68045CF6FA1B9A975DFE035E1F - 0800C054C5EBFC9E7EF8779B47FEFACF262CFCF318A7E88F88E23CCFD33CCF43 - 9AA708E518F23C94733A268A3208E5B9509BA7B55A9E228AF232CFC78D44D920 - 68FB6FED685EF9C61B9B975D71A2396FDFD1DE1C000036E68567EF689EFEC2FB - 9ACFFFF9077BB3289C5361BE5591FE37F2B1CC5384B63C1935A783A29082A476 - 3EE46B29CFC761D12FCA57F334AFE56DD1B63BA0F6B3AB6B171C7C45F3F26FFA - EEE6BC971DB52B000080B1C4D5FE179EBEA3F9D25FFD61F3D4D79EE89F17E5D3 - 8CFCBF99F218CBBC2D4239863C4F6A6B7450144C502ACF8B7C9EF27C2CF314A9 - 28AFE529CAF9B8D1F673F9FF567FED956F3C6657000000AD56AFF6DFDE9BD58A - F2B4362CC6FD5C44FED9FC7F2745398F08659E8F21CF4339A7E3A248829AF2DC - A8CDD35A3EB6452ACAF37C6DA15E9FB745DBE7F2F5B5FF1BE75F7A4173D9EB8F - 352F7DC57735BBCF7B756F0D0080AE7AF1854F37CF7CF18F9B47FEFAF6E6B9C7 - 9EEAAD94C5788C655E8B8D1C8FB5F27F6354847C4C79326A0E2B8511B429CF8F - B6793E96798A548897F3DA98476D6DDCF5324FF31D2BB7081CF8C663CD4B2E3D - A1190000D01151F47FF5B1F735A73E71FB608B7F14C9A900AF8D655E46DBB172 - BDEDBF9BAFD72294793E26A3E6B0220A2218A53C4FF279CA6BE3A8280BF334CF - C772BD6D5EAED73E5F1EEBAF5D7CD5E5CD25D7DCD09C77E1B7B84D000060C9C4 - F6FE179EFC68F395FBFFAC79FCA1786F7F14C711B5C23C8DC3F2B6B5619FC9C7 - 5A1ED298D62342DB18F23C947358230A20184779AEB4CDF3B1CCDBA22CCA6B63 - 8A7C5E1ECBD76A9F1B36F6236E13B8F41B0F352F7DF9D166F74BBEC503040100 - 164C3CC8EFC5AF7EB479E64B77348F7DE2EEC1F6FE288C539405796D1C968F7B - ACFC4CBE3E2C4299E763326A0EEB44D103E3AA9D2FF95ACA6B638A90CF23F222 - BC96E7E3B03C9FD73E336CCC6375EDE2AB5ED15CF8F5879A975CFC2DCDEEF3BF - 5943000060CEAC14FCCF7DACF9EAE31F6D9EFCECDDCDE30FA5ADFD11B5823B2F - CEDBC661793EAF7DA636A628E711A1B616F2E3499E27B53558278A1C985479DE - B4CDF3B1CCF3B5E145F8FA623DC6CDACC5386EBE365243E0BC0B5EDDEC79E9B7 - 787E0000C08CC57DFCA79FF968F3C2539FAE14FC65E405F7A83C1FDBD66AEBB5 - B1CCF3B590C6B41ECA3C1F935173182A8A1AD888DAB953AEA5C239C9E7291F15 - B5C27C9231E56DF351F9A8689A975F7FA8D977C96B9A3DFB5EB3B24320760A00 - 00B07971653FAEF09F7EF653CDB35FF954F3A53BEF1E1C89C2779C682BC8CBBC - 6D9E8F6D9FC93F57E6A322E47928E7A19C87DA1A0CD52F6060E3CA73A86D3E6C - 1C27C62DDC47CD6B63990F5B2B23AC5F8B9D027B0FBCA279D9D77D4BB363D74B - 9B3D2F794DB363F7D7B9850000A01005FEB917BFDC9CFEEAA79A73679E699EFE - F2479BE74F7D7170653FA482384528D7CAA815E1B522BD1C533E6A9E8FE5FA38 - 11F23CE4EBB95173185B2A6060336AE751B996E6B53145C8E76D5116E6B542BE - 1C471D4B517E3ED43E17D2F1DAB1325F1D579A0397BDBCF76FF78E950641E837 - 09E27682FE67769EF7EA66676F0D006011A5A2BEEF5CAFB8FFF44A711FA2C06F - 769C6B9E7FE44B45915F8E659EAF45B11DCA63693D2FC66B85795A2BC7718F95 - F93811CABC3626E53CD4D6606CA930816928CFA7DAF9156BF97A3EAFE5A3A22C - CEDBE6F97A5B5E9BE711C7421A6B9F8908653E6C4CCA79A8AD0100CCB3710AD7 - 341F36967919218AF034D63E13511E6B2BE253DE767CD85A5B8461793E26E53C - D4D660628A0BA66D9C2236CDF3F5C8F3F532CFD74615E9C3D6CAE3A3E69344A8 - CDD398F250CE9372ADF619008079366E419BAFE7F37C2CD7371265C13E6C3EEA - B365C4F150AE87B63CE4EBB95173D814C5055B6592E2365F8F3C5FAFE551A487 - B4966258F15E3BD6B61686FDB7CA08C3D6C2A83137EE1A00C03CA915ABC3D686 - 8D653E6CAD2D52715E2BE227590BB563211DCFD7DAF290AFE7CA79A8ADC1A628 - 2AD86AE314B3699EAF475EAEA7B5DA7C9C18A7B89FA4011046AD85723D298FE7 - 6A6BB951C70100B6DAA8027558519B1F8BBC5C4F6BB579DB5A19C38AF714E37C - A62D426D9EC69487F27852CE436D0DA64211C1AC94E7DAB0A2373F16796D9ED6 - CA792AE0F3F55AE4857E1A6B9FAB45A8AD478461793E86DA5AAE6D1D00605EB5 - 15B0B522B85C8B71585E46A8ADD7222FF6D358FB5C1E217DBE5C2FE7A136CFC7 - 5CB956FB0C4C95E28259AA9D6FC3D6F263E55A8CC3F232C2B8CD81511126591B - 3686B6BCCD389F01009885718AD6FC33B57CD8984718676DD208B5223F8F302C - CFC7505B4BC65D83A95348B01D6AE7DDB0B5FC58B91663DB5A6D9ED646350342 - 6D3D220C5B0B6D79C8D793B61C006091D58AE290F2722D5F1F960F5B4B116AEB - 11A1ADE80F6DF3D03686DA5A32EE1A6C198506DBA976FE0D5B2B8FC53C5FCBE7 - A3F269AF8571F290AFE746CD0100164559D8B6CDF3F5C8F3F571F369AF85B63C - D4E6499E27E3AEC1965360300F6AE7E1A8B55A3E6C1C37AFAD85FC58B916CABC - 1C531ECAE3B971D70000E6D1A405707E2CF2723D1F87E5B5B5901F2BD7C2B07C - D8186A6BB9DA7ADB6761261416CC93B6F37158515C1E8B79BE366C3ECDBC1CDB - 8E85DA5A32EE1A00C03C1AB7E84D6BF9B1722DC6DA5A1AA79D8751F390E6E57A - A8AD85B67598298505F3A8EDBC1C551CD7F272AD6D5E1BDBF2721C762C1F436D - 2D29D76A9F010058046D45732EADE5C7CAB5DA38EEB1DAF134A63CD4E6F918DA - F2A4B616DAD6615B283098676DE7E738EBB57CD85A6D4C79C8E7A3C6107939CF - C764D41C0060D1954570DB3C5F8FBC9C8F1A531EF2F9A8310C5B0B799E9B741D - B695628345D176AE8E5A2F8FD7D6C7591B3586713E136A3F5333EC1800C03C1B - 56000F2BACD3BC6D0CA33E538E61DCB5D0B69E4CBA0E734381C1A2693B67C759 - 2F3F93E6E3AC4F632DE47932EE1A00C022A915C4A3D66AF9B4D6C2A8F5501E4B - 265D87B9A3C86091B59DBFE3AEB7CD37B3DE968761C772C38E01002C9261C5F1 - B0A2BBED58CADB3E3FE97A52CE9349D761AE293458061B2DA6F363B5CFA5B549 - 8EE5F3613F176AC7C7B1D19F030098B68D16C2F9CFD5FE1BC38EA7F9B09F1B76 - 2CD48E271B3D06734F21C1B219764E4F72ACF6D97C6DB3C793DA1A00C0321B55 - 9C27F9DA668F87DA67928D1E8385A2F860990D3BBF479DFBE5F1B6CF6FF473A1 - EDB30000CB6E9C823D29D737FBB964D8F1513F0B0B490142578C3AD737727CD8 - CF4CFAF9361BF9190080EDB491E2B9F6339316E8A3FE77377B1C169EE2822E1A - E7BCDFCC67A6F5DF07005866E314DC6D9FD9CCCFE614FD74CAAEC1085D36EB82 - 5DF10F00D037AA009FA44057F0C3081A00B0DEB805BA421E006073365A908FFB - 730A7EC8286060B449BF27BE570000D3316901AFE08721142AB0319BF9EEF8DE - 0100F46DA66057ECC3841422305DBE530000D3A5D0872951ACC06CF9CE0100AC - A5C0070000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -1776,8 +1778,7 @@ object AboutForm: TAboutForm 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000060DB35CDFF1FBFD8662D22A241D30000000049454E44AE42 - 6082} + 000000000060DB35CDFF1F71B080365A1F75440000000049454E44AE426082} FileName = 'C:\YandexDisk\Development\Delphi\AErender Launcher\icons\png\ps\' + 'icon_512@2x.png' @@ -1809,11 +1810,6 @@ object AboutForm: TAboutForm Value = 100.000000000000000000 end> ControlCollection = < - item - Column = 0 - Control = LauncherLabel - Row = 1 - end item Column = 0 Control = AuthorsLabel @@ -1843,6 +1839,11 @@ object AboutForm: TAboutForm Column = 0 Control = FFmpegLabel Row = 7 + end + item + Column = 0 + Control = Layout1 + Row = 1 end> RowCollection = < item @@ -1891,20 +1892,6 @@ object AboutForm: TAboutForm item Value = 50.000000000000010000 end> - object LauncherLabel: TLabel - Align = Client - AutoSize = True - StyledSettings = [FontColor] - Margins.Left = 20.000000000000000000 - Size.Width = 535.000000000000000000 - Size.Height = 50.000000000000000000 - Size.PlatformDefault = False - TextSettings.Font.Family = 'Nexa' - TextSettings.Font.Size = 26.000000000000000000 - TextSettings.Font.StyleExt = {00070000000000000004000000} - Text = 'AErender Launcher' - TabOrder = 0 - end object AuthorsLabel: TLabel Align = Client AutoSize = True @@ -1916,7 +1903,7 @@ object AboutForm: TAboutForm TextSettings.Font.Size = 16.000000000000000000 TextSettings.Font.StyleExt = {00070000000000000004000000} Text = 'Created by Lin Stilson // Further Development by Lily Stilson' - TabOrder = 1 + TabOrder = 0 end object DescriptionLabel: TLabel Align = Client @@ -1929,7 +1916,7 @@ object AboutForm: TAboutForm TextSettings.Font.Size = 14.000000000000000000 TextSettings.Font.StyleExt = {00070000000000000004000000} Text = 'An advanced GUI for Adobe After Effects Render Engine' - TabOrder = 2 + TabOrder = 1 end object FromRussiaWithLoveLabel: TLabel Align = Client @@ -1942,7 +1929,7 @@ object AboutForm: TAboutForm TextSettings.Font.Size = 16.000000000000000000 TextSettings.Font.StyleExt = {00070000000000000004000000} Text = 'From Russia with '#55357#56473 - TabOrder = 3 + TabOrder = 2 end object CopyrightsLabel: TLabel Align = Client @@ -1956,7 +1943,7 @@ object AboutForm: TAboutForm Text = 'Adobe After Effects and Adobe After Effects Render Engine are pr' + 'operty of Adobe Systems inc.' - TabOrder = 4 + TabOrder = 3 end object WebsiteLabel: TLabel Align = Client @@ -1971,7 +1958,7 @@ object AboutForm: TAboutForm TextSettings.Font.StyleExt = {00060000000000000004000000} TextSettings.FontColor = claWhite Text = 'aerenderlauncher.com' - TabOrder = 5 + TabOrder = 4 OnClick = WebsiteLabelClick end object FFmpegLabel: TLabel @@ -1987,7 +1974,180 @@ object AboutForm: TAboutForm TextSettings.FontColor = xFFDDDDDD TextSettings.WordWrap = False Text = 'FFMPEG: Undetected. Feature will be disabled.' + TabOrder = 5 + end + object Layout1: TLayout + Align = Client + Size.Width = 555.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False TabOrder = 6 + object Path2: TPath + Align = Left + Data.Path = { + 730100000000000085EB6C4233336342010000003E0AB5413333634201000000 + CDCC644100008C42010000000000000000008C4201000000C3F52E4200000000 + 010000005C8F6842000000000100000066669A4200008C420100000033337B42 + 00008C420100000085EB6C42333363420300000085EB6C423333634200000000 + 6666414233336B4101000000CDCCF04100003242010000006666604200003242 + 010000006666414233336B41030000006666414233336B4100000000CD4C0643 + 00008C4201000000CDCCA34200008C42020000001F05AC42CDCC3A4202000000 + 9042B4426666BA4102000000E27ABC420000000001000000D8A3124300000000 + 0100000049611043CDCC4C4101000000F828D242CDCC4C4101000000E47ACC42 + 3433E74101000000D8230C433433E7410100000053F80943CDCC244201000000 + D923C842CDCC2442010000007B94C24200006442010000000A97084300006442 + 01000000CD4C064300008C4203000000CD4C064300008C42000000000A972343 + 9A99A54101000000707D23433433D34102000000B85E28436766A24102000000 + B89E2D4334339B4102000000B89E324334339B410200000052B8374334339B41 + 020000001E453C433433AB4102000000707D3E43CECCC04101000000B81E3743 + CECC0A420200000070FD3443686602420200000047E132430200FC4102000000 + 47E12E430200FC4102000000E17A28430200FC4102000000E1FA21439B990B42 + 02000000476120430100304201000000CCCC1B4300008C420100000099990F43 + 00008C42010000003D4A18439A99A541010000000A9723439A99A54103000000 + 0A9723439A99A54100000000E1FA4843CDCC464202000000C2B5484333335F42 + 02000000E13A4D43CDCC7042020000007BD45543CDCC7042020000007B545A43 + CDCC704202000000AE87604300006A42020000000AD7634367665E4201000000 + AE476A4334337D4202000000482164436766894202000000852B5B439A998E42 + 0200000085AB53439A998E420200000085AB42439A998E4202000000856B3A43 + 3433734202000000C2353D43010034420200000028DC3F430200F04102000000 + C2F54B439C99994102000000C2F55B439C99994102000000C2756C439C999941 + 02000000C2F574433633EB4102000000E17A6F43CECC464201000000E1FA4843 + CECC464203000000E1FA4843CDCC4642000000005C8F654366661E4202000000 + D7E36543CCCC04420200000033736143FFFFEF410200000033735A43FFFFEF41 + 0200000099D95343FFFFEF4102000000D7E34D43CCCC044202000000C2F54A43 + 66661E42010000005C8F654366661E42030000005C8F654366661E4200000000 + CDCC8C4300008C420100000033138F43CDCC30420200000029BC8F43CDCC1242 + 02000000A4308E430000F841020000003D4A8A430000F841020000003D8A8643 + 0000F841020000005C6F8343333315420200000066C682433333334201000000 + CD8C804300008C42010000000000754300008C4201000000C3B57D43CCCCA441 + 01000000154E8443CCCCA44101000000711D84436666DA4102000000850B8743 + 3333B341020000001FC5894333339F4102000000B9DE8C4333339F4102000000 + 86AB924333339F4102000000158E9643CCCCE441020000005D2F954366663042 + 0100000066E6924300008C4201000000CDCC8C4300008C4203000000CDCC8C43 + 00008C4200000000F6E8B743CDCCCC3D0100000000C0B14300008C4201000000 + CD0CAC4300008C42010000000040AC43CDCC7C42020000007BD4A94333338A42 + 02000000E19AA64333338E4202000000E19AA34333338E4202000000E15A9C43 + 33338E420200000000C097430000764202000000142E99433333354202000000 + 14AE9A436666E2410200000014CEA04300009C41020000004701A84300009C41 + 02000000E19AAA4300009C4102000000F568AE436666B24102000000F568AF43 + 3333DB4101000000A3D0B14300CDCC3D01000000F6E8B74300CDCC3D03000000 + F6E8B743CDCCCC3D0000000066469F433333354202000000D7839E439A995742 + 020000005218A14333336F4202000000B8FEA44333336F420200000052D8A843 + 33336F4202000000D7A3AC43CDCC584202000000CC6CAD433333354202000000 + 5B2FAE43CCCC1242020000001E65AB433333F74102000000848BA7433333F741 + 020000001FA5A3433333F741020000005C0FA0439A9911420200000066469F43 + 333335420300000066469F433333354200000000C395BE43CDCC464202000000 + 3473BE4333335F4202000000C3B5C043CDCC7042020000009002C543CDCC7042 + 020000009042C743CDCC7042020000002A5CCA4300006A4202000000D803CC43 + 67665E42010000002A3CCF4334337D4202000000F728CC436766894202000000 + 16AEC7439A998E420200000016EEC3439A998E4202000000166EBB439A998E42 + 02000000164EB743343373420200000035B3B84301003442020000006806BA43 + 0200F041020000003513C0439C999941020000003513C8439C99994102000000 + 3553D0439C999941020000003593D4433633EB4102000000C4D5D143CECC4642 + 01000000C395BE43CECC464203000000C395BE43CDCC46420000000048E1CC43 + 66661E4202000000850BCD43CCCC04420200000034D3CA43FFFFEF4102000000 + 3453C743FFFFEF41020000006706C443FFFFEF4102000000860BC143CCCC0442 + 020000007C94BF4366661E420100000048E1CC4366661E420300000048E1CC43 + 66661E4200000000B8BEDE439A99A54101000000EBB1DE433433D34102000000 + 8F22E1436766A241020000008FC2E34334339B41020000008F42E64334339B41 + 020000005CCFE84334339B4102000000C215EB433433AB4102000000EB31EC43 + CECCC041010000008F82E843CECC0A4202000000EB71E7436866024202000000 + D763E6430200FC4102000000D763E4430200FC4102000000A430E1430200FC41 + 02000000A4F0DD439B990B4202000000D723DD4301003042010000009AD9DA43 + 00008C420100000000C0D44300008C42010000005218D9439A99A54101000000 + B8BEDE439A99A54103000000B8BEDE439A99A541000000008FE2004400000000 + 01000000CCACFC433333674201000000665607443333674201000000CDCC0644 + 00008C42010000000000F54300008C4201000000852BFB430000000001000000 + 8FE2004400000000030000008FE200440000000000000000F65815449A99A541 + 01000000C34518449A99A54101000000F618164400008C4201000000F6381344 + 00008C4201000000D763134433337B42020000005C6F12443333894202000000 + 8F621044CDCC8E420200000048010F4400008F42020000009A590B4433338F42 + 02000000290C094466667A42020000005CCF094433333542020000005C8F0A44 + 6666E241020000000AC70D4433339B41020000005C5F114400009C4102000000 + C205134400009C4102000000C2751444CDCCB44102000000EBF114440000DC41 + 01000000F65815449A99A54103000000F65815449A99A54100000000CDDC0C44 + 333335420200000090720C44CCCC5A420200000033D30D443333714202000000 + 3EDA0F4433337142020000000BA71444333371420200000052F815443333F341 + 02000000862B11443333F341020000007B240F443333F3410200000066460D44 + 9A990F4202000000CDDC0C443333354203000000CDDC0C443333354200000000 + 5C5F1D449A99A54101000000293C1C4400003A4202000000AEE71B4400005842 + 0200000071AD1C44CDCC6E4202000000A4A01E44CDCC6E4202000000A4802044 + CDCC6E4202000000150E22449A99554202000000336322449A99374201000000 + 5C7F23449A99A54101000000C28526449A99A541010000005158244434338C42 + 01000000B79E214434338C420100000009B721449B997D420200000051382044 + CECC884202000000FFEF1E449A998D420200000065361D449A998D4202000000 + 32431A449A998D4202000000468118449A99774202000000132E194467663A42 + 010000008E521A449B99A541010000005C5F1D449B99A541030000005C5F1D44 + 9A99A541000000005C1F304400008C42010000008F423144CDCC304202000000 + 0A973144CDCC12420200000047D130440000F8410200000014DE2E440000F841 + 0200000014FE2C440000F84102000000A3702B443333154202000000281C2B44 + 33333342010000005CFF294400008C4201000000F6F8264400008C4201000000 + 67262944CCCCA4410100000001E02B44CCCCA44101000000AFC72B446666DA41 + 02000000B93E2D443333B34102000000E29A2E4433339F4102000000AF273044 + 33339F4102000000150E334433339F41020000005DFF3444CCCCE44102000000 + 015034446666304201000000292C334400008C42010000005C1F304400008C42 + 030000005C1F304400008C420000000066A64044CDCC7E42020000003DFA3E44 + 9A998A420200000047613D4400008F4202000000148E3B4400008F4202000000 + E1FA374400008F4202000000EB6135449A997B4202000000AE2736449A993542 + 0200000071ED36443433DF4102000000AE473A4467669A4102000000E1DA3D44 + 67669A4102000000E19A3F4467669A410200000014DE40446766AA4102000000 + 85FB4144CECCD4410100000033B33F44CECC0A42020000000A173F4468660042 + 020000005C3F3E446966F64102000000C2653D446966F64102000000F5583B44 + 6966F641020000001E9539443433134202000000D63339449B99354202000000 + 99C9384434335B4202000000E02A3A4434336F420200000047113C4434336F42 + 02000000E10A3D4434336F4202000000A3103E44CECC6A42020000008FF23E44 + CECC5E420100000066A64044CDCC7E420300000066A64044CDCC7E4200000000 + 85DB4744000000000100000066A646443333DB4102000000A30048449A99AD41 + 02000000706D49440000A04102000000D7D34A440000A04102000000D7534E44 + 0000A04102000000C3754F440000EC4102000000EBD14E440000304201000000 + CCAC4D4400008C4201000000FF9F4A4400008C42010000007AC44B4466663042 + 020000003D2A4C4466660C420200000051284B446666FA410200000051884944 + 6666FA410200000084BB47446666FA4102000000653646449999154202000000 + 32E345443333334201000000C3C5444400008C4201000000F6B8414400008C42 + 01000000B9CE4444000000000100000085DB4744000000000300000085DB4744 + 000000000000000014BE5344CDCC464202000000CCAC534433335F4202000000 + 14CE5444CDCC7042020000007AF45644CDCC7042020000007A145844CDCC7042 + 0200000047A1594400006A42020000001E755A4467665E420100000047115C44 + 34337D4202000000AD875A4467668942020000003D4A58449A998E4202000000 + 3D6A56449A998E42020000003D2A52449A998E42020000003D1A504434337342 + 02000000CCCC50440100344202000000667651440200F04102000000CC7C5444 + 9C99994102000000CC7C58449C99994102000000CC9C5C449C99994102000000 + CCBC5E443633EB4102000000145E5D44CECC46420100000014BE5344CECC4642 + 0300000014BE5344CDCC46420000000033E35A4466661E420200000052F85A44 + CCCC04420200000029DC5944FFFFEF4102000000291C5844FFFFEF4102000000 + C3755644FFFFEF410200000052F85444CCCC044202000000CD3C544466661E42 + 0100000033E35A4466661E420300000033E35A4466661E4200000000ECD16344 + 9A99A5410100000086CB63443433D34102000000D80365446766A24102000000 + D853664434339B4102000000D893674434339B41020000003EDA684434339B41 + 0200000072FD69443433AB4102000000868B6A44CECCC04101000000D8B36844 + CECC0A4202000000862B684468660242020000007CA467440200FC4102000000 + 7CA466440200FC4102000000E20A65440200FC4102000000E26A63449B990B42 + 020000007C04634401003042010000005DDF614400008C420100000090D25E44 + 00008C4201000000B9FE60449A99A54101000000ECD163449A99A54103000000 + ECD163449A99A541} + Fill.Color = claWhite + Margins.Left = 20.000000000000000000 + Position.X = 20.000000000000000000 + Size.Width = 320.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + WrapMode = Fit + end + object LauncherLabel: TLabel + Align = Client + AutoSize = True + StyledSettings = [FontColor] + Margins.Left = 8.000000000000000000 + Margins.Bottom = 12.000000000000000000 + Size.Width = 207.000000000000000000 + Size.Height = 38.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 14.000000000000000000 + TextSettings.VertAlign = Trailing + Text = '(v0.8.6-beta)' + TabOrder = 0 + end end end end diff --git a/src/AboutUnit.pas b/src/AboutUnit.pas index 4ba7be7..acb3316 100644 --- a/src/AboutUnit.pas +++ b/src/AboutUnit.pas @@ -2,10 +2,10 @@ (* AErender Launcher *) (* AboutUnit.pas *) -(* Lily Stilson // 2019 - 2020 *) +(* Lily Stilson // 2019 - 2021 *) (* MIT License *) (* *) -(* Copyright (c) 2019 - 2020 Alice Romanets *) +(* Copyright (c) 2019 - 2021 Alice Romanets *) (* *) (* Permission is hereby granted, free of charge, to any person obtaining a copy *) (* of this software and associated documentation files (the "Software"), to deal *) @@ -44,6 +44,10 @@ interface FMX.Layouts, FMX.Ani, FMX.Effects, + + AErenderLauncher.IO, + AErenderLauncher.Types, + {$IFDEF MSWINDOWS} FMX.Platform.Win, Winapi.ShellAPI, Winapi.Windows; {$ENDIF MSWINDOWS} @@ -64,6 +68,8 @@ TAboutForm = class(TForm) GridPanelLayout1: TGridPanelLayout; GridPanelLayout2: TGridPanelLayout; LogoRotationAnim: TFloatAnimation; + Path2: TPath; + Layout1: TLayout; procedure WebsiteLabelClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure Image1DblClick(Sender: TObject); @@ -71,9 +77,9 @@ TAboutForm = class(TForm) procedure SetLanguage(LanguageCode: Integer); private { Private declarations } - {$IFDEF MSWINDOWS}procedure CreateHandle; override;{$ENDIF MSWINDOWS} public { Public declarations } + {$IFDEF MSWINDOWS}procedure CreateHandle; override;{$ENDIF MSWINDOWS} end; var @@ -111,16 +117,16 @@ procedure TAboutForm.SetLanguage(LanguageCode: Integer); procedure TAboutForm.FormShow(Sender: TObject); begin - LauncherLabel.Text := 'AErender Launcher (' + APPVERSION + ')'; + LauncherLabel.Text := '(' + APPVERSION + ')'; if MainUnit.FFMPEG then begin FFmpegLabel.FontColor := $FF1E90FF; - FFmpegLabel.Text := Language[LANG].AboutForm.FFMPEG + MainUnit.ffmpegPath; + FFmpegLabel.Text := Language[Settings.Language].AboutForm.FFMPEG + MainUnit.ffmpegPath; end else begin FFmpegLabel.FontColor := $FFDDDDDD; - FFmpegLabel.Text := Language[LANG].AboutForm.FFMPEGNotFound; + FFmpegLabel.Text := Language[Settings.Language].AboutForm.FFMPEGNotFound; end; end; @@ -131,12 +137,7 @@ procedure TAboutForm.Image1DblClick(Sender: TObject); procedure TAboutForm.WebsiteLabelClick(Sender: TObject); begin - {$IFDEF MSWINDOWS} - ShellExecute(0, 'open', PWideChar('http://aerenderlauncher.com'), nil, nil, SW_SHOW); - {$ENDIF MSWINDOWS} - {$IFDEF MACOS} - _system(PAnsiChar('open ' + AnsiString('"' + 'http://aerenderlauncher.com' + '"'))); - {$ENDIF MACOS} + Open('https://aerenderlauncher.com', []); end; procedure TAboutForm.LogoRotationAnimFinish(Sender: TObject); diff --git a/src/FFMPEGUnit.pas b/src/FFMPEGUnit.pas index a3dcf0b..f280801 100644 --- a/src/FFMPEGUnit.pas +++ b/src/FFMPEGUnit.pas @@ -2,10 +2,10 @@ (* AErender Launcher *) (* FFMPEGUnit.pas *) -(* Lily Stilson // 2019 - 2020 *) +(* Lily Stilson // 2019 - 2021 *) (* MIT License *) (* *) -(* Copyright (c) 2019 - 2020 Alice Romanets *) +(* Copyright (c) 2019 - 2021 Alice Romanets *) (* *) (* Permission is hereby granted, free of charge, to any person obtaining a copy *) (* of this software and associated documentation files (the "Software"), to deal *) diff --git a/src/HelpUnit.fmx b/src/HelpUnit.fmx index 442eac6..59827dc 100644 --- a/src/HelpUnit.fmx +++ b/src/HelpUnit.fmx @@ -40,8 +40,8 @@ object HelpForm: THelpForm DefaultItemStyles.GroupHeaderStyle = '' DefaultItemStyles.GroupFooterStyle = '' OnChange = ContentsChange - Viewport.Width = 200.000000000000000000 - Viewport.Height = 567.000000000000000000 + Viewport.Width = 196.000000000000000000 + Viewport.Height = 563.000000000000000000 object ListBoxGroupHeader1: TListBoxGroupHeader Selectable = False TabOrder = 0 diff --git a/src/HelpUnit.pas b/src/HelpUnit.pas index 532d401..91ca972 100644 --- a/src/HelpUnit.pas +++ b/src/HelpUnit.pas @@ -2,10 +2,10 @@ (* AErender Launcher *) (* HelpUnit.pas *) -(* Lily Stilson // 2019 - 2020 *) +(* Lily Stilson // 2019 - 2021 *) (* MIT License *) (* *) -(* Copyright (c) 2019 - 2020 Alice Romanets *) +(* Copyright (c) 2019 - 2021 Alice Romanets *) (* *) (* Permission is hereby granted, free of charge, to any person obtaining a copy *) (* of this software and associated documentation files (the "Software"), to deal *) @@ -47,6 +47,8 @@ interface FMX.Memo, FMX.WebBrowser, + AErenderLauncher.Types, + {$IFDEF MSWINDOWS} FMX.Platform.Win, Winapi.Windows, Winapi.TlHelp32; {$ENDIF MSWINDOWS} diff --git a/src/ImportUnit.fmx b/src/ImportUnit.fmx index a50d7aa..02f758b 100644 --- a/src/ImportUnit.fmx +++ b/src/ImportUnit.fmx @@ -17,47 +17,47 @@ object ImportForm: TImportForm object topLayout: TLayout Align = Top Size.Width = 640.000000000000000000 - Size.Height = 33.000000000000000000 + Size.Height = 32.000000000000000000 Size.PlatformDefault = False TabOrder = 3 object importLabel: TLabel Align = Client StyledSettings = [Family, FontColor] - Margins.Left = 20.000000000000000000 - Size.Width = 322.000000000000000000 - Size.Height = 33.000000000000000000 + Margins.Left = 16.000000000000000000 + Size.Width = 328.000000000000000000 + Size.Height = 32.000000000000000000 Size.PlatformDefault = False TextSettings.Font.Size = 14.000000000000000000 TextSettings.Font.StyleExt = {00070000000000000004000000} Text = 'Import After Effects Project' TabOrder = 0 end - object XMLFile: TEdit + object ImportedFile: TEdit Touch.InteractiveGestures = [LongTap, DoubleTap] Align = Right TabOrder = 1 ReadOnly = True - Position.X = 342.000000000000000000 - Position.Y = 5.000000000000000000 - Margins.Top = 5.000000000000000000 - Margins.Right = 10.000000000000000000 - Margins.Bottom = 5.000000000000000000 + Position.X = 344.000000000000000000 + Position.Y = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 8.000000000000000000 + Margins.Bottom = 4.000000000000000000 Size.Width = 288.000000000000000000 - Size.Height = 23.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False end end object projectPathLayout: TLayout Align = Top - Position.Y = 33.000000000000000000 + Position.Y = 32.000000000000000000 Size.Width = 640.000000000000000000 Size.Height = 32.000000000000000000 Size.PlatformDefault = False TabOrder = 4 object aerProjectPathLabel: TLabel Align = Left - Margins.Left = 10.000000000000000000 - Position.X = 10.000000000000000000 + Margins.Left = 8.000000000000000000 + Position.X = 8.000000000000000000 Size.Width = 120.000000000000000000 Size.Height = 32.000000000000000000 Size.PlatformDefault = False @@ -69,34 +69,34 @@ object ImportForm: TImportForm Align = Client TabOrder = 1 ReadOnly = True - Margins.Top = 5.000000000000000000 - Margins.Right = 10.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 500.000000000000000000 - Size.Height = 22.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 8.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 504.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False end end object compLayout: TGroupBox Align = Client - Margins.Left = 5.000000000000000000 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 326.000000000000000000 - Size.Height = 335.000000000000000000 + Margins.Left = 8.000000000000000000 + Margins.Top = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Margins.Bottom = 8.000000000000000000 + Size.Width = 328.000000000000000000 + Size.Height = 338.000000000000000000 Size.PlatformDefault = False Text = 'Compositions' TabOrder = 5 object GridPanelLayout1: TGridPanelLayout Align = Bottom - Margins.Left = 10.000000000000000000 - Margins.Right = 10.000000000000000000 - Margins.Bottom = 10.000000000000000000 - Position.X = 10.000000000000000000 - Position.Y = 298.000000000000000000 - Size.Width = 306.000000000000000000 - Size.Height = 27.000000000000000000 + Margins.Left = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Margins.Bottom = 8.000000000000000000 + Position.X = 8.000000000000000000 + Position.Y = 302.000000000000000000 + Size.Width = 312.000000000000000000 + Size.Height = 28.000000000000000000 Size.PlatformDefault = False TabOrder = 1 ColumnCollection = < @@ -126,9 +126,9 @@ object ImportForm: TImportForm end> object selectallButton: TButton Align = Client - Margins.Right = 3.000000000000000000 - Size.Width = 150.000000000000000000 - Size.Height = 27.000000000000000000 + Margins.Right = 2.000000000000000000 + Size.Width = 154.000000000000000000 + Size.Height = 28.000000000000000000 Size.PlatformDefault = False TabOrder = 0 Text = 'Select All' @@ -136,121 +136,117 @@ object ImportForm: TImportForm end object deselallButton: TButton Align = Client - Margins.Left = 3.000000000000000000 - Size.Width = 150.000000000000000000 - Size.Height = 27.000000000000000000 + Margins.Left = 2.000000000000000000 + Size.Width = 154.000000000000000000 + Size.Height = 28.000000000000000000 Size.PlatformDefault = False TabOrder = 1 Text = 'Deselect All' OnClick = deselallButtonClick end end - object BufferedLayout1: TBufferedLayout + object compListBox: TListBox Align = Client - Size.Width = 326.000000000000000000 - Size.Height = 298.000000000000000000 + Margins.Left = 8.000000000000000000 + Margins.Top = 20.000000000000000000 + Margins.Right = 8.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 312.000000000000000000 + Size.Height = 278.000000000000000000 Size.PlatformDefault = False - object compositions: TListBox - Align = Client - Margins.Left = 10.000000000000000000 - Margins.Top = 20.000000000000000000 - Margins.Right = 10.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 306.000000000000000000 - Size.Height = 273.000000000000000000 - Size.PlatformDefault = False - DisableFocusEffect = True - DefaultItemStyles.ItemStyle = '' - DefaultItemStyles.GroupHeaderStyle = '' - DefaultItemStyles.GroupFooterStyle = '' - ShowCheckboxes = True - OnChange = compositionsChange - OnChangeCheck = compositionsChangeCheck - Viewport.Width = 306.000000000000000000 - Viewport.Height = 273.000000000000000000 - end + AlternatingRowBackground = True + DisableFocusEffect = True + DefaultItemStyles.ItemStyle = '' + DefaultItemStyles.GroupHeaderStyle = '' + DefaultItemStyles.GroupFooterStyle = '' + ShowCheckboxes = True + OnChange = compListBoxChange + OnChangeCheck = compListBoxChangeCheck + Viewport.Width = 308.000000000000000000 + Viewport.Height = 274.000000000000000000 end end object compImportLayout: TLayout Align = Right - Position.X = 336.000000000000000000 - Position.Y = 65.000000000000000000 - Size.Width = 304.000000000000000000 - Size.Height = 345.000000000000000000 + Position.X = 352.000000000000000000 + Position.Y = 64.000000000000000000 + Size.Width = 288.000000000000000000 + Size.Height = 354.000000000000000000 Size.PlatformDefault = False TabOrder = 7 object compProp: TGroupBox Align = Client - Margins.Left = 5.000000000000000000 - Margins.Top = 5.000000000000000000 - Margins.Right = 10.000000000000000000 - Size.Width = 289.000000000000000000 - Size.Height = 213.000000000000000000 + Margins.Left = 8.000000000000000000 + Margins.Top = 8.000000000000000000 + Margins.Right = 16.000000000000000000 + Margins.Bottom = 8.000000000000000000 + Size.Width = 264.000000000000000000 + Size.Height = 338.000000000000000000 Size.PlatformDefault = False Text = 'Composition Properties' TabOrder = 0 object compName: TLabel Align = Top - Margins.Left = 10.000000000000000000 + Margins.Left = 12.000000000000000000 Margins.Top = 20.000000000000000000 - Margins.Right = 10.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 10.000000000000000000 + Margins.Right = 16.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 12.000000000000000000 Position.Y = 20.000000000000000000 - Size.Width = 269.000000000000000000 - Size.Height = 17.000000000000000000 + Size.Width = 236.000000000000000000 + Size.Height = 16.000000000000000000 Size.PlatformDefault = False Text = 'Name: ' - TabOrder = 5 + TabOrder = 6 end object compResolution: TLabel Align = Top - Margins.Left = 10.000000000000000000 - Margins.Right = 10.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 10.000000000000000000 - Position.Y = 42.000000000000000000 - Size.Width = 269.000000000000000000 - Size.Height = 17.000000000000000000 + Margins.Left = 12.000000000000000000 + Margins.Right = 16.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 12.000000000000000000 + Position.Y = 40.000000000000000000 + Size.Width = 236.000000000000000000 + Size.Height = 16.000000000000000000 Size.PlatformDefault = False Text = 'Resolution: ' TabOrder = 3 end object compFramerate: TLabel Align = Top - Margins.Left = 10.000000000000000000 - Margins.Right = 10.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 10.000000000000000000 - Position.Y = 64.000000000000000000 - Size.Width = 269.000000000000000000 - Size.Height = 17.000000000000000000 + Margins.Left = 12.000000000000000000 + Margins.Right = 16.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 12.000000000000000000 + Position.Y = 60.000000000000000000 + Size.Width = 236.000000000000000000 + Size.Height = 16.000000000000000000 Size.PlatformDefault = False Text = 'Framerate: ' TabOrder = 2 end object compRangeIn: TLabel Align = Top - Margins.Left = 10.000000000000000000 - Margins.Right = 10.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 10.000000000000000000 - Position.Y = 86.000000000000000000 - Size.Width = 269.000000000000000000 - Size.Height = 17.000000000000000000 + Margins.Left = 12.000000000000000000 + Margins.Right = 16.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 12.000000000000000000 + Position.Y = 80.000000000000000000 + Size.Width = 236.000000000000000000 + Size.Height = 16.000000000000000000 Size.PlatformDefault = False Text = 'Range start: ' TabOrder = 1 end object compRangeOut: TLabel Align = Top - Margins.Left = 10.000000000000000000 - Margins.Right = 10.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 10.000000000000000000 - Position.Y = 108.000000000000000000 - Size.Width = 269.000000000000000000 - Size.Height = 17.000000000000000000 + Margins.Left = 12.000000000000000000 + Margins.Right = 16.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 12.000000000000000000 + Position.Y = 100.000000000000000000 + Size.Width = 236.000000000000000000 + Size.Height = 16.000000000000000000 Size.PlatformDefault = False Text = 'Range end: ' TabOrder = 0 @@ -258,48 +254,67 @@ object ImportForm: TImportForm end object importProp: TGroupBox Align = Bottom - Margins.Left = 5.000000000000000000 - Margins.Right = 10.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 5.000000000000000000 - Position.Y = 218.000000000000000000 - Size.Width = 289.000000000000000000 + Enabled = False + Margins.Left = 8.000000000000000000 + Margins.Right = 16.000000000000000000 + Margins.Bottom = 8.000000000000000000 + Position.X = 8.000000000000000000 + Position.Y = 224.000000000000000000 + Size.Width = 264.000000000000000000 Size.Height = 122.000000000000000000 Size.PlatformDefault = False Text = 'Import Properties' + Visible = False TabOrder = 1 - object splitRenderCheckbox: TCheckBox + object SplitRenderLayout: TLayout Align = Top - Margins.Left = 10.000000000000000000 + Margins.Left = 8.000000000000000000 Margins.Top = 20.000000000000000000 - Margins.Right = 10.000000000000000000 - Position.X = 10.000000000000000000 + Margins.Right = 8.000000000000000000 + Position.X = 8.000000000000000000 Position.Y = 20.000000000000000000 - Size.Width = 269.000000000000000000 - Size.Height = 19.000000000000000000 + Size.Width = 248.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False - TabOrder = 0 - Text = 'Prepare for split rendering' + TabOrder = 3 + object SplitRenderCheckbox: TCheckBox + Align = Client + Size.Width = 248.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + TabOrder = 0 + Text = 'Prepare for split rendering' + end end end end object StatusBar1: TStatusBar - Position.Y = 410.000000000000000000 + Position.Y = 418.000000000000000000 ShowSizeGrip = True Size.Width = 640.000000000000000000 - Size.Height = 40.000000000000000000 + Size.Height = 32.000000000000000000 Size.PlatformDefault = False TabOrder = 10 object importButton: TButton Align = Center - Size.Width = 114.000000000000000000 - Size.Height = 30.000000000000000000 + Size.Width = 128.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False TabOrder = 0 Text = 'Import' OnClick = importButtonClick end end + object Splitter1: TSplitter + Align = Right + Cursor = crHSplit + MinSize = 20.000000000000000000 + Position.X = 344.000000000000000000 + Position.Y = 64.000000000000000000 + Size.Width = 8.000000000000000000 + Size.Height = 354.000000000000000000 + Size.PlatformDefault = False + end object XMLDocument: TXMLDocument Left = 8 Top = 416 @@ -311,9 +326,9 @@ object ImportForm: TImportForm Top = 416 object LinkControlToPropertyShowCheckboxes: TLinkControlToProperty Category = 'Quick Bindings' - Control = splitRenderCheckbox + Control = SplitRenderCheckbox Track = True - Component = compositions + Component = compListBox ComponentProperty = 'ShowCheckboxes' CustomFormat = 'IfThen(IsChecked, False, True)' InitializeControlValue = False diff --git a/src/ImportUnit.pas b/src/ImportUnit.pas index 0a422de..747e7bb 100644 --- a/src/ImportUnit.pas +++ b/src/ImportUnit.pas @@ -2,10 +2,10 @@ (* AErender Launcher *) (* ImportUnit.pas *) -(* Lily Stilson // 2019 - 2020 *) +(* Lily Stilson // 2019 - 2021 *) (* MIT License *) (* *) -(* Copyright (c) 2019 - 2020 Alice Romanets *) +(* Copyright (c) 2019 - 2021 Alice Romanets *) (* *) (* Permission is hereby granted, free of charge, to any person obtaining a copy *) (* of this software and associated documentation files (the "Software"), to deal *) @@ -33,6 +33,11 @@ interface System.UITypes, System.Classes, System.Variants, + System.JSON, + System.Generics.Collections, + System.Rtti, + System.Bindings.Outputs, + FMX.Types, FMX.Controls, FMX.Forms, @@ -50,20 +55,26 @@ interface FMX.Edit, FMX.DialogService.Sync, FMX.BufferedLayout, + Fmx.Bind.Editors, + Fmx.Bind.DBEngExt, + FMX.ListBox, + Xml.xmldom, Xml.XMLIntf, Xml.XMLDoc, - FMX.ListBox, + Data.Bind.EngExt, - Fmx.Bind.DBEngExt, - System.Rtti, - System.Bindings.Outputs, - Fmx.Bind.Editors, Data.Bind.Components, + + AErenderLauncher.Rendering, + AErenderLauncher.Math, + AErenderLauncher.Types, + {$IFDEF MSWINDOWS}Fmx.Platform.Win, WinApi.Windows;{$ENDIF MSWINDOWS} {$IFDEF MACOS}MacApi.Foundation;{$ENDIF MACOS} type + TFormSender = (FS_JSON, FS_XML); TImportForm = class(TForm) importButton: TButton; topLayout: TLayout; @@ -71,7 +82,7 @@ TImportForm = class(TForm) projectPathLayout: TLayout; aerProjectPathLabel: TLabel; aerProjectPath: TEdit; - compositions: TListBox; + compListBox: TListBox; compLayout: TGroupBox; XMLDocument: TXMLDocument; compProp: TGroupBox; @@ -82,34 +93,38 @@ TImportForm = class(TForm) compRangeOut: TLabel; importProp: TGroupBox; compImportLayout: TLayout; - splitRenderCheckbox: TCheckBox; + SplitRenderCheckbox: TCheckBox; BindingsList1: TBindingsList; LinkControlToPropertyShowCheckboxes: TLinkControlToProperty; - XMLFile: TEdit; + ImportedFile: TEdit; selectallButton: TButton; deselallButton: TButton; StatusBar1: TStatusBar; GridPanelLayout1: TGridPanelLayout; - BufferedLayout1: TBufferedLayout; + SplitRenderLayout: TLayout; + Splitter1: TSplitter; procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); - procedure compositionsChangeCheck(Sender: TObject); + procedure compListBoxChangeCheck(Sender: TObject); procedure importButtonClick(Sender: TObject); procedure selectallButtonClick(Sender: TObject); procedure deselallButtonClick(Sender: TObject); - procedure compositionsChange(Sender: TObject); + procedure compListBoxChange(Sender: TObject); procedure SetLanguage(LanguageCode: Integer); procedure FormCreate(Sender: TObject); private { Private declarations } - {$IFDEF MSWINDOWS}procedure CreateHandle; override;{$ENDIF MSWINDOWS} + RootNode: IXMLNode; + Project: TJSONValue; + public { Public declarations } + FormSender: TFormSender; + {$IFDEF MSWINDOWS}procedure CreateHandle; override;{$ENDIF MSWINDOWS} end; var ImportForm: TImportForm; - RootNode: IXMLNode; CheckedComps, CompCount: Integer; PARAMSTART: Boolean = False; XMLPath: String; @@ -159,13 +174,60 @@ procedure TImportForm.SetLanguage(LanguageCode: Integer); end; procedure TImportForm.importButtonClick(Sender: TObject); -var - i, k: Integer; begin - MainForm.projectPath.Text := RootNode.Attributes['project']; + var Compositions: TList := TList.Create; + + if (CheckedComps = 1) or (CheckedComps = 0) then begin + Compositions.Add(TComposition.Create( + Project.A[compListBox.ItemIndex].P['Name'].Value, + TFrameSpan.Create(Project.A[compListBox.ItemIndex].P['Frames'].A[0].Value, Project.A[compListBox.ItemIndex].P['Frames'].A[1].Value), + 1 + )); + end else begin + for var i := 0 to compListBox.Count - 1 do + if compListBox.ListItems[i].IsChecked then + Compositions.Add(TComposition.Create( + Project.A[i].P['Name'].Value, + TFrameSpan.Create(Project.A[i].P['Frames'].A[0].Value, Project.A[i].P['Frames'].A[1].Value), + 1 + )); + end; + + RenderTasks.Add(TRenderTask.Create( + MainForm.projectPath.Text, + MainForm.outputPath.Text, + + MainForm.outputModuleBox.Items[MainForm.outputModuleBox.ItemIndex], + MainForm.renderSettingsEdit.Text, + + MainForm.missingFilesCheckbox.IsChecked, + MainForm.soundCheckbox.IsChecked, + MainForm.threadedRender.IsChecked, + IfThenElse(MainForm.customCheckbox.IsChecked = True, MainForm.customProp.Text, ''), // yeet, + + MainForm.cacheUsageTrackBar.Value, + MainForm.memUsageTrackBar.Value, + + Compositions + )); + + {if ((SplitRenderCheckbox.Enabled) and (SplitRenderCheckbox.IsChecked)) and (CheckedComps <= 1) then begin + + end else begin + if (CheckedComps = 1) or (CheckedComps = 0) then begin + + end else begin + for var i := 0 to CheckedComps do + + end; + end; } + + + + {MainForm.projectPath.Text := RootNode.Attributes['project']; MainForm.outputPath.Text := ''; k := 0; - if ((splitRenderCheckbox.Enabled) and (splitRenderCheckbox.IsChecked)) and (CheckedComps <= 1) then + if ((SplitRenderCheckbox.Enabled) and (SplitRenderCheckbox.IsChecked)) and (CheckedComps <= 1) then begin MainForm.compSwitch.Enabled := False; MainForm.compSwitch.IsChecked := False; @@ -183,9 +245,9 @@ procedure TImportForm.importButtonClick(Sender: TObject); MainForm.compGrid.Enabled := False; MainForm.compGrid.Visible := False; - MainForm.compName.Text := RootNode.ChildNodes['compositions'].ChildNodes[compositions.Selected.Index].ChildNodes['name'].Text; - MainForm.inFrame.Text := Trunc(StrToFloat(RootNode.ChildNodes['compositions'].ChildNodes[compositions.Selected.Index].ChildNodes['rangeStart'].Text)).ToString; - MainForm.outFrame.Text := Trunc(StrToFloat(RootNode.ChildNodes['compositions'].ChildNodes[compositions.Selected.Index].ChildNodes['rangeEnd'].Text)).ToString; + MainForm.compName.Text := RootNode.ChildNodes['compositions'].ChildNodes[compListBox.Selected.Index].ChildNodes['name'].Text; + MainForm.inFrame.Text := Trunc(StrToFloat(RootNode.ChildNodes['compositions'].ChildNodes[compListBox.Selected.Index].ChildNodes['rangeStart'].Text)).ToString; + MainForm.outFrame.Text := Trunc(StrToFloat(RootNode.ChildNodes['compositions'].ChildNodes[compListBox.Selected.Index].ChildNodes['rangeEnd'].Text)).ToString; end else begin @@ -209,9 +271,9 @@ procedure TImportForm.importButtonClick(Sender: TObject); MainForm.threadsCount.Visible := False; MainForm.threadsCount.Enabled := False; - MainForm.compName.Text := RootNode.ChildNodes['compositions'].ChildNodes[compositions.ItemIndex].ChildNodes['name'].Text; - MainForm.inFrame.Text := Trunc(StrToFloat(RootNode.ChildNodes['compositions'].ChildNodes[compositions.ItemIndex].ChildNodes['rangeStart'].Text)).ToString; - MainForm.outFrame.Text := Trunc(StrToFloat(RootNode.ChildNodes['compositions'].ChildNodes[compositions.ItemIndex].ChildNodes['rangeEnd'].Text)).ToString; + MainForm.compName.Text := RootNode.ChildNodes['compositions'].ChildNodes[compListBox.ItemIndex].ChildNodes['name'].Text; + MainForm.inFrame.Text := Trunc(StrToFloat(RootNode.ChildNodes['compositions'].ChildNodes[compListBox.ItemIndex].ChildNodes['rangeStart'].Text)).ToString; + MainForm.outFrame.Text := Trunc(StrToFloat(RootNode.ChildNodes['compositions'].ChildNodes[compListBox.ItemIndex].ChildNodes['rangeEnd'].Text)).ToString; end else begin @@ -236,43 +298,57 @@ procedure TImportForm.importButtonClick(Sender: TObject); MainForm.compCount.Value := CheckedComps; MainForm.inFrame.Text := ''; MainForm.outFrame.Text := ''; - for i := 0 to CompCount - 1 do - if compositions.ListItems[i].IsChecked then + for var i := 0 to CompCount - 1 do + if compListBox.ListItems[i].IsChecked then begin MainForm.compGrid.Cells[0, k] := RootNode.ChildNodes['compositions'].ChildNodes[i].ChildNodes['name'].Text; inc (k); end; end; - end; + end; } + + + XMLDocument.Active := False; ImportForm.Close; end; -procedure TImportForm.compositionsChange(Sender: TObject); +procedure TImportForm.compListBoxChange(Sender: TObject); begin - compName.Text := Language[LANG].ImportForm.Name + ': ' + RootNode.ChildNodes['compositions'].ChildNodes[compositions.ItemIndex].ChildNodes['name'].Text; - compResolution.Text := Language[LANG].ImportForm.Resolution + ': ' + RootNode.ChildNodes['compositions'].ChildNodes[compositions.ItemIndex].ChildNodes['resolution'].Text; - compFramerate.Text := Language[LANG].ImportForm.Framerate + ': ' + RootNode.ChildNodes['compositions'].ChildNodes[compositions.ItemIndex].ChildNodes['framerate'].Text; - compRangeIn.Text := Language[LANG].ImportForm.RangeStart + ': ' + RootNode.ChildNodes['compositions'].ChildNodes[compositions.ItemIndex].ChildNodes['rangeStart'].Text; - compRangeOut.Text := Language[LANG].ImportForm.RangeEnd + ': ' + RootNode.ChildNodes['compositions'].ChildNodes[compositions.ItemIndex].ChildNodes['rangeEnd'].Text; + case FormSender of + FS_JSON: begin + compName.Text := Language[Settings.Language].ImportForm.Name + ': ' + Project.A[compListBox.ItemIndex].P['Name'].Value; + compResolution.Text := Language[Settings.Language].ImportForm.Resolution + ': ' + Project.A[compListBox.ItemIndex].P['FootageDimensions'].A[0].Value + 'x' + Project.A[compListBox.ItemIndex].P['FootageDimensions'].A[1].Value; + compFramerate.Text := Language[Settings.Language].ImportForm.Framerate + ': ' + Project.A[compListBox.ItemIndex].P['FootageFramerate'].Value; + compRangeIn.Text := Language[Settings.Language].ImportForm.RangeStart + ': ' + Project.A[compListBox.ItemIndex].P['Frames'].A[0].Value; + compRangeOut.Text := Language[Settings.Language].ImportForm.RangeEnd + ': ' + Project.A[compListBox.ItemIndex].P['Frames'].A[1].Value; + end; + FS_XML: begin + compName.Text := Language[Settings.Language].ImportForm.Name + ': ' + RootNode.ChildNodes['compositions'].ChildNodes[compListBox.ItemIndex].ChildNodes['name'].Text; + compResolution.Text := Language[Settings.Language].ImportForm.Resolution + ': ' + RootNode.ChildNodes['compositions'].ChildNodes[compListBox.ItemIndex].ChildNodes['resolution'].Text; + compFramerate.Text := Language[Settings.Language].ImportForm.Framerate + ': ' + RootNode.ChildNodes['compositions'].ChildNodes[compListBox.ItemIndex].ChildNodes['framerate'].Text; + compRangeIn.Text := Language[Settings.Language].ImportForm.RangeStart + ': ' + RootNode.ChildNodes['compositions'].ChildNodes[compListBox.ItemIndex].ChildNodes['rangeStart'].Text; + compRangeOut.Text := Language[Settings.Language].ImportForm.RangeEnd + ': ' + RootNode.ChildNodes['compositions'].ChildNodes[compListBox.ItemIndex].ChildNodes['rangeEnd'].Text; + end; + end; end; -procedure TImportForm.compositionsChangeCheck(Sender: TObject); +procedure TImportForm.compListBoxChangeCheck(Sender: TObject); begin CheckedComps := 0; for var i := 0 to CompCount - 1 do - if compositions.ListItems[i].IsChecked then + if compListBox.ListItems[i].IsChecked then inc (CheckedComps); if CheckedComps > 0 then - splitRenderCheckbox.Enabled := False + SplitRenderCheckbox.Enabled := False else - splitRenderCheckbox.Enabled := True; + SplitRenderCheckbox.Enabled := True; end; procedure TImportForm.deselallButtonClick(Sender: TObject); begin for var i := 0 to CompCount-1 do - compositions.ListItems[i].IsChecked := False; + compListBox.ListItems[i].IsChecked := False; end; procedure TImportForm.FormClose(Sender: TObject; var Action: TCloseAction); @@ -280,46 +356,59 @@ procedure TImportForm.FormClose(Sender: TObject; var Action: TCloseAction); CheckedComps := 0; CompCount := 0; aerProjectPath.Text := ''; - compositions.Clear; + FreeAndNil(Project); + compListBox.Clear; + //compositions.Items.Clear; end; procedure TImportForm.FormCreate(Sender: TObject); begin - compositions.AniCalculations.Animation := True; + compListBox.AniCalculations.Animation := True; end; procedure TImportForm.FormShow(Sender: TObject); begin - try - if PARAMSTART then - begin - XMLFile.Text := ExtractFileName(XMLPath); - XMLDocument.LoadFromFile(XMLPath); - end - else - begin - {$IFDEF MSWINDOWS} - XMLFile.Text := ExtractFileName(MainForm.XMLOpenDialog.FileName); - {$ELSE} - XMLFile.Text := ExtractFileName(ImportedPath); - {$ENDIF} - XMLDocument.LoadFromFile(MainForm.XMLOpenDialog.FileName); - end; + compListBox.Clear; + case FormSender of + FS_JSON: begin + //ShowMessage(MainForm.ProjectJson); + Project := TJSONObject.ParseJSONValue(MainForm.ProjectJson); + ImportedFile.Text := APPFOLDER + ExtractFileName(MainForm.projectPath.Text).Replace('.aep', '.json'); + aerProjectPath.Text := MainForm.projectPath.Text; + CompCount := (Project as TJSONArray).Count; + for var i := 0 to CompCount - 1 do + compListBox.Items.Add(Project.A[i].P['Name'].Value); + end; + FS_XML: begin + try + if PARAMSTART then begin + ImportedFile.Text := ExtractFileName(XMLPath); + XMLDocument.LoadFromFile(XMLPath); + end else begin + {$IFDEF MSWINDOWS} + ImportedFile.Text := ExtractFileName(MainForm.XMLOpenDialog.FileName); + {$ELSE MACOS} + ImportedFile.Text := ExtractFileName(ImportedPath); + {$ENDIF} + XMLDocument.LoadFromFile(MainForm.XMLOpenDialog.FileName); + end; - XMLDocument.Active := True; + XMLDocument.Active := True; - XMLDocument.Encoding := 'utf-8'; + XMLDocument.Encoding := 'utf-8'; - RootNode := XMLDocument.DocumentElement; + RootNode := XMLDocument.DocumentElement; - aerProjectPath.Text := RootNode.Attributes['project']; - CompCount := StrToInt(RootNode.ChildNodes['compositions'].Attributes['count']); - for var i := 0 to CompCount - 1 do - compositions.Items.Add(RootNode.ChildNodes['compositions'].ChildNodes[i].ChildNodes['name'].Text); - except - on Exception do begin - TDialogServiceSync.MessageDialog(Language[LANG].Errors.IncompatibleFile, TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0); - ImportForm.Close; + aerProjectPath.Text := RootNode.Attributes['project']; + CompCount := StrToInt(RootNode.ChildNodes['compositions'].Attributes['count']); + for var i := 0 to CompCount - 1 do + compListBox.Items.Add(RootNode.ChildNodes['compositions'].ChildNodes[i].ChildNodes['name'].Text); + except + on Exception do begin + TDialogServiceSync.MessageDialog(Language[Settings.Language].Errors.IncompatibleFile, TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0); + ImportForm.Close; + end; + end; end; end; end; @@ -327,7 +416,7 @@ procedure TImportForm.FormShow(Sender: TObject); procedure TImportForm.selectallButtonClick(Sender: TObject); begin for var i := 0 to CompCount - 1 do - compositions.ListItems[i].IsChecked := True; + compListBox.ListItems[i].IsChecked := True; end; end. diff --git a/src/MainUnit.fmx b/src/MainUnit.fmx index 8506719..7f122ff 100644 --- a/src/MainUnit.fmx +++ b/src/MainUnit.fmx @@ -2,8 +2,8 @@ object MainForm: TMainForm Left = 0 Top = 0 Caption = 'AErender Launcher BETA' - ClientHeight = 561 - ClientWidth = 701 + ClientHeight = 640 + ClientWidth = 1280 Position = MainFormCenter Quality = HighQuality SystemStatusBar.BackgroundColor = claViolet @@ -20,16 +20,16 @@ object MainForm: TMainForm object AEPOpenDialog: TOpenDialog Filter = 'After Effects project|*.aep|All Files|*.*' Title = 'Project File' - Left = 72 - Top = 448 + Left = 224 + Top = 144 end object SaveDialog1: TSaveDialog FileName = 'Default' Filter = 'All Files|*.*' Options = [ofOverwritePrompt, ofHideReadOnly, ofExtensionDifferent, ofNoTestFileCreate, ofEnableSizing] Title = 'Output File' - Left = 104 - Top = 448 + Left = 224 + Top = 96 end object OnyxBlueStyle: TStyleBook StyleName = 'Onyx Blue (Old Style)' @@ -2697,14 +2697,14 @@ object MainForm: TMainForm 000000BE054011536F75726365526563742E426F74746F6D0500000000000000 E605400000064F70617175650900005450463007544C61796F75740009537479 6C654E616D65060A6C6162656C7374796C650756697369626C6508085461624F - 7264657202020005545465787400095374796C654E616D650604746578740541 + 7264657202030005545465787400095374796C654E616D650604746578740541 6C69676E0706436C69656E74064C6F636B656409074869745465737408165465 787453657474696E67732E466F6E74436F6C6F720708636C6157686974650000 005450463007544C61796F757400095374796C654E616D65060B627574746F6E 7374796C6505416C69676E0708436F6E74656E74730A53697A652E5769647468 0500000000009324B106400B53697A652E4865696768740500000000004A92E8 05401453697A652E506C6174666F726D44656661756C74080756697369626C65 - 08085461624F726465720203000B54476C6F774566666563740008536F66746E + 08085461624F726465720204000B54476C6F774566666563740008536F66746E 657373050000000000CDCCCCFC3F09476C6F77436F6C6F720709784646343837 394133074F706163697479050000000000000080FF3F0754726967676572060E 4973466F63757365643D7472756507456E61626C65640800001254427574746F @@ -2762,7 +2762,7 @@ object MainForm: TMainForm 436F6C6F7207097846463138314131440C50726573736564436F6C6F72070863 6C6157686974650000005450463007544C61796F757400095374796C654E616D 650610627574746F6E7374796C656C6162656C0756697369626C650808546162 - 4F726465720204001654427574746F6E5374796C65546578744F626A65637400 + 4F726465720205001654427574746F6E5374796C65546578744F626A65637400 095374796C654E616D6506047465787405416C69676E0706436C69656E74064C 6F636B656409165465787453657474696E67732E466F6E74436F6C6F72070978 46463138314131440D536861646F7756697369626C650808486F74436F6C6F72 @@ -2773,7 +2773,7 @@ object MainForm: TMainForm 6E0708436F6E74656E74730A53697A652E57696474680500000000009324B106 400B53697A652E4865696768740500000000004A92E805401453697A652E506C 6174666F726D44656661756C74080756697369626C6508085461624F72646572 - 0205001254427574746F6E5374796C654F626A65637400095374796C654E616D + 0206001254427574746F6E5374796C654F626A65637400095374796C654E616D 65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730C536F 757263654C6F6F6B757006124F6E797820426C75657374796C652E706E670A53 697A652E57696474680500000000009324B106400B53697A652E486569676874 @@ -2827,7 +2827,7 @@ object MainForm: TMainForm 61636B0B4E6F726D616C436F6C6F7207097846463138314131440C5072657373 6564436F6C6F720708636C6157686974650000005450463007544C61796F7574 00095374796C654E616D6506157370656564627574746F6E7374796C656C6162 - 656C0756697369626C6508085461624F726465720206001654427574746F6E53 + 656C0756697369626C6508085461624F726465720207001654427574746F6E53 74796C65546578744F626A65637400095374796C654E616D6506047465787405 416C69676E0706436C69656E74064C6F636B656409165465787453657474696E 67732E466F6E74436F6C6F7207097846463138314131440D536861646F775669 @@ -2838,7 +2838,7 @@ object MainForm: TMainForm 74746F6E05416C69676E0708436F6E74656E74730A53697A652E576964746805 00000000009324B106400B53697A652E4865696768740500000000004A92E805 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 - 085461624F726465720207001254427574746F6E5374796C654F626A65637400 + 085461624F726465720208001254427574746F6E5374796C654F626A65637400 095374796C654E616D65060A6261636B67726F756E6405416C69676E0708436F 6E74656E74730C536F757263654C6F6F6B757006124F6E797820426C75657374 796C652E706E670A53697A652E57696474680500000000009324B106400B5369 @@ -2892,7 +2892,7 @@ object MainForm: TMainForm 6F720708636C61426C61636B0B4E6F726D616C436F6C6F720709784646313831 4131440C50726573736564436F6C6F720708636C615768697465000000545046 3007544C61796F757400095374796C654E616D65060F746F6F6C627574746F6E - 6C6162656C0756697369626C6508085461624F72646572020800165442757474 + 6C6162656C0756697369626C6508085461624F72646572020900165442757474 6F6E5374796C65546578744F626A65637400095374796C654E616D6506047465 787405416C69676E0706436C69656E74064C6F636B6564091654657874536574 74696E67732E466F6E74436F6C6F7207097846463138314131440D536861646F @@ -2901,7 +2901,7 @@ object MainForm: TMainForm 097846463138314131440C50726573736564436F6C6F720708636C6157686974 650000005450463007544C61796F757400095374796C654E616D650610636F6C 6F72627574746F6E7374796C650756697369626C6508085461624F7264657202 - 09000B54476C6F774566666563740008536F66746E657373050000000000CDCC + 0A000B54476C6F774566666563740008536F66746E657373050000000000CDCC CCFC3F09476C6F77436F6C6F720709784646343837394133074F706163697479 050000000000000080FF3F0754726967676572060E4973466F63757365643D74 72756507456E61626C65640800001254427574746F6E5374796C654F626A6563 @@ -2951,7 +2951,7 @@ object MainForm: TMainForm 545046300B54477269644C61796F757400095374796C654E616D65060E737069 6E65646974627574746F6E0A4974656D486569676874050000000000000080FF BF094974656D576964746805000000000000008005400B4F7269656E74617469 - 6F6E0708566572746963616C0756697369626C6508085461624F72646572020A + 6F6E0708566572746963616C0756697369626C6508085461624F72646572020B 0007544C61796F7574000A53697A652E57696474680500000000000000C80440 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 74666F726D44656661756C7408000754427574746F6E00095374796C654E616D @@ -2970,7 +2970,7 @@ object MainForm: TMainForm 6661756C74080B5374796C654C6F6F6B757006157363726F6C6C626172626F74 746F6D627574746F6E000000005450463007544C61796F757400095374796C65 4E616D650609656469747374796C650756697369626C6508085461624F726465 - 72020B000B54476C6F774566666563740008536F66746E657373050000000000 + 72020C000B54476C6F774566666563740008536F66746E657373050000000000 CDCCCCFC3F09476C6F77436F6C6F720709784646343837394133074F70616369 7479050000000000000080FF3F0754726967676572060E4973466F6375736564 3D7472756507456E61626C65640800000C545374796C654F626A656374000953 @@ -3006,7 +3006,7 @@ object MainForm: TMainForm 726F6D7074064C6F636B656409074F706163697479050000000000000080FE3F 0756697369626C65080000005450463007544C61796F757400095374796C654E 616D65060D74696D65656469747374796C650756697369626C6508085461624F - 72646572020C000B54476C6F774566666563740008536F66746E657373050000 + 72646572020D000B54476C6F774566666563740008536F66746E657373050000 000000CDCCCCFC3F09476C6F77436F6C6F720709784646343837394133074F70 6163697479050000000000000080FF3F0754726967676572060E4973466F6375 7365643D7472756507456E61626C65640800000C545374796C654F626A656374 @@ -3085,7 +3085,7 @@ object MainForm: TMainForm 00000000000000A003400B53697A652E48656967687405000000000000009803 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 0000005450463007544C61796F757400095374796C654E616D65060D64617465 - 656469747374796C650756697369626C6508085461624F72646572020D000B54 + 656469747374796C650756697369626C6508085461624F72646572020E000B54 476C6F774566666563740008536F66746E657373050000000000CDCCCCFC3F09 476C6F77436F6C6F720709784646343837394133074F70616369747905000000 0000000080FF3F0754726967676572060E4973466F63757365643D7472756507 @@ -3151,7 +3151,7 @@ object MainForm: TMainForm 05000000000000009803401453697A652E506C6174666F726D44656661756C74 080756697369626C65080000005450463007544C61796F757400095374796C65 4E616D650611636C656172696E67656469747374796C650756697369626C6508 - 085461624F72646572020E000B54476C6F774566666563740008536F66746E65 + 085461624F72646572020F000B54476C6F774566666563740008536F66746E65 7373050000000000CDCCCCFC3F09476C6F77436F6C6F72070978464634383739 4133074F706163697479050000000000000080FF3F0754726967676572060E49 73466F63757365643D7472756507456E61626C65640800000C545374796C654F @@ -3201,7 +3201,7 @@ object MainForm: TMainForm 74696F6E0B42727573682E436F6C6F72070978374634343735394400000B5446 6F6E744F626A65637400095374796C654E616D650604666F6E74000000545046 3007544C61796F757400095374796C654E616D65060C7370696E626F78737479 - 6C650756697369626C6508085461624F72646572020F000B54476C6F77456666 + 6C650756697369626C6508085461624F726465720210000B54476C6F77456666 6563740008536F66746E657373050000000000CDCCCCFC3F09476C6F77436F6C 6F720709784646343837394133074F706163697479050000000000000080FF3F 0754726967676572060E4973466F63757365643D7472756507456E61626C6564 @@ -3248,7 +3248,7 @@ object MainForm: TMainForm 34343735394400000B54466F6E744F626A65637400095374796C654E616D6506 04666F6E740000005450463007544C61796F757400095374796C654E616D6506 0D73706C69747465727374796C650756697369626C6508085461624F72646572 - 0210000854456C6C6970736500095374796C654E616D6506046772697005416C + 0211000854456C6C6970736500095374796C654E616D6506046772697005416C 69676E07034669740946696C6C2E4B696E6407084772616469656E741446696C 6C2E4772616469656E742E506F696E74730E0105436F6C6F7207097846463441 34393534064F66667365740500000000000000000000000105436F6C6F720709 @@ -3260,7 +3260,7 @@ object MainForm: TMainForm 0000000000C804401453697A652E506C6174666F726D44656661756C74080C53 74726F6B652E436F6C6F720708636C6157686974650000005450463007544C61 796F757400095374796C654E616D65060D636865636B626F787374796C650756 - 697369626C6508085461624F7264657202110007544C61796F75740005416C69 + 697369626C6508085461624F7264657202120007544C61796F75740005416C69 676E07044C6566740A53697A652E576964746805000000000000009003400B53 697A652E4865696768740500000000000000C804401453697A652E506C617466 6F726D44656661756C7408001154436865636B5374796C654F626A6563740009 @@ -3308,7 +3308,7 @@ object MainForm: TMainForm 726D616C436F6C6F720708636C6157686974650C50726573736564436F6C6F72 0708636C6157686974650000005450463007544C61796F757400095374796C65 4E616D650610726164696F627574746F6E7374796C650756697369626C650808 - 5461624F7264657202120007544C61796F75740005416C69676E07044C656674 + 5461624F7264657202130007544C61796F75740005416C69676E07044C656674 0A53697A652E576964746805000000000000009003400B53697A652E48656967 68740500000000000000C804401453697A652E506C6174666F726D4465666175 6C7408001154436865636B5374796C654F626A65637400095374796C654E616D @@ -3355,7 +3355,7 @@ object MainForm: TMainForm 6C6157686974650B4E6F726D616C436F6C6F720708636C6157686974650C5072 6573736564436F6C6F720708636C6157686974650000005450463007544C6179 6F757400095374796C654E616D65060E7363726F6C6C6261727374796C650756 - 697369626C6508085461624F726465720213000754427574746F6E0009537479 + 697369626C6508085461624F726465720214000754427574746F6E0009537479 6C654E616D65060A6C656674627574746F6E05416C69676E07044C656674064C 6F636B6564090A506F736974696F6E2E5905000000000000008003400A53697A 652E576964746805000000000000008003400B53697A652E4865696768740500 @@ -3940,7 +3940,7 @@ object MainForm: TMainForm 2E576964746805000000000000009003400B53697A652E486569676874050000 0000000000A003401453697A652E506C6174666F726D44656661756C74080000 00005450463007544C61796F757400095374796C654E616D65060D73697A6567 - 7269707374796C650756697369626C6508085461624F726465720220000C5453 + 7269707374796C650756697369626C6508085461624F726465720221000C5453 74796C654F626A6563740005416C69676E070643656E7465720C536F75726365 4C6F6F6B757006124F6E797820426C75657374796C652E706E670A53697A652E 57696474680500000000000000E002400B53697A652E48656967687405000000 @@ -3981,7 +3981,7 @@ object MainForm: TMainForm 544C61796F757400095374796C654E616D65060D6D656E75766965777374796C 650D50616464696E672E526967687405000000000000008002400E5061646469 6E672E426F74746F6D05000000000000008002400756697369626C6508085461 - 624F726465720221000C545374796C654F626A6563740005416C69676E070643 + 624F726465720222000C545374796C654F626A6563740005416C69676E070643 6C69656E74074361704D6F6465070454696C650D4D617267696E732E52696768 7405000000000000008002C00E4D617267696E732E426F74746F6D0500000000 0000008002C00C536F757263654C6F6F6B757006124F6E797820426C75657374 @@ -4005,7 +4005,7 @@ object MainForm: TMainForm 0B53697A652E48656967687405000000000000009804401453697A652E506C61 74666F726D44656661756C74080000005450463007544C61796F757400095374 796C654E616D6506106D656E756261726974656D7374796C650756697369626C - 6508085461624F726465720222000C545374796C654F626A6563740005416C69 + 6508085461624F726465720223000C545374796C654F626A6563740005416C69 676E0708436F6E74656E7473074F70616369747905000000000000000000000C 536F757263654C6F6F6B757006124F6E797820426C75657374796C652E706E67 0A536F757263654C696E6B0E010E436170496E736574732E4C65667405000000 @@ -4132,7 +4132,7 @@ object MainForm: TMainForm 65727365062249734D6F7573654F7665723D66616C73653B497353656C656374 65643D66616C736500000000005450463007544C61796F757400095374796C65 4E616D65060D6D656E756974656D7374796C650756697369626C650808546162 - 4F726465720223000C545374796C654F626A6563740005416C69676E0708436F + 4F726465720224000C545374796C654F626A6563740005416C69676E0708436F 6E74656E7473074F70616369747905000000000000000000000C536F75726365 4C6F6F6B757006124F6E797820426C75657374796C652E706E670A536F757263 654C696E6B0E010E436170496E736574732E4C6566740500000000000000A002 @@ -4282,7 +4282,7 @@ object MainForm: TMainForm 095374796C654E616D6506126D656E75736570617261746F727374796C650B4D 617267696E732E546F70050000000000000080FF3F0E4D617267696E732E426F 74746F6D050000000000000080FF3F0756697369626C6508085461624F726465 - 720224000C545374796C654F626A6563740005416C69676E0703546F700C536F + 720225000C545374796C654F626A6563740005416C69676E0703546F700C536F 757263654C6F6F6B757006124F6E797820426C75657374796C652E706E670A53 697A652E57696474680500000000000000C804400B53697A652E486569676874 05000000000000008000401453697A652E506C6174666F726D44656661756C74 @@ -4294,7 +4294,7 @@ object MainForm: TMainForm 6F787374796C650C50616464696E672E4C65667405000000000000008000400B 50616464696E672E546F7005000000000000008002400D50616464696E672E52 6967687405000000000000008000400E50616464696E672E426F74746F6D0500 - 0000000000008000400756697369626C6508085461624F726465720225000C54 + 0000000000008000400756697369626C6508085461624F726465720226000C54 5374796C654F626A65637400095374796C654E616D65060A6261636B67726F75 6E6405416C69676E0706436C69656E74074361704D6F6465070454696C65064C 6F636B6564090C536F757263654C6F6F6B757006124F6E797820426C75657374 @@ -4322,7 +4322,7 @@ object MainForm: TMainForm 787374796C6505416C69676E0708436F6E74656E74730A53697A652E57696474 680500000000009324B106400B53697A652E4865696768740500000000004A92 E805401453697A652E506C6174666F726D44656661756C74080756697369626C - 6508085461624F726465720226000B54476C6F774566666563740008536F6674 + 6508085461624F726465720227000B54476C6F774566666563740008536F6674 6E657373050000000000CDCCCCFC3F09476C6F77436F6C6F7207097846463438 37394133074F706163697479050000000000000080FF3F075472696767657206 0E4973466F63757365643D7472756507456E61626C65640800000C5442727573 @@ -4395,7 +4395,7 @@ object MainForm: TMainForm 68740500000000000000C804401453697A652E506C6174666F726D4465666175 6C74080756697369626C6508000000005450463007544C61796F757400095374 796C654E616D6506106C697374626F786974656D7374796C650756697369626C - 6508085461624F726465720227000654476C79706800095374796C654E616D65 + 6508085461624F726465720228000654476C79706800095374796C654E616D65 060A676C7970687374796C650C4D617267696E732E4C65667405000000000000 008000400B4D617267696E732E546F70050000000000000080FF3F0D4D617267 696E732E526967687405000000000000008000400E4D617267696E732E426F74 @@ -4471,7 +4471,7 @@ object MainForm: TMainForm 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E 6407044E6F6E6500000000005450463007544C61796F757400095374796C654E 616D65060E736561726368626F787374796C650756697369626C650808546162 - 4F726465720228000C545374796C654F626A65637400095374796C654E616D65 + 4F726465720229000C545374796C654F626A65637400095374796C654E616D65 060A6261636B67726F756E6405416C69676E0708436F6E74656E74730C536F75 7263654C6F6F6B757006124F6E797820426C75657374796C652E706E67085772 61704D6F6465070454696C650A536F757263654C696E6B0E010E436170496E73 @@ -4510,25 +4510,25 @@ object MainForm: TMainForm 682E436F6C6F72070978374634343735394400000B54466F6E744F626A656374 00095374796C654E616D650604666F6E740000005450463007544C61796F7574 00095374796C654E616D650609746F6F6C6C6162656C0756697369626C650808 - 5461624F7264657202290005545465787400095374796C654E616D6506047465 + 5461624F72646572022A0005545465787400095374796C654E616D6506047465 787405416C69676E0706436C69656E74064C6F636B6564090748697454657374 08165465787453657474696E67732E466F6E74436F6C6F720708636C61576869 74650000005450463007544C61796F757400095374796C654E616D6506126C69 7374626F786865616465726C6162656C0756697369626C6508085461624F7264 - 6572022A0005545465787400095374796C654E616D6506047465787405416C69 + 6572022B0005545465787400095374796C654E616D6506047465787405416C69 676E0706436C69656E74064C6F636B6564090748697454657374081654657874 53657474696E67732E466F6E742E53697A650500000000000000980340165465 787453657474696E67732E466F6E74436F6C6F720708636C6157686974650000 005450463007544C61796F757400095374796C654E616D6506166C697374626F 786974656D64657461696C6C6162656C0756697369626C6508085461624F7264 - 6572022B0016544163746976655374796C65546578744F626A65637400095374 + 6572022C0016544163746976655374796C65546578744F626A65637400095374 796C654E616D6506045465787405416C69676E0706436C69656E74064C6F636B 656409074F7061636974790500000000009A9999FE3F16546578745365747469 6E67732E466F6E74436F6C6F720708636C6157686974650D536861646F775669 7369626C65080D41637469766554726967676572070853656C65637465640B41 6374697665436F6C6F720708636C6157686974650000005450463007544C6179 6F757400095374796C654E616D6506106C697374626F786974656D6C6162656C - 0756697369626C6508085461624F72646572022C001654416374697665537479 + 0756697369626C6508085461624F72646572022D001654416374697665537479 6C65546578744F626A65637400095374796C654E616D6506045465787405416C 69676E0706436C69656E74064C6F636B656409165465787453657474696E6773 2E466F6E742E53697A650500000000000000F00240165465787453657474696E @@ -4536,7 +4536,7 @@ object MainForm: TMainForm 69626C65080D41637469766554726967676572070853656C65637465640B4163 74697665436F6C6F720708636C6157686974650000005450463007544C61796F 757400095374796C654E616D6506136C697374626F786974656D6E6F64657461 - 696C0756697369626C6508085461624F72646572022D000954436865636B426F + 696C0756697369626C6508085461624F72646572022E000954436865636B426F 7800095374796C654E616D650605636865636B05416C69676E07084D6F73744C 6566740843616E466F637573081244697361626C65466F637573456666656374 090D4D617267696E732E52696768740500000000000000A001400A53697A652E @@ -4573,7 +4573,7 @@ object MainForm: TMainForm 676572070853656C65637465640B416374697665436F6C6F720708636C615768 697465000000005450463007544C61796F757400095374796C654E616D650617 6C697374626F786974656D626F74746F6D64657461696C0756697369626C6508 - 085461624F72646572022E000954436865636B426F7800095374796C654E616D + 085461624F72646572022F000954436865636B426F7800095374796C654E616D 650605636865636B05416C69676E07084D6F73744C6566740843616E466F6375 73081244697361626C65466F637573456666656374090D4D617267696E732E52 696768740500000000000000A001400A53697A652E5769647468050000000000 @@ -4619,7 +4619,7 @@ object MainForm: TMainForm 65080D41637469766554726967676572070853656C65637465640B4163746976 65436F6C6F720708636C6157686974650000005450463007544C61796F757400 095374796C654E616D6506166C697374626F786974656D726967687464657461 - 696C0756697369626C6508085461624F72646572022F000B54477269644C6179 + 696C0756697369626C6508085461624F726465720230000B54477269644C6179 6F757400095374796C654E616D6506046172656105416C69676E0706436C6965 6E740748697454657374080A4974656D48656967687405000000000000008005 40094974656D5769647468050000000000000080FFBF0B4F7269656E74617469 @@ -4675,7 +4675,7 @@ object MainForm: TMainForm 005450463007544C61796F757400095374796C654E616D6506156C697374626F 786974656D6C65667464657461696C0A506F736974696F6E2E58050000000000 0000E507400A506F736974696F6E2E590500000000000080A707400756697369 - 626C6508085461624F726465720230000B54477269644C61796F757400095374 + 626C6508085461624F726465720231000B54477269644C61796F757400095374 796C654E616D6506046172656105416C69676E0706436C69656E740748697454 657374080A4974656D4865696768740500000000000000800540094974656D57 69647468050000000000000080FFBF0B4F7269656E746174696F6E070A486F72 @@ -4729,7 +4729,7 @@ object MainForm: TMainForm 697369626C65080D41637469766554726967676572070853656C65637465640B 416374697665436F6C6F720708636C6157686974650000000000545046300754 4C61796F757400095374796C654E616D6506126C697374626F78706C61696E68 - 65616465720756697369626C6508085461624F726465720231000C545374796C + 65616465720756697369626C6508085461624F726465720232000C545374796C 654F626A65637400095374796C654E616D65060A6261636B67726F756E640541 6C69676E0708436F6E74656E74730C536F757263654C6F6F6B757006124F6E79 7820426C75657374796C652E706E670A536F757263654C696E6B0E010E436170 @@ -4751,7 +4751,7 @@ object MainForm: TMainForm 53657474696E67732E466F6E74436F6C6F720708636C61576869746516546578 7453657474696E67732E486F727A416C69676E07074C656164696E6700000000 5450463007544C61796F757400095374796C654E616D6506126C697374626F78 - 67726F75706865616465720756697369626C6508085461624F72646572023200 + 67726F75706865616465720756697369626C6508085461624F72646572023300 0C545374796C654F626A65637400095374796C654E616D65060A6261636B6772 6F756E6405416C69676E0708436F6E74656E74730C536F757263654C6F6F6B75 7006124F6E797820426C75657374796C652E706E670A536F757263654C696E6B @@ -4773,7 +4773,7 @@ object MainForm: TMainForm 08165465787453657474696E67732E466F6E74436F6C6F720708636C61576869 7465165465787453657474696E67732E486F727A416C69676E07074C65616469 6E67000000005450463007544C61796F757400095374796C654E616D65060D6C - 697374626F78666F6F7465720756697369626C6508085461624F726465720233 + 697374626F78666F6F7465720756697369626C6508085461624F726465720234 0007544C61796F757400095374796C654E616D6506046172656105416C69676E 0706436C69656E740005545465787400095374796C654E616D65060474657874 05416C69676E0706436C69656E740748697454657374080C4D617267696E732E @@ -4898,7 +4898,7 @@ object MainForm: TMainForm 4E616D65061764656C657465627574746F6E746578747072657373656405436F 6C6F720708636C6157686974650000005450463007544C61796F757400095374 796C654E616D650615636F6C6F726C697374626F786974656D7374796C650756 - 697369626C6508085461624F7264657202340016544163746976655374796C65 + 697369626C6508085461624F7264657202350016544163746976655374796C65 546578744F626A65637400095374796C654E616D6506047465787405416C6967 6E0706436C69656E740C4D617267696E732E4C6566740500000000000000C000 400B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E73 @@ -4925,7 +4925,7 @@ object MainForm: TMainForm 6768740500000000000000B804401453697A652E506C6174666F726D44656661 756C74080C5374726F6B652E436F6C6F72070978464632303233323700000054 50463007544C61796F757400095374796C654E616D65060D7472656576696577 - 7374796C650756697369626C6508085461624F726465720235000B54476C6F77 + 7374796C650756697369626C6508085461624F726465720236000B54476C6F77 4566666563740008536F66746E657373050000000000CDCCCCFC3F09476C6F77 436F6C6F720709784646343837394133074F7061636974790500000000000000 80FF3F0754726967676572060E4973466F63757365643D7472756507456E6162 @@ -4989,7 +4989,7 @@ object MainForm: TMainForm 2E48656967687405000000000000008002401453697A652E506C6174666F726D 44656661756C74080756697369626C650800000000005450463007544C61796F 757400095374796C654E616D65061174726565766965776974656D7374796C65 - 0756697369626C6508085461624F726465720236000C54537065656442757474 + 0756697369626C6508085461624F726465720237000C54537065656442757474 6F6E00095374796C654E616D650606627574746F6E05416C69676E07044C6566 740C4D617267696E732E4C6566740500000000000000C000400B4D617267696E 732E546F700500000000000000C000400D4D617267696E732E52696768740500 @@ -5025,7 +5025,7 @@ object MainForm: TMainForm 68697465000000005450463007544C61796F757400095374796C654E616D6506 1B7472656576696577657870616E646572627574746F6E7374796C650B4D6172 67696E732E546F70050000000000000080FF3F0756697369626C650808546162 - 4F726465720237000554506174680005416C69676E070643656E746572094461 + 4F726465720238000554506174680005416C69676E070643656E746572094461 74612E506174680A400000000500000000000000D36D3F431BEF484301000000 1749E043BA09E54301000000D36D3F43C73B344401000000D36D3F431BEF4843 03000000D36D3F431BEF48430A46696C6C2E436F6C6F720708636C6157686974 @@ -5051,7 +5051,7 @@ object MainForm: TMainForm 0080FF3F0754726967676572060F4973457870616E6465643D747275650E5472 6967676572496E766572736506104973457870616E6465643D66616C73650000 00005450463007544C61796F757400095374796C654E616D65060C706F706F76 - 65727374796C650756697369626C6508085461624F726465720238000C545374 + 65727374796C650756697369626C6508085461624F726465720239000C545374 796C654F626A65637400095374796C654E616D650602626705416C69676E0706 436C69656E74074361704D6F6465070454696C650C50616464696E672E4C6566 7405000000000000008000400B50616464696E672E546F700500000000000000 @@ -5112,7 +5112,7 @@ object MainForm: TMainForm 676572060F497353656C65637465643D747275650E54726967676572496E7665 7273650610497353656C65637465643D66616C73650000005450463007544C61 796F757400095374796C654E616D65060F746162636F6E74726F6C7374796C65 - 0756697369626C6508085461624F726465720239000C5442727573684F626A65 + 0756697369626C6508085461624F72646572023A000C5442727573684F626A65 637400095374796C654E616D6506107363726F6C6C6261636B67726F756E640B 42727573682E436F6C6F72070978464633313334333900000C545374796C654F 626A6563740005416C69676E0708436F6E74656E7473074361704D6F64650704 @@ -5126,7 +5126,7 @@ object MainForm: TMainForm 10536F75726365526563742E5269676874050000000000000093064011536F75 726365526563742E426F74746F6D0500000000000000D307400000064F706171 7565090000005450463007544C61796F757400095374796C654E616D65060C74 - 61626974656D7374796C650756697369626C6508085461624F72646572023A00 + 61626974656D7374796C650756697369626C6508085461624F72646572023B00 0F545461625374796C654F626A65637400095374796C654E616D650603746F70 05416C69676E0708436F6E74656E74730C436C69704368696C6472656E09064C 6F636B6564090C536F757263654C6F6F6B757006124F6E797820426C75657374 @@ -5276,7 +5276,7 @@ object MainForm: TMainForm 416374697665436F6C6F720708636C61576869746508486F74436F6C6F720708 636C615768697465000000005450463007544C61796F757400095374796C654E 616D65060D7461626974656D637573746F6D0756697369626C6508085461624F - 72646572023B000F545461625374796C654F626A65637400095374796C654E61 + 72646572023C000F545461625374796C654F626A65637400095374796C654E61 6D650603746F7005416C69676E0708436F6E74656E74730C436C69704368696C 6472656E09064C6F636B6564090C536F757263654C6F6F6B757006124F6E7978 20426C75657374796C652E706E670D4163746976655472696767657207085365 @@ -5441,7 +5441,7 @@ object MainForm: TMainForm 6C6F720708636C61576869746508486F74436F6C6F720708636C615768697465 00000000005450463007544C61796F757400095374796C654E616D6506107072 6F67726573736261727374796C650756697369626C6508085461624F72646572 - 023C000C545374796C654F626A65637400095374796C654E616D650605747261 + 023D000C545374796C654F626A65637400095374796C654E616D650605747261 636B05416C69676E0708436F6E74656E7473074361704D6F6465070454696C65 0C536F757263654C6F6F6B757006124F6E797820426C75657374796C652E706E 6708577261704D6F6465070454696C650A536F757263654C696E6B0E010E4361 @@ -5487,7 +5487,7 @@ object MainForm: TMainForm 696768740500000000000000BE064011536F75726365526563742E426F74746F 6D05000000000000009B07400000064F70617175650900000000545046300754 4C61796F757400095374796C654E616D650613736D616C6C7363726F6C6C6261 - 727374796C650756697369626C6508085461624F72646572023D000654547261 + 727374796C650756697369626C6508085461624F72646572023E000654547261 636B00095374796C654E616D65060668747261636B05416C69676E0706436C69 656E74064C6F636B6564090B4F7269656E746174696F6E070A486F72697A6F6E 74616C0A53697A652E57696474680500000000000000C804400B53697A652E48 @@ -5500,7 +5500,7 @@ object MainForm: TMainForm 53697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B75 7006147363726F6C6C62617276747261636B7374796C65000000545046300754 4C61796F757400095374796C654E616D65060E7363726F6C6C626F787374796C - 650756697369626C6508085461624F72646572023E0007544C61796F75740009 + 650756697369626C6508085461624F72646572023F0007544C61796F75740009 5374796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E 74656E7473064C6F636B6564090007544C61796F757400095374796C654E616D 650607636F6E74656E7405416C69676E0706436C69656E740A53697A652E5769 @@ -5541,7 +5541,7 @@ object MainForm: TMainForm 68740500000000000000C804401453697A652E506C6174666F726D4465666175 6C74080000000000005450463007544C61796F757400095374796C654E616D65 06146672616D65647363726F6C6C626F787374796C650756697369626C650808 - 5461624F72646572023F000C545374796C654F626A65637400095374796C654E + 5461624F726465720240000C545374796C654F626A65637400095374796C654E 616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E747306 4C6F636B6564090C50616464696E672E4C65667405000000000000008000400B 50616464696E672E546F7005000000000000008000400D50616464696E672E52 @@ -5595,7 +5595,7 @@ object MainForm: TMainForm 652E4865696768740500000000000000C804401453697A652E506C6174666F72 6D44656661756C74080000000000005450463007544C61796F75740009537479 6C654E616D6506096D656D6F7374796C650756697369626C6508085461624F72 - 6465720240000B54476C6F774566666563740008536F66746E65737305000000 + 6465720241000B54476C6F774566666563740008536F66746E65737305000000 0000CDCCCCFC3F09476C6F77436F6C6F720709784646343837394133074F7061 63697479050000000000000080FF3F0754726967676572060E4973466F637573 65643D7472756507456E61626C65640800000C545374796C654F626A65637400 @@ -5652,7 +5652,7 @@ object MainForm: TMainForm 35394400000B54466F6E744F626A65637400095374796C654E616D650604666F 6E740000005450463007544C61796F757400095374796C654E616D650611696D 616765636F6E74726F6C7374796C650756697369626C6508085461624F726465 - 720241000B54476C6F774566666563740008536F66746E657373050000000000 + 720242000B54476C6F774566666563740008536F66746E657373050000000000 CDCCCCFC3F09476C6F77436F6C6F720709784646343837394133074F70616369 7479050000000000000080FF3F0754726967676572060E4973466F6375736564 3D7472756507456E61626C65640800000C545374796C654F626A656374000953 @@ -5679,7 +5679,7 @@ object MainForm: TMainForm 0000000000A004401453697A652E506C6174666F726D44656661756C74080000 00005450463007544C61796F757400095374796C654E616D65060D747261636B 6261727374796C6505416C69676E070643656E7465720756697369626C650808 - 5461624F7264657202420B466978656448656967687402180009545374796C65 + 5461624F7264657202430B466978656448656967687402180009545374796C65 5461670003546167020E095374796C654E616D6506095468756D6253697A6500 000C545374796C654F626A65637400095374796C654E616D6506066874726163 6B05416C69676E070A5665727443656E746572064C6F636B6564090C536F7572 @@ -5779,7 +5779,7 @@ object MainForm: TMainForm 000000000000C9074011536F75726365526563742E426F74746F6D0500000000 000080D70740000013546F756368416E696D6174696F6E2E4C696E6B0E000000 5450463007544C61796F757400095374796C654E616D65060F64726F70746172 - 6765747374796C650756697369626C6508085461624F726465720243000A5452 + 6765747374796C650756697369626C6508085461624F726465720244000A5452 656374616E676C650005416C69676E0708436F6E74656E74730946696C6C2E4B 696E6407044E6F6E650748697454657374080A53697A652E5769647468050000 0000000000C804400B53697A652E4865696768740500000000000000C8044014 @@ -5812,7 +5812,7 @@ object MainForm: TMainForm 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B 696E6407044E6F6E650000005450463013544269746D61705377697463684F62 6A65637400095374796C654E616D65060B7377697463687374796C6505416C69 - 676E070643656E746572085461624F72646572024412547261636B696E675468 + 676E070643656E746572085461624F72646572024512547261636B696E675468 756D625363616C65050000000000000080FF3F0756697369626C650805547261 636B0E010E436170496E736574732E4C6566740500000000000000C001400D43 6170496E736574732E546F700500000000000000C001400F436170496E736574 @@ -5843,7 +5843,7 @@ object MainForm: TMainForm 4A700E000E546578744269746D61704A704F6E0E000C536F757263654C6F6F6B 757006124F6E797820426C75657374796C652E706E6700005450463007544C61 796F757400095374796C654E616D650609677269647374796C65075669736962 - 6C6508085461624F726465720245000B54476C6F774566666563740008536F66 + 6C6508085461624F726465720246000B54476C6F774566666563740008536F66 746E657373050000000000CDCCCCFC3F09476C6F77436F6C6F72070978464634 3837394133074F706163697479050000000000000080FF3F0754726967676572 060E4973466F63757365643D7472756507456E61626C65640800000C54427275 @@ -5920,7 +5920,7 @@ object MainForm: TMainForm 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 00000000005450463007544C61796F757400095374796C654E616D65060F6865 616465726974656D7374796C650756697369626C6508085461624F7264657202 - 46001254427574746F6E5374796C654F626A65637400095374796C654E616D65 + 47001254427574746F6E5374796C654F626A65637400095374796C654E616D65 060A6261636B67726F756E6405416C69676E0708436F6E74656E7473064C6F63 6B6564090C536F757263654C6F6F6B757006124F6E797820426C75657374796C 652E706E6707486F744C696E6B0E010E436170496E736574732E4C6566740500 @@ -6072,7 +6072,7 @@ object MainForm: TMainForm 74796C6512000000000E56696577706F72742E57696474680500000000000000 B804400F56696577706F72742E48656967687405000000000000000000000000 005450463007544C61796F757400095374796C654E616D65061263616C656E64 - 61726C6162656C7374796C650756697369626C6508085461624F726465720247 + 61726C6162656C7374796C650756697369626C6508085461624F726465720248 0005545465787400095374796C654E616D6506047465787405416C69676E0706 436C69656E74064C6F636B656409074869745465737408165465787453657474 696E67732E466F6E74436F6C6F720708636C6157686974650000005450463008 @@ -6093,7 +6093,7 @@ object MainForm: TMainForm 80FE3F0754726967676572061049734D6F7573654F7665723D747275650E5472 6967676572496E7665727365061149734D6F7573654F7665723D66616C736500 00005450463007544C61796F757400095374796C654E616D65060D657870616E - 6465727374796C650756697369626C6508085461624F726465720248000A5452 + 6465727374796C650756697369626C6508085461624F726465720249000A5452 656374616E676C650005416C69676E0708436F6E74656E74730A46696C6C2E43 6F6C6F7207097846463331333433390748697454657374080A53697A652E5769 6474680500000000000000C804400B53697A652E486569676874050000000000 @@ -6121,7 +6121,7 @@ object MainForm: TMainForm 68740500000000000000C803401453697A652E506C6174666F726D4465666175 6C740800000000005450463007544C61796F757400095374796C654E616D6506 13657870616E646572627574746F6E7374796C650756697369626C6508085461 - 624F726465720249001254427574746F6E5374796C654F626A65637400095374 + 624F72646572024A001254427574746F6E5374796C654F626A65637400095374 796C654E616D65060A6261636B67726F756E6405416C69676E070643656E7465 72074F70616369747905000000000000000000000C536F757263654C6F6F6B75 7006124F6E797820426C75657374796C652E706E670A53697A652E5769647468 @@ -6177,7 +6177,7 @@ object MainForm: TMainForm 7870616E6465643D747275650E54726967676572496E76657273650610497345 7870616E6465643D66616C7365000000005450463007544C61796F7574000953 74796C654E616D65061264726F70646F776E65646974627574746F6E07566973 - 69626C6508085461624F72646572024A001254427574746F6E5374796C654F62 + 69626C6508085461624F72646572024B001254427574746F6E5374796C654F62 6A65637400095374796C654E616D65060A6261636B67726F756E6405416C6967 6E0708436F6E74656E74730C536F757263654C6F6F6B757006124F6E79782042 6C75657374796C652E706E6707486F744C696E6B0E010E436170496E73657473 @@ -6238,7 +6238,7 @@ object MainForm: TMainForm 726365526563742E426F74746F6D0500000000000000A60740000013546F7563 68416E696D6174696F6E2E4C696E6B0E000000005450463007544C61796F7574 00095374796C654E616D65060E636F6D626F656469747374796C650756697369 - 626C6508085461624F72646572024B000C545374796C654F626A656374000953 + 626C6508085461624F72646572024C000C545374796C654F626A656374000953 74796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74 656E7473074361704D6F6465070454696C650C50616464696E672E4C65667405 000000000000008000400B50616464696E672E546F7005000000000000008000 @@ -6302,7 +6302,7 @@ object MainForm: TMainForm 0B42727573682E436F6C6F72070978374634343735394400000B54466F6E744F 626A65637400095374796C654E616D650604666F6E740000005450463007544C 61796F757400095374796C654E616D65060D636F6D626F626F787374796C6507 - 56697369626C6508085461624F72646572024C000B54476C6F77456666656374 + 56697369626C6508085461624F72646572024D000B54476C6F77456666656374 0008536F66746E657373050000000000CDCCCCFC3F09476C6F77436F6C6F7207 09784646343837394133074F706163697479050000000000000080FF3F075472 6967676572060E4973466F63757365643D7472756507456E61626C6564080000 @@ -6353,7 +6353,7 @@ object MainForm: TMainForm 00000C5442727573684F626A65637400095374796C654E616D65060A666F7265 67726F756E640000005450463007544C61796F757400095374796C654E616D65 06177472616E73706172656E746C697374626F787374796C650756697369626C - 6508085461624F72646572024D000C5442727573684F626A6563740009537479 + 6508085461624F72646572024E000C5442727573684F626A6563740009537479 6C654E616D650618416C7465726E6174696E67526F774261636B67726F756E64 0B42727573682E436F6C6F720709784646333933453434000007544C61796F75 7400095374796C654E616D65060A6261636B67726F756E6405416C69676E0708 @@ -6433,7 +6433,7 @@ object MainForm: TMainForm 000000000953746F7056616C7565050000000000000080FF3F07547269676765 720610497344726F70446F776E3D66616C73650000005450463007544C61796F 757400095374796C654E616D65060E6E756D626572626F787374796C65075669 - 7369626C6508085461624F72646572024E000B54476C6F774566666563740008 + 7369626C6508085461624F72646572024F000B54476C6F774566666563740008 536F66746E657373050000000000CDCCCCFC3F09476C6F77436F6C6F72070978 4646343837394133074F706163697479050000000000000080FF3F0754726967 676572060E4973466F63757365643D7472756507456E61626C65640800000C54 @@ -6468,7 +6468,7 @@ object MainForm: TMainForm 6C6F72070978374634343735394400000B54466F6E744F626A65637400095374 796C654E616D650604666F6E740000005450463007544C61796F757400095374 796C654E616D65060D706F707570626F787374796C650756697369626C650808 - 5461624F72646572024F000B54476C6F774566666563740008536F66746E6573 + 5461624F726465720250000B54476C6F774566666563740008536F66746E6573 73050000000000CDCCCCFC3F09476C6F77436F6C6F7207097846463438373941 33074F706163697479050000000000000080FF3F0754726967676572060E4973 466F63757365643D7472756507456E61626C65640800001254427574746F6E53 @@ -6561,7 +6561,7 @@ object MainForm: TMainForm 6D616C436F6C6F7207097846463138314131440C50726573736564436F6C6F72 0708636C6157686974650000005450463007544C61796F757400095374796C65 4E616D65060C6172636469616C7374796C650756697369626C6508085461624F - 726465720250000854456C6C6970736500095374796C654E616D65060A626163 + 726465720251000854456C6C6970736500095374796C654E616D65060A626163 6B67726F756E6405416C69676E07034669740946696C6C2E4B696E6407084772 616469656E741446696C6C2E4772616469656E742E506F696E74730E0105436F 6C6F720709784646344134393534064F66667365740500000000000000000000 @@ -6604,7 +6604,7 @@ object MainForm: TMainForm 6E74436F6C6F720709784646313831413144155465787453657474696E67732E 576F726457726170080000005450463007544C61796F757400095374796C654E 616D650611636F726E6572627574746F6E7374796C650756697369626C650808 - 5461624F726465720251000B54476C6F774566666563740008536F66746E6573 + 5461624F726465720252000B54476C6F774566666563740008536F66746E6573 73050000000000CDCCCCFC3F09476C6F77436F6C6F7207097846463438373941 33074F706163697479050000000000000080FF3F0754726967676572060E4973 466F63757365643D7472756507456E61626C65640800000A5452656374616E67 @@ -6638,7 +6638,7 @@ object MainForm: TMainForm 436F6C6F720709784646313831413144155465787453657474696E67732E576F 726457726170080000005450463007544C61796F757400095374796C654E616D 65060D7465787463656C6C7374796C650756697369626C6508085461624F7264 - 657202520007544C61796F757400095374796C654E616D650607636F6E74656E + 657202530007544C61796F757400095374796C654E616D650607636F6E74656E 7405416C69676E0708436F6E74656E7473064C6F636B6564090C4D617267696E 732E4C65667405000000000000008001400B4D617267696E732E546F70050000 00000000008001400D4D617267696E732E526967687405000000000000008001 @@ -6650,7 +6650,7 @@ object MainForm: TMainForm 73656C656374696F6E0B42727573682E436F6C6F720709783746343437353944 00000B54466F6E744F626A65637400095374796C654E616D650604666F6E7400 00005450463007544C61796F757400095374796C654E616D65060E636865636B - 63656C6C7374796C650756697369626C6508085461624F726465720253000754 + 63656C6C7374796C650756697369626C6508085461624F726465720254000754 4C61796F75740005416C69676E07044C6566740A53697A652E57696474680500 000000000000A003400B53697A652E4865696768740500000000000000C80440 1453697A652E506C6174666F726D44656661756C7408001154436865636B5374 @@ -6712,7 +6712,7 @@ object MainForm: TMainForm 65526563742E5269676874050000000000000092054011536F75726365526563 742E426F74746F6D0500000000000000A2064000000000005450463007544C61 796F757400095374796C654E616D65061170726F677265737363656C6C737479 - 6C650756697369626C6508085461624F7264657202540007544C61796F757400 + 6C650756697369626C6508085461624F7264657202550007544C61796F757400 095374796C654E616D650605747261636B05416C69676E0708436F6E74656E74 730C50616464696E672E4C656674050000000000000080FF3F0B50616464696E 672E546F70050000000000000080FF3F0D50616464696E672E52696768740500 @@ -6752,7 +6752,7 @@ object MainForm: TMainForm 63742E52696768740500000000000000BE064011536F75726365526563742E42 6F74746F6D05000000000000009B07400000064F706171756509000000005450 463007544C61796F757400095374796C654E616D65060E706F70757063656C6C - 7374796C650756697369626C6508085461624F7264657202550007544C61796F + 7374796C650756697369626C6508085461624F7264657202560007544C61796F 75740005416C69676E070552696768740A506F736974696F6E2E580500000000 0000008C04400A53697A652E57696474680500000000000000F002400B53697A 652E4865696768740500000000000000C804401453697A652E506C6174666F72 @@ -6780,7 +6780,7 @@ object MainForm: TMainForm 00B804401453697A652E506C6174666F726D44656661756C7408165465787453 657474696E67732E466F6E74436F6C6F720708636C6157686974650000005450 463007544C61796F757400095374796C654E616D65060E696D61676563656C6C - 7374796C650756697369626C6508085461624F726465720256000654496D6167 + 7374796C650756697369626C6508085461624F726465720257000654496D6167 6500095374796C654E616D650605696D6167650E4D756C74695265734269746D 61700E01000005416C69676E0706436C69656E74064C6F636B65640907486974 54657374080C4D617267696E732E4C656674050000000000000080FF3F0B4D61 @@ -6792,7 +6792,7 @@ object MainForm: TMainForm 4E616D65061177696E646F77626F726465727374796C6505416C69676E070643 656E7465720A53697A652E57696474680500000000000000F805400B53697A65 2E48656967687405000000000000008305401453697A652E506C6174666F726D - 44656661756C74080756697369626C6508085461624F726465720257000C5453 + 44656661756C74080756697369626C6508085461624F726465720258000C5453 74796C654F626A65637400095374796C654E616D6506046D61736B05416C6967 6E0708436F6E74656E7473064C6F636B6564090C536F757263654C6F6F6B7570 06124F6E797820426C75657374796C652E706E6708577261704D6F6465070454 @@ -6944,7 +6944,7 @@ object MainForm: TMainForm 0B53697A652E4865696768740500000000000000FC03401453697A652E506C61 74666F726D44656661756C74080000005450463007544C61796F757400095374 796C654E616D65060B6D696E62746E7374796C650756697369626C6508085461 - 624F72646572025800135453797374656D427574746F6E4F626A656374000953 + 624F72646572025900135453797374656D427574746F6E4F626A656374000953 74796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74 656E7473074361704D6F6465070454696C650C536F757263654C6F6F6B757006 124F6E797820426C75657374796C652E706E6708577261704D6F646507064365 @@ -6970,7 +6970,7 @@ object MainForm: TMainForm 6874050000000000000093074011536F75726365526563742E426F74746F6D05 00000000000000AE054000000000005450463007544C61796F75740009537479 6C654E616D65060B6D617862746E7374796C650756697369626C650808546162 - 4F72646572025900135453797374656D427574746F6E4F626A65637400095374 + 4F72646572025A00135453797374656D427574746F6E4F626A65637400095374 796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E7465 6E7473074361704D6F6465070454696C650C536F757263654C6F6F6B75700612 4F6E797820426C75657374796C652E706E6708577261704D6F6465070643656E @@ -6996,7 +6996,7 @@ object MainForm: TMainForm 74050000000000008093074011536F75726365526563742E426F74746F6D0500 000000000000B0044000000000005450463007544C61796F757400095374796C 654E616D65060B72657362746E7374796C650756697369626C6508085461624F - 72646572025A00135453797374656D427574746F6E4F626A6563740009537479 + 72646572025B00135453797374656D427574746F6E4F626A6563740009537479 6C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E 7473074361704D6F6465070454696C650C536F757263654C6F6F6B757006124F 6E797820426C75657374796C652E706E6708577261704D6F6465070643656E74 @@ -7022,7 +7022,7 @@ object MainForm: TMainForm 050000000000008093074011536F75726365526563742E426F74746F6D050000 000000000082054000000000005450463007544C61796F757400095374796C65 4E616D65060D636C6F736562746E7374796C650756697369626C650808546162 - 4F72646572025C00135453797374656D427574746F6E4F626A65637400095374 + 4F72646572025D00135453797374656D427574746F6E4F626A65637400095374 796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E7465 6E7473074361704D6F6465070454696C650C536F757263654C6F6F6B75700612 4F6E797820426C75657374796C652E706E6708577261704D6F6465070643656E @@ -7048,7 +7048,7 @@ object MainForm: TMainForm 74050000000000008093074011536F75726365526563742E426F74746F6D0500 000000000000B0034000000000005450463007544C61796F757400095374796C 654E616D65060F746F6F6C77696E646F777374796C650756697369626C650808 - 5461624F72646572025E000C545374796C654F626A65637400095374796C654E + 5461624F72646572025F000C545374796C654F626A65637400095374796C654E 616D6506046D61736B05416C69676E0708436F6E74656E7473064C6F636B6564 090C536F757263654C6F6F6B757006124F6E797820426C75657374796C652E70 6E6708577261704D6F6465070454696C650756697369626C65080A536F757263 @@ -7175,7 +7175,7 @@ object MainForm: TMainForm 04400B53697A652E4865696768740500000000000000C003401453697A652E50 6C6174666F726D44656661756C74080000005450463007544C61796F75740009 5374796C654E616D650611746F6F6C636C6F736562746E7374796C6507566973 - 69626C6508085461624F72646572026000135453797374656D427574746F6E4F + 69626C6508085461624F72646572026100135453797374656D427574746F6E4F 626A65637400095374796C654E616D65060A6261636B67726F756E6405416C69 676E0708436F6E74656E74730C536F757263654C6F6F6B757006124F6E797820 426C75657374796C652E706E6708577261704D6F6465070643656E7465720748 @@ -7201,10 +7201,10 @@ object MainForm: TMainForm 0000008093074011536F75726365526563742E426F74746F6D05000000000000 00B0034000000000005450463007544C61796F757400095374796C654E616D65 0611616E69696E64696361746F727374796C650756697369626C650808546162 - 4F726465720263000C5442727573684F626A65637400095374796C654E616D65 + 4F726465720264000C5442727573684F626A65637400095374796C654E616D65 060466696C6C0000005450463007544C61796F757400095374796C654E616D65 060E7461626C65766965777374796C650756697369626C6508085461624F7264 - 65720266000C5442727573684F626A65637400095374796C654E616D65061841 + 65720267000C5442727573684F626A65637400095374796C654E616D65061841 6C7465726E6174696E67526F774261636B67726F756E640B42727573682E436F 6C6F720709784646333933453434000007544C61796F757400095374796C654E 616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E747300 @@ -7253,7 +7253,7 @@ object MainForm: TMainForm 06400B53697A652E48656967687405000000000000008002401453697A652E50 6C6174666F726D44656661756C74080756697369626C65080000000000545046 3007544C61796F757400095374796C654E616D6506136D61676E696669657267 - 6C6173737374796C650756697369626C6508085461624F7264657202690A4669 + 6C6173737374796C650756697369626C6508085461624F72646572026A0A4669 78656457696474680396000B4669786564486569676874039600000754436972 636C6500095374796C654E616D650607636F6E74656E7405416C69676E070643 6C69656E741446696C6C2E4269746D61702E577261704D6F6465070454696C65 @@ -7289,7 +7289,7 @@ object MainForm: TMainForm 1C6D61676E6966696572676C61737372656374616E676C657374796C650A5369 7A652E57696474680500000000000000C804400B53697A652E48656967687405 00000000000000C804401453697A652E506C6174666F726D44656661756C7408 - 0756697369626C6508085461624F72646572026C000A5452656374616E676C65 + 0756697369626C6508085461624F72646572026D000A5452656374616E676C65 00095374796C654E616D650607636F6E74656E7405416C69676E0706436C6965 6E741446696C6C2E4269746D61702E577261704D6F6465070454696C65094669 6C6C2E4B696E6407064269746D61700748697454657374080C4D617267696E73 @@ -7329,7 +7329,7 @@ object MainForm: TMainForm 616E676C657374617469634C6F7570650A53697A652E57696474680500000000 000000C804400B53697A652E4865696768740500000000000000C80440145369 7A652E506C6174666F726D44656661756C74080756697369626C650808546162 - 4F72646572026F000A5452656374616E676C6500095374796C654E616D650607 + 4F726465720270000A5452656374616E676C6500095374796C654E616D650607 636F6E74656E7405416C69676E0706436C69656E740A53697A652E5769647468 0500000000000000C804400B53697A652E4865696768740500000000000000C8 04401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E @@ -7398,12 +7398,12 @@ object MainForm: TMainForm 0000009805401453697A652E506C6174666F726D44656661756C74080B537472 6F6B652E4B696E6407044E6F6E6508577261704D6F6465070346697400000000} end> - Left = 8 - Top = 448 + Left = 64 + Top = 192 end object MainMenu1: TMainMenu - Left = 40 - Top = 488 + Left = 144 + Top = 192 object launcherItem: TMenuItem Text = 'AErender Launcher' object outModuleEditorItem0: TMenuItem @@ -7494,7 +7494,7 @@ object MainForm: TMainForm Platform = 'Windows' ResourcesBin = { 464D585F5354594C4520322E3501060F6261636B67726F756E647374796C6503 - AF00060B627574746F6E7374796C6503C5040609656469747374796C6503AE05 + AF00060B627574746F6E7374796C6503D0040609656469747374796C6503AE05 060A6C6162656C7374796C65032001060D67726F7570626F787374796C65038E 02060D747261636B6261727374796C65038C07060D636865636B626F78737479 6C6503930506147363726F6C6C62617268747261636B7374796C65033B010614 @@ -7509,1836 +7509,1871 @@ object MainForm: TMainForm 6C6503EF04060D7468756D626261727374796C65034F03060C6C697374626F78 7374796C6503AD07060D6C697374626F78666F6F746572038B0106106C697374 626F786974656D7374796C6503260306126C697374626F78706C61696E686561 - 6465720346020609677269647374796C65039008060F6865616465726974656D + 6465720346020609677269647374796C6503A308060F6865616465726974656D 7374796C6503CE03061970726F67726573736261726D696E696572726F727374 796C65036103061170726F677265737363656C6C7374796C6503A50206106D65 6E756261726974656D7374796C6503300B060C6D656E756261727374796C6503 - 6C02060D6D656E756974656D7374796C6503540B06126D656E75736570617261 - 746F727374796C6503E501060D6D656E75766965777374796C65039102060E69 + 6C02060D6D656E756974656D7374796C65035D0B06126D656E75736570617261 + 746F727374796C65038301060D6D656E75766965777374796C65039102060E69 6D61676563656C6C7374796C65033D01060E706F70757063656C6C7374796C65 03D103060D7465787463656C6C7374796C6503A60106096D656D6F7374796C65 03E707060E6C696E6B6C6162656C7374796C65035003060E7374617475736261 - 727374796C6503E401060C7370696E626F787374796C65032908060D73697A65 + 727374796C6503E401060C7370696E626F787374796C65035F07060D73697A65 677269707374796C6503FB04060C746F6F6C6261727374796C6503CA00061570 726F67726573736261726572726F727374796C65036F04060F64726F70746172 6765747374796C65037304061464726F707461726765746669656C647374796C 6503940E060C706F706F7665727374796C65033502060D706F707570626F7873 - 74796C65033D0606147374617475736261726E6F677269707374796C6503D400 + 74796C65034B0606147374617475736261726E6F677269707374796C6503D400 0613736D616C6C7363726F6C6C6261727374796C6503AE01060D73706C697474 65727374796C65036B040610636C6F7365627574746F6E7374796C6503710406 0E6D6178627574746F6E7374796C65030104060E726573627574746F6E737479 6C65031A04060E6D696E627574746F6E7374796C65031904060F746F6F6C7769 - 6E646F777374796C6503BD0D061177696E646F77626F726465727374796C6503 - 55100610726164696F627574746F6E7374796C6503B9050618756C63656E7465 - 72726164696F627574746F6E7374796C65035D050617756C7269676874726164 - 696F627574746F6E7374796C650360050616756C6C656674726164696F627574 - 746F6E7374796C65035B05061070726F67726573736261727374796C65036A04 - 060D657870616E6465727374796C650371060613657870616E64657262757474 - 6F6E7374796C650381020615657870616E646572636865636B626F787374796C - 6503DB05060E6C6162656C66696C6C7374796C6503C3010613636F6D626F6564 - 69746572726F727374796C65039209061E70726F6772657373626172696E6465 - 7465726D696E61626C657374796C650384040611616E69696E64696361746F72 - 7374796C6503BA010615616E69696E64696361746F72686F727A7374796C6503 - 8A02060A70616E656C7374796C65031E01060E6C6F67627574746F6E7374796C - 65039507061470726F67726573736261726D696E697374796C65035C03005450 - 46300A5452656374616E676C6500095374796C654E616D65060F6261636B6772 - 6F756E647374796C6505416C69676E070643656E7465720A46696C6C2E436F6C - 6F7207097846463244324432440A53697A652E57696474680500000000000000 - 9407400B53697A652E4865696768740500000000000080D206401453697A652E - 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F - 6E650756697369626C650800005450463007544C61796F757400095374796C65 - 4E616D65060B627574746F6E7374796C6505416C69676E070643656E7465720A - 53697A652E57696474680500000000000000C805400B53697A652E4865696768 - 740500000000000000C803401453697A652E506C6174666F726D44656661756C - 74080756697369626C6508085461624F726465720202000A5452656374616E67 - 6C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E07 - 06436C69656E740C436C69704368696C6472656E090A436C6970506172656E74 - 090A46696C6C2E436F6C6F720709784646323032303230074869745465737408 - 0A53697A652E57696474680500000000000000C805400B53697A652E48656967 - 68740500000000000000C803401453697A652E506C6174666F726D4465666175 - 6C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E69 - 6D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E - 696D6174696F6E31084475726174696F6E05000000000000000000000C50726F - 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 - 07097846463230323032300953746F7056616C75650709784646343034303430 - 0754726967676572063049734D6F7573654F7665723D747275653B4973507265 - 737365643D66616C73653B4973466F63757365643D66616C73650E5472696767 - 6572496E7665727365063149734D6F7573654F7665723D66616C73653B497350 - 7265737365643D66616C73653B4973466F63757365643D66616C736500000F54 - 436F6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F - 6E436F6C6F72416E696D6174696F6E32084475726174696F6E05000000000000 - 000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 - 61727456616C756507097846463430343034300953746F7056616C7565070978 - 46463137353739430754726967676572062F4973507265737365643D74727565 - 3B49734D6F7573654F7665723D747275653B4973466F63757365643D66616C73 - 6500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650615 - 627574746F6E436F6C6F72416E696D6174696F6E33084475726174696F6E0500 - 0000000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C - 6F720A537461727456616C756507097846463241383245320953746F7056616C - 756507097846463137353739430754726967676572062E497350726573736564 - 3D747275653B49734D6F7573654F7665723D747275653B4973466F6375736564 - 3D747275650E54726967676572496E7665727365062F4973507265737365643D - 66616C73653B49734D6F7573654F7665723D747275653B4973466F6375736564 - 3D7472756500000005545465787400095374796C654E616D6506047465787405 - 416C69676E0706436C69656E7413456E61626C6544726167486967686C696768 - 74080748697454657374080A53697A652E57696474680500000000000000C805 - 400B53697A652E4865696768740500000000000000C803401453697A652E506C - 6174666F726D44656661756C7408165465787453657474696E67732E466F6E74 - 436F6C6F720708636C6157686974650000005450463007544C61796F75740009 - 5374796C654E616D650609656469747374796C6505416C69676E070643656E74 - 65720A53697A652E57696474680500000000000000C805400B53697A652E4865 - 696768740500000000000000C803401453697A652E506C6174666F726D446566 - 61756C74080756697369626C6508085461624F726465720203000C5442727573 - 684F626A65637400095374796C654E616D65060A666F726567726F756E640000 - 0C5442727573684F626A65637400095374796C654E616D65060973656C656374 - 696F6E0B42727573682E436F6C6F72070978393632413832453200000B54466F - 6E744F626A65637400095374796C654E616D650604666F6E7409466F6E742E53 - 697A650500000000000000D0024000000A5452656374616E676C650009537479 - 6C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E - 74730A46696C6C2E436F6C6F7207097846463230323032300748697454657374 + 6E646F777374796C6503BD0D0610726164696F627574746F6E7374796C6503B9 + 050618756C63656E746572726164696F627574746F6E7374796C65035D050617 + 756C7269676874726164696F627574746F6E7374796C650360050616756C6C65 + 6674726164696F627574746F6E7374796C65035B05061670726F677265737362 + 617266696E6973687374796C65037004060D657870616E6465727374796C6503 + 71060613657870616E646572627574746F6E7374796C65038102061565787061 + 6E646572636865636B626F787374796C6503DB05060E6C6162656C66696C6C73 + 74796C6503C3010613636F6D626F656469746572726F727374796C6503920906 + 1E70726F6772657373626172696E64657465726D696E61626C657374796C6503 + 84040611616E69696E64696361746F727374796C6503EA010615616E69696E64 + 696361746F72686F727A7374796C65039502060A70616E656C7374796C650329 + 01060E6C6F67627574746F6E7374796C65039507061470726F67726573736261 + 726D696E697374796C65035C03061B7472656576696577657870616E64657262 + 7574746F6E7374796C65038902061174726565766965776974656D7374796C65 + 030905060D74726565766965777374796C650341070619616374696F6E746F6F + 6C627574746F6E6D756C746976696577034A07060E616464627574746F6E7374 + 796C65032C070617696E666F746F6F6C627574746F6E6D756C74697669657703 + B40D061B6F7267616E697A65746F6F6C627574746F6E6D756C74697669657703 + F906061B73657474696E6773746F6F6C627574746F6E6D756C74697669657703 + 8813061172656D6F7665627574746F6E7374796C6503DA060614706F70757062 + 61636B67726F756E647374796C6503BA00061A70726F67726573736261726D69 + 6E6966696E6973687374796C65036203061070726F6772657373626172737479 + 6C65036A04061177696E646F77626F726465727374796C65039D100613617272 + 6F77646F776E746F6F6C627574746F6E03A90500545046300A5452656374616E + 676C6500095374796C654E616D65060F6261636B67726F756E647374796C6505 + 416C69676E070643656E7465720A46696C6C2E436F6C6F720709784646324432 + 4432440A53697A652E576964746805000000000000009407400B53697A652E48 + 65696768740500000000000080D206401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E650756697369626C65 + 0800005450463007544C61796F757400095374796C654E616D65060B62757474 + 6F6E7374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 0500000000000000C805400B53697A652E4865696768740500000000000000C8 + 03401453697A652E506C6174666F726D44656661756C74080756697369626C65 + 08085461624F726465720202000A5452656374616E676C6500095374796C654E + 616D65060A6261636B67726F756E6405416C69676E0706436C69656E740C436C + 69704368696C6472656E090A436C6970506172656E74090A46696C6C2E436F6C + 6F7207097846463230323032300748697454657374080A53697A652E57696474 + 680500000000000000C805400B53697A652E4865696768740500000000000000 + C803401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E310844 + 75726174696F6E05000000000000000000000C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C756507097846463230323032 + 300953746F7056616C7565070978464634303430343007547269676765720630 + 49734D6F7573654F7665723D747275653B4973507265737365643D66616C7365 + 3B4973466F63757365643D66616C73650E54726967676572496E766572736506 + 3149734D6F7573654F7665723D66616C73653B4973507265737365643D66616C + 73653B4973466F63757365643D66616C736500000F54436F6C6F72416E696D61 + 74696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D + 6174696F6E32084475726174696F6E05000000000000000000000C50726F7065 + 7274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709 + 7846463430343034300953746F7056616C756507097846463137353739430754 + 726967676572062F4973507265737365643D747275653B49734D6F7573654F76 + 65723D747275653B4973466F63757365643D66616C736500000F54436F6C6F72 + 416E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F + 72416E696D6174696F6E33084475726174696F6E05000000000000000000000C + 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 + 6C756507097846463241383245320953746F7056616C75650709784646313735 + 3739430754726967676572062E4973507265737365643D747275653B49734D6F + 7573654F7665723D747275653B4973466F63757365643D747275650E54726967 + 676572496E7665727365062F4973507265737365643D66616C73653B49734D6F + 7573654F7665723D747275653B4973466F63757365643D747275650000000554 + 5465787400095374796C654E616D6506047465787405416C69676E0706436C69 + 656E7413456E61626C6544726167486967686C69676874080748697454657374 080A53697A652E57696474680500000000000000C805400B53697A652E486569 6768740500000000000000C803401453697A652E506C6174666F726D44656661 - 756C74080C5374726F6B652E436F6C6F720709784646313531353135000F5443 - 6F6C6F72416E696D6174696F6E00095374796C654E616D650614656469745374 - 726F6B65416E696D6174696F6E31084475726174696F6E050000000000000000 - 00000C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A5374 - 61727456616C756507097846463135313531350953746F7056616C7565070978 - 46463241383245320754726967676572060E4973466F63757365643D74727565 - 0E54726967676572496E7665727365060F4973466F63757365643D66616C7365 - 00000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65061465 - 6469745374726F6B65416E696D6174696F6E32084475726174696F6E05000000 - 0000000000000007496E7665727365090C50726F70657274794E616D65060C53 - 74726F6B652E436F6C6F720A537461727456616C756507097846463135313531 - 350953746F7056616C7565070978464634433443344307547269676765720621 - 49734D6F7573654F7665723D747275653B4973466F63757365643D66616C7365 - 3B0E54726967676572496E7665727365062249734D6F7573654F7665723D6661 - 6C73653B4973466F63757365643D66616C73653B00000007544C61796F757400 - 095374796C654E616D650607627574746F6E7305416C69676E07055269676874 - 064C6F636B6564090B4D617267696E732E546F7005000000000000008000400D - 4D617267696E732E526967687405000000000000008000400E4D617267696E73 - 2E426F74746F6D05000000000000008000400A506F736974696F6E2E58050000 - 0000000000C004400A506F736974696F6E2E5905000000000000008000400A53 - 697A652E57696474680500000000000000C804400B53697A652E486569676874 - 0500000000000000A803401453697A652E506C6174666F726D44656661756C74 - 08000007544C61796F757400095374796C654E616D650607636F6E74656E7405 - 416C69676E0706436C69656E74064C6F636B6564090C4D617267696E732E4C65 - 667405000000000000008001400B4D617267696E732E546F7005000000000000 - 008000400D4D617267696E732E526967687405000000000000008000400E4D61 - 7267696E732E426F74746F6D05000000000000008000400A53697A652E576964 - 74680500000000000000A804400B53697A652E48656967687405000000000000 - 00A803401453697A652E506C6174666F726D44656661756C7408000006544C61 - 62656C00095374796C654E616D65060670726F6D7074064C6F636B656409074F - 706163697479050000000000000080FE3F165465787453657474696E67732E46 - 6F6E74436F6C6F720708636C6157686974650454657874060454657874000000 - 5450463007544C61796F757400095374796C654E616D65060A6C6162656C7374 - 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 - 00000000C805400B53697A652E4865696768740500000000000000C803401453 - 697A652E506C6174666F726D44656661756C74080756697369626C6508085461 - 624F7264657202040005545465787400095374796C654E616D65060474657874 - 05416C69676E0708436F6E74656E74730748697454657374080A53697A652E57 - 696474680500000000000000C805400B53697A652E4865696768740500000000 - 000000C803401453697A652E506C6174666F726D44656661756C740816546578 - 7453657474696E67732E466F6E74436F6C6F720708636C615768697465000000 - 5450463007544C61796F757400095374796C654E616D65060D67726F7570626F - 787374796C6505416C69676E070643656E7465720A53697A652E576964746805 - 00000000000000F004400B53697A652E4865696768740500000000000000C804 - 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 - 085461624F726465720205000A5452656374616E676C6500095374796C654E61 - 6D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730946 - 696C6C2E4B696E6407044E6F6E650748697454657374080C4D617267696E732E - 4C6566740500000000000000C000400B4D617267696E732E546F700500000000 - 0000009002400D4D617267696E732E52696768740500000000000000C000400E - 4D617267696E732E426F74746F6D0500000000000000C000400A53697A652E57 - 696474680500000000000000D804400B53697A652E4865696768740500000000 - 0000009804401453697A652E506C6174666F726D44656661756C74080C537472 - 6F6B652E436F6C6F720709784646313531353135000554546578740009537479 - 6C654E616D65060474657874084175746F53697A65090A436C6970506172656E - 74090748697454657374080C4D617267696E732E4C6566740500000000000000 - A002400A506F736974696F6E2E5805000000000060559502400A506F73697469 - 6F6E2E590500000000004055D501C00A53697A652E5769647468050000000000 - 00B8C703400B53697A652E4865696768740500000000000060FF02401453697A - 652E506C6174666F726D44656661756C7408165465787453657474696E67732E - 466F6E74436F6C6F720708636C615768697465155465787453657474696E6773 - 2E576F72645772617008000000005450463007544C61796F757400095374796C - 654E616D65060D747261636B6261727374796C6505416C69676E070643656E74 - 65720A53697A652E57696474680500000000000000C805400B53697A652E4865 - 696768740500000000000000C805401453697A652E506C6174666F726D446566 - 61756C74080756697369626C6508085461624F7264657202060B466978656448 - 65696768740211000A5452656374616E676C6500095374796C654E616D650606 - 68747261636B05416C69676E070A5665727443656E7465720A46696C6C2E436F - 6C6F7207097846463135313531350748697454657374080A506F736974696F6E - 2E590500000000000000BC04400A53697A652E57696474680500000000000000 - C805400B53697A652E4865696768740500000000000000A001401453697A652E - 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F - 6E65000A5452656374616E676C6500095374796C654E616D65060A6261636B67 - 726F756E6405416C69676E0708436F6E74656E74730946696C6C2E4B696E6407 - 044E6F6E65064C6F636B6564090748697454657374080C4D617267696E732E4C - 6566740500000000000000C001400B4D617267696E732E546F70050000000000 - 000080FF3F0D4D617267696E732E52696768740500000000000000C001400E4D - 617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E5769 - 6474680500000000000000B005400B53697A652E486569676874050000000000 - 0000C000401453697A652E506C6174666F726D44656661756C74080B5374726F - 6B652E4B696E6407044E6F6E6500000A5452656374616E676C6500095374796C - 654E616D650609686967686C6967687405416C69676E07044C6566740A46696C - 6C2E436F6C6F7207097846463241383245320748697454657374080C50616464 - 696E672E4C6566740500000000000000A002400A53697A652E57696474680500 - 000000000000F003400B53697A652E4865696768740500000000000000A00140 - 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 - 6E6407044E6F6E6500000B54476C6F774566666563740008536F66746E657373 - 050000000000CDCCCCFC3F09476C6F77436F6C6F720709784646324138324532 - 074F706163697479050000000000000080FF3F07456E61626C6564080000000A - 5452656374616E676C6500095374796C654E616D65060676747261636B05416C - 69676E070A486F727A43656E7465720A46696C6C2E436F6C6F72070978464631 - 35313531350748697454657374080A506F736974696F6E2E5805000000000000 - 00BC04400A53697A652E57696474680500000000000000A001400B53697A652E - 4865696768740500000000000000C805401453697A652E506C6174666F726D44 - 656661756C74080B5374726F6B652E4B696E6407044E6F6E65000A5452656374 - 616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C69 - 676E0708436F6E74656E74730946696C6C2E4B696E6407044E6F6E65064C6F63 - 6B6564090748697454657374080C4D617267696E732E4C656674050000000000 - 0000C001400B4D617267696E732E546F70050000000000000080FF3F0D4D6172 - 67696E732E52696768740500000000000000C001400E4D617267696E732E426F - 74746F6D050000000000000080FF3F0A53697A652E5769647468050000000000 - 00000000000B53697A652E4865696768740500000000000000C405401453697A - 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 - 4E6F6E6500000A5452656374616E676C6500095374796C654E616D6506096869 - 67686C6967687405416C69676E0703546F700A46696C6C2E436F6C6F72070978 - 46463241383245320748697454657374080A53697A652E576964746805000000 - 00000000A001400B53697A652E4865696768740500000000000000F003401453 - 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 - 07044E6F6E6500000B54476C6F774566666563740008536F66746E6573730500 - 00000000CDCCCCFC3F09476C6F77436F6C6F720709784646324138324532074F - 706163697479050000000000000080FF3F07456E61626C656408000000065454 - 68756D6200095374796C654E616D650606687468756D62064C6F636B6564090A - 506F736974696F6E2E580500000000003033AB03400A506F736974696F6E2E59 - 050000000000FFFFA304400A53697A652E57696474680500000000000000F002 - 400B53697A652E4865696768740500000000000000F002401453697A652E506C - 6174666F726D44656661756C74080B5374796C654C6F6F6B7570060D7468756D - 626261727374796C65000006545468756D6200095374796C654E616D65060676 - 7468756D62064C6F636B6564090A506F736974696F6E2E58050000000000CBCC - A804400A506F736974696F6E2E590500000000009899B103400A53697A652E57 - 696474680500000000000000F002400B53697A652E4865696768740500000000 - 000000F002401453697A652E506C6174666F726D44656661756C74080B537479 - 6C654C6F6F6B7570060D7468756D626261727374796C65000000545046300754 - 4C61796F757400095374796C654E616D65060D636865636B626F787374796C65 - 05416C69676E070643656E7465720A53697A652E5769647468050000000000AC - AA8006400B53697A652E48656967687405000000000058559904401453697A65 - 2E506C6174666F726D44656661756C74080756697369626C6508085461624F72 - 64657202070007544C61796F75740005416C69676E07044C6566740A53697A65 - 2E576964746805000000000000009003400B53697A652E486569676874050000 - 00000058559904401453697A652E506C6174666F726D44656661756C7408000A - 5452656374616E676C6500095374796C654E616D65060A6261636B67726F756E - 6405416C69676E070643656E7465720A46696C6C2E436F6C6F72070978464632 - 30323032300748697454657374080A53697A652E576964746805000000000000 - 00F002400B53697A652E4865696768740500000000000000F002401453697A65 - 2E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709 - 784646313531353135000A5452656374616E676C6500095374796C654E616D65 - 060A52656374616E676C653105416C69676E0706436C69656E740A46696C6C2E - 436F6C6F720709784646324138324532074869745465737408074F7061636974 - 7905000000000000000000000C4D617267696E732E4C65667405000000000000 - 008000400B4D617267696E732E546F7005000000000000008000400D4D617267 - 696E732E526967687405000000000000008000400E4D617267696E732E426F74 - 746F6D05000000000000008000400A53697A652E576964746805000000000000 - 00B002400B53697A652E4865696768740500000000000000B002401453697A65 + 756C74080454657874060454657874165465787453657474696E67732E466F6E + 74436F6C6F720708636C6157686974650000005450463007544C61796F757400 + 095374796C654E616D650609656469747374796C6505416C69676E070643656E + 7465720A53697A652E57696474680500000000000000C805400B53697A652E48 + 65696768740500000000000000C803401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C6508085461624F726465720203000C54427275 + 73684F626A65637400095374796C654E616D65060A666F726567726F756E6400 + 000C5442727573684F626A65637400095374796C654E616D65060973656C6563 + 74696F6E0B42727573682E436F6C6F72070978393632413832453200000B5446 + 6F6E744F626A65637400095374796C654E616D650604666F6E7409466F6E742E + 53697A650500000000000000D0024000000A5452656374616E676C6500095374 + 796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E7465 + 6E74730A46696C6C2E436F6C6F72070978464632303230323007486974546573 + 74080A53697A652E57696474680500000000000000C805400B53697A652E4865 + 696768740500000000000000C803401453697A652E506C6174666F726D446566 + 61756C74080C5374726F6B652E436F6C6F720709784646313531353135000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D6506146564697453 + 74726F6B65416E696D6174696F6E31084475726174696F6E0500000000000000 + 0000000C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A53 + 7461727456616C756507097846463135313531350953746F7056616C75650709 + 7846463241383245320754726967676572060E4973466F63757365643D747275 + 650E54726967676572496E7665727365060F4973466F63757365643D66616C73 + 6500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614 + 656469745374726F6B65416E696D6174696F6E32084475726174696F6E050000 + 000000000000000007496E7665727365090C50726F70657274794E616D65060C + 5374726F6B652E436F6C6F720A537461727456616C7565070978464631353135 + 31350953746F7056616C75650709784646344334433443075472696767657206 + 2149734D6F7573654F7665723D747275653B4973466F63757365643D66616C73 + 653B0E54726967676572496E7665727365062249734D6F7573654F7665723D66 + 616C73653B4973466F63757365643D66616C73653B00000007544C61796F7574 + 00095374796C654E616D650607627574746F6E7305416C69676E070552696768 + 74064C6F636B6564090B4D617267696E732E546F700500000000000000800040 + 0D4D617267696E732E526967687405000000000000008000400E4D617267696E + 732E426F74746F6D05000000000000008000400A506F736974696F6E2E580500 + 000000000000C004400A506F736974696F6E2E5905000000000000008000400A + 53697A652E57696474680500000000000000C804400B53697A652E4865696768 + 740500000000000000A803401453697A652E506C6174666F726D44656661756C + 7408000007544C61796F757400095374796C654E616D650607636F6E74656E74 + 05416C69676E0706436C69656E74064C6F636B6564090C4D617267696E732E4C + 65667405000000000000008001400B4D617267696E732E546F70050000000000 + 00008000400D4D617267696E732E526967687405000000000000008000400E4D + 617267696E732E426F74746F6D05000000000000008000400A53697A652E5769 + 6474680500000000000000A804400B53697A652E486569676874050000000000 + 0000A803401453697A652E506C6174666F726D44656661756C7408000006544C + 6162656C00095374796C654E616D65060670726F6D7074064C6F636B65640907 + 4F706163697479050000000000000080FE3F165465787453657474696E67732E + 466F6E74436F6C6F720708636C61576869746504546578740604546578740000 + 005450463007544C61796F757400095374796C654E616D65060A6C6162656C73 + 74796C6505416C69676E070643656E7465720A53697A652E5769647468050000 + 0000000000C805400B53697A652E4865696768740500000000000000C8034014 + 53697A652E506C6174666F726D44656661756C74080756697369626C65080854 + 61624F7264657202040005545465787400095374796C654E616D650604746578 + 7405416C69676E0708436F6E74656E74730748697454657374080A53697A652E + 57696474680500000000000000C805400B53697A652E48656967687405000000 + 00000000C803401453697A652E506C6174666F726D44656661756C7408165465 + 787453657474696E67732E466F6E74436F6C6F720708636C6157686974650000 + 005450463007544C61796F757400095374796C654E616D65060D67726F757062 + 6F787374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 0500000000000000F004400B53697A652E4865696768740500000000000000C8 + 04401453697A652E506C6174666F726D44656661756C74080756697369626C65 + 08085461624F726465720205000A5452656374616E676C6500095374796C654E + 616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E747309 + 46696C6C2E4B696E6407044E6F6E650748697454657374080C4D617267696E73 + 2E4C6566740500000000000000C000400B4D617267696E732E546F7005000000 + 000000009002400D4D617267696E732E52696768740500000000000000C00040 + 0E4D617267696E732E426F74746F6D0500000000000000C000400A53697A652E + 57696474680500000000000000D804400B53697A652E48656967687405000000 + 000000009804401453697A652E506C6174666F726D44656661756C74080C5374 + 726F6B652E436F6C6F7207097846463135313531350005545465787400095374 + 796C654E616D65060474657874084175746F53697A65090A436C697050617265 + 6E74090748697454657374080C4D617267696E732E4C65667405000000000000 + 00A002400A506F736974696F6E2E5805000000000060559502400A506F736974 + 696F6E2E590500000000004055D501C00A53697A652E57696474680500000000 + 0000B8C703400B53697A652E4865696768740500000000000060FF0240145369 + 7A652E506C6174666F726D44656661756C7408165465787453657474696E6773 + 2E466F6E74436F6C6F720708636C615768697465155465787453657474696E67 + 732E576F72645772617008000000005450463007544C61796F75740009537479 + 6C654E616D65060D747261636B6261727374796C6505416C69676E070643656E + 7465720A53697A652E57696474680500000000000000C805400B53697A652E48 + 65696768740500000000000000C805401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C6508085461624F7264657202060B4669786564 + 4865696768740211000A5452656374616E676C6500095374796C654E616D6506 + 0668747261636B05416C69676E070A5665727443656E7465720A46696C6C2E43 + 6F6C6F7207097846463135313531350748697454657374080A506F736974696F + 6E2E590500000000000000BC04400A53697A652E576964746805000000000000 + 00C805400B53697A652E4865696768740500000000000000A001401453697A65 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E - 6F6E65000F54466C6F6174416E696D6174696F6E00095374796C654E616D6506 - 1B6368656368626F7856697362696C697479416E696D6174696F6E3108447572 - 6174696F6E05000000000000000000000C50726F70657274794E616D6506074F - 7061636974790A537461727456616C756505000000000000000000000953746F - 7056616C75650500000000000000C805400754726967676572060E4973436865 - 636B65643D747275650E54726967676572496E7665727365060F497343686563 - 6B65643D66616C73650000000F54436F6C6F72416E696D6174696F6E00095374 - 796C654E616D650618636865636B626F785374726F6B65416E696D6174696F6E - 31084475726174696F6E05000000000000000000000C50726F70657274794E61 - 6D65060C5374726F6B652E436F6C6F720A537461727456616C75650709784646 - 3135313531350953746F7056616C756507097846463241383245320754726967 - 676572060E4973436865636B65643D747275650E54726967676572496E766572 - 7365060F4973436865636B65643D66616C736500000F54436F6C6F72416E696D - 6174696F6E00095374796C654E616D650617636865636B626F78436F6C6F7241 - 6E696D6174696F6E31084475726174696F6E05000000000000000000000C5072 - 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 - 6507097846463230323032300953746F7056616C756507097846463430343034 - 300754726967676572061049734D6F7573654F7665723D747275650E54726967 - 676572496E7665727365061149734D6F7573654F7665723D66616C7365000000 - 0005545465787400095374796C654E616D6506047465787405416C69676E0706 - 436C69656E740A53697A652E57696474680500000000005855DD05400B53697A - 652E48656967687405000000000058559904401453697A652E506C6174666F72 - 6D44656661756C7408165465787453657474696E67732E466F6E74436F6C6F72 - 0708636C615768697465000000545046300A5452656374616E676C6500095374 - 796C654E616D6506147363726F6C6C62617268747261636B7374796C6505416C - 69676E070643656E7465720A46696C6C2E436F6C6F7207097846463135313531 - 350748697454657374080A53697A652E57696474680500000000000000C80440 - 0B53697A652E4865696768740500000000000000C804401453697A652E506C61 - 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6507 - 56697369626C65080006545468756D6200095374796C654E616D650605746875 - 6D62064C6F636B6564090A53697A652E57696474680500000000000000800340 - 0B53697A652E4865696768740500000000000000C804401453697A652E506C61 - 74666F726D44656661756C74080B5374796C654C6F6F6B7570060A7468756D62 - 7374796C65000000545046300A5452656374616E676C6500095374796C654E61 - 6D6506147363726F6C6C62617276747261636B7374796C6505416C69676E0706 - 43656E7465720A46696C6C2E436F6C6F72070978464631353135313507486974 - 54657374080A53697A652E57696474680500000000000000C804400B53697A65 - 2E4865696768740500000000000000C804401453697A652E506C6174666F726D - 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65075669736962 - 6C65080006545468756D6200095374796C654E616D6506057468756D62064C6F - 636B6564090A53697A652E57696474680500000000000000C804400B53697A65 - 2E48656967687405000000000000008003401453697A652E506C6174666F726D - 44656661756C74080B5374796C654C6F6F6B7570060A7468756D627374796C65 - 0000005450463007544C61796F757400095374796C654E616D6506157363726F - 6C6C626172626F74746F6D627574746F6E05416C69676E070643656E74657207 - 56697369626C6508085461624F726465720208000A5452656374616E676C6500 - 095374796C654E616D65060A6261636B67726F756E6405416C69676E0706436C - 69656E740C436C69704368696C6472656E090A436C6970506172656E74090A46 - 696C6C2E436F6C6F7207097846463230323032300748697454657374080A5369 - 7A652E57696474680500000000000000C804400B53697A652E48656967687405 - 00000000000000C804401453697A652E506C6174666F726D44656661756C7408 - 0B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174 - 696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D61 - 74696F6E31084475726174696F6E05000000000000000000000C50726F706572 - 74794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978 - 46463230323032300953746F7056616C75650709784646343034303430075472 - 6967676572062049734D6F7573654F7665723D747275653B4973507265737365 - 643D66616C73650E54726967676572496E7665727365062149734D6F7573654F - 7665723D66616C73653B4973507265737365643D66616C736500000F54436F6C - 6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E436F - 6C6F72416E696D6174696F6E32084475726174696F6E05000000000000000000 - 000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374617274 - 56616C756507097846463430343034300953746F7056616C7565070978464631 - 37353739430754726967676572061F4973507265737365643D747275653B4973 - 4D6F7573654F7665723D747275650E54726967676572496E7665727365062049 - 73507265737365643D66616C73653B49734D6F7573654F7665723D7472756500 - 000007544C61796F757400095374796C654E616D6506074C61796F7574310541 - 6C69676E070643656E7465720A53697A652E57696474680500000000000000A0 - 02400B53697A652E4865696768740500000000000000C001401453697A652E50 - 6C6174666F726D44656661756C74080005545061746800095374796C654E616D - 650605506174683105416C69676E0706436C69656E7409446174612E50617468 - 0A3400000004000000000000000000C8420000C84201000000000096430000C8 - 42010000000000484300009643030000000000C8420000C8420A46696C6C2E43 - 6F6C6F720708636C6157686974650748697454657374080A53697A652E576964 - 74680500000000000000A002400B53697A652E48656967687405000000000000 - 00C001401453697A652E506C6174666F726D44656661756C74080B5374726F6B - 652E4B696E6407044E6F6E65000000005450463007544C61796F757400095374 - 796C654E616D6506137363726F6C6C6261726C656674627574746F6E05416C69 - 676E070643656E7465720756697369626C6508085461624F726465720209000A - 5452656374616E676C6500095374796C654E616D65060A6261636B67726F756E - 6405416C69676E0706436C69656E740C436C69704368696C6472656E090A436C - 6970506172656E74090A46696C6C2E436F6C6F72070978464632303230323007 - 48697454657374080A53697A652E57696474680500000000000000C804400B53 - 697A652E4865696768740500000000000000C804401453697A652E506C617466 - 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54 - 436F6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F - 6E436F6C6F72416E696D6174696F6E31084475726174696F6E05000000000000 - 000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 - 61727456616C756507097846463230323032300953746F7056616C7565070978 - 46463430343034300754726967676572062049734D6F7573654F7665723D7472 - 75653B4973507265737365643D66616C73650E54726967676572496E76657273 - 65062149734D6F7573654F7665723D66616C73653B4973507265737365643D66 - 616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D - 650615627574746F6E436F6C6F72416E696D6174696F6E32084475726174696F - 6E05000000000000000000000C50726F70657274794E616D65060A46696C6C2E - 436F6C6F720A537461727456616C756507097846463430343034300953746F70 - 56616C756507097846463137353739430754726967676572061F497350726573 - 7365643D747275653B49734D6F7573654F7665723D747275650E547269676765 - 72496E766572736506204973507265737365643D66616C73653B49734D6F7573 - 654F7665723D7472756500000007544C61796F757400095374796C654E616D65 - 06074C61796F75743105416C69676E070643656E7465720A53697A652E576964 - 74680500000000000000A002400B53697A652E48656967687405000000000000 - 00C001401453697A652E506C6174666F726D44656661756C7408000554506174 - 6800095374796C654E616D650605506174683105416C69676E0706436C69656E - 7409446174612E506174680A3400000004000000000000000000C8420000C842 - 01000000000096430000C842010000000000484300009643030000000000C842 - 0000C8420A46696C6C2E436F6C6F720708636C61576869746507486974546573 - 74080D526F746174696F6E416E676C650500000000000000B405400A53697A65 - 2E57696474680500000000000000A002400B53697A652E486569676874050000 - 0000000000C001401453697A652E506C6174666F726D44656661756C74080B53 - 74726F6B652E4B696E6407044E6F6E65000000005450463007544C61796F7574 - 00095374796C654E616D6506147363726F6C6C6261727269676874627574746F - 6E05416C69676E070643656E7465720756697369626C6508085461624F726465 - 72020A000A5452656374616E676C6500095374796C654E616D65060A6261636B - 67726F756E6405416C69676E0706436C69656E740C436C69704368696C647265 - 6E090A436C6970506172656E74090A46696C6C2E436F6C6F7207097846463230 - 323032300748697454657374080A53697A652E57696474680500000000000000 - C804400B53697A652E4865696768740500000000000000C804401453697A652E - 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F - 6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650615 - 627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E0500 - 0000000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C - 6F720A537461727456616C756507097846463230323032300953746F7056616C - 756507097846463430343034300754726967676572062049734D6F7573654F76 - 65723D747275653B4973507265737365643D66616C73650E5472696767657249 - 6E7665727365062149734D6F7573654F7665723D66616C73653B497350726573 - 7365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009537479 - 6C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E32084475 - 726174696F6E05000000000000000000000C50726F70657274794E616D65060A - 46696C6C2E436F6C6F720A537461727456616C75650709784646343034303430 - 0953746F7056616C756507097846463137353739430754726967676572061F49 - 73507265737365643D747275653B49734D6F7573654F7665723D747275650E54 - 726967676572496E766572736506204973507265737365643D66616C73653B49 - 734D6F7573654F7665723D7472756500000007544C61796F757400095374796C - 654E616D6506074C61796F75743105416C69676E070643656E7465720A53697A - 652E57696474680500000000000000A002400B53697A652E4865696768740500 - 000000000000C001401453697A652E506C6174666F726D44656661756C740800 - 05545061746800095374796C654E616D650605506174683105416C69676E0706 - 436C69656E7409446174612E506174680A3400000004000000000000000000C8 - 420000C84201000000000096430000C842010000000000484300009643030000 - 000000C8420000C8420A46696C6C2E436F6C6F720708636C6157686974650748 - 697454657374080D526F746174696F6E416E676C650500000000000000B405C0 - 0A53697A652E57696474680500000000000000A002400B53697A652E48656967 - 68740500000000000000C001401453697A652E506C6174666F726D4465666175 - 6C74080B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C - 61796F757400095374796C654E616D6506127363726F6C6C626172746F706275 - 74746F6E05416C69676E070643656E7465720756697369626C6508085461624F - 72646572020B000A5452656374616E676C6500095374796C654E616D65060A62 - 61636B67726F756E6405416C69676E0706436C69656E740C436C69704368696C - 6472656E090A436C6970506172656E74090A46696C6C2E436F6C6F7207097846 - 463230323032300748697454657374080A53697A652E57696474680500000000 - 000000C804400B53697A652E4865696768740500000000000000C80440145369 + 6F6E65000A5452656374616E676C6500095374796C654E616D65060A6261636B + 67726F756E6405416C69676E0708436F6E74656E74730946696C6C2E4B696E64 + 07044E6F6E65064C6F636B6564090748697454657374080C4D617267696E732E + 4C6566740500000000000000C001400B4D617267696E732E546F700500000000 + 00000080FF3F0D4D617267696E732E52696768740500000000000000C001400E + 4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E57 + 696474680500000000000000B005400B53697A652E4865696768740500000000 + 000000C000401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E6500000A5452656374616E676C650009537479 + 6C654E616D650609686967686C6967687405416C69676E07044C6566740A4669 + 6C6C2E436F6C6F7207097846463241383245320748697454657374080C506164 + 64696E672E4C6566740500000000000000A002400A53697A652E576964746805 + 00000000000000F003400B53697A652E4865696768740500000000000000A001 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E6500000B54476C6F774566666563740008536F66746E6573 + 73050000000000CDCCCCFC3F09476C6F77436F6C6F7207097846463241383245 + 32074F706163697479050000000000000080FF3F07456E61626C656408000000 + 0A5452656374616E676C6500095374796C654E616D65060676747261636B0541 + 6C69676E070A486F727A43656E7465720A46696C6C2E436F6C6F720709784646 + 3135313531350748697454657374080A506F736974696F6E2E58050000000000 + 0000BC04400A53697A652E57696474680500000000000000A001400B53697A65 + 2E4865696768740500000000000000C805401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000A54526563 + 74616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C + 69676E0708436F6E74656E74730946696C6C2E4B696E6407044E6F6E65064C6F + 636B6564090748697454657374080C4D617267696E732E4C6566740500000000 + 000000C001400B4D617267696E732E546F70050000000000000080FF3F0D4D61 + 7267696E732E52696768740500000000000000C001400E4D617267696E732E42 + 6F74746F6D050000000000000080FF3F0A53697A652E57696474680500000000 + 0000000000000B53697A652E4865696768740500000000000000C40540145369 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 - 044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D - 650615627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F - 6E05000000000000000000000C50726F70657274794E616D65060A46696C6C2E - 436F6C6F720A537461727456616C756507097846463230323032300953746F70 - 56616C756507097846463430343034300754726967676572062049734D6F7573 - 654F7665723D747275653B4973507265737365643D66616C73650E5472696767 - 6572496E7665727365062149734D6F7573654F7665723D66616C73653B497350 - 7265737365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009 - 5374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E32 - 084475726174696F6E05000000000000000000000C50726F70657274794E616D - 65060A46696C6C2E436F6C6F720A537461727456616C75650709784646343034 - 3034300953746F7056616C756507097846463137353739430754726967676572 - 061F4973507265737365643D747275653B49734D6F7573654F7665723D747275 - 650E54726967676572496E766572736506204973507265737365643D66616C73 - 653B49734D6F7573654F7665723D7472756500000007544C61796F7574000953 - 74796C654E616D6506074C61796F75743105416C69676E070643656E7465720A - 53697A652E57696474680500000000000000A002400B53697A652E4865696768 - 740500000000000000C001401453697A652E506C6174666F726D44656661756C - 74080005545061746800095374796C654E616D650605506174683105416C6967 - 6E0706436C69656E7409446174612E506174680A340000000400000000000000 - 0000C8420000C84201000000000096430000C842010000000000484300009643 - 030000000000C8420000C8420A46696C6C2E436F6C6F720708636C6157686974 - 650748697454657374080D526F746174696F6E416E676C650500000000000000 - B406400A53697A652E57696474680500000000000000A002400B53697A652E48 - 65696768740500000000000000C001401453697A652E506C6174666F726D4465 - 6661756C74080B5374726F6B652E4B696E6407044E6F6E650000000054504630 - 07544C61796F757400095374796C654E616D65060E7363726F6C6C6261727374 - 796C6505416C69676E070643656E7465720756697369626C6508085461624F72 - 646572020C000754427574746F6E00095374796C654E616D65060A6C65667462 - 7574746F6E05416C69676E07044C656674064C6F636B6564090A506F73697469 - 6F6E2E5905000000000000008003400A53697A652E5769647468050000000000 - 00008003400B53697A652E48656967687405000000000000009003401453697A - 652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B75700613 - 7363726F6C6C6261726C656674627574746F6E00000754427574746F6E000953 - 74796C654E616D65060B7269676874627574746F6E05416C69676E0705526967 - 6874064C6F636B6564090A506F736974696F6E2E580500000000000000880440 - 0A506F736974696F6E2E5905000000000000008003400A53697A652E57696474 - 6805000000000000008003400B53697A652E4865696768740500000000000000 - 9003401453697A652E506C6174666F726D44656661756C74080B5374796C654C - 6F6F6B757006147363726F6C6C6261727269676874627574746F6E0000075442 - 7574746F6E00095374796C654E616D65060C626F74746F6D627574746F6E0541 - 6C69676E0706426F74746F6D064C6F636B6564090A506F736974696F6E2E5905 - 000000000000008804400A53697A652E57696474680500000000000000C80440 - 0B53697A652E48656967687405000000000000008003401453697A652E506C61 - 74666F726D44656661756C74080B5374796C654C6F6F6B757006157363726F6C - 6C626172626F74746F6D627574746F6E00000654547261636B00095374796C65 - 4E616D65060668747261636B05416C69676E0706436C69656E74064C6F636B65 - 64090B4F7269656E746174696F6E070A486F72697A6F6E74616C0A53697A652E - 576964746805000000000000009003400B53697A652E48656967687405000000 - 000000009003401453697A652E506C6174666F726D44656661756C74080B5374 - 796C654C6F6F6B757006147363726F6C6C62617268747261636B7374796C6500 - 000654547261636B00095374796C654E616D65060676747261636B05416C6967 - 6E0706436C69656E74064C6F636B6564090B4F7269656E746174696F6E070A48 - 6F72697A6F6E74616C0A53697A652E576964746805000000000000009003400B - 53697A652E48656967687405000000000000009003401453697A652E506C6174 - 666F726D44656661756C74080B5374796C654C6F6F6B757006147363726F6C6C - 62617276747261636B7374796C6500000754427574746F6E00095374796C654E - 616D650609746F70627574746F6E05416C69676E0703546F700A53697A652E57 - 696474680500000000000000C804400B53697A652E4865696768740500000000 - 0000008003401453697A652E506C6174666F726D44656661756C74080B537479 - 6C654C6F6F6B757006127363726F6C6C626172746F70627574746F6E00000054 - 5046300A5452656374616E676C6500095374796C654E616D65060A7468756D62 - 7374796C6505416C69676E070643656E7465720A46696C6C2E436F6C6F720709 - 7846463444344434440748697454657374080A53697A652E5769647468050000 - 0000000000C804400B53697A652E4865696768740500000000000000C8044014 + 044E6F6E6500000A5452656374616E676C6500095374796C654E616D65060968 + 6967686C6967687405416C69676E0703546F700A46696C6C2E436F6C6F720709 + 7846463241383245320748697454657374080A53697A652E5769647468050000 + 0000000000A001400B53697A652E4865696768740500000000000000F0034014 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E - 6407044E6F6E650756697369626C6508000F54436F6C6F72416E696D6174696F - 6E00095374796C654E616D6506147468756D62436F6C6F72416E696D6174696F + 6407044E6F6E6500000B54476C6F774566666563740008536F66746E65737305 + 0000000000CDCCCCFC3F09476C6F77436F6C6F72070978464632413832453207 + 4F706163697479050000000000000080FF3F07456E61626C6564080000000654 + 5468756D6200095374796C654E616D650606687468756D62064C6F636B656409 + 0A506F736974696F6E2E580500000000003033AB03400A506F736974696F6E2E + 59050000000000FFFFA304400A53697A652E57696474680500000000000000F0 + 02400B53697A652E4865696768740500000000000000F002401453697A652E50 + 6C6174666F726D44656661756C74080B5374796C654C6F6F6B7570060D746875 + 6D626261727374796C65000006545468756D6200095374796C654E616D650606 + 767468756D62064C6F636B6564090A506F736974696F6E2E58050000000000CB + CCA804400A506F736974696F6E2E590500000000009899B103400A53697A652E + 57696474680500000000000000F002400B53697A652E48656967687405000000 + 00000000F002401453697A652E506C6174666F726D44656661756C74080B5374 + 796C654C6F6F6B7570060D7468756D626261727374796C650000005450463007 + 544C61796F757400095374796C654E616D65060D636865636B626F787374796C + 6505416C69676E070643656E7465720A53697A652E5769647468050000000000 + ACAA8006400B53697A652E48656967687405000000000058559904401453697A + 652E506C6174666F726D44656661756C74080756697369626C6508085461624F + 7264657202070007544C61796F75740005416C69676E07044C6566740A53697A + 652E576964746805000000000000009003400B53697A652E4865696768740500 + 0000000058559904401453697A652E506C6174666F726D44656661756C740800 + 0A5452656374616E676C6500095374796C654E616D65060A6261636B67726F75 + 6E6405416C69676E070643656E7465720A46696C6C2E436F6C6F720709784646 + 3230323032300748697454657374080A53697A652E5769647468050000000000 + 0000F002400B53697A652E4865696768740500000000000000F002401453697A + 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 + 09784646313531353135000A5452656374616E676C6500095374796C654E616D + 65060A52656374616E676C653105416C69676E0706436C69656E740A46696C6C + 2E436F6C6F720709784646324138324532074869745465737408074F70616369 + 747905000000000000000000000C4D617267696E732E4C656674050000000000 + 00008000400B4D617267696E732E546F7005000000000000008000400D4D6172 + 67696E732E526967687405000000000000008000400E4D617267696E732E426F + 74746F6D05000000000000008000400A53697A652E5769647468050000000000 + 0000B002400B53697A652E4865696768740500000000000000B002401453697A + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E65000F54466C6F6174416E696D6174696F6E00095374796C654E616D65 + 061B6368656368626F7856697362696C697479416E696D6174696F6E31084475 + 726174696F6E05000000000000000000000C50726F70657274794E616D650607 + 4F7061636974790A537461727456616C75650500000000000000000000095374 + 6F7056616C75650500000000000000C805400754726967676572060E49734368 + 65636B65643D747275650E54726967676572496E7665727365060F4973436865 + 636B65643D66616C73650000000F54436F6C6F72416E696D6174696F6E000953 + 74796C654E616D650618636865636B626F785374726F6B65416E696D6174696F 6E31084475726174696F6E05000000000000000000000C50726F70657274794E - 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464634 - 44344434440953746F7056616C75650709784646313735373943075472696767 - 6572060E4973507265737365643D747275650E54726967676572496E76657273 - 65060F4973507265737365643D66616C736500000F54436F6C6F72416E696D61 - 74696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E31 - 5374796C65084475726174696F6E05000000000000000000000C50726F706572 - 74794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978 - 46463444344434440953746F7056616C75650707636C61477261790754726967 - 676572061049734D6F7573654F7665723D747275650E54726967676572496E76 - 65727365061149734D6F7573654F7665723D66616C7365000000545046300D54 - 5377697463684F626A65637400095374796C654E616D65060B73776974636873 - 74796C6505416C69676E070643656E746572044B696E64070C466164696E6754 - 7261636B730A53697A652E57696474680500000000000000C805400B53697A65 - 2E4865696768740500000000000000C803401453697A652E506C6174666F726D - 44656661756C7408085461624F72646572020D12547261636B696E675468756D - 625363616C65050000000000000080FF3F0756697369626C65080A46696C6C2E - 436F6C6F7207097846463230323032300C46696C6C4F6E2E436F6C6F72070978 - 46463137353739430B46696C6C4F6E2E4B696E640705536F6C69640B5374726F - 6B652E4B696E6407044E6F6E650B5468756D622E436F6C6F7207097846463430 - 343034300D5468756D624F6E2E436F6C6F7207097846463241383245320C5468 - 756D624F6E2E4B696E640705536F6C6964105468756D625374726F6B652E4B69 - 6E6407044E6F6E650F5468756D625374726F6B652E4361700705526F756E6410 - 5468756D625374726F6B652E446173680706437573746F6D105468756D625374 - 726F6B652E4A6F696E0705526F756E64165468756D625374726F6B652E437573 - 746F6D446173680A08000000000000000000000000005450463007544C61796F - 757400095374796C654E616D65060D636F6D626F626F787374796C6505416C69 - 676E070643656E7465720A53697A652E57696474680500000000000000C80540 - 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 - 74666F726D44656661756C74080756697369626C6508085461624F7264657202 - 0E000C5442727573684F626A65637400095374796C654E616D65060A666F7265 - 67726F756E6400000B54466F6E744F626A65637400095374796C654E616D6506 - 04666F6E7409466F6E742E53697A650500000000000000D00240000007544C61 - 796F757400095374796C654E616D65060A6261636B67726F756E6405416C6967 - 6E0708436F6E74656E74730A53697A652E57696474680500000000000000C805 - 400B53697A652E4865696768740500000000000000C803401453697A652E506C - 6174666F726D44656661756C7408000A5452656374616E676C6500095374796C - 654E616D65060A52656374616E676C653105416C69676E0706436C69656E740A + 616D65060C5374726F6B652E436F6C6F720A537461727456616C756507097846 + 463135313531350953746F7056616C7565070978464632413832453207547269 + 67676572060E4973436865636B65643D747275650E54726967676572496E7665 + 727365060F4973436865636B65643D66616C736500000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D650617636865636B626F78436F6C6F72 + 416E696D6174696F6E31084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C + 756507097846463230323032300953746F7056616C7565070978464634303430 + 34300754726967676572061049734D6F7573654F7665723D747275650E547269 + 67676572496E7665727365061149734D6F7573654F7665723D66616C73650000 + 000005545465787400095374796C654E616D6506047465787405416C69676E07 + 06436C69656E740A53697A652E57696474680500000000005855DD05400B5369 + 7A652E48656967687405000000000058559904401453697A652E506C6174666F + 726D44656661756C7408165465787453657474696E67732E466F6E74436F6C6F + 720708636C615768697465000000545046300A5452656374616E676C65000953 + 74796C654E616D6506147363726F6C6C62617268747261636B7374796C650541 + 6C69676E070643656E7465720A46696C6C2E436F6C6F72070978464631353135 + 31350748697454657374080A53697A652E57696474680500000000000000C804 + 400B53697A652E4865696768740500000000000000C804401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 0756697369626C65080006545468756D6200095374796C654E616D6506057468 + 756D62064C6F636B6564090A53697A652E576964746805000000000000008003 + 400B53697A652E4865696768740500000000000000C804401453697A652E506C + 6174666F726D44656661756C74080B5374796C654C6F6F6B7570060A7468756D + 627374796C65000000545046300A5452656374616E676C6500095374796C654E + 616D6506147363726F6C6C62617276747261636B7374796C6505416C69676E07 + 0643656E7465720A46696C6C2E436F6C6F720709784646313531353135074869 + 7454657374080A53697A652E57696474680500000000000000C804400B53697A + 652E4865696768740500000000000000C804401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650756697369 + 626C65080006545468756D6200095374796C654E616D6506057468756D62064C + 6F636B6564090A53697A652E57696474680500000000000000C804400B53697A + 652E48656967687405000000000000008003401453697A652E506C6174666F72 + 6D44656661756C74080B5374796C654C6F6F6B7570060A7468756D627374796C + 650000005450463007544C61796F757400095374796C654E616D650615736372 + 6F6C6C626172626F74746F6D627574746F6E05416C69676E070643656E746572 + 0756697369626C6508085461624F72646572020A000A5452656374616E676C65 + 00095374796C654E616D65060A6261636B67726F756E6405416C69676E070643 + 6C69656E740C436C69704368696C6472656E090A436C6970506172656E74090A 46696C6C2E436F6C6F7207097846463230323032300748697454657374080A53 - 697A652E57696474680500000000000000C805400B53697A652E486569676874 - 0500000000000000C803401453697A652E506C6174666F726D44656661756C74 - 080B5374726F6B652E4B696E6407044E6F6E650007544C61796F757400095374 - 796C654E616D650611427574746F6E5374796C654F626A65637405416C69676E - 070846697452696768740B4D617267696E732E546F70050000000000000080FF - 3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D61726769 - 6E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E5805 - 00000000005ED99705400A506F736974696F6E2E59050000000000000080FF3F - 0A53697A652E5769647468050000000000889AB803400B53697A652E48656967 - 68740500000000000000B803401453697A652E506C6174666F726D4465666175 - 6C74080007544C61796F757400095374796C654E616D6506074C61796F757431 - 05416C69676E070643656E7465720C4D617267696E732E4C6566740500000000 - 00000080FF3F0A53697A652E57696474680500000000000000A002400B53697A - 652E4865696768740500000000000000C001401453697A652E506C6174666F72 - 6D44656661756C74080005545061746800095374796C654E616D650605506174 - 683105416C69676E0706436C69656E7409446174612E506174680A3400000004 - 000000000000000000C8420000C84201000000000096430000C8420100000000 - 00484300009643030000000000C8420000C8420A46696C6C2E436F6C6F720708 - 636C6157686974650748697454657374080A53697A652E576964746805000000 - 00000000A002400B53697A652E4865696768740500000000000000C001401453 - 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 - 07044E6F6E65000000000F54436F6C6F72416E696D6174696F6E00095374796C - 654E616D650615627574746F6E436F6C6F72416E696D6174696F6E3108447572 - 6174696F6E05000000000000000000000C50726F70657274794E616D65060A46 - 696C6C2E436F6C6F720A537461727456616C7565070978464632303230323009 - 53746F7056616C75650709784646343034303430075472696767657206304973 - 4D6F7573654F7665723D747275653B4973507265737365643D66616C73653B49 - 73466F63757365643D66616C73650E54726967676572496E7665727365063149 - 734D6F7573654F7665723D66616C73653B4973507265737365643D66616C7365 - 3B4973466F63757365643D66616C736500000F54436F6C6F72416E696D617469 - 6F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174 - 696F6E32084475726174696F6E05000000000000000000000C50726F70657274 - 794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507097846 - 463430343034300953746F7056616C7565070978464631373537394307547269 - 67676572062F4973507265737365643D747275653B49734D6F7573654F766572 - 3D747275653B4973466F63757365643D66616C736500000F54436F6C6F72416E - 696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F7241 - 6E696D6174696F6E33084475726174696F6E05000000000000000000000C5072 - 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 - 6507097846463241383245320953746F7056616C756507097846463137353739 - 430754726967676572062E4973507265737365643D747275653B49734D6F7573 - 654F7665723D747275653B4973466F63757365643D747275650E547269676765 - 72496E7665727365062F4973507265737365643D66616C73653B49734D6F7573 - 654F7665723D747275653B4973466F63757365643D747275650000000007544C - 61796F757400095374796C654E616D650607636F6E74656E7405416C69676E07 - 06436C69656E74064C6F636B6564090C4D617267696E732E4C65667405000000 - 000000008000400B4D617267696E732E546F7005000000000000008000400D4D - 617267696E732E52696768740500000000000000D803400E4D617267696E732E - 426F74746F6D05000000000000008000400A53697A652E576964746805000000 - 000000008E05400B53697A652E4865696768740500000000000000A803401453 - 697A652E506C6174666F726D44656661756C74080000005450463007544C6179 - 6F757400095374796C654E616D65060E636F6D626F656469747374796C650541 - 6C69676E070643656E7465720A53697A652E57696474680500000000000000C8 - 05400B53697A652E4865696768740500000000000000C803401453697A652E50 - 6C6174666F726D44656661756C74080756697369626C6508085461624F726465 - 720210000C5442727573684F626A65637400095374796C654E616D65060A666F - 726567726F756E6400000B54466F6E744F626A65637400095374796C654E616D - 650604666F6E7409466F6E742E53697A650500000000000000D0024000000754 - 4C61796F757400095374796C654E616D65060A6261636B67726F756E6405416C - 69676E0708436F6E74656E74730A53697A652E57696474680500000000000000 - C805400B53697A652E4865696768740500000000000000C803401453697A652E - 506C6174666F726D44656661756C7408000A5452656374616E676C6500095374 - 796C654E616D65060A52656374616E676C653105416C69676E0706436C69656E - 740A46696C6C2E436F6C6F720709784646323032303230074869745465737408 - 0A53697A652E57696474680500000000000000C805400B53697A652E48656967 - 68740500000000000000C803401453697A652E506C6174666F726D4465666175 - 6C74080C5374726F6B652E436F6C6F720709784646323032303230000F54436F - 6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E - 696D6174696F6E315374796C65084475726174696F6E05000000000000000000 - 0007496E7665727365090C50726F70657274794E616D65060C5374726F6B652E - 436F6C6F720A537461727456616C756507097846463230323032300953746F70 - 56616C756507097846463430343034300754726967676572062049734D6F7573 - 654F7665723D747275653B4973466F63757365643D66616C73650E5472696767 - 6572496E7665727365062149734D6F7573654F7665723D66616C73653B497346 - 6F63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009 - 5374796C654E616D650614436F6C6F72416E696D6174696F6E325374796C6508 - 4475726174696F6E050000000000000000000007496E7665727365090C50726F - 70657274794E616D65060C5374726F6B652E436F6C6F720A537461727456616C - 756507097846463430343034300953746F7056616C7565070978464632413832 - 45320754726967676572061F49734D6F7573654F7665723D747275653B497346 - 6F63757365643D747275650E54726967676572496E7665727365062049734D6F - 7573654F7665723D747275653B4973466F63757365643D66616C736500000754 - 4C61796F757400095374796C654E616D6506056172726F7705416C69676E0708 - 46697452696768740B4D617267696E732E546F70050000000000000080FF3F0D - 4D617267696E732E5269676874050000000000000080FF3F0E4D617267696E73 - 2E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E58050000 - 0000005ED99705400A506F736974696F6E2E59050000000000000080FF3F0A53 - 697A652E5769647468050000000000889AB803400B53697A652E486569676874 - 0500000000000000B803401453697A652E506C6174666F726D44656661756C74 - 08000A5452656374616E676C6500095374796C654E616D65060A52656374616E - 676C653105416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207 - 097846463330333033300748697454657374080A53697A652E57696474680500 - 00000000889AB803400B53697A652E4865696768740500000000000000B80340 - 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 - 6E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C65 - 4E616D650614436F6C6F72416E696D6174696F6E315374796C65084475726174 - 696F6E050000000000000000000007496E7665727365090C50726F7065727479 - 4E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709784646 - 3330333033300953746F7056616C756507097846463430343034300754726967 - 676572062049734D6F7573654F7665723D747275653B4973466F63757365643D - 66616C73650E54726967676572496E7665727365062149734D6F7573654F7665 - 723D66616C73653B4973466F63757365643D66616C736500000F54436F6C6F72 - 416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D61 - 74696F6E325374796C65084475726174696F6E05000000000000000000000C50 - 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C - 756507097846463430343034300953746F7056616C7565070978464631373537 - 39430754726967676572061F4973466F63757365643D747275653B49734D6F75 + 697A652E57696474680500000000000000C804400B53697A652E486569676874 + 0500000000000000C804401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D61 + 74696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D + 6174696F6E31084475726174696F6E05000000000000000000000C50726F7065 + 7274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709 + 7846463230323032300953746F7056616C756507097846463430343034300754 + 726967676572062049734D6F7573654F7665723D747275653B49735072657373 + 65643D66616C73650E54726967676572496E7665727365062149734D6F757365 + 4F7665723D66616C73653B4973507265737365643D66616C736500000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E43 + 6F6C6F72416E696D6174696F6E32084475726174696F6E050000000000000000 + 00000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 + 7456616C756507097846463430343034300953746F7056616C75650709784646 + 3137353739430754726967676572061F4973507265737365643D747275653B49 + 734D6F7573654F7665723D747275650E54726967676572496E76657273650620 + 4973507265737365643D66616C73653B49734D6F7573654F7665723D74727565 + 00000007544C61796F757400095374796C654E616D6506074C61796F75743105 + 416C69676E070643656E7465720A53697A652E57696474680500000000000000 + A002400B53697A652E4865696768740500000000000000C001401453697A652E + 506C6174666F726D44656661756C74080005545061746800095374796C654E61 + 6D650605506174683105416C69676E0706436C69656E7409446174612E506174 + 680A3400000004000000000000000000C8420000C84201000000000096430000 + C842010000000000484300009643030000000000C8420000C8420A46696C6C2E + 436F6C6F720708636C6157686974650748697454657374080A53697A652E5769 + 6474680500000000000000A002400B53697A652E486569676874050000000000 + 0000C001401453697A652E506C6174666F726D44656661756C74080B5374726F + 6B652E4B696E6407044E6F6E65000000005450463007544C61796F7574000953 + 74796C654E616D6506137363726F6C6C6261726C656674627574746F6E05416C + 69676E070643656E7465720756697369626C6508085461624F72646572020B00 + 0A5452656374616E676C6500095374796C654E616D65060A6261636B67726F75 + 6E6405416C69676E0706436C69656E740C436C69704368696C6472656E090A43 + 6C6970506172656E74090A46696C6C2E436F6C6F720709784646323032303230 + 0748697454657374080A53697A652E57696474680500000000000000C804400B + 53697A652E4865696768740500000000000000C804401453697A652E506C6174 + 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D65061562757474 + 6F6E436F6C6F72416E696D6174696F6E31084475726174696F6E050000000000 + 00000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53 + 7461727456616C756507097846463230323032300953746F7056616C75650709 + 7846463430343034300754726967676572062049734D6F7573654F7665723D74 + 7275653B4973507265737365643D66616C73650E54726967676572496E766572 + 7365062149734D6F7573654F7665723D66616C73653B4973507265737365643D + 66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E61 + 6D650615627574746F6E436F6C6F72416E696D6174696F6E3208447572617469 + 6F6E05000000000000000000000C50726F70657274794E616D65060A46696C6C + 2E436F6C6F720A537461727456616C756507097846463430343034300953746F + 7056616C756507097846463137353739430754726967676572061F4973507265 + 737365643D747275653B49734D6F7573654F7665723D747275650E5472696767 + 6572496E766572736506204973507265737365643D66616C73653B49734D6F75 73654F7665723D7472756500000007544C61796F757400095374796C654E616D - 6506074C61796F75743105416C69676E070643656E7465720C4D617267696E73 - 2E4C656674050000000000000080FF3F0A53697A652E57696474680500000000 - 000000A002400B53697A652E4865696768740500000000000000C00140145369 - 7A652E506C6174666F726D44656661756C74080005545061746800095374796C - 654E616D650605506174683105416C69676E0706436C69656E7409446174612E - 506174680A3400000004000000000000000000C8420000C84201000000000096 - 430000C842010000000000484300009643030000000000C8420000C8420A4669 - 6C6C2E436F6C6F720708636C6157686974650748697454657374080A53697A65 - 2E57696474680500000000000000A002400B53697A652E486569676874050000 - 0000000000C001401453697A652E506C6174666F726D44656661756C74080B53 - 74726F6B652E4B696E6407044E6F6E650000000000000C5442727573684F626A - 65637400095374796C654E616D65060973656C656374696F6E0B42727573682E - 436F6C6F720709783936324138324532000007544C61796F757400095374796C - 654E616D650607636F6E74656E7405416C69676E0706436C69656E740C4D6172 - 67696E732E4C65667405000000000000008000400B4D617267696E732E546F70 - 05000000000000008000400D4D617267696E732E526967687405000000000000 - 00F003400E4D617267696E732E426F74746F6D05000000000000008000400A53 - 697A652E576964746805000000000000008805400B53697A652E486569676874 - 0500000000000000A803401453697A652E506C6174666F726D44656661756C74 - 080000005450463007544C61796F757400095374796C654E616D65060F746162 - 636F6E74726F6C7374796C6505416C69676E070643656E7465720A53697A652E - 576964746805000000000000008E06400B53697A652E48656967687405000000 - 0000FFFFC905401453697A652E506C6174666F726D44656661756C7408075669 - 7369626C6508085461624F726465720211000A5452656374616E676C65000953 - 74796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74 - 656E74730A46696C6C2E436F6C6F720709784646333033303330064C6F636B65 - 64090748697454657374080C50616464696E672E4C6566740500000000000000 - 8000400B50616464696E672E546F7005000000000000008000400D5061646469 - 6E672E526967687405000000000000008000400E50616464696E672E426F7474 - 6F6D05000000000000008000400A53697A652E57696474680500000000000000 - 8E06400B53697A652E486569676874050000000000FFFFC905401453697A652E - 506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72070978 - 4646313531353135000000545046300A5452656374616E676C6500095374796C - 654E616D65060B746162646F747374796C6505416C69676E070643656E746572 - 0A46696C6C2E436F6C6F7207097846463135313531350748697454657374080A - 53697A652E57696474680500000000000000C804400B53697A652E4865696768 - 740500000000000000C804401453697A652E506C6174666F726D44656661756C - 74080B5374726F6B652E4B696E6407044E6F6E650756697369626C6508000F54 - 436F6C6F72416E696D6174696F6E00084475726174696F6E05000000000018B7 - D1F23F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461 - 727456616C756507097846463135313531350953746F7056616C756507097846 - 463241383245320754726967676572060F497353656C65637465643D74727565 - 0E54726967676572496E76657273650610497353656C65637465643D66616C73 - 650000005450463007544C61796F757400095374796C654E616D65060C746162 - 6974656D7374796C6505416C69676E070643656E7465720A53697A652E576964 - 74680500000000000000C804400B53697A652E48656967687405000000000000 - 00C803401453697A652E506C6174666F726D44656661756C7408075669736962 - 6C6508085461624F726465720212000A5452656374616E676C6500095374796C - 654E616D650603746F7005416C69676E0708436F6E74656E74730C436C697043 - 68696C6472656E0907436F726E6572730B07546F704C65667408546F70526967 - 6874000A46696C6C2E436F6C6F720709784646323032303230064C6F636B6564 - 090748697454657374080553696465730B03546F70044C656674055269676874 - 000A53697A652E57696474680500000000000000C804400B53697A652E486569 - 6768740500000000000000C803401453697A652E506C6174666F726D44656661 - 756C74080C5374726F6B652E436F6C6F72070978464631353135313500065447 - 6C79706800095374796C654E616D65060A676C7970687374796C650C4D617267 - 696E732E4C65667405000000000000008001400D4D617267696E732E52696768 - 7405000000000000008001C005416C69676E07044C6566740A53697A652E5769 - 64746805000000000000008003400B53697A652E486569676874050000000000 - 00008003401453697A652E506C6174666F726D44656661756C74080000055454 - 65787400095374796C654E616D6506047465787405416C69676E0706436C6965 - 6E74064C6F636B6564090748697454657374080C4D617267696E732E4C656674 - 0500000000000000C000400B4D617267696E732E546F700500000000000000C0 - 00400D4D617267696E732E52696768740500000000000000C000400E4D617267 - 696E732E426F74746F6D0500000000000000C000400A53697A652E5769647468 - 0500000000000000B004400B53697A652E486569676874050000000000000098 - 03401453697A652E506C6174666F726D44656661756C74081654657874536574 - 74696E67732E466F6E74436F6C6F720708636C61576869746515546578745365 - 7474696E67732E576F7264577261700800000F54436F6C6F72416E696D617469 - 6F6E00095374796C654E616D650612746162436F6C6F72416E696D6174696F6E - 310D416E696D6174696F6E547970650705496E4F7574084475726174696F6E05 + 6506074C61796F75743105416C69676E070643656E7465720A53697A652E5769 + 6474680500000000000000A002400B53697A652E486569676874050000000000 + 0000C001401453697A652E506C6174666F726D44656661756C74080005545061 + 746800095374796C654E616D650605506174683105416C69676E0706436C6965 + 6E7409446174612E506174680A3400000004000000000000000000C8420000C8 + 4201000000000096430000C842010000000000484300009643030000000000C8 + 420000C8420A46696C6C2E436F6C6F720708636C615768697465074869745465 + 7374080D526F746174696F6E416E676C650500000000000000B405400A53697A + 652E57696474680500000000000000A002400B53697A652E4865696768740500 + 000000000000C001401453697A652E506C6174666F726D44656661756C74080B + 5374726F6B652E4B696E6407044E6F6E65000000005450463007544C61796F75 + 7400095374796C654E616D6506147363726F6C6C626172726967687462757474 + 6F6E05416C69676E070643656E7465720756697369626C6508085461624F7264 + 6572020C000A5452656374616E676C6500095374796C654E616D65060A626163 + 6B67726F756E6405416C69676E0706436C69656E740C436C69704368696C6472 + 656E090A436C6970506172656E74090A46696C6C2E436F6C6F72070978464632 + 30323032300748697454657374080A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000000000C804401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 15627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E05 000000000000000000000C50726F70657274794E616D65060A46696C6C2E436F 6C6F720A537461727456616C756507097846463230323032300953746F705661 - 6C756507097846463430343034300754726967676572062149734D6F7573654F - 7665723D747275653B497353656C65637465643D66616C73650E547269676765 - 72496E7665727365062249734D6F7573654F7665723D66616C73653B49735365 - 6C65637465643D66616C736500000F54436F6C6F72416E696D6174696F6E0009 - 5374796C654E616D650612746162436F6C6F72416E696D6174696F6E32084475 + 6C756507097846463430343034300754726967676572062049734D6F7573654F + 7665723D747275653B4973507265737365643D66616C73650E54726967676572 + 496E7665727365062149734D6F7573654F7665723D66616C73653B4973507265 + 737365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E320844 + 75726174696F6E05000000000000000000000C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C756507097846463430343034 + 300953746F7056616C756507097846463137353739430754726967676572061F + 4973507265737365643D747275653B49734D6F7573654F7665723D747275650E + 54726967676572496E766572736506204973507265737365643D66616C73653B + 49734D6F7573654F7665723D7472756500000007544C61796F75740009537479 + 6C654E616D6506074C61796F75743105416C69676E070643656E7465720A5369 + 7A652E57696474680500000000000000A002400B53697A652E48656967687405 + 00000000000000C001401453697A652E506C6174666F726D44656661756C7408 + 0005545061746800095374796C654E616D650605506174683105416C69676E07 + 06436C69656E7409446174612E506174680A3400000004000000000000000000 + C8420000C84201000000000096430000C8420100000000004843000096430300 + 00000000C8420000C8420A46696C6C2E436F6C6F720708636C61576869746507 + 48697454657374080D526F746174696F6E416E676C650500000000000000B405 + C00A53697A652E57696474680500000000000000A002400B53697A652E486569 + 6768740500000000000000C001401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E6500000000545046300754 + 4C61796F757400095374796C654E616D6506127363726F6C6C626172746F7062 + 7574746F6E05416C69676E070643656E7465720756697369626C650808546162 + 4F72646572020D000A5452656374616E676C6500095374796C654E616D65060A + 6261636B67726F756E6405416C69676E0706436C69656E740C436C6970436869 + 6C6472656E090A436C6970506172656E74090A46696C6C2E436F6C6F72070978 + 46463230323032300748697454657374080A53697A652E576964746805000000 + 00000000C804400B53697A652E4865696768740500000000000000C804401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E61 + 6D650615627574746F6E436F6C6F72416E696D6174696F6E3108447572617469 + 6F6E05000000000000000000000C50726F70657274794E616D65060A46696C6C + 2E436F6C6F720A537461727456616C756507097846463230323032300953746F + 7056616C756507097846463430343034300754726967676572062049734D6F75 + 73654F7665723D747275653B4973507265737365643D66616C73650E54726967 + 676572496E7665727365062149734D6F7573654F7665723D66616C73653B4973 + 507265737365643D66616C736500000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E + 32084475726174696F6E05000000000000000000000C50726F70657274794E61 + 6D65060A46696C6C2E436F6C6F720A537461727456616C756507097846463430 + 343034300953746F7056616C7565070978464631373537394307547269676765 + 72061F4973507265737365643D747275653B49734D6F7573654F7665723D7472 + 75650E54726967676572496E766572736506204973507265737365643D66616C + 73653B49734D6F7573654F7665723D7472756500000007544C61796F75740009 + 5374796C654E616D6506074C61796F75743105416C69676E070643656E746572 + 0A53697A652E57696474680500000000000000A002400B53697A652E48656967 + 68740500000000000000C001401453697A652E506C6174666F726D4465666175 + 6C74080005545061746800095374796C654E616D650605506174683105416C69 + 676E0706436C69656E7409446174612E506174680A3400000004000000000000 + 000000C8420000C84201000000000096430000C8420100000000004843000096 + 43030000000000C8420000C8420A46696C6C2E436F6C6F720708636C61576869 + 74650748697454657374080D526F746174696F6E416E676C6505000000000000 + 00B406400A53697A652E57696474680500000000000000A002400B53697A652E + 4865696768740500000000000000C001401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000000545046 + 3007544C61796F757400095374796C654E616D65060E7363726F6C6C62617273 + 74796C6505416C69676E070643656E7465720756697369626C6508085461624F + 72646572020E000754427574746F6E00095374796C654E616D65060A6C656674 + 627574746F6E05416C69676E07044C656674064C6F636B6564090A506F736974 + 696F6E2E5905000000000000008003400A53697A652E57696474680500000000 + 0000008003400B53697A652E4865696768740500000000000000900340145369 + 7A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B757006 + 137363726F6C6C6261726C656674627574746F6E00000754427574746F6E0009 + 5374796C654E616D65060B7269676874627574746F6E05416C69676E07055269 + 676874064C6F636B6564090A506F736974696F6E2E5805000000000000008804 + 400A506F736974696F6E2E5905000000000000008003400A53697A652E576964 + 746805000000000000008003400B53697A652E48656967687405000000000000 + 009003401453697A652E506C6174666F726D44656661756C74080B5374796C65 + 4C6F6F6B757006147363726F6C6C6261727269676874627574746F6E00000754 + 427574746F6E00095374796C654E616D65060C626F74746F6D627574746F6E05 + 416C69676E0706426F74746F6D064C6F636B6564090A506F736974696F6E2E59 + 05000000000000008804400A53697A652E57696474680500000000000000C804 + 400B53697A652E48656967687405000000000000008003401453697A652E506C + 6174666F726D44656661756C74080B5374796C654C6F6F6B757006157363726F + 6C6C626172626F74746F6D627574746F6E00000654547261636B00095374796C + 654E616D65060668747261636B05416C69676E0706436C69656E74064C6F636B + 6564090B4F7269656E746174696F6E070A486F72697A6F6E74616C0A53697A65 + 2E576964746805000000000000009003400B53697A652E486569676874050000 + 00000000009003401453697A652E506C6174666F726D44656661756C74080B53 + 74796C654C6F6F6B757006147363726F6C6C62617268747261636B7374796C65 + 00000654547261636B00095374796C654E616D65060676747261636B05416C69 + 676E0706436C69656E74064C6F636B6564090B4F7269656E746174696F6E070A + 486F72697A6F6E74616C0A53697A652E57696474680500000000000000900340 + 0B53697A652E48656967687405000000000000009003401453697A652E506C61 + 74666F726D44656661756C74080B5374796C654C6F6F6B757006147363726F6C + 6C62617276747261636B7374796C6500000754427574746F6E00095374796C65 + 4E616D650609746F70627574746F6E05416C69676E0703546F700A53697A652E + 57696474680500000000000000C804400B53697A652E48656967687405000000 + 000000008003401453697A652E506C6174666F726D44656661756C74080B5374 + 796C654C6F6F6B757006127363726F6C6C626172746F70627574746F6E000000 + 545046300A5452656374616E676C6500095374796C654E616D65060A7468756D + 627374796C6505416C69676E070643656E7465720A46696C6C2E436F6C6F7207 + 097846463444344434440748697454657374080A53697A652E57696474680500 + 000000000000C804400B53697A652E4865696768740500000000000000C80440 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E650756697369626C6508000F54436F6C6F72416E696D617469 + 6F6E00095374796C654E616D6506147468756D62436F6C6F72416E696D617469 + 6F6E31084475726174696F6E05000000000000000000000C50726F7065727479 + 4E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709784646 + 3444344434440953746F7056616C756507097846463137353739430754726967 + 676572060E4973507265737365643D747275650E54726967676572496E766572 + 7365060F4973507265737365643D66616C736500000F54436F6C6F72416E696D + 6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E + 315374796C65084475726174696F6E05000000000000000000000C50726F7065 + 7274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709 + 7846463444344434440953746F7056616C75650707636C614772617907547269 + 67676572061049734D6F7573654F7665723D747275650E54726967676572496E + 7665727365061149734D6F7573654F7665723D66616C7365000000545046300D + 545377697463684F626A65637400095374796C654E616D65060B737769746368 + 7374796C6505416C69676E070643656E746572044B696E64070C466164696E67 + 547261636B730A53697A652E57696474680500000000000000C805400B53697A + 652E4865696768740500000000000000C803401453697A652E506C6174666F72 + 6D44656661756C7408085461624F72646572021012547261636B696E67546875 + 6D625363616C65050000000000000080FF3F0756697369626C65080A46696C6C + 2E436F6C6F7207097846463230323032300C46696C6C4F6E2E436F6C6F720709 + 7846463137353739430B46696C6C4F6E2E4B696E640705536F6C69640B537472 + 6F6B652E4B696E6407044E6F6E650B5468756D622E436F6C6F72070978464634 + 30343034300D5468756D624F6E2E436F6C6F7207097846463241383245320C54 + 68756D624F6E2E4B696E640705536F6C6964105468756D625374726F6B652E4B + 696E6407044E6F6E650F5468756D625374726F6B652E4361700705526F756E64 + 105468756D625374726F6B652E446173680706437573746F6D105468756D6253 + 74726F6B652E4A6F696E0705526F756E64165468756D625374726F6B652E4375 + 73746F6D446173680A08000000000000000000000000005450463007544C6179 + 6F757400095374796C654E616D65060D636F6D626F626F787374796C6505416C + 69676E070643656E7465720A53697A652E57696474680500000000000000C805 + 400B53697A652E4865696768740500000000000000C803401453697A652E506C + 6174666F726D44656661756C74080756697369626C6508085461624F72646572 + 0211000C5442727573684F626A65637400095374796C654E616D65060A666F72 + 6567726F756E6400000B54466F6E744F626A65637400095374796C654E616D65 + 0604666F6E7409466F6E742E53697A650500000000000000D00240000007544C + 61796F757400095374796C654E616D65060A6261636B67726F756E6405416C69 + 676E0708436F6E74656E74730A53697A652E57696474680500000000000000C8 + 05400B53697A652E4865696768740500000000000000C803401453697A652E50 + 6C6174666F726D44656661756C7408000A5452656374616E676C650009537479 + 6C654E616D65060A52656374616E676C653105416C69676E0706436C69656E74 + 0A46696C6C2E436F6C6F7207097846463230323032300748697454657374080A + 53697A652E57696474680500000000000000C805400B53697A652E4865696768 + 740500000000000000C803401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E650007544C61796F7574000953 + 74796C654E616D650611427574746F6E5374796C654F626A65637405416C6967 + 6E070846697452696768740B4D617267696E732E546F70050000000000000080 + FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D617267 + 696E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E58 + 0500000000005ED99705400A506F736974696F6E2E59050000000000000080FF + 3F0A53697A652E5769647468050000000000889AB803400B53697A652E486569 + 6768740500000000000000B803401453697A652E506C6174666F726D44656661 + 756C74080007544C61796F757400095374796C654E616D6506074C61796F7574 + 3105416C69676E070643656E7465720C4D617267696E732E4C65667405000000 + 0000000080FF3F0A53697A652E57696474680500000000000000A002400B5369 + 7A652E4865696768740500000000000000C001401453697A652E506C6174666F + 726D44656661756C74080005545061746800095374796C654E616D6506055061 + 74683105416C69676E0706436C69656E7409446174612E506174680A34000000 + 04000000000000000000C8420000C84201000000000096430000C84201000000 + 0000484300009643030000000000C8420000C8420A46696C6C2E436F6C6F7207 + 08636C6157686974650748697454657374080A53697A652E5769647468050000 + 0000000000A002400B53697A652E4865696768740500000000000000C0014014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E65000000000F54436F6C6F72416E696D6174696F6E0009537479 + 6C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E31084475 726174696F6E05000000000000000000000C50726F70657274794E616D65060A 46696C6C2E436F6C6F720A537461727456616C75650709784646323032303230 - 0953746F7056616C756507097846463241383245320754726967676572060F49 - 7353656C65637465643D747275650E54726967676572496E7665727365061049 - 7353656C65637465643D66616C736500000000545046300A5452656374616E67 - 6C6500095374796C654E616D65060D7468756D626261727374796C6505416C69 - 676E070643656E7465720A46696C6C2E436F6C6F720709784646324138324532 - 0748697454657374080A53697A652E57696474680500000000000000A003400B - 53697A652E4865696768740500000000000000A003401453697A652E506C6174 - 666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846463135 - 313531350756697369626C6508000F54436F6C6F72416E696D6174696F6E0009 - 5374796C654E616D6506147468756D62436F6C6F72416E696D6174696F6E3108 - 4475726174696F6E05000000000000000000000C50726F70657274794E616D65 - 060A46696C6C2E436F6C6F720A537461727456616C7565070978464632413832 - 45320953746F7056616C75650709784646313735373943075472696767657206 - 1F4973507265737365643D747275653B49734D6F7573654F7665723D74727565 - 0E54726967676572496E766572736506104973507265737365643D66616C7365 - 3B00000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614 - 7468756D62436F6C6F72416E696D6174696F6E32084475726174696F6E050000 - 00000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F - 720A537461727456616C756507097846463241383245320953746F7056616C75 - 6507097846463430394246460754726967676572062049734D6F7573654F7665 - 723D747275653B4973507265737365643D66616C73650E54726967676572496E - 7665727365062149734D6F7573654F7665723D66616C73653B49735072657373 - 65643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C - 654E616D6506157468756D625374726F6B65416E696D6174696F6E3108447572 - 6174696F6E05000000000000000000000C50726F70657274794E616D65060C53 - 74726F6B652E436F6C6F720A537461727456616C756507097846463135313531 - 350953746F7056616C756507097846463137353739430754726967676572061F - 4973507265737365643D747275653B49734D6F7573654F7665723D747275650E - 54726967676572496E7665727365060F4973507265737365643D66616C736500 - 00005450463007544C61796F757400095374796C654E616D65060C6C69737462 - 6F787374796C6505416C69676E070643656E7465720A53697A652E5769647468 - 050000000000FFFFE905400B53697A652E486569676874050000000000000083 - 06401453697A652E506C6174666F726D44656661756C74080756697369626C65 - 08085461624F726465720213000C5442727573684F626A65637400095374796C - 654E616D650618416C7465726E6174696E67526F774261636B67726F756E640B - 42727573682E436F6C6F72070978464632433243324300000A5452656374616E - 676C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E - 0708436F6E74656E74730A46696C6C2E436F6C6F720709784646323032303230 - 064C6F636B6564090748697454657374080C50616464696E672E4C6566740500 - 0000000000008000400B50616464696E672E546F700500000000000000800040 - 0D50616464696E672E526967687405000000000000008000400E50616464696E - 672E426F74746F6D05000000000000008000400A53697A652E57696474680500 - 00000000FFFFE905400B53697A652E4865696768740500000000000000830640 - 1453697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F - 6C6F7207097846463135313531350007544C61796F757400095374796C654E61 - 6D650607636F6E74656E7405416C69676E0706436C69656E740C436C69704368 - 696C6472656E090A53697A652E5769647468050000000000FFFFC105400B5369 - 7A652E4865696768740500000000000000DE05401453697A652E506C6174666F - 726D44656661756C7408000A5452656374616E676C6500095374796C654E616D - 65060973656C656374696F6E0A46696C6C2E436F6C6F72070978464632413832 - 45320748697454657374080A53697A652E57696474680500000000000000C804 - 400B53697A652E4865696768740500000000000000C804401453697A652E506C - 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 - 00000A5452656374616E676C6500095374796C654E616D650610666F63757365 - 6473656C656374696F6E0A46696C6C2E436F6C6F720709784646324138324532 - 0748697454657374080A53697A652E57696474680500000000000000C804400B - 53697A652E4865696768740500000000000000C804401453697A652E506C6174 - 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650B53 - 74726F6B652E446173680703446F740000000A545363726F6C6C426172000953 - 74796C654E616D65060A767363726F6C6C62617205416C69676E070552696768 - 740B536D616C6C4368616E676505000000000000000000000B4F7269656E7461 - 74696F6E0708566572746963616C0A506F736974696F6E2E58050000000000FF - FFC505400A506F736974696F6E2E5905000000000000008000400A53697A652E - 576964746805000000000000008003400B53697A652E48656967687405000000 - 00000000DE05401453697A652E506C6174666F726D44656661756C740800000A - 545363726F6C6C42617200095374796C654E616D65060A687363726F6C6C6261 - 7205416C69676E0706426F74746F6D0B536D616C6C4368616E67650500000000 - 0000000000000B4F7269656E746174696F6E070A486F72697A6F6E74616C0A50 - 6F736974696F6E2E5805000000000000008000400A506F736974696F6E2E5905 - 00000000000000E205400A53697A652E5769647468050000000000FFFFE10540 - 0B53697A652E48656967687405000000000000008003401453697A652E506C61 - 74666F726D44656661756C740800000F54536D616C6C5363726F6C6C42617200 - 095374796C654E616D65060F76736D616C6C7363726F6C6C62617205416C6967 - 6E070552696768740B536D616C6C4368616E676505000000000000000000000B - 4F7269656E746174696F6E0708566572746963616C0C4D617267696E732E4C65 - 667405000000000000008000400A506F736974696F6E2E580500000000000000 - C605400A506F736974696F6E2E5905000000000000008000400A53697A652E57 - 6964746805000000000000008002400B53697A652E4865696768740500000000 - 0000008002401453697A652E506C6174666F726D44656661756C740807566973 - 69626C650800000F54536D616C6C5363726F6C6C42617200095374796C654E61 - 6D65060F68736D616C6C7363726F6C6C62617205416C69676E0706426F74746F - 6D0B536D616C6C4368616E676505000000000000000000000B4F7269656E7461 - 74696F6E070A486F72697A6F6E74616C0B4D617267696E732E546F7005000000 - 000000008000400A506F736974696F6E2E5805000000000000008000400A506F - 736974696F6E2E590500000000000000E205400A53697A652E57696474680500 - 0000000000009606400B53697A652E4865696768740500000000000000800240 - 1453697A652E506C6174666F726D44656661756C74080756697369626C650800 - 00000B54476C6F774566666563740008536F66746E657373050000000000CDCC - CCFC3F09476C6F77436F6C6F720709784646463639453244074F706163697479 - 0500000000006666E6FE3F0754726967676572060E4973466F63757365643D74 - 72756507456E61626C6564080000005450463007544C61796F75740009537479 - 6C654E616D65060D6C697374626F78666F6F74657205416C69676E070643656E - 7465720A53697A652E576964746805000000000000009205400B53697A652E48 - 65696768740500000000000000D003401453697A652E506C6174666F726D4465 - 6661756C74080756697369626C6508085461624F726465720214000554546578 - 7400095374796C654E616D6506047465787405416C69676E0706436C69656E74 - 064C6F636B6564090748697454657374080C4D617267696E732E4C6566740500 - 000000000000A001400B4D617267696E732E546F700500000000000000800040 - 0D4D617267696E732E52696768740500000000000000A001400E4D617267696E - 732E426F74746F6D05000000000000008000400A53697A652E57696474680500 - 000000000000FC04400B53697A652E4865696768740500000000000000B00340 - 1453697A652E506C6174666F726D44656661756C740816546578745365747469 - 6E67732E466F6E74436F6C6F720708636C615768697465000000545046300754 - 4C61796F757400095374796C654E616D6506106C697374626F786974656D7374 - 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 - 00000000D605400B53697A652E4865696768740500000000000000C003401453 - 697A652E506C6174666F726D44656661756C74080756697369626C6508085461 - 624F726465720215000654476C79706800095374796C654E616D65060A676C79 - 70687374796C650C4D617267696E732E4C65667405000000000000008000400B - 4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E52 - 6967687405000000000000008000400E4D617267696E732E426F74746F6D0500 - 00000000000080FF3F05416C69676E07044C6566740A53697A652E5769647468 - 05000000000000008003400B53697A652E486569676874050000000000000080 - 03401453697A652E506C6174666F726D44656661756C74080000055454657874 - 00095374796C654E616D6506047465787405416C69676E0706436C69656E7407 - 48697454657374080C4D617267696E732E4C6566740500000000000000C00040 - 0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E - 52696768740500000000000000C000400E4D617267696E732E426F74746F6D05 - 0000000000000080FF3F0A53697A652E57696474680500000000000000CA0540 - 0B53697A652E4865696768740500000000000000B003401453697A652E506C61 - 74666F726D44656661756C7408165465787453657474696E67732E466F6E7443 - 6F6C6F720708636C615768697465155465787453657474696E67732E576F7264 - 5772617008165465787453657474696E67732E486F727A416C69676E07074C65 - 6164696E6700000954436865636B426F7800095374796C654E616D6506056368 - 65636B05416C69676E07084D6F73744C6566740843616E466F63757308124469 - 7361626C65466F637573456666656374090A53697A652E576964746805000000 - 00000000A003400B53697A652E4865696768740500000000000000C003401453 - 697A652E506C6174666F726D44656661756C74080756697369626C6508000000 - 5450463007544C61796F757400095374796C654E616D6506126C697374626F78 - 706C61696E68656164657205416C69676E070643656E7465720A53697A652E57 - 6964746805000000000000009205400B53697A652E4865696768740500000000 - 000000D003401453697A652E506C6174666F726D44656661756C740807566973 - 69626C6508085461624F726465720216000A5452656374616E676C6500095374 - 796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E7465 - 6E74730A46696C6C2E436F6C6F720709784646324432443244064C6F636B6564 - 090748697454657374080A53697A652E57696474680500000000000000920540 - 0B53697A652E4865696768740500000000000000D003401453697A652E506C61 - 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 - 3531353135000005545465787400095374796C654E616D650604746578740541 - 6C69676E0706436C69656E74064C6F636B6564090748697454657374080C4D61 - 7267696E732E4C6566740500000000000000A001400B4D617267696E732E546F + 0953746F7056616C756507097846463430343034300754726967676572063049 + 734D6F7573654F7665723D747275653B4973507265737365643D66616C73653B + 4973466F63757365643D66616C73650E54726967676572496E76657273650631 + 49734D6F7573654F7665723D66616C73653B4973507265737365643D66616C73 + 653B4973466F63757365643D66616C736500000F54436F6C6F72416E696D6174 + 696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D61 + 74696F6E32084475726174696F6E05000000000000000000000C50726F706572 + 74794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978 + 46463430343034300953746F7056616C75650709784646313735373943075472 + 6967676572062F4973507265737365643D747275653B49734D6F7573654F7665 + 723D747275653B4973466F63757365643D66616C736500000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72 + 416E696D6174696F6E33084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C + 756507097846463241383245320953746F7056616C7565070978464631373537 + 39430754726967676572062E4973507265737365643D747275653B49734D6F75 + 73654F7665723D747275653B4973466F63757365643D747275650E5472696767 + 6572496E7665727365062F4973507265737365643D66616C73653B49734D6F75 + 73654F7665723D747275653B4973466F63757365643D74727565000000000754 + 4C61796F757400095374796C654E616D650607636F6E74656E7405416C69676E + 0706436C69656E74064C6F636B6564090C4D617267696E732E4C656674050000 + 00000000008000400B4D617267696E732E546F7005000000000000008000400D + 4D617267696E732E52696768740500000000000000D803400E4D617267696E73 + 2E426F74746F6D05000000000000008000400A53697A652E5769647468050000 + 00000000008E05400B53697A652E4865696768740500000000000000A8034014 + 53697A652E506C6174666F726D44656661756C74080000005450463007544C61 + 796F757400095374796C654E616D65060E636F6D626F656469747374796C6505 + 416C69676E070643656E7465720A53697A652E57696474680500000000000000 + C805400B53697A652E4865696768740500000000000000C803401453697A652E + 506C6174666F726D44656661756C74080756697369626C6508085461624F7264 + 65720212000C5442727573684F626A65637400095374796C654E616D65060A66 + 6F726567726F756E6400000B54466F6E744F626A65637400095374796C654E61 + 6D650604666F6E7409466F6E742E53697A650500000000000000D00240000007 + 544C61796F757400095374796C654E616D65060A6261636B67726F756E640541 + 6C69676E0708436F6E74656E74730A53697A652E576964746805000000000000 + 00C805400B53697A652E4865696768740500000000000000C803401453697A65 + 2E506C6174666F726D44656661756C7408000A5452656374616E676C65000953 + 74796C654E616D65060A52656374616E676C653105416C69676E0706436C6965 + 6E740A46696C6C2E436F6C6F7207097846463230323032300748697454657374 + 080A53697A652E57696474680500000000000000C805400B53697A652E486569 + 6768740500000000000000C803401453697A652E506C6174666F726D44656661 + 756C74080C5374726F6B652E436F6C6F720709784646323032303230000F5443 + 6F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F7241 + 6E696D6174696F6E315374796C65084475726174696F6E050000000000000000 + 000007496E7665727365090C50726F70657274794E616D65060C5374726F6B65 + 2E436F6C6F720A537461727456616C756507097846463230323032300953746F + 7056616C756507097846463430343034300754726967676572062049734D6F75 + 73654F7665723D747275653B4973466F63757365643D66616C73650E54726967 + 676572496E7665727365062149734D6F7573654F7665723D66616C73653B4973 + 466F63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D650614436F6C6F72416E696D6174696F6E325374796C65 + 084475726174696F6E050000000000000000000007496E7665727365090C5072 + 6F70657274794E616D65060C5374726F6B652E436F6C6F720A53746172745661 + 6C756507097846463430343034300953746F7056616C75650709784646324138 + 3245320754726967676572061F49734D6F7573654F7665723D747275653B4973 + 466F63757365643D747275650E54726967676572496E7665727365062049734D + 6F7573654F7665723D747275653B4973466F63757365643D66616C7365000007 + 544C61796F757400095374796C654E616D6506056172726F7705416C69676E07 + 0846697452696768740B4D617267696E732E546F70050000000000000080FF3F + 0D4D617267696E732E5269676874050000000000000080FF3F0E4D617267696E + 732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E580500 + 000000005ED99705400A506F736974696F6E2E59050000000000000080FF3F0A + 53697A652E5769647468050000000000889AB803400B53697A652E4865696768 + 740500000000000000B803401453697A652E506C6174666F726D44656661756C + 7408000A5452656374616E676C6500095374796C654E616D65060A5265637461 + 6E676C653105416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72 + 07097846463330333033300748697454657374080A53697A652E576964746805 + 0000000000889AB803400B53697A652E4865696768740500000000000000B803 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C + 654E616D650614436F6C6F72416E696D6174696F6E315374796C650844757261 + 74696F6E050000000000000000000007496E7665727365090C50726F70657274 + 794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507097846 + 463330333033300953746F7056616C7565070978464634303430343007547269 + 67676572062049734D6F7573654F7665723D747275653B4973466F6375736564 + 3D66616C73650E54726967676572496E7665727365062149734D6F7573654F76 + 65723D66616C73653B4973466F63757365643D66616C736500000F54436F6C6F + 72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D + 6174696F6E325374796C65084475726174696F6E05000000000000000000000C + 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 + 6C756507097846463430343034300953746F7056616C75650709784646313735 + 3739430754726967676572061F4973466F63757365643D747275653B49734D6F + 7573654F7665723D7472756500000007544C61796F757400095374796C654E61 + 6D6506074C61796F75743105416C69676E070643656E7465720C4D617267696E + 732E4C656674050000000000000080FF3F0A53697A652E576964746805000000 + 00000000A002400B53697A652E4865696768740500000000000000C001401453 + 697A652E506C6174666F726D44656661756C7408000554506174680009537479 + 6C654E616D650605506174683105416C69676E0706436C69656E740944617461 + 2E506174680A3400000004000000000000000000C8420000C842010000000000 + 96430000C842010000000000484300009643030000000000C8420000C8420A46 + 696C6C2E436F6C6F720708636C6157686974650748697454657374080A53697A + 652E57696474680500000000000000A002400B53697A652E4865696768740500 + 000000000000C001401453697A652E506C6174666F726D44656661756C74080B + 5374726F6B652E4B696E6407044E6F6E650000000000000C5442727573684F62 + 6A65637400095374796C654E616D65060973656C656374696F6E0B4272757368 + 2E436F6C6F720709783936324138324532000007544C61796F75740009537479 + 6C654E616D650607636F6E74656E7405416C69676E0706436C69656E740C4D61 + 7267696E732E4C65667405000000000000008000400B4D617267696E732E546F 7005000000000000008000400D4D617267696E732E5269676874050000000000 - 0000A001400E4D617267696E732E426F74746F6D05000000000000008000400A - 53697A652E57696474680500000000000000FC04400B53697A652E4865696768 - 740500000000000000B003401453697A652E506C6174666F726D44656661756C - 7408165465787453657474696E67732E466F6E74436F6C6F720708636C615768 - 6974650000005450463007544C61796F757400095374796C654E616D65060967 - 7269647374796C6505416C69676E070643656E7465720A53697A652E57696474 + 0000F003400E4D617267696E732E426F74746F6D05000000000000008000400A + 53697A652E576964746805000000000000008805400B53697A652E4865696768 + 740500000000000000A803401453697A652E506C6174666F726D44656661756C + 74080000005450463007544C61796F757400095374796C654E616D65060F7461 + 62636F6E74726F6C7374796C6505416C69676E070643656E7465720A53697A65 + 2E576964746805000000000000008E06400B53697A652E486569676874050000 + 000000FFFFC905401453697A652E506C6174666F726D44656661756C74080756 + 697369626C6508085461624F726465720213000A5452656374616E676C650009 + 5374796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E + 74656E74730A46696C6C2E436F6C6F720709784646333033303330064C6F636B + 6564090748697454657374080C50616464696E672E4C65667405000000000000 + 008000400B50616464696E672E546F7005000000000000008000400D50616464 + 696E672E526967687405000000000000008000400E50616464696E672E426F74 + 746F6D05000000000000008000400A53697A652E576964746805000000000000 + 008E06400B53697A652E486569676874050000000000FFFFC905401453697A65 + 2E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709 + 784646313531353135000000545046300A5452656374616E676C650009537479 + 6C654E616D65060B746162646F747374796C6505416C69676E070643656E7465 + 720A46696C6C2E436F6C6F720709784646313531353135074869745465737408 + 0A53697A652E576964746805000000000000008005400B53697A652E48656967 + 687405000000000000008001401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E650756697369626C6508000F + 54436F6C6F72416E696D6174696F6E00084475726174696F6E05000000000018 + B7D1F23F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 + 61727456616C756507097846463135313531350953746F7056616C7565070978 + 46463241383245320754726967676572060F497353656C65637465643D747275 + 650E54726967676572496E76657273650610497353656C65637465643D66616C + 73650000005450463007544C61796F757400095374796C654E616D65060C7461 + 626974656D7374796C6505416C69676E070643656E7465720A53697A652E5769 + 6474680500000000000000C804400B53697A652E486569676874050000000000 + 0000C803401453697A652E506C6174666F726D44656661756C74080756697369 + 626C6508085461624F726465720215000A5452656374616E676C650009537479 + 6C654E616D650603746F7005416C69676E0708436F6E74656E74730C436C6970 + 4368696C6472656E0907436F726E6572730B07546F704C65667408546F705269 + 676874000A46696C6C2E436F6C6F720709784646323032303230064C6F636B65 + 64090748697454657374080553696465730B03546F70044C6566740552696768 + 74000A53697A652E57696474680500000000000000C804400B53697A652E4865 + 696768740500000000000000C803401453697A652E506C6174666F726D446566 + 61756C74080C5374726F6B652E436F6C6F720709784646313531353135000654 + 476C79706800095374796C654E616D65060A676C7970687374796C650C4D6172 + 67696E732E4C65667405000000000000008001400D4D617267696E732E526967 + 687405000000000000008001C005416C69676E07044C6566740A53697A652E57 + 6964746805000000000000008003400B53697A652E4865696768740500000000 + 0000008003401453697A652E506C6174666F726D44656661756C740800000554 + 5465787400095374796C654E616D6506047465787405416C69676E0706436C69 + 656E74064C6F636B6564090748697454657374080C4D617267696E732E4C6566 + 740500000000000000C000400B4D617267696E732E546F700500000000000000 + C000400D4D617267696E732E52696768740500000000000000C000400E4D6172 + 67696E732E426F74746F6D0500000000000000C000400A53697A652E57696474 + 680500000000000000B004400B53697A652E4865696768740500000000000000 + 9803401453697A652E506C6174666F726D44656661756C740816546578745365 + 7474696E67732E466F6E74436F6C6F720708636C615768697465155465787453 + 657474696E67732E576F7264577261700800000F54436F6C6F72416E696D6174 + 696F6E00095374796C654E616D650612746162436F6C6F72416E696D6174696F + 6E310D416E696D6174696F6E547970650705496E4F7574084475726174696F6E + 05000000000000000000000C50726F70657274794E616D65060A46696C6C2E43 + 6F6C6F720A537461727456616C756507097846463230323032300953746F7056 + 616C756507097846463430343034300754726967676572062149734D6F757365 + 4F7665723D747275653B497353656C65637465643D66616C73650E5472696767 + 6572496E7665727365062249734D6F7573654F7665723D66616C73653B497353 + 656C65637465643D66616C736500000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D650612746162436F6C6F72416E696D6174696F6E320844 + 75726174696F6E05000000000000000000000C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C756507097846463230323032 + 300953746F7056616C756507097846463241383245320754726967676572060F + 497353656C65637465643D747275650E54726967676572496E76657273650610 + 497353656C65637465643D66616C736500000000545046300A5452656374616E + 676C6500095374796C654E616D65060D7468756D626261727374796C6505416C + 69676E070643656E7465720A46696C6C2E436F6C6F7207097846463241383245 + 320748697454657374080A53697A652E57696474680500000000000000A00340 + 0B53697A652E4865696768740500000000000000A003401453697A652E506C61 + 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 + 35313531350756697369626C6508000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D6506147468756D62436F6C6F72416E696D6174696F6E31 + 084475726174696F6E05000000000000000000000C50726F70657274794E616D + 65060A46696C6C2E436F6C6F720A537461727456616C75650709784646324138 + 3245320953746F7056616C756507097846463137353739430754726967676572 + 061F4973507265737365643D747275653B49734D6F7573654F7665723D747275 + 650E54726967676572496E766572736506104973507265737365643D66616C73 + 653B00000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 147468756D62436F6C6F72416E696D6174696F6E32084475726174696F6E0500 + 0000000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C + 6F720A537461727456616C756507097846463241383245320953746F7056616C + 756507097846463430394246460754726967676572062049734D6F7573654F76 + 65723D747275653B4973507265737365643D66616C73650E5472696767657249 + 6E7665727365062149734D6F7573654F7665723D66616C73653B497350726573 + 7365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009537479 + 6C654E616D6506157468756D625374726F6B65416E696D6174696F6E31084475 + 726174696F6E05000000000000000000000C50726F70657274794E616D65060C + 5374726F6B652E436F6C6F720A537461727456616C7565070978464631353135 + 31350953746F7056616C75650709784646313735373943075472696767657206 + 1F4973507265737365643D747275653B49734D6F7573654F7665723D74727565 + 0E54726967676572496E7665727365060F4973507265737365643D66616C7365 + 0000005450463007544C61796F757400095374796C654E616D65060C6C697374 + 626F787374796C6505416C69676E070643656E7465720A53697A652E57696474 68050000000000FFFFE905400B53697A652E4865696768740500000000000000 8306401453697A652E506C6174666F726D44656661756C74080756697369626C 6508085461624F726465720217000C5442727573684F626A6563740009537479 6C654E616D650618416C7465726E6174696E67526F774261636B67726F756E64 - 0B42727573682E436F6C6F72070978333237383738373800000C544272757368 - 4F626A65637400095374796C654E616D6506086C696E6566696C6C0B42727573 - 682E436F6C6F72070978464631353135313500000A5452656374616E676C6500 - 095374796C654E616D65060A6261636B67726F756E6405416C69676E0708436F - 6E74656E74730A46696C6C2E436F6C6F720709784646323032303230064C6F63 - 6B6564090748697454657374080C50616464696E672E4C656674050000000000 - 00008000400B50616464696E672E546F7005000000000000008000400D506164 - 64696E672E526967687405000000000000008000400E50616464696E672E426F - 74746F6D05000000000000008000400A53697A652E5769647468050000000000 - FFFFE905400B53697A652E48656967687405000000000000008306401453697A - 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 - 0978464631353135313500075448656164657200095374796C654E616D650606 - 6865616465720553696465730B03546F70044C65667406426F74746F6D055269 - 6768740005416C69676E0703546F700748697454657374080A506F736974696F - 6E2E5805000000000000008000400A506F736974696F6E2E5905000000000000 - 008000400A53697A652E5769647468050000000000FFFFE105400B53697A652E - 4865696768740500000000000000A803401453697A652E506C6174666F726D44 - 656661756C7408000007544C61796F757400095374796C654E616D650607636F - 6E74656E7405416C69676E0706436C69656E740C436C69704368696C6472656E - 090A53697A652E5769647468050000000000FFFFC105400B53697A652E486569 - 6768740500000000000000B405401453697A652E506C6174666F726D44656661 - 756C7408000A5452656374616E676C6500095374796C654E616D65060973656C - 656374696F6E0A46696C6C2E436F6C6F72070978464632413832453207486974 - 54657374080A53697A652E57696474680500000000000000C804400B53697A65 - 2E4865696768740500000000000000C804401453697A652E506C6174666F726D - 44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000A545265 - 6374616E676C6500095374796C654E616D650605666F6375730A46696C6C2E43 - 6F6C6F7207097841463241383245320748697454657374080C4D617267696E73 - 2E4C656674050000000000000080FF3F0B4D617267696E732E546F7005000000 - 0000000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F - 0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E - 57696474680500000000000000C804400B53697A652E48656967687405000000 - 00000000C804401453697A652E506C6174666F726D44656661756C74080B5374 - 726F6B652E4B696E6407044E6F6E6507595261646975730500000000000000C0 - 00400000000A545363726F6C6C42617200095374796C654E616D65060A767363 - 726F6C6C62617205416C69676E070552696768740B536D616C6C4368616E6765 - 05000000000000000000000B4F7269656E746174696F6E070856657274696361 - 6C0A506F736974696F6E2E58050000000000FFFFC505400A506F736974696F6E - 2E590500000000000000B803400A53697A652E57696474680500000000000000 - 8003400B53697A652E4865696768740500000000000000B405401453697A652E - 506C6174666F726D44656661756C740800000A545363726F6C6C426172000953 - 74796C654E616D65060A687363726F6C6C62617205416C69676E0706426F7474 - 6F6D0B536D616C6C4368616E676505000000000000000000000B4F7269656E74 - 6174696F6E070A486F72697A6F6E74616C0A506F736974696F6E2E5805000000 - 000000008000400A506F736974696F6E2E590500000000000000E205400A5369 - 7A652E5769647468050000000000FFFFE105400B53697A652E48656967687405 - 000000000000008003401453697A652E506C6174666F726D44656661756C7408 - 00000F54536D616C6C5363726F6C6C42617200095374796C654E616D65060F76 - 736D616C6C7363726F6C6C62617205416C69676E070552696768740B536D616C - 6C4368616E676505000000000000000000000B4F7269656E746174696F6E0708 - 566572746963616C0C4D617267696E732E4C6566740500000000000000800040 - 0A506F736974696F6E2E580500000000000000C605400A506F736974696F6E2E - 5905000000000000008000400A53697A652E5769647468050000000000000080 - 02400B53697A652E48656967687405000000000000008002401453697A652E50 - 6C6174666F726D44656661756C74080756697369626C650800000F54536D616C - 6C5363726F6C6C42617200095374796C654E616D65060F68736D616C6C736372 - 6F6C6C62617205416C69676E0706426F74746F6D0B536D616C6C4368616E6765 - 05000000000000000000000B4F7269656E746174696F6E070A486F72697A6F6E - 74616C0B4D617267696E732E546F7005000000000000008000400A506F736974 - 696F6E2E5805000000000000008000400A506F736974696F6E2E590500000000 - 000000E205400A53697A652E576964746805000000000000009606400B53697A - 652E48656967687405000000000000008002401453697A652E506C6174666F72 - 6D44656661756C74080756697369626C6508000000005450463007544C61796F - 757400095374796C654E616D65060F6865616465726974656D7374796C650541 - 6C69676E070643656E7465720A53697A652E5769647468050000000000000092 - 05400B53697A652E4865696768740500000000000000D003401453697A652E50 - 6C6174666F726D44656661756C74080756697369626C6508085461624F726465 - 720218000A5452656374616E676C6500095374796C654E616D65060A6261636B - 67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F - 720709784646344334433443064C6F636B6564090748697454657374080A5369 - 7A652E576964746805000000000000009205400B53697A652E48656967687405 - 00000000000000D003401453697A652E506C6174666F726D44656661756C7408 - 0C5374726F6B652E436F6C6F720709784646313531353135000F54436F6C6F72 - 416E696D6174696F6E00095374796C654E616D650615686561646572436F6C6F - 72416E696D6174696F6E31084475726174696F6E05000000000000000000000C - 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 - 6C756507097846463443344334430953746F7056616C75650709784646324138 - 3245320754726967676572060E4973507265737365643D747275650E54726967 - 676572496E7665727365060F4973507265737365643D66616C736500000F5443 - 6F6C6F72416E696D6174696F6E00095374796C654E616D650616686561646572 - 5374726F6B65416E696D6174696F6E31084475726174696F6E05000000000000 - 000000000C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A - 537461727456616C756507097846463135313531350953746F7056616C756507 - 097846463241383245320754726967676572060E4973507265737365643D7472 - 75650E54726967676572496E7665727365060F4973507265737365643D66616C - 736500000005545465787400095374796C654E616D6506047465787405416C69 - 676E0706436C69656E74064C6F636B6564090748697454657374080C4D617267 - 696E732E4C6566740500000000000000A001400B4D617267696E732E546F7005 - 000000000000008000400D4D617267696E732E52696768740500000000000000 - A001400E4D617267696E732E426F74746F6D05000000000000008000400A5369 - 7A652E57696474680500000000000000FC04400B53697A652E48656967687405 - 00000000000000B003401453697A652E506C6174666F726D44656661756C7408 - 165465787453657474696E67732E466F6E74436F6C6F720708636C6157686974 - 650000005450463007544C61796F757400095374796C654E616D65061970726F - 67726573736261726D696E696572726F727374796C6505416C69676E07064365 - 6E7465720A53697A652E576964746805000000000033338505400B53697A652E - 4865696768740500000000009999E104401453697A652E506C6174666F726D44 - 656661756C74080756697369626C6508085461624F72646572021A000A545265 - 6374616E676C6500095374796C654E616D65060668747261636B05416C69676E - 0708436F6E74656E74730A46696C6C2E436F6C6F720709784646343034303430 - 064C6F636B6564090748697454657374080A53697A652E576964746805000000 - 000033338505400B53697A652E4865696768740500000000009999E104401453 - 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 - 07044E6F6E65000A5452656374616E676C6500095374796C654E616D65060A68 - 696E64696361746F7205416C69676E07044C6566740A46696C6C2E436F6C6F72 - 0709784646453232413241064C6F636B6564090748697454657374080A53697A - 652E57696474680500000000000000C804400B53697A652E4865696768740500 - 000000009999E104401453697A652E506C6174666F726D44656661756C74080B - 5374726F6B652E4B696E6407044E6F6E650000000A5452656374616E676C6500 - 095374796C654E616D65060676747261636B05416C69676E0708436F6E74656E - 74730A46696C6C2E436F6C6F720709784646343034303430064C6F636B656409 - 0748697454657374080A53697A652E576964746805000000000033338505400B - 53697A652E4865696768740500000000009999E104401453697A652E506C6174 - 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000A - 5452656374616E676C6500095374796C654E616D65060A76696E64696361746F - 7205416C69676E0706426F74746F6D0A46696C6C2E436F6C6F72070978464645 - 3232413241064C6F636B6564090748697454657374080A506F736974696F6E2E - 5905000000000099998D04400A53697A652E5769647468050000000000333385 - 05400B53697A652E4865696768740500000000000000A803401453697A652E50 + 0B42727573682E436F6C6F72070978464632433243324300000A545265637461 + 6E676C6500095374796C654E616D65060A6261636B67726F756E6405416C6967 + 6E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846463230323032 + 30064C6F636B6564090748697454657374080C50616464696E672E4C65667405 + 000000000000008000400B50616464696E672E546F7005000000000000008000 + 400D50616464696E672E526967687405000000000000008000400E5061646469 + 6E672E426F74746F6D05000000000000008000400A53697A652E576964746805 + 0000000000FFFFE905400B53697A652E48656967687405000000000000008306 + 401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E43 + 6F6C6F7207097846463135313531350007544C61796F757400095374796C654E + 616D650607636F6E74656E7405416C69676E0706436C69656E740C436C697043 + 68696C6472656E090A53697A652E5769647468050000000000FFFFC105400B53 + 697A652E4865696768740500000000000000DE05401453697A652E506C617466 + 6F726D44656661756C7408000A5452656374616E676C6500095374796C654E61 + 6D65060973656C656374696F6E0A46696C6C2E436F6C6F720709784646324138 + 3245320748697454657374080A53697A652E57696474680500000000000000C8 + 04400B53697A652E4865696768740500000000000000C804401453697A652E50 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E - 65000000005450463007544C61796F757400095374796C654E616D6506117072 - 6F677265737363656C6C7374796C6505416C69676E070643656E7465720A5369 - 7A652E57696474680500000000000000F805400B53697A652E48656967687405 - 00000000000000FC05401453697A652E506C6174666F726D44656661756C7408 - 0756697369626C6508085461624F72646572021B0007544C61796F7574000953 - 74796C654E616D65060668747261636B05416C69676E0708436F6E74656E7473 - 064C6F636B6564090C4D617267696E732E4C6566740500000000000000800040 - 0B4D617267696E732E546F7005000000000000008000400D4D617267696E732E + 6500000A5452656374616E676C6500095374796C654E616D650610666F637573 + 656473656C656374696F6E0A46696C6C2E436F6C6F7207097846463241383245 + 320748697454657374080A53697A652E57696474680500000000000000C80440 + 0B53697A652E4865696768740500000000000000C804401453697A652E506C61 + 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650B + 5374726F6B652E446173680703446F740000000A545363726F6C6C4261720009 + 5374796C654E616D65060A767363726F6C6C62617205416C69676E0705526967 + 68740B536D616C6C4368616E676505000000000000000000000B4F7269656E74 + 6174696F6E0708566572746963616C0A506F736974696F6E2E58050000000000 + FFFFC505400A506F736974696F6E2E5905000000000000008000400A53697A65 + 2E576964746805000000000000008003400B53697A652E486569676874050000 + 0000000000DE05401453697A652E506C6174666F726D44656661756C74080000 + 0A545363726F6C6C42617200095374796C654E616D65060A687363726F6C6C62 + 617205416C69676E0706426F74746F6D0B536D616C6C4368616E676505000000 + 000000000000000B4F7269656E746174696F6E070A486F72697A6F6E74616C0A + 506F736974696F6E2E5805000000000000008000400A506F736974696F6E2E59 + 0500000000000000E205400A53697A652E5769647468050000000000FFFFE105 + 400B53697A652E48656967687405000000000000008003401453697A652E506C + 6174666F726D44656661756C740800000F54536D616C6C5363726F6C6C426172 + 00095374796C654E616D65060F76736D616C6C7363726F6C6C62617205416C69 + 676E070552696768740B536D616C6C4368616E67650500000000000000000000 + 0B4F7269656E746174696F6E0708566572746963616C0C4D617267696E732E4C + 65667405000000000000008000400A506F736974696F6E2E5805000000000000 + 00C605400A506F736974696F6E2E5905000000000000008000400A53697A652E + 576964746805000000000000008002400B53697A652E48656967687405000000 + 000000008002401453697A652E506C6174666F726D44656661756C7408075669 + 7369626C650800000F54536D616C6C5363726F6C6C42617200095374796C654E + 616D65060F68736D616C6C7363726F6C6C62617205416C69676E0706426F7474 + 6F6D0B536D616C6C4368616E676505000000000000000000000B4F7269656E74 + 6174696F6E070A486F72697A6F6E74616C0B4D617267696E732E546F70050000 + 00000000008000400A506F736974696F6E2E5805000000000000008000400A50 + 6F736974696F6E2E590500000000000000E205400A53697A652E576964746805 + 000000000000009606400B53697A652E48656967687405000000000000008002 + 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 + 0000000B54476C6F774566666563740008536F66746E657373050000000000CD + CCCCFC3F09476C6F77436F6C6F720709784646463639453244074F7061636974 + 790500000000006666E6FE3F0754726967676572060E4973466F63757365643D + 7472756507456E61626C6564080000005450463007544C61796F757400095374 + 796C654E616D65060D6C697374626F78666F6F74657205416C69676E07064365 + 6E7465720A53697A652E576964746805000000000000009205400B53697A652E + 4865696768740500000000000000D003401453697A652E506C6174666F726D44 + 656661756C74080756697369626C6508085461624F7264657202180005545465 + 787400095374796C654E616D6506047465787405416C69676E0706436C69656E + 74064C6F636B6564090748697454657374080C4D617267696E732E4C65667405 + 00000000000000A001400B4D617267696E732E546F7005000000000000008000 + 400D4D617267696E732E52696768740500000000000000A001400E4D61726769 + 6E732E426F74746F6D05000000000000008000400A53697A652E576964746805 + 00000000000000FC04400B53697A652E4865696768740500000000000000B003 + 401453697A652E506C6174666F726D44656661756C7408165465787453657474 + 696E67732E466F6E74436F6C6F720708636C6157686974650000005450463007 + 544C61796F757400095374796C654E616D6506106C697374626F786974656D73 + 74796C6505416C69676E070643656E7465720A53697A652E5769647468050000 + 0000000000D605400B53697A652E4865696768740500000000000000C0034014 + 53697A652E506C6174666F726D44656661756C74080756697369626C65080854 + 61624F726465720219000654476C79706800095374796C654E616D65060A676C + 7970687374796C650C4D617267696E732E4C6566740500000000000000800040 + 0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E 526967687405000000000000008000400E4D617267696E732E426F74746F6D05 - 000000000000008000400A53697A652E57696474680500000000000000F00540 - 0B53697A652E4865696768740500000000000000F405401453697A652E506C61 - 74666F726D44656661756C7408000A5452656374616E676C6500095374796C65 - 4E616D65060A68696E64696361746F7205416C69676E07044C6566740A46696C - 6C2E436F6C6F720709784646324138324532064C6F636B656409074869745465 - 7374080C4D617267696E732E4C656674050000000000000080FF3F0B4D617267 - 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 - 050000000000000080FF3F0E4D617267696E732E426F74746F6D050000000000 - 000080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F7369 - 74696F6E2E59050000000000000080FF3F0A53697A652E576964746805000000 - 00000000C804400B53697A652E4865696768740500000000000000F005401453 - 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 - 07044E6F6E65000000005450463007544C61796F757400095374796C654E616D - 6506106D656E756261726974656D7374796C6505416C69676E070643656E7465 - 720C4D617267696E732E4C656674050000000000000080FF3F0B4D617267696E - 732E546F70050000000000000080FF3F0D4D617267696E732E52696768740500 - 00000000000080FF3F0E4D617267696E732E426F74746F6D0500000000000000 - 80FF3F0A53697A652E576964746805000000000000009205400B53697A652E48 - 65696768740500000000000000D003401453697A652E506C6174666F726D4465 - 6661756C74080756697369626C6508085461624F72646572021C000A54526563 - 74616E676C650005416C69676E0708436F6E74656E74730A46696C6C2E436F6C - 6F720709784646324138324532074869745465737408074F7061636974790500 - 0000000017B7D1F13F0A53697A652E576964746805000000000000009205400B - 53697A652E4865696768740500000000000000D003401453697A652E506C6174 - 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F - 54466C6F6174416E696D6174696F6E00084475726174696F6E05000000000018 - B7D1F23F0C50726F70657274794E616D6506074F7061636974790A5374617274 - 56616C756505000000000000000000000953746F7056616C7565050000000000 - 000080FF3F0754726967676572060F497353656C65637465643D747275650E54 - 726967676572496E76657273650610497353656C65637465643D66616C736500 - 00000A5452656374616E676C6500095374796C654E616D65060A6261636B6772 - 6F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207 - 09784646324138324532074869745465737408074F7061636974790500000000 - 0017B7D1F13F0A53697A652E576964746805000000000000009205400B53697A - 652E4865696768740500000000000000D003401453697A652E506C6174666F72 - 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C - 6F6174416E696D6174696F6E00084475726174696F6E05000000000018B7D1F2 - 3F0C50726F70657274794E616D6506074F7061636974790A537461727456616C - 756505000000000000000000000953746F7056616C7565050000000000000080 - FF3F0754726967676572061049734D6F7573654F7665723D747275650E547269 - 67676572496E7665727365061149734D6F7573654F7665723D66616C73650000 - 0007544C61796F757400095374796C654E616D650605676C79706805416C6967 - 6E07044C6566740A53697A652E57696474680500000000000000C803400B5369 - 7A652E4865696768740500000000000000D003401453697A652E506C6174666F - 726D44656661756C74080007544C61796F757400095374796C654E616D650609 - 636865636B6D61726B05416C69676E0708436F6E74656E7473074F7061636974 - 790500000000006F1283F53F0A53697A652E57696474680500000000000000C8 - 03400B53697A652E4865696768740500000000000000D003401453697A652E50 - 6C6174666F726D44656661756C7408000554506174680005416C69676E070643 - 656E74657209446174612E506174680A58000000070000000000000056D95243 - 91AE2C43010000009276664365021643010000009F3983432B7C3C4301000000 - 9E9AA64382D2B442010000006F1CB04375A4D1420100000026DF8243263F6743 - 0300000056D9524391AE2C430A46696C6C2E436F6C6F720708636C6157686974 - 650748697454657374080A53697A652E57696474680500000000000000B00240 - 0B53697A652E4865696768740500000000000000B002401453697A652E506C61 - 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500 - 000F54466C6F6174416E696D6174696F6E00084475726174696F6E0500000000 - 00CDCCCCFB3F0C50726F70657274794E616D6506074F7061636974790A537461 - 727456616C756505000000000000000000000953746F7056616C756505000000 - 0000000080FF3F0754726967676572060E4973436865636B65643D747275650E - 54726967676572496E7665727365060F4973436865636B65643D66616C736500 - 00000654476C79706800095374796C654E616D65060A676C7970687374796C65 - 0C4D617267696E732E4C656674050000000000000080FF3F0B4D617267696E73 - 2E546F7005000000000000008000400D4D617267696E732E5269676874050000 - 0000000000C000400E4D617267696E732E426F74746F6D050000000000000080 - FF3F05416C69676E070552696768740A53697A652E5769647468050000000000 - 00008003400B53697A652E48656967687405000000000000008003401453697A - 652E506C6174666F726D44656661756C740800000654496D6167650009537479 - 6C654E616D6506066269746D61700E4D756C74695265734269746D61700E0100 - 0005416C69676E0708436F6E74656E74730C4D617267696E732E4C6566740500 - 0000000000008000400B4D617267696E732E546F700500000000000000800040 - 0D4D617267696E732E526967687405000000000000008000400E4D617267696E - 732E426F74746F6D05000000000000008000400A53697A652E57696474680500 - 000000000000A803400B53697A652E4865696768740500000000000000B00340 - 1453697A652E506C6174666F726D44656661756C740800000005545465787400 - 095374796C654E616D6506047465787405416C69676E07044C656674064C6F63 - 6B6564090748697454657374080C4D617267696E732E4C656674050000000000 - 00008002400D4D617267696E732E526967687405000000000000008002400A50 - 6F736974696F6E2E5805000000000000008404400A53697A652E576964746805 - 00000000000000C804400B53697A652E4865696768740500000000000000D003 - 401453697A652E506C6174666F726D44656661756C7408165465787453657474 - 696E67732E466F6E74436F6C6F720708636C6157686974651654657874536574 - 74696E67732E486F727A416C69676E07074C656164696E670000055454657874 - 00095374796C654E616D65060873686F727463757405416C69676E0705526967 - 6874064C6F636B6564090748697454657374080C4D617267696E732E4C656674 - 0500000000000000C002400D4D617267696E732E526967687405000000000000 - 00C001400A506F736974696F6E2E580500000000000000C000C00A53697A652E - 57696474680500000000000000C804400B53697A652E48656967687405000000 - 00000000D003401453697A652E506C6174666F726D44656661756C7408165465 - 787453657474696E67732E466F6E74436F6C6F720708636C6157686974651654 - 65787453657474696E67732E486F727A416C69676E07074C656164696E670000 - 07544C61796F757400095374796C654E616D6506077375626D61726B05416C69 - 676E070552696768740A506F736974696F6E2E580500000000000000D404400A - 53697A652E57696474680500000000000000A003400B53697A652E4865696768 - 740500000000000000D003401453697A652E506C6174666F726D44656661756C - 7408000554506174680005416C69676E070643656E74657209446174612E5061 - 74680A3400000004000000000000000000000000000000010000000000000000 - 00803F010000000000803F0000003F0300000000000000000000000A46696C6C - 2E436F6C6F720708636C615768697465064C6F636B6564090748697454657374 - 080A53697A652E57696474680500000000000000E001400B53697A652E486569 - 67687405000000000000008002401453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E6500000000545046300A54 - 52656374616E676C6500095374796C654E616D65060C6D656E75626172737479 - 6C6505416C69676E070643656E7465720C436C69704368696C6472656E090946 - 696C6C2E4B696E6407044E6F6E650748697454657374080A53697A652E576964 - 74680500000000000000C804400B53697A652E48656967687405000000000000 - 00C804401453697A652E506C6174666F726D44656661756C74080B5374726F6B - 652E4B696E6407044E6F6E650756697369626C6508000A5452656374616E676C - 650005416C69676E0706436C69656E740A46696C6C2E436F6C6F720709784646 - 3230323032300748697454657374080C4D617267696E732E4C65667405000000 - 0000000080FFBF0B4D617267696E732E546F70050000000000000080FFBF0D4D - 617267696E732E5269676874050000000000000080FFBF0A53697A652E576964 - 74680500000000000000D004400B53697A652E48656967687405000000000000 - 00CC04401453697A652E506C6174666F726D44656661756C74080C5374726F6B - 652E436F6C6F720709784646313531353135000007544C61796F757400095374 - 796C654E616D650607636F6E74656E7405416C69676E0706436C69656E740C4D - 617267696E732E4C656674050000000000000080FF3F0B4D617267696E732E54 - 6F70050000000000000080FF3F0D4D617267696E732E52696768740500000000 - 00000080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F - 0A53697A652E57696474680500000000000000C004400B53697A652E48656967 - 68740500000000000000C004401453697A652E506C6174666F726D4465666175 - 6C74080000005450463007544C61796F757400095374796C654E616D65060D6D - 656E756974656D7374796C6505416C69676E070643656E7465720C4D61726769 - 6E732E4C656674050000000000000080FF3F0B4D617267696E732E546F700500 - 00000000000080FF3F0D4D617267696E732E5269676874050000000000000080 - FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A - 652E576964746805000000000000009205400B53697A652E4865696768740500 - 000000000000D003401453697A652E506C6174666F726D44656661756C740807 - 56697369626C6508085461624F72646572021D000A5452656374616E676C6500 - 05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646 - 324138324532074869745465737408074F70616369747905000000000017B7D1 - F13F0A53697A652E576964746805000000000000009205400B53697A652E4865 - 696768740500000000000000D003401453697A652E506C6174666F726D446566 - 61756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F617441 - 6E696D6174696F6E00084475726174696F6E05000000000018B7D1F23F0C5072 - 6F70657274794E616D6506074F7061636974790A537461727456616C75650500 - 0000000000000000000953746F7056616C7565050000000000000080FF3F0754 - 726967676572060F497353656C65637465643D747275650E5472696767657249 - 6E76657273650610497353656C65637465643D66616C73650000000A54526563 - 74616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C - 69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646324138 - 324532074869745465737408074F70616369747905000000000017B7D1F13F0A - 53697A652E576964746805000000000000009205400B53697A652E4865696768 - 740500000000000000D003401453697A652E506C6174666F726D44656661756C - 74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D - 6174696F6E00084475726174696F6E05000000000018B7D1F23F0C50726F7065 - 7274794E616D6506074F7061636974790A537461727456616C75650500000000 - 0000000000000953746F7056616C7565050000000000000080FF3F0754726967 - 676572061049734D6F7573654F7665723D747275650E54726967676572496E76 - 65727365061149734D6F7573654F7665723D66616C736500000007544C61796F - 757400095374796C654E616D650605676C79706805416C69676E07044C656674 + 0000000000000080FF3F05416C69676E07044C6566740A53697A652E57696474 + 6805000000000000008003400B53697A652E4865696768740500000000000000 + 8003401453697A652E506C6174666F726D44656661756C740800000554546578 + 7400095374796C654E616D6506047465787405416C69676E0706436C69656E74 + 0748697454657374080C4D617267696E732E4C6566740500000000000000C000 + 400B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E73 + 2E52696768740500000000000000C000400E4D617267696E732E426F74746F6D + 050000000000000080FF3F0A53697A652E57696474680500000000000000CA05 + 400B53697A652E4865696768740500000000000000B003401453697A652E506C + 6174666F726D44656661756C7408165465787453657474696E67732E466F6E74 + 436F6C6F720708636C615768697465155465787453657474696E67732E576F72 + 645772617008165465787453657474696E67732E486F727A416C69676E07074C + 656164696E6700000954436865636B426F7800095374796C654E616D65060563 + 6865636B05416C69676E07084D6F73744C6566740843616E466F637573081244 + 697361626C65466F637573456666656374090A53697A652E5769647468050000 + 0000000000A003400B53697A652E4865696768740500000000000000C0034014 + 53697A652E506C6174666F726D44656661756C74080756697369626C65080000 + 005450463007544C61796F757400095374796C654E616D6506126C697374626F + 78706C61696E68656164657205416C69676E070643656E7465720A53697A652E + 576964746805000000000000009205400B53697A652E48656967687405000000 + 00000000D003401453697A652E506C6174666F726D44656661756C7408075669 + 7369626C6508085461624F72646572021A000A5452656374616E676C65000953 + 74796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74 + 656E74730A46696C6C2E436F6C6F720709784646324432443244064C6F636B65 + 64090748697454657374080A53697A652E576964746805000000000000009205 + 400B53697A652E4865696768740500000000000000D003401453697A652E506C + 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 + 313531353135000005545465787400095374796C654E616D6506047465787405 + 416C69676E0706436C69656E74064C6F636B6564090748697454657374080C4D + 617267696E732E4C6566740500000000000000A001400B4D617267696E732E54 + 6F7005000000000000008000400D4D617267696E732E52696768740500000000 + 000000A001400E4D617267696E732E426F74746F6D0500000000000000800040 + 0A53697A652E57696474680500000000000000FC04400B53697A652E48656967 + 68740500000000000000B003401453697A652E506C6174666F726D4465666175 + 6C7408165465787453657474696E67732E466F6E74436F6C6F720708636C6157 + 686974650000005450463007544C61796F757400095374796C654E616D650609 + 677269647374796C6505416C69676E070643656E7465720A53697A652E576964 + 7468050000000000FFFFE905400B53697A652E48656967687405000000000000 + 008306401453697A652E506C6174666F726D44656661756C7408075669736962 + 6C6508085461624F72646572021B000C5442727573684F626A65637400095374 + 796C654E616D650618416C7465726E6174696E67526F774261636B67726F756E + 640B42727573682E436F6C6F72070978333237383738373800000C5442727573 + 684F626A65637400095374796C654E616D6506086C696E6566696C6C0B427275 + 73682E436F6C6F72070978464631353135313500000A5452656374616E676C65 + 00095374796C654E616D65060A6261636B67726F756E6405416C69676E070843 + 6F6E74656E74730A46696C6C2E436F6C6F720709784646323032303230064C6F + 636B6564090748697454657374080C50616464696E672E4C6566740500000000 + 0000008000400B50616464696E672E546F7005000000000000008000400D5061 + 6464696E672E526967687405000000000000008000400E50616464696E672E42 + 6F74746F6D05000000000000008000400A53697A652E57696474680500000000 + 00FFFFE905400B53697A652E4865696768740500000000000000830640145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 070978464631353135313500075448656164657200095374796C654E616D6506 + 066865616465720553696465730B03546F70044C65667406426F74746F6D0552 + 696768740005416C69676E0703546F700748697454657374080A506F73697469 + 6F6E2E5805000000000000008000400A506F736974696F6E2E59050000000000 + 00008000400A53697A652E5769647468050000000000FFFFE105400B53697A65 + 2E4865696768740500000000000000A803401453697A652E506C6174666F726D + 44656661756C7408000007544C61796F757400095374796C654E616D65060763 + 6F6E74656E7405416C69676E0706436C69656E740C436C69704368696C647265 + 6E090A53697A652E5769647468050000000000FFFFC105400B53697A652E4865 + 696768740500000000000000B405401453697A652E506C6174666F726D446566 + 61756C7408000A5452656374616E676C6500095374796C654E616D6506097365 + 6C656374696F6E0A46696C6C2E436F6C6F720709784646324138324532074869 + 745465737408074F706163697479050000000000000080FD3F0A53697A652E57 + 696474680500000000000000C804400B53697A652E4865696768740500000000 + 000000C804401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E6500000A5452656374616E676C650009537479 + 6C654E616D650605666F6375730A46696C6C2E436F6C6F720709784146324138 + 3245320748697454657374080C4D617267696E732E4C65667405000000000000 + 0080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267 + 696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F74 + 746F6D050000000000000080FF3F0A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000000000C804401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E6507595261646975730500000000000000C000400000000A545363726F6C + 6C42617200095374796C654E616D65060A767363726F6C6C62617205416C6967 + 6E070552696768740B536D616C6C4368616E676505000000000000000000000B + 4F7269656E746174696F6E0708566572746963616C0A506F736974696F6E2E58 + 050000000000FFFFC505400A506F736974696F6E2E590500000000000000B803 + 400A53697A652E576964746805000000000000008003400B53697A652E486569 + 6768740500000000000000B405401453697A652E506C6174666F726D44656661 + 756C740800000A545363726F6C6C42617200095374796C654E616D65060A6873 + 63726F6C6C62617205416C69676E0706426F74746F6D0B536D616C6C4368616E + 676505000000000000000000000B4F7269656E746174696F6E070A486F72697A + 6F6E74616C0A506F736974696F6E2E5805000000000000008000400A506F7369 + 74696F6E2E590500000000000000E205400A53697A652E576964746805000000 + 0000FFFFE105400B53697A652E48656967687405000000000000008003401453 + 697A652E506C6174666F726D44656661756C740800000F54536D616C6C536372 + 6F6C6C42617200095374796C654E616D65060F76736D616C6C7363726F6C6C62 + 617205416C69676E070552696768740B536D616C6C4368616E67650500000000 + 0000000000000B4F7269656E746174696F6E0708566572746963616C0C4D6172 + 67696E732E4C65667405000000000000008000400A506F736974696F6E2E5805 + 00000000000000C605400A506F736974696F6E2E590500000000000000800040 + 0A53697A652E576964746805000000000000008002400B53697A652E48656967 + 687405000000000000008002401453697A652E506C6174666F726D4465666175 + 6C74080756697369626C650800000F54536D616C6C5363726F6C6C4261720009 + 5374796C654E616D65060F68736D616C6C7363726F6C6C62617205416C69676E + 0706426F74746F6D0B536D616C6C4368616E676505000000000000000000000B + 4F7269656E746174696F6E070A486F72697A6F6E74616C0B4D617267696E732E + 546F7005000000000000008000400A506F736974696F6E2E5805000000000000 + 008000400A506F736974696F6E2E590500000000000000E205400A53697A652E + 576964746805000000000000009606400B53697A652E48656967687405000000 + 000000008002401453697A652E506C6174666F726D44656661756C7408075669 + 7369626C6508000000005450463007544C61796F757400095374796C654E616D + 65060F6865616465726974656D7374796C6505416C69676E070643656E746572 + 0A53697A652E576964746805000000000000009205400B53697A652E48656967 + 68740500000000000000D003401453697A652E506C6174666F726D4465666175 + 6C74080756697369626C6508085461624F72646572021C000A5452656374616E + 676C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E + 0708436F6E74656E74730A46696C6C2E436F6C6F720709784646344334433443 + 064C6F636B6564090748697454657374080A53697A652E576964746805000000 + 000000009205400B53697A652E4865696768740500000000000000D003401453 + 697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F + 720709784646313531353135000F54436F6C6F72416E696D6174696F6E000953 + 74796C654E616D650615686561646572436F6C6F72416E696D6174696F6E3108 + 4475726174696F6E05000000000000000000000C50726F70657274794E616D65 + 060A46696C6C2E436F6C6F720A537461727456616C7565070978464634433443 + 34430953746F7056616C75650709784646324138324532075472696767657206 + 0E4973507265737365643D747275650E54726967676572496E7665727365060F + 4973507265737365643D66616C736500000F54436F6C6F72416E696D6174696F + 6E00095374796C654E616D6506166865616465725374726F6B65416E696D6174 + 696F6E31084475726174696F6E05000000000000000000000C50726F70657274 + 794E616D65060C5374726F6B652E436F6C6F720A537461727456616C75650709 + 7846463135313531350953746F7056616C756507097846463241383245320754 + 726967676572060E4973507265737365643D747275650E54726967676572496E + 7665727365060F4973507265737365643D66616C736500000005545465787400 + 095374796C654E616D6506047465787405416C69676E0706436C69656E74064C + 6F636B6564090748697454657374080C4D617267696E732E4C65667405000000 + 00000000A001400B4D617267696E732E546F7005000000000000008000400D4D + 617267696E732E52696768740500000000000000A001400E4D617267696E732E + 426F74746F6D05000000000000008000400A53697A652E576964746805000000 + 00000000FC04400B53697A652E4865696768740500000000000000B003401453 + 697A652E506C6174666F726D44656661756C7408165465787453657474696E67 + 732E466F6E74436F6C6F720708636C6157686974650000005450463007544C61 + 796F757400095374796C654E616D65061970726F67726573736261726D696E69 + 6572726F727374796C6505416C69676E070643656E7465720A53697A652E5769 + 64746805000000000033338505400B53697A652E486569676874050000000000 + 9999E104401453697A652E506C6174666F726D44656661756C74080756697369 + 626C6508085461624F72646572021D000A5452656374616E676C650009537479 + 6C654E616D65060668747261636B05416C69676E0708436F6E74656E74730A46 + 696C6C2E436F6C6F720709784646343034303430064C6F636B65640907486974 + 54657374080A53697A652E576964746805000000000033338505400B53697A65 + 2E4865696768740500000000009999E104401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000A54526563 + 74616E676C6500095374796C654E616D65060A68696E64696361746F7205416C + 69676E07044C6566740A46696C6C2E436F6C6F72070978464645323241324106 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 000000C804400B53697A652E4865696768740500000000009999E10440145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E650000000A5452656374616E676C6500095374796C654E616D650606 + 76747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F + 720709784646343034303430064C6F636B6564090748697454657374080A5369 + 7A652E576964746805000000000033338505400B53697A652E48656967687405 + 00000000009999E104401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E65000A5452656374616E676C650009 + 5374796C654E616D65060A76696E64696361746F7205416C69676E0706426F74 + 746F6D0A46696C6C2E436F6C6F720709784646453232413241064C6F636B6564 + 090748697454657374080A506F736974696F6E2E5905000000000099998D0440 + 0A53697A652E576964746805000000000033338505400B53697A652E48656967 + 68740500000000000000A803401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C + 61796F757400095374796C654E616D65061170726F677265737363656C6C7374 + 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 + 00000000F805400B53697A652E4865696768740500000000000000FC05401453 + 697A652E506C6174666F726D44656661756C74080756697369626C6508085461 + 624F72646572021E0007544C61796F757400095374796C654E616D6506066874 + 7261636B05416C69676E0708436F6E74656E7473064C6F636B6564090C4D6172 + 67696E732E4C65667405000000000000008000400B4D617267696E732E546F70 + 05000000000000008000400D4D617267696E732E526967687405000000000000 + 008000400E4D617267696E732E426F74746F6D05000000000000008000400A53 + 697A652E57696474680500000000000000F005400B53697A652E486569676874 + 0500000000000000F405401453697A652E506C6174666F726D44656661756C74 + 08000A5452656374616E676C6500095374796C654E616D65060A68696E646963 + 61746F7205416C69676E07044C6566740A46696C6C2E436F6C6F720709784646 + 324138324532064C6F636B6564090748697454657374080C4D617267696E732E + 4C656674050000000000000080FF3F0B4D617267696E732E546F700500000000 + 00000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E + 4D617267696E732E426F74746F6D050000000000000080FF3F0A506F73697469 + 6F6E2E58050000000000000080FF3F0A506F736974696F6E2E59050000000000 + 000080FF3F0A53697A652E57696474680500000000000000C804400B53697A65 + 2E4865696768740500000000000000F005401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000005450 + 463007544C61796F757400095374796C654E616D6506106D656E756261726974 + 656D7374796C6505416C69676E070643656E7465720C4D617267696E732E4C65 + 6674050000000000000080FF3F0B4D617267696E732E546F7005000000000000 + 0080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D61 + 7267696E732E426F74746F6D050000000000000080FF3F0A53697A652E576964 + 746805000000000000009205400B53697A652E48656967687405000000000000 + 00D003401453697A652E506C6174666F726D44656661756C7408075669736962 + 6C6508085461624F72646572021F000A5452656374616E676C650005416C6967 + 6E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846463241383245 + 32074869745465737408074F70616369747905000000000017B7D1F13F0A5369 + 7A652E576964746805000000000000009205400B53697A652E48656967687405 + 00000000000000D003401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174 + 696F6E00084475726174696F6E05000000000018B7D1F23F0C50726F70657274 + 794E616D6506074F7061636974790A537461727456616C756505000000000000 + 000000000953746F7056616C7565050000000000000080FF3F07547269676765 + 72060F497353656C65637465643D747275650E54726967676572496E76657273 + 650610497353656C65637465643D66616C73650000000A5452656374616E676C + 6500095374796C654E616D65060A6261636B67726F756E6405416C69676E0708 + 436F6E74656E74730A46696C6C2E436F6C6F7207097846463241383245320748 + 69745465737408074F70616369747905000000000017B7D1F13F0A53697A652E + 576964746805000000000000009205400B53697A652E48656967687405000000 + 00000000D003401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E + 00084475726174696F6E05000000000018B7D1F23F0C50726F70657274794E61 + 6D6506074F7061636974790A537461727456616C756505000000000000000000 + 000953746F7056616C7565050000000000000080FF3F07547269676765720610 + 49734D6F7573654F7665723D747275650E54726967676572496E766572736506 + 1149734D6F7573654F7665723D66616C736500000007544C61796F7574000953 + 74796C654E616D650605676C79706805416C69676E07044C6566740A53697A65 + 2E57696474680500000000000000C803400B53697A652E486569676874050000 + 0000000000D003401453697A652E506C6174666F726D44656661756C74080007 + 544C61796F757400095374796C654E616D650609636865636B6D61726B05416C + 69676E0708436F6E74656E7473074F7061636974790500000000006F1283F53F 0A53697A652E57696474680500000000000000C803400B53697A652E48656967 68740500000000000000D003401453697A652E506C6174666F726D4465666175 - 6C74080007544C61796F757400095374796C654E616D650609636865636B6D61 - 726B05416C69676E0708436F6E74656E7473074F706163697479050000000000 - 6F1283F53F0A53697A652E57696474680500000000000000C803400B53697A65 - 2E4865696768740500000000000000D003401453697A652E506C6174666F726D - 44656661756C7408000554506174680005416C69676E070643656E7465720944 - 6174612E506174680A58000000070000000000000056D9524391AE2C43010000 - 009276664365021643010000009F3983432B7C3C43010000009E9AA64382D2B4 - 42010000006F1CB04375A4D1420100000026DF8243263F67430300000056D952 - 4391AE2C430A46696C6C2E436F6C6F720708636C615768697465074869745465 - 7374080A53697A652E57696474680500000000000000B002400B53697A652E48 - 65696768740500000000000000B002401453697A652E506C6174666F726D4465 - 6661756C74080B5374726F6B652E4B696E6407044E6F6E6500000F54466C6F61 - 74416E696D6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C - 50726F70657274794E616D6506074F7061636974790A537461727456616C7565 - 05000000000000000000000953746F7056616C7565050000000000000080FF3F - 0754726967676572060E4973436865636B65643D747275650E54726967676572 - 496E7665727365060F4973436865636B65643D66616C73650000000654476C79 - 706800095374796C654E616D65060A676C7970687374796C650C4D617267696E - 732E4C656674050000000000000080FF3F0B4D617267696E732E546F70050000 - 00000000008000400D4D617267696E732E52696768740500000000000000C000 - 400E4D617267696E732E426F74746F6D050000000000000080FF3F05416C6967 - 6E07044C6566740A53697A652E576964746805000000000000008003400B5369 - 7A652E48656967687405000000000000008003401453697A652E506C6174666F - 726D44656661756C740800000654496D61676500095374796C654E616D650606 - 6269746D61700E4D756C74695265734269746D61700E01000005416C69676E07 - 044C6566740C4D617267696E732E4C65667405000000000000008000400B4D61 + 6C7408000554506174680005416C69676E070643656E74657209446174612E50 + 6174680A58000000070000000000000056D9524391AE2C430100000092766643 + 65021643010000009F3983432B7C3C43010000009E9AA64382D2B44201000000 + 6F1CB04375A4D1420100000026DF8243263F67430300000056D9524391AE2C43 + 0A46696C6C2E436F6C6F720708636C6157686974650748697454657374080A53 + 697A652E57696474680500000000000000B002400B53697A652E486569676874 + 0500000000000000B002401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E6500000F54466C6F6174416E696D + 6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F7065 + 7274794E616D6506074F7061636974790A537461727456616C75650500000000 + 0000000000000953746F7056616C7565050000000000000080FF3F0754726967 + 676572060E4973436865636B65643D747275650E54726967676572496E766572 + 7365060F4973436865636B65643D66616C73650000000654476C797068000953 + 74796C654E616D65060A676C7970687374796C650C4D617267696E732E4C6566 + 74050000000000000080FF3F0B4D617267696E732E546F700500000000000000 + 8000400D4D617267696E732E52696768740500000000000000C000400E4D6172 + 67696E732E426F74746F6D050000000000000080FF3F05416C69676E07055269 + 6768740A53697A652E576964746805000000000000008003400B53697A652E48 + 656967687405000000000000008003401453697A652E506C6174666F726D4465 + 6661756C740800000654496D61676500095374796C654E616D6506066269746D + 61700E4D756C74695265734269746D61700E01000005416C69676E0708436F6E + 74656E74730C4D617267696E732E4C65667405000000000000008000400B4D61 7267696E732E546F7005000000000000008000400D4D617267696E732E526967 687405000000000000008000400E4D617267696E732E426F74746F6D05000000 - 000000008000400A506F736974696F6E2E5805000000000000008000400A506F - 736974696F6E2E5905000000000000008000400A53697A652E57696474680500 - 000000000000A803400B53697A652E4865696768740500000000000000B00340 - 1453697A652E506C6174666F726D44656661756C740800000005545465787400 - 095374796C654E616D6506047465787405416C69676E07044C656674064C6F63 - 6B6564090748697454657374080C4D617267696E732E4C656674050000000000 - 00008002400D4D617267696E732E526967687405000000000000008002400A50 - 6F736974696F6E2E5805000000000000008404400A53697A652E576964746805 - 00000000000000C804400B53697A652E4865696768740500000000000000D003 - 401453697A652E506C6174666F726D44656661756C7408165465787453657474 - 696E67732E466F6E74436F6C6F720708636C6157686974651654657874536574 - 74696E67732E486F727A416C69676E07074C656164696E670000055454657874 - 00095374796C654E616D65060873686F727463757405416C69676E0705526967 - 6874064C6F636B6564090748697454657374080C4D617267696E732E4C656674 - 0500000000000000C002400D4D617267696E732E526967687405000000000000 - 00C001400A506F736974696F6E2E580500000000000000C000C00A53697A652E - 57696474680500000000000000C804400B53697A652E48656967687405000000 - 00000000D003401453697A652E506C6174666F726D44656661756C7408165465 - 787453657474696E67732E466F6E74436F6C6F720708636C6157686974651654 - 65787453657474696E67732E486F727A416C69676E07074C656164696E670000 - 07544C61796F757400095374796C654E616D6506077375626D61726B05416C69 - 676E070552696768740A506F736974696F6E2E580500000000000000D404400A - 53697A652E57696474680500000000000000A003400B53697A652E4865696768 - 740500000000000000D003401453697A652E506C6174666F726D44656661756C - 7408000554506174680005416C69676E070643656E74657209446174612E5061 - 74680A3400000004000000000000000000000000000000010000000000000000 - 00803F010000000000803F0000003F0300000000000000000000000A46696C6C - 2E436F6C6F720708636C615768697465064C6F636B6564090748697454657374 - 080A53697A652E57696474680500000000000000E001400B53697A652E486569 - 67687405000000000000008002401453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E6500000000545046300754 - 4C61796F757400095374796C654E616D6506126D656E75736570617261746F72 - 7374796C6505416C69676E070643656E7465720C4D617267696E732E4C656674 - 050000000000000080FF3F0B4D617267696E732E546F70050000000000000080 - FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D617267 - 696E732E426F74746F6D050000000000000080FF3F0A53697A652E5769647468 - 0500000000000000C804400B53697A652E4865696768740500000000000000C8 - 04401453697A652E506C6174666F726D44656661756C74080756697369626C65 - 08085461624F72646572021E0005544C696E650005416C69676E0703546F7008 - 4C696E65547970650703546F700C4D617267696E732E4C656674050000000000 - 0000C000400B4D617267696E732E546F7005000000000000008000400D4D6172 - 67696E732E52696768740500000000000000C000400A506F736974696F6E2E58 - 0500000000000000C000400A506F736974696F6E2E5905000000000000008000 - 400A53697A652E57696474680500000000000000B004400B53697A652E486569 - 676874050000000000000080FF3F1453697A652E506C6174666F726D44656661 - 756C74080C5374726F6B652E436F6C6F72070978464631353135313500000054 - 5046300A5452656374616E676C6500095374796C654E616D65060D6D656E7576 - 6965777374796C6505416C69676E070643656E7465720A46696C6C2E436F6C6F - 7207097846463230323032300A53697A652E57696474680500000000000000C8 - 04400B53697A652E4865696768740500000000000000C804401453697A652E50 - 6C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846 - 463135313531350756697369626C6508000A5452656374616E676C650005416C - 69676E0706436C69656E740A46696C6C2E436F6C6F7207097846463230323032 - 300748697454657374080A53697A652E57696474680500000000000000C80440 - 0B53697A652E4865696768740500000000000000C804401453697A652E506C61 - 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 - 3531353135000D54536861646F77456666656374000844697374616E63650500 - 000000000000C0004009446972656374696F6E0500000000000000B405400853 - 6F66746E657373050000000000000080FE3F074F706163697479050000000000 - 000080FE3F0B536861646F77436F6C6F720708636C61426C61636B0000000754 - 4C61796F757400095374796C654E616D650607636F6E74656E7405416C69676E - 0706436C69656E740C4D617267696E732E4C656674050000000000000080FF3F - 0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E - 5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D05 - 0000000000000080FF3F0A53697A652E57696474680500000000000000C00440 - 0B53697A652E4865696768740500000000000000C004401453697A652E506C61 - 74666F726D44656661756C74080000005450463007544C61796F757400095374 - 796C654E616D65060E696D61676563656C6C7374796C6505416C69676E070643 - 656E7465720756697369626C6508085461624F72646572021F000654496D6167 - 6500095374796C654E616D650605696D6167650E4D756C74695265734269746D - 61700E01000005416C69676E0706436C69656E74064C6F636B65640907486974 - 54657374080C4D617267696E732E4C656674050000000000000080FF3F0B4D61 - 7267696E732E546F70050000000000000080FF3F0D4D617267696E732E526967 - 6874050000000000000080FF3F0E4D617267696E732E426F74746F6D05000000 - 0000000080FF3F0A53697A652E57696474680500000000000000C004400B5369 - 7A652E4865696768740500000000000000C004401453697A652E506C6174666F - 726D44656661756C74080000005450463007544C61796F757400095374796C65 - 4E616D65060E706F70757063656C6C7374796C6505416C69676E070643656E74 - 65720A53697A652E57696474680500000000000000BB06400B53697A652E4865 - 696768740500000000000000AE04401453697A652E506C6174666F726D446566 - 61756C74080756697369626C6508085461624F7264657202200007544C61796F - 75740005416C69676E070552696768740A506F736974696F6E2E580500000000 - 000000AC06400A53697A652E57696474680500000000000000F002400B53697A - 652E4865696768740500000000000000AE04401453697A652E506C6174666F72 - 6D44656661756C7408000554506174680005416C69676E070643656E74657209 - 446174612E506174680A400000000500000000000000000000000000803F0100 - 00000000803F0000803F010000000000003F0000000001000000000000000000 - 803F0300000000000000000000000A46696C6C2E436F6C6F720708636C615768 - 6974650748697454657374080B4D617267696E732E546F700500000000000000 - E001C00A53697A652E576964746805000000000000008002400B53697A652E48 - 656967687405000000000000008001401453697A652E506C6174666F726D4465 - 6661756C74080B5374726F6B652E4B696E6407044E6F6E650000055450617468 - 0005416C69676E070643656E74657209446174612E506174680A340000000400 - 0000000000000000000000000000010000000000803F00000000010000000000 - 003F0000803F0300000000000000000000000A46696C6C2E436F6C6F72070863 - 6C6157686974650748697454657374080B4D617267696E732E546F7005000000 - 00000000C001400A53697A652E576964746805000000000000008002400B5369 - 7A652E48656967687405000000000000008001401453697A652E506C6174666F - 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000005 - 545465787400095374796C654E616D6506047465787405416C69676E0706436C - 69656E74064C6F636B6564090748697454657374080C4D617267696E732E4C65 - 66740500000000000000A001400B4D617267696E732E546F7005000000000000 - 008000400D4D617267696E732E52696768740500000000000000A001400E4D61 - 7267696E732E426F74746F6D05000000000000008000400A53697A652E576964 - 74680500000000000000A206400B53697A652E48656967687405000000000000 - 009E04401453697A652E506C6174666F726D44656661756C7408165465787453 - 657474696E67732E466F6E74436F6C6F720708636C6157686974650000005450 - 463007544C61796F757400095374796C654E616D65060D7465787463656C6C73 - 74796C6505416C69676E070643656E7465720756697369626C6508085461624F - 7264657202210007544C61796F757400095374796C654E616D650607636F6E74 - 656E7405416C69676E0708436F6E74656E7473064C6F636B6564090C4D617267 - 696E732E4C65667405000000000000008001400B4D617267696E732E546F7005 - 000000000000008001400D4D617267696E732E52696768740500000000000000 - 8001400E4D617267696E732E426F74746F6D05000000000000008001400A5369 - 7A652E57696474680500000000000000A804400B53697A652E48656967687405 - 00000000000000A804401453697A652E506C6174666F726D44656661756C7408 - 00000C5442727573684F626A65637400095374796C654E616D65060A666F7265 - 67726F756E6400000C5442727573684F626A65637400095374796C654E616D65 - 060973656C656374696F6E0B42727573682E436F6C6F72070978393632413832 - 453200000B54466F6E744F626A65637400095374796C654E616D650604666F6E - 740000005450463007544C61796F757400095374796C654E616D6506096D656D - 6F7374796C6505416C69676E070643656E7465720A53697A652E576964746805 - 0000000000CCCC8806400B53697A652E4865696768740500000000006666F405 - 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 - 085461624F726465720222000C5442727573684F626A65637400095374796C65 - 4E616D65060A666F726567726F756E6400000C5442727573684F626A65637400 - 095374796C654E616D65060973656C656374696F6E0B42727573682E436F6C6F - 72070978374634343735394400000B54466F6E744F626A65637400095374796C - 654E616D650604666F6E7400000A5452656374616E676C6500095374796C654E - 616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A - 46696C6C2E436F6C6F7207097846463230323032300748697454657374080A53 - 697A652E5769647468050000000000CCCC8806400B53697A652E486569676874 - 0500000000006666F405401453697A652E506C6174666F726D44656661756C74 - 080C5374726F6B652E436F6C6F7207097846463135313531350007544C61796F - 757400095374796C654E616D650607636F6E74656E7405416C69676E0706436C - 69656E740C4D617267696E732E4C65667405000000000000008000400B4D6172 - 67696E732E546F7005000000000000008000400D4D617267696E732E52696768 - 7405000000000000008000400E4D617267696E732E426F74746F6D0500000000 - 0000008000400A53697A652E57696474680500000000009899E905400B53697A - 652E4865696768740500000000006666CC05401453697A652E506C6174666F72 - 6D44656661756C740800000A545363726F6C6C42617200095374796C654E616D - 65060A687363726F6C6C62617205416C69676E0706426F74746F6D0643757273 - 6F72070763724172726F770B536D616C6C4368616E6765050000000000000000 - 00000B4F7269656E746174696F6E070A486F72697A6F6E74616C0A506F736974 - 696F6E2E590500000000006666D405400A53697A652E57696474680500000000 - 00CCCC8806400B53697A652E4865696768740500000000000000800340145369 - 7A652E506C6174666F726D44656661756C740800000A545363726F6C6C426172 - 00095374796C654E616D65060A767363726F6C6C62617205416C69676E070552 - 6967687406437572736F72070763724172726F770B536D616C6C4368616E6765 - 05000000000000000000000B4F7269656E746174696F6E070856657274696361 - 6C0A506F736974696F6E2E580500000000009899F105400A53697A652E576964 - 746805000000000000008003400B53697A652E48656967687405000000000066 - 66D405401453697A652E506C6174666F726D44656661756C7408000007544C61 - 796F75740005416C69676E0706436C69656E740A53697A652E57696474680500 - 000000009899F105400B53697A652E4865696768740500000000006666D40540 - 1453697A652E506C6174666F726D44656661756C7408000F54536D616C6C5363 - 726F6C6C42617200095374796C654E616D65060F76736D616C6C7363726F6C6C - 62617205416C69676E0705526967687406437572736F72070763724172726F77 - 0B536D616C6C4368616E676505000000000000000000000B4F7269656E746174 - 696F6E0708566572746963616C0C4D617267696E732E4C656674050000000000 - 00008000400A53697A652E576964746805000000000000008002400B53697A65 - 2E48656967687405000000000000008002401453697A652E506C6174666F726D - 44656661756C74080756697369626C650800000F54536D616C6C5363726F6C6C - 42617200095374796C654E616D65060F68736D616C6C7363726F6C6C62617205 - 416C69676E0706426F74746F6D06437572736F72070763724172726F770B536D - 616C6C4368616E676505000000000000000000000B4F7269656E746174696F6E - 070A486F72697A6F6E74616C0B4D617267696E732E546F700500000000000000 - 8000400A53697A652E576964746805000000000000009606400B53697A652E48 - 656967687405000000000000008002401453697A652E506C6174666F726D4465 - 6661756C74080756697369626C65080000000F54436F6C6F72416E696D617469 - 6F6E00095374796C654E616D6506146D656D6F5374726F6B65416E696D617469 - 6F6E31084475726174696F6E050000000000000000000007496E766572736509 - 0C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A53746172 - 7456616C756507097846463135313531350953746F7056616C75650709784646 - 3430343034300754726967676572062049734D6F7573654F7665723D74727565 - 3B4973466F63757365643D66616C73650E54726967676572496E766572736506 - 2149734D6F7573654F7665723D66616C73653B4973466F63757365643D66616C - 736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 - 146D656D6F5374726F6B65416E696D6174696F6E32084475726174696F6E0500 - 0000000000000000000C50726F70657274794E616D65060C5374726F6B652E43 - 6F6C6F720A537461727456616C756507097846463430343034300953746F7056 - 616C756507097846463241383245320754726967676572060E4973466F637573 - 65643D747275650E54726967676572496E7665727365060F4973466F63757365 - 643D66616C7365000000005450463007544C61796F757400095374796C654E61 - 6D65060E6C696E6B6C6162656C7374796C6505416C69676E070643656E746572 - 0A53697A652E5769647468050000000000CCCC8006400B53697A652E48656967 - 68740500000000009A998104401453697A652E506C6174666F726D4465666175 - 6C74080756697369626C6508085461624F726465720223000554546578740009 - 5374796C654E616D6506047465787405416C69676E0708436F6E74656E747307 - 48697454657374080A53697A652E5769647468050000000000CCCC8006400B53 - 697A652E4865696768740500000000009A998104401453697A652E506C617466 - 6F726D44656661756C74081A5465787453657474696E67732E466F6E742E5374 - 796C654578740A0D000000040400000000000000040000001654657874536574 - 74696E67732E466F6E74436F6C6F72070D636C61446F64676572626C7565000F - 54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F - 72416E696D6174696F6E315374796C65084475726174696F6E05000000000000 - 0000000007496E7665727365090C50726F70657274794E616D65061654657874 - 53657474696E67732E466F6E74436F6C6F720A537461727456616C7565070D63 - 6C61446F64676572626C75650953746F7056616C7565070E636C614465657073 - 6B79626C75650754726967676572063049734D6F7573654F7665723D74727565 - 3B4973507265737365643D66616C73653B4973466F63757365643D66616C7365 - 0E54726967676572496E7665727365063149734D6F7573654F7665723D66616C - 73653B4973507265737365643D66616C73653B4973466F63757365643D66616C - 736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 - 14436F6C6F72416E696D6174696F6E325374796C65084475726174696F6E0500 - 0000000000000000000C50726F70657274794E616D6506165465787453657474 - 696E67732E466F6E74436F6C6F720A537461727456616C7565070E636C614465 - 6570736B79626C75650953746F7056616C756507097846463137353739430754 - 726967676572062F4973507265737365643D747275653B49734D6F7573654F76 - 65723D747275653B4973466F63757365643D66616C736500000000545046300A - 5452656374616E676C6500095374796C654E616D65060E737461747573626172 - 7374796C6505416C69676E070643656E7465720C436C69704368696C6472656E - 090A46696C6C2E436F6C6F720709784646323532353235074869745465737408 - 0553696465730B03546F70000A53697A652E57696474680500000000000000F0 - 04400B53697A652E4865696768740500000000000000C804401453697A652E50 - 6C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846 - 463135313531350756697369626C65080007544C61796F757400095374796C65 - 4E616D6506074C61796F75743105416C69676E070552696768740A506F736974 - 696F6E2E5805000000000000008C04400A53697A652E57696474680500000000 - 000000C803400B53697A652E4865696768740500000000000000C80440145369 - 7A652E506C6174666F726D44656661756C740800095453697A65477269700009 - 5374796C654E616D65060973697A65677267697005416C69676E0706426F7474 - 6F6D0A506F736974696F6E2E590500000000000000C803400A53697A652E5769 - 6474680500000000000000C803400B53697A652E486569676874050000000000 - 0000C803401453697A652E506C6174666F726D44656661756C74080000000054 - 50463007544C61796F757400095374796C654E616D65060C7370696E626F7873 - 74796C6505416C69676E070643656E7465720A53697A652E5769647468050000 - 0000006666E005400B53697A652E4865696768740500000000000000A8034014 - 53697A652E506C6174666F726D44656661756C74080756697369626C65080854 - 61624F726465720224000A5452656374616E676C6500095374796C654E616D65 - 060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A46696C - 6C2E436F6C6F7207097846463230323032300A53697A652E5769647468050000 - 0000006666E005400B53697A652E4865696768740500000000000000A8034014 - 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C - 6F720709784646313531353135000F54436F6C6F72416E696D6174696F6E0009 - 5374796C654E616D650614436F6C6F72416E696D6174696F6E315374796C6508 - 4475726174696F6E050000000000000000000007496E7665727365090C50726F - 70657274794E616D65060C5374726F6B652E436F6C6F720A537461727456616C - 756507097846463135313531350953746F7056616C7565070978464634303430 - 34300754726967676572061049734D6F7573654F7665723D747275650E547269 - 67676572496E7665727365061149734D6F7573654F7665723D66616C73650000 - 000C5442727573684F626A65637400095374796C654E616D65060A666F726567 - 726F756E640B42727573682E436F6C6F72070978464645414541454100000C54 - 42727573684F626A65637400095374796C654E616D65060973656C656374696F - 6E0B42727573682E436F6C6F720709783936324138324532000007544C61796F - 757400095374796C654E616D650607636F6E74656E7405416C69676E0706436C - 69656E74064C6F636B6564090C4D617267696E732E4C65667405000000000000 - 008000400B4D617267696E732E546F7005000000000000008000400D4D617267 - 696E732E526967687405000000000000008000400E4D617267696E732E426F74 - 746F6D05000000000000008000400A53697A652E576964746805000000000070 - 668405400B53697A652E48656967687405000000000000008803401453697A65 - 2E506C6174666F726D44656661756C740800000754427574746F6E0009537479 - 6C654E616D65060B6D696E7573627574746F6E05416C69676E07074669744C65 - 66740843616E466F6375730806437572736F72070763724172726F770C4D6172 - 67696E732E4C65667405000000000000008000400B4D617267696E732E546F70 - 05000000000000008000400D4D617267696E732E526967687405000000000000 - 008000400E4D617267696E732E426F74746F6D05000000000000008000400A50 - 6F736974696F6E2E5805000000000000008000400A506F736974696F6E2E5905 - 000000000000008000400A53697A652E5769647468050000000000E8FF870340 - 0B53697A652E48656967687405000000000000008803401453697A652E506C61 - 74666F726D44656661756C74080B5374796C654C6F6F6B7570060B627574746F - 6E7374796C65000554506174680005416C69676E0706436C69656E7409446174 - 612E506174680A4000000005000000000000000000803F000000000100000000 - 00803F0000803F01000000000000000000003F010000000000803F0000000003 - 0000000000803F000000000A46696C6C2E436F6C6F720708636C615768697465 - 0748697454657374080C4D617267696E732E4C6566740500000000000000C001 - 400B4D617267696E732E546F700500000000000000C001400D4D617267696E73 - 2E52696768740500000000000000C001400E4D617267696E732E426F74746F6D - 0500000000000000C001400A53697A652E5769647468050000000000A0FF9F01 - 400B53697A652E4865696768740500000000000000A001401453697A652E506C - 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 - 0000000754427574746F6E00095374796C654E616D65060A706C757362757474 - 6F6E05416C69676E070846697452696768740843616E466F6375730806437572 - 736F72070763724172726F770C4D617267696E732E4C65667405000000000000 - 008000400B4D617267696E732E546F7005000000000000008000400D4D617267 - 696E732E526967687405000000000000008000400E4D617267696E732E426F74 - 746F6D05000000000000008000400A506F736974696F6E2E580500000000006A - 66BA05400A506F736974696F6E2E5905000000000000008000400A53697A652E - 5769647468050000000000F0FF8703400B53697A652E48656967687405000000 - 000000008803401453697A652E506C6174666F726D44656661756C74080B5374 - 796C654C6F6F6B7570060B627574746F6E7374796C6500055450617468000541 - 6C69676E0706436C69656E7409446174612E506174680A340000000400000000 + 000000008000400A53697A652E57696474680500000000000000A803400B5369 + 7A652E4865696768740500000000000000B003401453697A652E506C6174666F + 726D44656661756C740800000005545465787400095374796C654E616D650604 + 7465787405416C69676E07044C656674064C6F636B6564090748697454657374 + 080C4D617267696E732E4C65667405000000000000008002400D4D617267696E + 732E526967687405000000000000008002400A506F736974696F6E2E58050000 + 00000000008404400A53697A652E57696474680500000000000000C804400B53 + 697A652E4865696768740500000000000000D003401453697A652E506C617466 + 6F726D44656661756C7408165465787453657474696E67732E466F6E74436F6C + 6F720708636C615768697465165465787453657474696E67732E486F727A416C + 69676E07074C656164696E67000005545465787400095374796C654E616D6506 + 0873686F727463757405416C69676E07055269676874064C6F636B6564090748 + 697454657374080C4D617267696E732E4C6566740500000000000000C002400D + 4D617267696E732E52696768740500000000000000C001400A506F736974696F + 6E2E580500000000000000C000C00A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000000000D003401453697A65 + 2E506C6174666F726D44656661756C7408165465787453657474696E67732E46 + 6F6E74436F6C6F720708636C615768697465165465787453657474696E67732E + 486F727A416C69676E07074C656164696E67000007544C61796F757400095374 + 796C654E616D6506077375626D61726B05416C69676E070552696768740A506F + 736974696F6E2E580500000000000000D404400A53697A652E57696474680500 + 000000000000A003400B53697A652E4865696768740500000000000000D00340 + 1453697A652E506C6174666F726D44656661756C740800055450617468000541 + 6C69676E070643656E74657209446174612E506174680A340000000400000000 000000000000000000000001000000000000000000803F010000000000803F00 00003F0300000000000000000000000A46696C6C2E436F6C6F720708636C6157 - 686974650748697454657374080C4D617267696E732E4C656674050000000000 - 0000C001400B4D617267696E732E546F700500000000000000C001400D4D6172 - 67696E732E52696768740500000000000000C001400E4D617267696E732E426F - 74746F6D0500000000000000C001400A53697A652E5769647468050000000000 - C0FF9F01400B53697A652E4865696768740500000000000000A001401453697A - 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 - 4E6F6E65000000005450463007544C61796F757400095374796C654E616D6506 - 0D73697A65677269707374796C6505416C69676E070643656E7465720A53697A - 652E57696474680500000000000000C803400B53697A652E4865696768740500 - 000000000000C803401453697A652E506C6174666F726D44656661756C740807 - 56697369626C6508085461624F726465720225000A5452656374616E676C6500 - 095374796C654E616D65060A52656374616E676C653105416C69676E07064365 - 6E7465720A46696C6C2E436F6C6F7207097846463630363036300A53697A652E - 57696474680500000000000000A000400B53697A652E48656967687405000000 - 00000000A000401453697A652E506C6174666F726D44656661756C74080B5374 - 726F6B652E4B696E6407044E6F6E6500000A5452656374616E676C6500095374 - 796C654E616D65060A52656374616E676C653205416C69676E070643656E7465 - 720A46696C6C2E436F6C6F7207097846463630363036300C4D617267696E732E - 4C6566740500000000000000A002400A53697A652E5769647468050000000000 - 0000A000400B53697A652E4865696768740500000000000000A000401453697A - 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 - 4E6F6E6500000A5452656374616E676C6500095374796C654E616D65060A5265 - 6374616E676C653305416C69676E070643656E7465720A46696C6C2E436F6C6F - 7207097846463630363036300C4D617267696E732E4C65667405000000000000 - 00A002400B4D617267696E732E546F700500000000000000A002400A53697A65 - 2E57696474680500000000000000A000400B53697A652E486569676874050000 - 0000000000A000401453697A652E506C6174666F726D44656661756C74080B53 - 74726F6B652E4B696E6407044E6F6E6500000A5452656374616E676C65000953 - 74796C654E616D65060A52656374616E676C653405416C69676E070643656E74 - 65720A46696C6C2E436F6C6F7207097846463630363036300B4D617267696E73 - 2E546F700500000000000000A002400A53697A652E5769647468050000000000 - 0000A000400B53697A652E4865696768740500000000000000A000401453697A - 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 - 4E6F6E6500000A5452656374616E676C6500095374796C654E616D65060A5265 - 6374616E676C653505416C69676E070643656E7465720A46696C6C2E436F6C6F - 7207097846463630363036300B4D617267696E732E546F700500000000000000 - A002400D4D617267696E732E52696768740500000000000000A002400A53697A - 652E57696474680500000000000000A000400B53697A652E4865696768740500 - 000000000000A000401453697A652E506C6174666F726D44656661756C74080B - 5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E676C650009 - 5374796C654E616D65060A52656374616E676C653605416C69676E070643656E - 7465720A46696C6C2E436F6C6F7207097846463630363036300C4D617267696E - 732E4C6566740500000000000000A002400E4D617267696E732E426F74746F6D - 0500000000000000A002400A53697A652E57696474680500000000000000A000 - 400B53697A652E4865696768740500000000000000A000401453697A652E506C + 68697465064C6F636B6564090748697454657374080A53697A652E5769647468 + 0500000000000000E001400B53697A652E486569676874050000000000000080 + 02401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E6500000000545046300A5452656374616E676C65000953 + 74796C654E616D65060C6D656E756261727374796C6505416C69676E07064365 + 6E7465720C436C69704368696C6472656E090946696C6C2E4B696E6407044E6F + 6E650748697454657374080A53697A652E57696474680500000000000000C804 + 400B53697A652E4865696768740500000000000000C804401453697A652E506C 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 - 000000545046300A5452656374616E676C6500095374796C654E616D65060C74 - 6F6F6C6261727374796C6505416C69676E070643656E7465720A46696C6C2E43 - 6F6C6F7207097846463235323532350748697454657374080553696465730B06 - 426F74746F6D000A53697A652E57696474680500000000000000C804400B5369 + 0756697369626C6508000A5452656374616E676C650005416C69676E0706436C + 69656E740A46696C6C2E436F6C6F720709784646323032303230074869745465 + 7374080C4D617267696E732E4C656674050000000000000080FFBF0B4D617267 + 696E732E546F70050000000000000080FFBF0D4D617267696E732E5269676874 + 050000000000000080FFBF0A53697A652E57696474680500000000000000D004 + 400B53697A652E4865696768740500000000000000CC04401453697A652E506C + 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 + 313531353135000007544C61796F757400095374796C654E616D650607636F6E + 74656E7405416C69676E0706436C69656E740C4D617267696E732E4C65667405 + 0000000000000080FF3F0B4D617267696E732E546F70050000000000000080FF + 3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D61726769 + 6E732E426F74746F6D050000000000000080FF3F0A53697A652E576964746805 + 00000000000000C004400B53697A652E4865696768740500000000000000C004 + 401453697A652E506C6174666F726D44656661756C7408000000545046300754 + 4C61796F757400095374796C654E616D65060D6D656E756974656D7374796C65 + 05416C69676E070643656E7465720C4D617267696E732E4C6566740500000000 + 00000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D61 + 7267696E732E5269676874050000000000000080FF3F0E4D617267696E732E42 + 6F74746F6D050000000000000080FF3F0A53697A652E57696474680500000000 + 008EE3F605400B53697A652E4865696768740500000000008EE3F00340145369 + 7A652E506C6174666F726D44656661756C74080756697369626C650808546162 + 4F726465720221000A5452656374616E676C650005416C69676E0708436F6E74 + 656E74730A46696C6C2E436F6C6F720709784646324138324532074869745465 + 737408074F70616369747905000000000017B7D1F13F0A53697A652E57696474 + 680500000000008EE3F605400B53697A652E4865696768740500000000008EE3 + F003401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E00084475 + 726174696F6E05000000000018B7D1F23F0C50726F70657274794E616D650607 + 4F7061636974790A537461727456616C75650500000000000000000000095374 + 6F7056616C7565050000000000000080FF3F0754726967676572060F49735365 + 6C65637465643D747275650E54726967676572496E7665727365061049735365 + 6C65637465643D66616C73650000000A5452656374616E676C6500095374796C + 654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74 + 730A46696C6C2E436F6C6F720709784646324138324532074869745465737408 + 074F70616369747905000000000000000000000A53697A652E57696474680500 + 000000008EE3F605400B53697A652E4865696768740500000000008EE3F00340 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E65000F54466C6F6174416E696D6174696F6E00084475726174 + 696F6E05000000000018B7D1F23F07496E7665727365090C50726F7065727479 + 4E616D6506074F7061636974790A537461727456616C75650500000000000000 + 0000000953746F7056616C7565050000000000000080FF3F0754726967676572 + 061049734D6F7573654F7665723D747275650E54726967676572496E76657273 + 65061149734D6F7573654F7665723D66616C736500000007544C61796F757400 + 095374796C654E616D650605676C79706805416C69676E07044C6566740A5369 + 7A652E57696474680500000000000000C803400B53697A652E48656967687405 + 00000000008EE3F003401453697A652E506C6174666F726D44656661756C7408 + 0007544C61796F757400095374796C654E616D650609636865636B6D61726B05 + 416C69676E0708436F6E74656E7473074F7061636974790500000000006F1283 + F53F0A53697A652E57696474680500000000000000C803400B53697A652E4865 + 696768740500000000008EE3F003401453697A652E506C6174666F726D446566 + 61756C7408000554506174680005416C69676E070643656E7465720944617461 + 2E506174680A58000000070000000000000056D9524391AE2C43010000009276 + 664365021643010000009F3983432B7C3C43010000009E9AA64382D2B4420100 + 00006F1CB04375A4D1420100000026DF8243263F67430300000056D9524391AE + 2C430A46696C6C2E436F6C6F720708636C615768697465074869745465737408 + 0A53697A652E57696474680500000000000000B002400B53697A652E48656967 + 68740500000000000000B002401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E6500000F54466C6F6174416E + 696D6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F + 70657274794E616D6506074F7061636974790A537461727456616C7565050000 + 00000000000000000953746F7056616C7565050000000000000080FF3F075472 + 6967676572060E4973436865636B65643D747275650E54726967676572496E76 + 65727365060F4973436865636B65643D66616C73650000000654476C79706800 + 095374796C654E616D65060A676C7970687374796C650C4D617267696E732E4C + 656674050000000000000080FF3F0B4D617267696E732E546F70050000000000 + 00008000400D4D617267696E732E52696768740500000000000000C000400E4D + 617267696E732E426F74746F6D050000000000000080FF3F05416C69676E0704 + 4C6566740A53697A652E576964746805000000000000008003400B53697A652E + 48656967687405000000000000008003401453697A652E506C6174666F726D44 + 656661756C740800000654496D61676500095374796C654E616D650606626974 + 6D61700E4D756C74695265734269746D61700E01000005416C69676E07044C65 + 66740C4D617267696E732E4C65667405000000000000008000400B4D61726769 + 6E732E546F7005000000000000008000400D4D617267696E732E526967687405 + 000000000000008000400E4D617267696E732E426F74746F6D05000000000000 + 008000400A506F736974696F6E2E5805000000000000008000400A506F736974 + 696F6E2E5905000000000000008000400A53697A652E57696474680500000000 + 000000A803400B53697A652E4865696768740500000000008EE3D00340145369 + 7A652E506C6174666F726D44656661756C740800000005545465787400095374 + 796C654E616D6506047465787405416C69676E07044C656674064C6F636B6564 + 090748697454657374080C4D617267696E732E4C656674050000000000000080 + 02400D4D617267696E732E526967687405000000000000008002400A506F7369 + 74696F6E2E5805000000000000008404400A53697A652E576964746805000000 + 00000000C804400B53697A652E4865696768740500000000008EE3F003401453 + 697A652E506C6174666F726D44656661756C7408165465787453657474696E67 + 732E466F6E74436F6C6F720708636C615768697465165465787453657474696E + 67732E486F727A416C69676E07074C656164696E670000055454657874000953 + 74796C654E616D65060873686F727463757405416C69676E0705526967687406 + 4C6F636B6564090748697454657374080C4D617267696E732E4C656674050000 + 0000000000C002400D4D617267696E732E52696768740500000000000000C001 + 400A506F736974696F6E2E580500000000001CC7BD04400A53697A652E576964 + 74680500000000000000C804400B53697A652E4865696768740500000000008E + E3F003401453697A652E506C6174666F726D44656661756C7408165465787453 + 657474696E67732E466F6E74436F6C6F720708636C6157686974651654657874 + 53657474696E67732E486F727A416C69676E07074C656164696E67000007544C + 61796F757400095374796C654E616D6506077375626D61726B05416C69676E07 + 0552696768740A506F736974696F6E2E580500000000008EE3CE05400A53697A + 652E57696474680500000000000000A003400B53697A652E4865696768740500 + 000000008EE3F003401453697A652E506C6174666F726D44656661756C740800 + 0554506174680005416C69676E070643656E74657209446174612E506174680A + 340000000400000000000000000000000000000001000000000000000000803F + 010000000000803F0000003F0300000000000000000000000A46696C6C2E436F + 6C6F720708636C615768697465064C6F636B6564090748697454657374080A53 + 697A652E57696474680500000000000000C001400B53697A652E486569676874 + 0500000000000000A002401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C6179 + 6F757400095374796C654E616D6506126D656E75736570617261746F72737479 + 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 + 000000C804400B53697A652E4865696768740500000000000000C80440145369 + 7A652E506C6174666F726D44656661756C74080756697369626C650808546162 + 4F7264657202220005544C696E650005416C69676E0703546F70084C696E6554 + 7970650703546F700C4D617267696E732E4C656674050000000000000080FFBF + 0B4D617267696E732E546F7005000000000000008000400D4D617267696E732E + 5269676874050000000000000080FFBF0A506F736974696F6E2E580500000000 + 00000080FFBF0A506F736974696F6E2E5905000000000000008000400A53697A + 652E57696474680500000000000000D004400B53697A652E4865696768740500 + 00000000000080FF3F1453697A652E506C6174666F726D44656661756C74080C + 5374726F6B652E436F6C6F720709784646313531353135000000545046300A54 + 52656374616E676C6500095374796C654E616D65060D6D656E75766965777374 + 796C6505416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846 + 463230323032300A53697A652E57696474680500000000000000C804400B5369 7A652E4865696768740500000000000000C804401453697A652E506C6174666F 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 - 31350756697369626C650800005450463007544C61796F757400095374796C65 - 4E616D65061570726F67726573736261726572726F727374796C6505416C6967 - 6E070643656E7465720A53697A652E576964746805000000000033338505400B - 53697A652E4865696768740500000000009999E104401453697A652E506C6174 - 666F726D44656661756C74080756697369626C6508085461624F726465720226 - 000A5452656374616E676C6500095374796C654E616D65060668747261636B05 - 416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978464632 - 3032303230064C6F636B6564090748697454657374080A53697A652E57696474 - 6805000000000033338505400B53697A652E4865696768740500000000009999 - E104401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 - 2E436F6C6F720709784646313531353135000A5452656374616E676C65000953 - 74796C654E616D65060A68696E64696361746F7205416C69676E07044C656674 - 0A46696C6C2E436F6C6F720709784646453232413241064C6F636B6564090748 - 697454657374080C4D617267696E732E4C656674050000000000000080FF3F0B - 4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E52 - 69676874050000000000000080FF3F0E4D617267696E732E426F74746F6D0500 - 00000000000080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A - 506F736974696F6E2E59050000000000000080FF3F0A53697A652E5769647468 - 0500000000000000C804400B53697A652E4865696768740500000000009999D9 - 04401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E - 4B696E6407044E6F6E650000000A5452656374616E676C6500095374796C654E - 616D65060676747261636B05416C69676E0708436F6E74656E74730A46696C6C - 2E436F6C6F720709784646323032303230064C6F636B65640907486974546573 - 74080A53697A652E576964746805000000000033338505400B53697A652E4865 - 696768740500000000009999E104401453697A652E506C6174666F726D446566 - 61756C74080C5374726F6B652E436F6C6F720709784646313531353135000A54 - 52656374616E676C6500095374796C654E616D65060A76696E64696361746F72 - 05416C69676E0706426F74746F6D0A46696C6C2E436F6C6F7207097846464532 - 32413241064C6F636B6564090748697454657374080C4D617267696E732E4C65 - 6674050000000000000080FF3F0B4D617267696E732E546F7005000000000000 - 0080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D61 - 7267696E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E - 2E58050000000000000080FF3F0A506F736974696F6E2E590500000000009999 - 8904400A53697A652E576964746805000000000033338105400B53697A652E48 - 65696768740500000000000000A803401453697A652E506C6174666F726D4465 - 6661756C74080B5374726F6B652E4B696E6407044E6F6E650000000054504630 - 07544C61796F757400095374796C654E616D65060F64726F7074617267657473 - 74796C6505416C69676E070643656E7465720A53697A652E5769647468050000 - 000000ACAAD905400B53697A652E4865696768740500000000000000CF054014 - 53697A652E506C6174666F726D44656661756C74080756697369626C65080854 - 61624F726465720227000A5452656374616E676C650005416C69676E0708436F - 6E74656E74730946696C6C2E4B696E6407044E6F6E650748697454657374080A - 53697A652E5769647468050000000000ACAAD905400B53697A652E4865696768 - 740500000000000000CF05401453697A652E506C6174666F726D44656661756C - 74080C5374726F6B652E436F6C6F720708636C615768697465105374726F6B65 - 2E546869636B6E65737305000000000000008001400B5374726F6B652E446173 - 6807044461736807585261646975730500000000000000C00240075952616469 - 75730500000000000000C002400005545465787400095374796C654E616D6506 - 047465787405416C69676E0706426F74746F6D0748697454657374080C4D6172 - 67696E732E4C6566740500000000000000A002400D4D617267696E732E526967 - 68740500000000000000A002400A506F736974696F6E2E580500000000000000 - A002400A506F736974696F6E2E590500000000000000D604400A53697A652E57 - 69647468050000000000ACAAB105400B53697A652E4865696768740500000000 - 000000C804401453697A652E506C6174666F726D44656661756C740816546578 - 7453657474696E67732E466F6E74436F6C6F720708636C615768697465000000 - 1254466C6F61744B6579416E696D6174696F6E00084475726174696F6E050000 - 000000999999FE3F044B6579730E010001034B6579050000000000000080FE3F - 0556616C75650500000000000000A003C00001034B6579050000000000000080 - FF3F0000044C6F6F70090C50726F70657274794E616D65060B50616464696E67 - 2E546F7010537461727446726F6D43757272656E74080754726967676572060F - 4973447261674F7665723D7472756500000554506174680005416C69676E0706 - 43656E74657209446174612E506174680AC4000000100000000000000008EC83 - 43F087A4430100000008EC8343083CFB430200000035BE7143504DF943020000 - 0012835C43A8E6F54302000000F0674943F803F1430100000008EC8343FC0116 - 440100000008EC8343FC5116440100000000408443FC5116440100000010689A - 43FC412B4401000000081CD043F803F14302000000915DC64321E0F543020000 - 00919DBB439643F94302000000087CB043F833FB4301000000087CB043F087A4 - 430100000008EC8343F087A4430300000000000000000000000A46696C6C2E43 - 6F6C6F720708636C6157686974650748697454657374080A53697A652E576964 - 74680500000000000000C804400B53697A652E48656967687405000000000001 - 00C804401453697A652E506C6174666F726D44656661756C74080B5374726F6B - 652E4B696E6407044E6F6E650000005450463007544C61796F75740009537479 - 6C654E616D65061464726F707461726765746669656C647374796C6505416C69 - 676E070643656E7465720A53697A652E576964746805000000000000A08A0740 - 0B53697A652E4865696768740500000000000000B204401453697A652E506C61 - 74666F726D44656661756C74080756697369626C6508085461624F7264657202 - 28000A5452656374616E676C6500095374796C654E616D65060A52656374616E - 676C653105416C69676E0706436C69656E740946696C6C2E4B696E6407044E6F - 6E650748697454657374080A53697A652E576964746805000000000000A08A07 - 400B53697A652E4865696768740500000000000000B204401453697A652E506C - 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 - 3241383245320005545465787400095374796C654E616D650604746578740541 - 6C69676E0706436C69656E740748697454657374080A53697A652E5769647468 - 05000000000000809A05400B53697A652E4865696768740500000000000000B2 - 04401453697A652E506C6174666F726D44656661756C74081654657874536574 - 74696E67732E466F6E74436F6C6F720708636C615768697465000007544C6179 - 6F757400095374796C654E616D6506074C61796F75743105416C69676E07044C - 6566740A53697A652E57696474680500000000000000C805400B53697A652E48 - 65696768740500000000000000B204401453697A652E506C6174666F726D4465 - 6661756C74080005545061746800095374796C654E616D650605506174683105 - 416C69676E070643656E74657209446174612E506174680A2401000018000000 - 0000000073B8AC43C14A7843010000006D2717435849DD430200000086CB0A43 - 1078E343020000009683ED421078E34302000000DACED4425849DD4302000000 - 9A19BC42081CD743020000009A19BC424C17CD4302000000DACED4421DEAC643 - 01000000B4288B4385EB61430100000068D1D4426811584202000000281CBC42 - CAA1264202000000281CBC42E6FBAC410200000068D1D442D04D144102000000 - A886ED429CC245C002000000CCCC0A439CC245C002000000B4281743D04D1441 - 0100000016B9AC43918D4B4302000000BECFAF43A5BB5143020000009F5AB143 - F1D25943020000009F5AB14343EB614302000000A05AB1439C046A4302000000 - FACEAF43711D72430200000073B8AC43C14A78430300000073B8AC43C14A7843 - 0A46696C6C2E436F6C6F720708636C6157686974650748697454657374080A53 - 697A652E57696474680500000000000000F002400B53697A652E486569676874 - 0500000000000000F002401453697A652E506C6174666F726D44656661756C74 - 080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F646507034669 - 74000005545061746800095374796C654E616D650605506174683205416C6967 - 6E070643656E74657209446174612E506174680A240100001800000000000000 - 73B8AC43C14A7843010000006D2717435849DD430200000086CB0A431078E343 - 020000009683ED421078E34302000000DACED4425849DD43020000009A19BC42 - 081CD743020000009A19BC424C17CD4302000000DACED4421DEAC64301000000 - B4288B4385EB61430100000068D1D4426811584202000000281CBC42CAA12642 - 02000000281CBC42E6FBAC410200000068D1D442D04D144102000000A886ED42 - 9CC245C002000000CCCC0A439CC245C002000000B4281743D04D144101000000 - 16B9AC43918D4B4302000000BECFAF43A5BB5143020000009F5AB143F1D25943 - 020000009F5AB14343EB614302000000A05AB1439C046A4302000000FACEAF43 - 711D72430200000073B8AC43C14A78430300000073B8AC43C14A78430A46696C - 6C2E436F6C6F720708636C6157686974650748697454657374080C4D61726769 - 6E732E4C6566740500000000000000A004400A53697A652E5769647468050000 - 0000000000F002400B53697A652E4865696768740500000000000000F0024014 - 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E - 6407044E6F6E6508577261704D6F646507034669740000055450617468000953 - 74796C654E616D650605506174683305416C69676E070643656E746572094461 - 74612E506174680A24010000180000000000000073B8AC43C14A784301000000 - 6D2717435849DD430200000086CB0A431078E343020000009683ED421078E343 - 02000000DACED4425849DD43020000009A19BC42081CD743020000009A19BC42 - 4C17CD4302000000DACED4421DEAC64301000000B4288B4385EB614301000000 - 68D1D4426811584202000000281CBC42CAA1264202000000281CBC42E6FBAC41 - 0200000068D1D442D04D144102000000A886ED429CC245C002000000CCCC0A43 - 9CC245C002000000B4281743D04D14410100000016B9AC43918D4B4302000000 - BECFAF43A5BB5143020000009F5AB143F1D25943020000009F5AB14343EB6143 - 02000000A05AB1439C046A4302000000FACEAF43711D72430200000073B8AC43 - C14A78430300000073B8AC43C14A78430A46696C6C2E436F6C6F720708636C61 - 57686974650748697454657374080D4D617267696E732E526967687405000000 - 00000000A004400A53697A652E57696474680500000000000000F002400B5369 - 7A652E4865696768740500000000000000F002401453697A652E506C6174666F - 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6508577261 - 704D6F6465070346697400000007544C61796F757400095374796C654E616D65 - 06074C61796F75743205416C69676E070552696768740A506F736974696F6E2E - 580500000000000040B106400A53697A652E57696474680500000000000000C8 - 05400B53697A652E4865696768740500000000000000B204401453697A652E50 - 6C6174666F726D44656661756C74080005545061746800095374796C654E616D - 650605506174683105416C69676E070643656E74657209446174612E50617468 - 0A24010000180000000000000073B8AC43C14A7843010000006D2717435849DD - 430200000086CB0A431078E343020000009683ED421078E34302000000DACED4 - 425849DD43020000009A19BC42081CD743020000009A19BC424C17CD43020000 - 00DACED4421DEAC64301000000B4288B4385EB61430100000068D1D442681158 - 4202000000281CBC42CAA1264202000000281CBC42E6FBAC410200000068D1D4 - 42D04D144102000000A886ED429CC245C002000000CCCC0A439CC245C0020000 - 00B4281743D04D14410100000016B9AC43918D4B4302000000BECFAF43A5BB51 - 43020000009F5AB143F1D25943020000009F5AB14343EB614302000000A05AB1 - 439C046A4302000000FACEAF43711D72430200000073B8AC43C14A7843030000 - 0073B8AC43C14A78430A46696C6C2E436F6C6F720708636C6157686974650748 - 697454657374080D526F746174696F6E416E676C650500000000000000B40640 - 0A53697A652E57696474680500000000000000F002400B53697A652E48656967 - 68740500000000000000F002401453697A652E506C6174666F726D4465666175 - 6C74080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F64650703 - 466974000005545061746800095374796C654E616D650605506174683205416C - 69676E070643656E74657209446174612E506174680A24010000180000000000 - 000073B8AC43C14A7843010000006D2717435849DD430200000086CB0A431078 - E343020000009683ED421078E34302000000DACED4425849DD43020000009A19 - BC42081CD743020000009A19BC424C17CD4302000000DACED4421DEAC6430100 - 0000B4288B4385EB61430100000068D1D4426811584202000000281CBC42CAA1 - 264202000000281CBC42E6FBAC410200000068D1D442D04D144102000000A886 - ED429CC245C002000000CCCC0A439CC245C002000000B4281743D04D14410100 - 000016B9AC43918D4B4302000000BECFAF43A5BB5143020000009F5AB143F1D2 - 5943020000009F5AB14343EB614302000000A05AB1439C046A4302000000FACE - AF43711D72430200000073B8AC43C14A78430300000073B8AC43C14A78430A46 - 696C6C2E436F6C6F720708636C6157686974650748697454657374080C4D6172 - 67696E732E4C6566740500000000000000A004400D526F746174696F6E416E67 - 6C650500000000000000B406400A53697A652E57696474680500000000000000 - F002400B53697A652E4865696768740500000000000000F002401453697A652E - 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F - 6E6508577261704D6F64650703466974000005545061746800095374796C654E - 616D650605506174683305416C69676E070643656E74657209446174612E5061 - 74680A24010000180000000000000073B8AC43C14A7843010000006D27174358 - 49DD430200000086CB0A431078E343020000009683ED421078E34302000000DA - CED4425849DD43020000009A19BC42081CD743020000009A19BC424C17CD4302 - 000000DACED4421DEAC64301000000B4288B4385EB61430100000068D1D44268 - 11584202000000281CBC42CAA1264202000000281CBC42E6FBAC410200000068 - D1D442D04D144102000000A886ED429CC245C002000000CCCC0A439CC245C002 - 000000B4281743D04D14410100000016B9AC43918D4B4302000000BECFAF43A5 - BB5143020000009F5AB143F1D25943020000009F5AB14343EB614302000000A0 - 5AB1439C046A4302000000FACEAF43711D72430200000073B8AC43C14A784303 - 00000073B8AC43C14A78430A46696C6C2E436F6C6F720708636C615768697465 - 0748697454657374080D4D617267696E732E52696768740500000000000000A0 - 04400D526F746174696F6E416E676C650500000000000000B406400A53697A65 - 2E57696474680500000000000000F002400B53697A652E486569676874050000 - 0000000000F002401453697A652E506C6174666F726D44656661756C74080B53 - 74726F6B652E4B696E6407044E6F6E6508577261704D6F646507034669740000 - 0000005450463007544C61796F757400095374796C654E616D65060C706F706F - 7665727374796C6505416C69676E070643656E7465720756697369626C650808 - 5461624F726465720229000A5452656374616E676C6500095374796C654E616D - 650602626705416C69676E0706436C69656E740A46696C6C2E436F6C6F720709 - 7846463230323032300748697454657374080A53697A652E5769647468050000 - 0000000000C804400B53697A652E4865696768740500000000000000C8044014 - 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C - 6F7207097846463135313531350007544C61796F757400095374796C654E616D - 650607636F6E74656E7405416C69676E0706436C69656E740C4D617267696E73 - 2E4C656674050000000000000080FF3F0B4D617267696E732E546F7005000000 - 0000000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F - 0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E - 57696474680500000000000000C004400B53697A652E48656967687405000000 - 00000000C004401453697A652E506C6174666F726D44656661756C740800000D - 54536861646F77456666656374000844697374616E63650500000000000000C0 - 004009446972656374696F6E0500000000000000B4054008536F66746E657373 - 050000000000000080FE3F074F706163697479050000000000000080FE3F0B53 - 6861646F77436F6C6F720708636C61426C61636B000000005450463007544C61 - 796F757400095374796C654E616D65060D706F707570626F787374796C650541 - 6C69676E070643656E7465720A53697A652E57696474680500000000000080C4 - 06400B53697A652E4865696768740500000000000000D404401453697A652E50 - 6C6174666F726D44656661756C74080756697369626C6508085461624F726465 - 72022A000A5452656374616E676C6500095374796C654E616D65060A6261636B - 67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F - 7207097846463230323032300748697454657374080A53697A652E5769647468 - 0500000000000080C406400B53697A652E4865696768740500000000000000D4 - 04401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E - 4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E0009537479 - 6C654E616D650614436F6C6F72416E696D6174696F6E315374796C6508447572 - 6174696F6E05000000000000000000000C50726F70657274794E616D65060A46 - 696C6C2E436F6C6F720A537461727456616C7565070978464632303230323009 - 53746F7056616C75650709784646343034303430075472696767657206204973 - 4D6F7573654F7665723D747275653B4973507265737365643D66616C73650E54 - 726967676572496E7665727365062149734D6F7573654F7665723D66616C7365 - 3B4973507265737365643D66616C736500000F54436F6C6F72416E696D617469 - 6F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E325374 - 796C65084475726174696F6E05000000000000000000000C50726F7065727479 - 4E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709784646 - 3430343034300953746F7056616C756507097846463241383245320754726967 - 676572062049734D6F7573654F7665723D747275653B4973507265737365643D - 747275653B0E54726967676572496E7665727365062049734D6F7573654F7665 - 723D747275653B4973507265737365643D66616C736500000007544C61796F75 - 740005416C69676E070552696768740A506F736974696F6E2E58050000000000 - 0080B506400A53697A652E57696474680500000000000000F002400B53697A65 - 2E4865696768740500000000000000D404401453697A652E506C6174666F726D - 44656661756C7408000554506174680005416C69676E070643656E7465720944 - 6174612E506174680A400000000500000000000000000000000000803F010000 - 000000803F0000803F010000000000003F000000000100000000000000000080 + 31350756697369626C6508000A5452656374616E676C650005416C69676E0706 + 436C69656E740A46696C6C2E436F6C6F72070978464632303230323007486974 + 54657374080A53697A652E57696474680500000000000000C804400B53697A65 + 2E4865696768740500000000000000C804401453697A652E506C6174666F726D + 44656661756C74080C5374726F6B652E436F6C6F720709784646313531353135 + 000D54536861646F77456666656374000844697374616E636505000000000000 + 0080014009446972656374696F6E0500000000000000B4044008536F66746E65 + 7373050000000000000080FE3F074F706163697479050000000000000080FE3F + 0B536861646F77436F6C6F720708636C61426C61636B00000007544C61796F75 + 7400095374796C654E616D650607636F6E74656E7405416C69676E0706436C69 + 656E740C4D617267696E732E4C656674050000000000000080FF3F0B4D617267 + 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 + 050000000000000080FF3F0E4D617267696E732E426F74746F6D050000000000 + 000080FF3F0A53697A652E57696474680500000000000000C004400B53697A65 + 2E4865696768740500000000000000C004401453697A652E506C6174666F726D + 44656661756C74080000005450463007544C61796F757400095374796C654E61 + 6D65060E696D61676563656C6C7374796C6505416C69676E070643656E746572 + 0756697369626C6508085461624F726465720224000654496D61676500095374 + 796C654E616D650605696D6167650E4D756C74695265734269746D61700E0100 + 0005416C69676E0706436C69656E74064C6F636B656409074869745465737408 + 0C4D617267696E732E4C656674050000000000000080FF3F0B4D617267696E73 + 2E546F70050000000000000080FF3F0D4D617267696E732E5269676874050000 + 000000000080FF3F0E4D617267696E732E426F74746F6D050000000000000080 + FF3F0A53697A652E57696474680500000000000000C004400B53697A652E4865 + 696768740500000000000000C004401453697A652E506C6174666F726D446566 + 61756C74080000005450463007544C61796F757400095374796C654E616D6506 + 0E706F70757063656C6C7374796C6505416C69676E070643656E7465720A5369 + 7A652E57696474680500000000000000BB06400B53697A652E48656967687405 + 00000000000000AE04401453697A652E506C6174666F726D44656661756C7408 + 0756697369626C6508085461624F7264657202250007544C61796F7574000541 + 6C69676E070552696768740A506F736974696F6E2E580500000000000000AC06 + 400A53697A652E57696474680500000000000000F002400B53697A652E486569 + 6768740500000000000000AE04401453697A652E506C6174666F726D44656661 + 756C7408000554506174680005416C69676E070643656E74657209446174612E + 506174680A400000000500000000000000000000000000803F01000000000080 + 3F0000803F010000000000003F0000000001000000000000000000803F030000 + 0000000000000000000A46696C6C2E436F6C6F720708636C6157686974650748 + 697454657374080B4D617267696E732E546F700500000000000000E001C00A53 + 697A652E576964746805000000000000008002400B53697A652E486569676874 + 05000000000000008001401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E6500000554506174680005416C69 + 676E070643656E74657209446174612E506174680A3400000004000000000000 + 000000000000000000010000000000803F00000000010000000000003F000080 3F0300000000000000000000000A46696C6C2E436F6C6F720708636C61576869 - 74650748697454657374080B4D617267696E732E546F700500000000000000E0 - 01C00A53697A652E576964746805000000000000008002400B53697A652E4865 + 74650748697454657374080B4D617267696E732E546F700500000000000000C0 + 01400A53697A652E576964746805000000000000008002400B53697A652E4865 6967687405000000000000008001401453697A652E506C6174666F726D446566 - 61756C74080B5374726F6B652E4B696E6407044E6F6E65000005545061746800 - 05416C69676E070643656E74657209446174612E506174680A34000000040000 - 00000000000000000000000000010000000000803F0000000001000000000000 - 3F0000803F0300000000000000000000000A46696C6C2E436F6C6F720708636C - 6157686974650748697454657374080B4D617267696E732E546F700500000000 - 000000C001400A53697A652E576964746805000000000000008002400B53697A - 652E48656967687405000000000000008001401453697A652E506C6174666F72 - 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000000554 - 5465787400095374796C654E616D6506047465787405416C69676E0706436C69 - 656E740748697454657374080C4D617267696E732E4C65667405000000000000 - 0080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267 - 696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F74 - 746F6D050000000000000080FF3F0A53697A652E576964746805000000000000 - 80B306400B53697A652E4865696768740500000000000000CC04401453697A65 - 2E506C6174666F726D44656661756C7408165465787453657474696E67732E46 - 6F6E74436F6C6F720708636C615768697465000000545046300A545265637461 - 6E676C6500095374796C654E616D6506147374617475736261726E6F67726970 - 7374796C6505416C69676E070643656E7465720C436C69704368696C6472656E - 090A46696C6C2E436F6C6F7207097846463235323532350553696465730B0354 - 6F70000A53697A652E57696474680500000000000000F004400B53697A652E48 - 65696768740500000000000000C804401453697A652E506C6174666F726D4465 - 6661756C74080C5374726F6B652E436F6C6F7207097846463135313531350756 - 697369626C650800005450463007544C61796F757400095374796C654E616D65 - 0613736D616C6C7363726F6C6C6261727374796C6505416C69676E070643656E - 7465720756697369626C6508085461624F72646572022B000654547261636B00 - 095374796C654E616D65060668747261636B05416C69676E0706436C69656E74 - 064C6F636B6564090B4F7269656E746174696F6E070A486F72697A6F6E74616C - 0A53697A652E57696474680500000000000000C804400B53697A652E48656967 - 68740500000000000000C804401453697A652E506C6174666F726D4465666175 - 6C74080B5374796C654C6F6F6B757006147363726F6C6C62617268747261636B - 7374796C6500000654547261636B00095374796C654E616D6506067674726163 - 6B05416C69676E0706436C69656E74064C6F636B6564090B4F7269656E746174 - 696F6E070A486F72697A6F6E74616C0A53697A652E5769647468050000000000 - 0000C804400B53697A652E4865696768740500000000000000C804401453697A - 652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B75700614 - 7363726F6C6C62617276747261636B7374796C650000005450463007544C6179 - 6F757400095374796C654E616D65060D73706C69747465727374796C6505416C - 69676E070643656E7465720A53697A652E57696474680500000000000000A904 - 400B53697A652E4865696768740500000000000080C105401453697A652E506C - 6174666F726D44656661756C74080756697369626C6508085461624F72646572 - 022C000A5452656374616E676C6500095374796C654E616D65060A5265637461 - 6E676C653105416C69676E0706436C69656E740A46696C6C2E436F6C6F720709 - 7846463330333033300748697454657374080553696465730B044C6566740552 - 69676874000A53697A652E57696474680500000000000000A904400B53697A65 - 2E4865696768740500000000000080C105401453697A652E506C6174666F726D - 44656661756C74080C5374726F6B652E436F6C6F720709784646313531353135 - 000007544C61796F757400095374796C654E616D6506064C61796F757405416C - 69676E0706436C69656E740A53697A652E57696474680500000000000000A904 - 400B53697A652E4865696768740500000000000080C105401453697A652E506C - 6174666F726D44656661756C74080007544C61796F757400095374796C654E61 - 6D6506046772697005416C69676E070A5665727443656E746572064C6F636B65 - 64090A506F736974696F6E2E5905000000000000008004400A53697A652E5769 - 6474680500000000000000A904400B53697A652E486569676874050000000000 - 00008004401453697A652E506C6174666F726D44656661756C74080007544369 - 72636C6500095374796C654E616D650607436972636C653305416C69676E0706 - 43656E7465720A46696C6C2E436F6C6F72070978464634303430343007486974 - 54657374080E4D617267696E732E426F74746F6D0500000000000000A003400A - 53697A652E57696474680500000000000000E001400B53697A652E4865696768 - 740500000000000000E001401453697A652E506C6174666F726D44656661756C - 74080C5374726F6B652E436F6C6F720709784646313531353135000007544369 - 72636C6500095374796C654E616D650607436972636C653205416C69676E0706 - 43656E7465720A46696C6C2E436F6C6F72070978464634303430343007486974 - 54657374080B4D617267696E732E546F700500000000000000A003400A53697A - 652E57696474680500000000000000E001400B53697A652E4865696768740500 - 000000000000E001401453697A652E506C6174666F726D44656661756C74080C - 5374726F6B652E436F6C6F72070978464631353135313500000754436972636C - 6500095374796C654E616D650607436972636C653105416C69676E070643656E - 7465720A46696C6C2E436F6C6F72070978464634303430343007486974546573 - 74080A53697A652E57696474680500000000000000E001400B53697A652E4865 - 696768740500000000000000E001401453697A652E506C6174666F726D446566 - 61756C74080C5374726F6B652E436F6C6F720709784646313531353135000000 - 00005450463007544C61796F757400095374796C654E616D650610636C6F7365 - 627574746F6E7374796C6505416C69676E070643656E7465720A53697A652E57 - 696474680500000000000000C804400B53697A652E4865696768740500000000 - 000000C803401453697A652E506C6174666F726D44656661756C740807566973 - 69626C6508085461624F72646572022D000A5452656374616E676C6500095374 - 796C654E616D65060B636C6F7365627574746F6E05416C69676E0706436C6965 - 6E740A46696C6C2E436F6C6F7207097846463230323032300748697454657374 - 080A53697A652E57696474680500000000000000C804400B53697A652E486569 - 6768740500000000000000C803401453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E - 696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D617469 - 6F6E315374796C65084475726174696F6E05000000000000000000000C50726F - 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 - 07097846463230323032300953746F7056616C75650709784646464636313537 - 0754726967676572062049734D6F7573654F7665723D747275653B4973507265 - 737365643D66616C73650E54726967676572496E7665727365062149734D6F75 - 73654F7665723D66616C73653B4973507265737365643D66616C736500000F54 - 436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72 - 416E696D6174696F6E325374796C65084475726174696F6E0500000000000000 - 0000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461 - 727456616C756507097846464646363135370953746F7056616C756507097846 - 464532344634350754726967676572061F49734D6F7573654F7665723D747275 - 653B4973507265737365643D747275650E54726967676572496E766572736506 - 2049734D6F7573654F7665723D747275653B4973507265737365643D66616C73 - 6500000005545061746800095374796C654E616D650605506174683105416C69 - 676E070643656E74657209446174612E506174680AC400000010000000000000 - 000000A0C00000704101000000000070410000A0C001000000000048420000F0 - 41010000000000AA420000A0C0010000000000D242000070410100000000008C - 4200004842010000000000D2420000B442010000000000AA420000DC42020000 - 003BDF34429E6F8C4202000000FE547D427FAAB0420200000000004842000096 - 4201000000000070410000DC42010000000000A0C00000B442010000000000F0 - 4100005C42010000000000A0C000007041030000000000A0C0000070410A4669 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65000000055454657874 + 00095374796C654E616D6506047465787405416C69676E0706436C69656E7406 + 4C6F636B6564090748697454657374080C4D617267696E732E4C656674050000 + 0000000000A001400B4D617267696E732E546F7005000000000000008000400D + 4D617267696E732E52696768740500000000000000A001400E4D617267696E73 + 2E426F74746F6D05000000000000008000400A53697A652E5769647468050000 + 0000000000A206400B53697A652E48656967687405000000000000009E044014 + 53697A652E506C6174666F726D44656661756C7408165465787453657474696E + 67732E466F6E74436F6C6F720708636C6157686974650000005450463007544C + 61796F757400095374796C654E616D65060D7465787463656C6C7374796C6505 + 416C69676E070643656E7465720756697369626C6508085461624F7264657202 + 260007544C61796F757400095374796C654E616D650607636F6E74656E740541 + 6C69676E0708436F6E74656E7473064C6F636B6564090C4D617267696E732E4C + 65667405000000000000008001400B4D617267696E732E546F70050000000000 + 00008001400D4D617267696E732E526967687405000000000000008001400E4D + 617267696E732E426F74746F6D05000000000000008001400A53697A652E5769 + 6474680500000000000000A804400B53697A652E486569676874050000000000 + 0000A804401453697A652E506C6174666F726D44656661756C740800000C5442 + 727573684F626A65637400095374796C654E616D65060A666F726567726F756E + 6400000C5442727573684F626A65637400095374796C654E616D65060973656C + 656374696F6E0B42727573682E436F6C6F72070978393632413832453200000B + 54466F6E744F626A65637400095374796C654E616D650604666F6E7400000054 + 50463007544C61796F757400095374796C654E616D6506096D656D6F7374796C + 6505416C69676E070643656E7465720A53697A652E5769647468050000000000 + CCCC8806400B53697A652E4865696768740500000000006666F405401453697A + 652E506C6174666F726D44656661756C74080756697369626C6508085461624F + 726465720227000C5442727573684F626A65637400095374796C654E616D6506 + 0A666F726567726F756E6400000C5442727573684F626A65637400095374796C + 654E616D65060973656C656374696F6E0B42727573682E436F6C6F7207097837 + 4634343735394400000B54466F6E744F626A65637400095374796C654E616D65 + 0604666F6E7400000A5452656374616E676C6500095374796C654E616D65060A + 6261636B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E + 436F6C6F7207097846463230323032300748697454657374080A53697A652E57 + 69647468050000000000CCCC8806400B53697A652E4865696768740500000000 + 006666F405401453697A652E506C6174666F726D44656661756C74080C537472 + 6F6B652E436F6C6F7207097846463135313531350007544C61796F7574000953 + 74796C654E616D650607636F6E74656E7405416C69676E0706436C69656E740C + 4D617267696E732E4C65667405000000000000008000400B4D617267696E732E + 546F7005000000000000008000400D4D617267696E732E526967687405000000 + 000000008000400E4D617267696E732E426F74746F6D05000000000000008000 + 400A53697A652E57696474680500000000009899E905400B53697A652E486569 + 6768740500000000006666CC05401453697A652E506C6174666F726D44656661 + 756C740800000A545363726F6C6C42617200095374796C654E616D65060A6873 + 63726F6C6C62617205416C69676E0706426F74746F6D06437572736F72070763 + 724172726F770B536D616C6C4368616E676505000000000000000000000B4F72 + 69656E746174696F6E070A486F72697A6F6E74616C0A506F736974696F6E2E59 + 0500000000006666D405400A53697A652E5769647468050000000000CCCC8806 + 400B53697A652E48656967687405000000000000008003401453697A652E506C + 6174666F726D44656661756C740800000A545363726F6C6C4261720009537479 + 6C654E616D65060A767363726F6C6C62617205416C69676E0705526967687406 + 437572736F72070763724172726F770B536D616C6C4368616E67650500000000 + 0000000000000B4F7269656E746174696F6E0708566572746963616C0A506F73 + 6974696F6E2E580500000000009899F105400A53697A652E5769647468050000 + 00000000008003400B53697A652E4865696768740500000000006666D4054014 + 53697A652E506C6174666F726D44656661756C7408000007544C61796F757400 + 05416C69676E0706436C69656E740A53697A652E576964746805000000000098 + 99F105400B53697A652E4865696768740500000000006666D405401453697A65 + 2E506C6174666F726D44656661756C7408000F54536D616C6C5363726F6C6C42 + 617200095374796C654E616D65060F76736D616C6C7363726F6C6C6261720541 + 6C69676E0705526967687406437572736F72070763724172726F770B536D616C + 6C4368616E676505000000000000000000000B4F7269656E746174696F6E0708 + 566572746963616C0C4D617267696E732E4C6566740500000000000000800040 + 0A53697A652E576964746805000000000000008002400B53697A652E48656967 + 687405000000000000008002401453697A652E506C6174666F726D4465666175 + 6C74080756697369626C650800000F54536D616C6C5363726F6C6C4261720009 + 5374796C654E616D65060F68736D616C6C7363726F6C6C62617205416C69676E + 0706426F74746F6D06437572736F72070763724172726F770B536D616C6C4368 + 616E676505000000000000000000000B4F7269656E746174696F6E070A486F72 + 697A6F6E74616C0B4D617267696E732E546F7005000000000000008000400A53 + 697A652E576964746805000000000000009606400B53697A652E486569676874 + 05000000000000008002401453697A652E506C6174666F726D44656661756C74 + 080756697369626C65080000000F54436F6C6F72416E696D6174696F6E000953 + 74796C654E616D6506146D656D6F5374726F6B65416E696D6174696F6E310844 + 75726174696F6E050000000000000000000007496E7665727365090C50726F70 + 657274794E616D65060C5374726F6B652E436F6C6F720A537461727456616C75 + 6507097846463135313531350953746F7056616C756507097846463430343034 + 300754726967676572062049734D6F7573654F7665723D747275653B4973466F + 63757365643D66616C73650E54726967676572496E7665727365062149734D6F + 7573654F7665723D66616C73653B4973466F63757365643D66616C736500000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D6506146D656D6F + 5374726F6B65416E696D6174696F6E32084475726174696F6E05000000000000 + 000000000C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A + 537461727456616C756507097846463430343034300953746F7056616C756507 + 097846463241383245320754726967676572060E4973466F63757365643D7472 + 75650E54726967676572496E7665727365060F4973466F63757365643D66616C + 7365000000005450463007544C61796F757400095374796C654E616D65060E6C + 696E6B6C6162656C7374796C6505416C69676E070643656E7465720A53697A65 + 2E5769647468050000000000CCCC8006400B53697A652E486569676874050000 + 0000009A998104401453697A652E506C6174666F726D44656661756C74080756 + 697369626C6508085461624F7264657202280005545465787400095374796C65 + 4E616D6506047465787405416C69676E0708436F6E74656E7473074869745465 + 7374080A53697A652E5769647468050000000000CCCC8006400B53697A652E48 + 65696768740500000000009A998104401453697A652E506C6174666F726D4465 + 6661756C74081A5465787453657474696E67732E466F6E742E5374796C654578 + 740A0D00000004040000000000000004000000165465787453657474696E6773 + 2E466F6E74436F6C6F72070D636C61446F64676572626C7565000F54436F6C6F + 72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D + 6174696F6E315374796C65084475726174696F6E050000000000000000000007 + 496E7665727365090C50726F70657274794E616D650616546578745365747469 + 6E67732E466F6E74436F6C6F720A537461727456616C7565070D636C61446F64 + 676572626C75650953746F7056616C7565070E636C6144656570736B79626C75 + 650754726967676572063049734D6F7573654F7665723D747275653B49735072 + 65737365643D66616C73653B4973466F63757365643D66616C73650E54726967 + 676572496E7665727365063149734D6F7573654F7665723D66616C73653B4973 + 507265737365643D66616C73653B4973466F63757365643D66616C736500000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F + 72416E696D6174696F6E325374796C65084475726174696F6E05000000000000 + 000000000C50726F70657274794E616D6506165465787453657474696E67732E + 466F6E74436F6C6F720A537461727456616C7565070E636C6144656570736B79 + 626C75650953746F7056616C7565070978464631373537394307547269676765 + 72062F4973507265737365643D747275653B49734D6F7573654F7665723D7472 + 75653B4973466F63757365643D66616C736500000000545046300A5452656374 + 616E676C6500095374796C654E616D65060E7374617475736261727374796C65 + 05416C69676E070643656E7465720C436C69704368696C6472656E090A46696C + 6C2E436F6C6F7207097846463235323532350748697454657374080553696465 + 730B03546F70000A53697A652E57696474680500000000000000F004400B5369 + 7A652E4865696768740500000000000000C804401453697A652E506C6174666F + 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 + 31350756697369626C65080007544C61796F757400095374796C654E616D6506 + 074C61796F75743105416C69676E070552696768740A506F736974696F6E2E58 + 05000000000000008C04400A53697A652E57696474680500000000000000C803 + 400B53697A652E4865696768740500000000000000C804401453697A652E506C + 6174666F726D44656661756C740800095453697A654772697000095374796C65 + 4E616D65060973697A65677267697005416C69676E0706426F74746F6D0A506F + 736974696F6E2E590500000000000000C803400A53697A652E57696474680500 + 000000000000C803400B53697A652E4865696768740500000000000000C80340 + 1453697A652E506C6174666F726D44656661756C740800000000545046300754 + 4C61796F757400095374796C654E616D65060C7370696E626F787374796C6505 + 416C69676E070643656E7465720A53697A652E57696474680500000000006666 + E005400B53697A652E4865696768740500000000000000C003401453697A652E + 506C6174666F726D44656661756C74080756697369626C6508085461624F7264 + 6572022A000A5452656374616E676C6500095374796C654E616D65060A626163 + 6B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C + 6F7207097846463230323032300A53697A652E57696474680500000000006666 + E005400B53697A652E4865696768740500000000000000C003401453697A652E + 506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72070978 + 4646313531353135000F54436F6C6F72416E696D6174696F6E00095374796C65 + 4E616D650614436F6C6F72416E696D6174696F6E315374796C65084475726174 + 696F6E050000000000000000000007496E7665727365090C50726F7065727479 + 4E616D65060C5374726F6B652E436F6C6F720A537461727456616C7565070978 + 46463135313531350953746F7056616C75650709784646343034303430075472 + 6967676572061049734D6F7573654F7665723D747275650E5472696767657249 + 6E7665727365061149734D6F7573654F7665723D66616C73650000000C544272 + 7573684F626A65637400095374796C654E616D65060A666F726567726F756E64 + 0B42727573682E436F6C6F72070978464645414541454100000C544272757368 + 4F626A65637400095374796C654E616D65060973656C656374696F6E0B427275 + 73682E436F6C6F720709783936324138324532000007544C61796F7574000953 + 74796C654E616D650607636F6E74656E7405416C69676E0706436C69656E7406 + 4C6F636B6564090C4D617267696E732E4C65667405000000000000008000400B + 4D617267696E732E546F7005000000000000008000400D4D617267696E732E52 + 6967687405000000000000008000400E4D617267696E732E426F74746F6D0500 + 0000000000008000400A53697A652E5769647468050000000000CCCCF004400B + 53697A652E4865696768740500000000000000A003401453697A652E506C6174 + 666F726D44656661756C740800000754427574746F6E00095374796C654E616D + 65060B6D696E7573627574746F6E05416C69676E07044C6566740843616E466F + 6375730806437572736F72070763724172726F770C4D617267696E732E4C6566 + 7405000000000000008000400B4D617267696E732E546F700500000000000000 + 8000400D4D617267696E732E526967687405000000000000008000400E4D6172 + 67696E732E426F74746F6D05000000000000008000400A506F736974696F6E2E + 5805000000000000008000400A506F736974696F6E2E59050000000000000080 + 00400A53697A652E57696474680500000000000000A003400B53697A652E4865 + 696768740500000000000000A003401453697A652E506C6174666F726D446566 + 61756C74080B5374796C654C6F6F6B7570060B627574746F6E7374796C650005 + 54506174680005416C69676E070643656E74657209446174612E506174680A40 + 00000005000000000000000000803F00000000010000000000803F0000803F01 + 000000000000000000003F010000000000803F00000000030000000000803F00 + 0000000A46696C6C2E436F6C6F720708636C6157686974650748697454657374 + 080A53697A652E576964746805000000000000008002400B53697A652E486569 + 67687405000000000000008002401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E650000000754427574746F + 6E00095374796C654E616D65060A706C7573627574746F6E05416C69676E0705 + 52696768740843616E466F6375730806437572736F72070763724172726F770C + 4D617267696E732E4C65667405000000000000008000400B4D617267696E732E + 546F7005000000000000008000400D4D617267696E732E526967687405000000 + 000000008000400E4D617267696E732E426F74746F6D05000000000000008000 + 400A506F736974696F6E2E580500000000006666B405400A506F736974696F6E + 2E5905000000000000008000400A53697A652E57696474680500000000000000 + A003400B53697A652E4865696768740500000000000000A003401453697A652E + 506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570060B6275 + 74746F6E7374796C65000554506174680005416C69676E070643656E74657209 + 446174612E506174680A34000000040000000000000000000000000000000100 + 0000000000000000803F010000000000803F0000003F03000000000000000000 + 00000A46696C6C2E436F6C6F720708636C615768697465074869745465737408 + 0A53697A652E576964746805000000000000008002400B53697A652E48656967 + 687405000000000000008002401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C + 61796F757400095374796C654E616D65060D73697A65677269707374796C6505 + 416C69676E070643656E7465720A53697A652E57696474680500000000000000 + C803400B53697A652E4865696768740500000000000000C803401453697A652E + 506C6174666F726D44656661756C74080756697369626C6508085461624F7264 + 6572022B000A5452656374616E676C6500095374796C654E616D65060A526563 + 74616E676C653105416C69676E070643656E7465720A46696C6C2E436F6C6F72 + 07097846463630363036300A53697A652E57696474680500000000000000A000 + 400B53697A652E4865696768740500000000000000A000401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 00000A5452656374616E676C6500095374796C654E616D65060A52656374616E + 676C653205416C69676E070643656E7465720A46696C6C2E436F6C6F72070978 + 46463630363036300C4D617267696E732E4C6566740500000000000000A00240 + 0A53697A652E57696474680500000000000000A000400B53697A652E48656967 + 68740500000000000000A000401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E67 + 6C6500095374796C654E616D65060A52656374616E676C653305416C69676E07 + 0643656E7465720A46696C6C2E436F6C6F7207097846463630363036300C4D61 + 7267696E732E4C6566740500000000000000A002400B4D617267696E732E546F + 700500000000000000A002400A53697A652E57696474680500000000000000A0 + 00400B53697A652E4865696768740500000000000000A000401453697A652E50 + 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E + 6500000A5452656374616E676C6500095374796C654E616D65060A5265637461 + 6E676C653405416C69676E070643656E7465720A46696C6C2E436F6C6F720709 + 7846463630363036300B4D617267696E732E546F700500000000000000A00240 + 0A53697A652E57696474680500000000000000A000400B53697A652E48656967 + 68740500000000000000A000401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E67 + 6C6500095374796C654E616D65060A52656374616E676C653505416C69676E07 + 0643656E7465720A46696C6C2E436F6C6F7207097846463630363036300B4D61 + 7267696E732E546F700500000000000000A002400D4D617267696E732E526967 + 68740500000000000000A002400A53697A652E57696474680500000000000000 + A000400B53697A652E4865696768740500000000000000A000401453697A652E + 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F + 6E6500000A5452656374616E676C6500095374796C654E616D65060A52656374 + 616E676C653605416C69676E070643656E7465720A46696C6C2E436F6C6F7207 + 097846463630363036300C4D617267696E732E4C6566740500000000000000A0 + 02400E4D617267696E732E426F74746F6D0500000000000000A002400A53697A + 652E57696474680500000000000000A000400B53697A652E4865696768740500 + 000000000000A000401453697A652E506C6174666F726D44656661756C74080B + 5374726F6B652E4B696E6407044E6F6E65000000545046300A5452656374616E + 676C6500095374796C654E616D65060C746F6F6C6261727374796C6505416C69 + 676E070643656E7465720A46696C6C2E436F6C6F720709784646323532353235 + 0748697454657374080553696465730B06426F74746F6D000A53697A652E5769 + 6474680500000000000000C804400B53697A652E486569676874050000000000 + 0000C804401453697A652E506C6174666F726D44656661756C74080C5374726F + 6B652E436F6C6F7207097846463135313531350756697369626C650800005450 + 463007544C61796F757400095374796C654E616D65061570726F677265737362 + 61726572726F727374796C6505416C69676E070643656E7465720A53697A652E + 576964746805000000000033338505400B53697A652E48656967687405000000 + 00009999E104401453697A652E506C6174666F726D44656661756C7408075669 + 7369626C6508085461624F72646572022D000A5452656374616E676C65000953 + 74796C654E616D65060668747261636B05416C69676E0708436F6E74656E7473 + 0A46696C6C2E436F6C6F720709784646323032303230064C6F636B6564090748 + 697454657374080A53697A652E576964746805000000000033338505400B5369 + 7A652E4865696768740500000000009999E104401453697A652E506C6174666F + 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 + 3135000A5452656374616E676C6500095374796C654E616D65060A68696E6469 + 6361746F7205416C69676E07044C6566740A46696C6C2E436F6C6F7207097846 + 46453232413241064C6F636B6564090748697454657374080C4D617267696E73 + 2E4C656674050000000000000080FF3F0B4D617267696E732E546F7005000000 + 0000000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F + 0E4D617267696E732E426F74746F6D050000000000000080FF3F0A506F736974 + 696F6E2E58050000000000000080FF3F0A506F736974696F6E2E590500000000 + 00000080FF3F0A53697A652E57696474680500000000000000C804400B53697A + 652E4865696768740500000000009999D904401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000000A54 + 52656374616E676C6500095374796C654E616D65060676747261636B05416C69 + 676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978464632303230 + 3230064C6F636B6564090748697454657374080A53697A652E57696474680500 + 0000000033338505400B53697A652E4865696768740500000000009999E10440 + 1453697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F + 6C6F720709784646313531353135000A5452656374616E676C6500095374796C + 654E616D65060A76696E64696361746F7205416C69676E0706426F74746F6D0A + 46696C6C2E436F6C6F720709784646453232413241064C6F636B656409074869 + 7454657374080C4D617267696E732E4C656674050000000000000080FF3F0B4D + 617267696E732E546F70050000000000000080FF3F0D4D617267696E732E5269 + 676874050000000000000080FF3F0E4D617267696E732E426F74746F6D050000 + 000000000080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A50 + 6F736974696F6E2E5905000000000099998904400A53697A652E576964746805 + 000000000033338105400B53697A652E4865696768740500000000000000A803 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E65000000005450463007544C61796F757400095374796C65 + 4E616D65060F64726F707461726765747374796C6505416C69676E070643656E + 7465720A53697A652E5769647468050000000000ACAAD905400B53697A652E48 + 65696768740500000000000000CF05401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C6508085461624F72646572022E000A54526563 + 74616E676C650005416C69676E0708436F6E74656E74730946696C6C2E4B696E + 6407044E6F6E650748697454657374080A53697A652E57696474680500000000 + 00ACAAD905400B53697A652E4865696768740500000000000000CF0540145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 0708636C615768697465105374726F6B652E546869636B6E6573730500000000 + 0000008001400B5374726F6B652E446173680704446173680758526164697573 + 0500000000000000C0024007595261646975730500000000000000C002400005 + 545465787400095374796C654E616D6506047465787405416C69676E0706426F + 74746F6D0748697454657374080C4D617267696E732E4C656674050000000000 + 0000A002400D4D617267696E732E52696768740500000000000000A002400A50 + 6F736974696F6E2E580500000000000000A002400A506F736974696F6E2E5905 + 00000000000000D604400A53697A652E5769647468050000000000ACAAB10540 + 0B53697A652E4865696768740500000000000000C804401453697A652E506C61 + 74666F726D44656661756C7408165465787453657474696E67732E466F6E7443 + 6F6C6F720708636C6157686974650000001254466C6F61744B6579416E696D61 + 74696F6E00084475726174696F6E050000000000999999FE3F044B6579730E01 + 0001034B6579050000000000000080FE3F0556616C75650500000000000000A0 + 03C00001034B6579050000000000000080FF3F0000044C6F6F70090C50726F70 + 657274794E616D65060B50616464696E672E546F7010537461727446726F6D43 + 757272656E74080754726967676572060F4973447261674F7665723D74727565 + 00000554506174680005416C69676E070643656E74657209446174612E506174 + 680AC4000000100000000000000008EC8343F087A4430100000008EC8343083C + FB430200000035BE7143504DF9430200000012835C43A8E6F54302000000F067 + 4943F803F1430100000008EC8343FC0116440100000008EC8343FC5116440100 + 000000408443FC5116440100000010689A43FC412B4401000000081CD043F803 + F14302000000915DC64321E0F54302000000919DBB439643F94302000000087C + B043F833FB4301000000087CB043F087A4430100000008EC8343F087A4430300 + 000000000000000000000A46696C6C2E436F6C6F720708636C61576869746507 + 48697454657374080A53697A652E57696474680500000000000000C804400B53 + 697A652E4865696768740500000000000100C804401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000 + 5450463007544C61796F757400095374796C654E616D65061464726F70746172 + 6765746669656C647374796C6505416C69676E070643656E7465720A53697A65 + 2E576964746805000000000000A08A07400B53697A652E486569676874050000 + 0000000000B204401453697A652E506C6174666F726D44656661756C74080756 + 697369626C6508085461624F72646572022F000A5452656374616E676C650009 + 5374796C654E616D65060A52656374616E676C653105416C69676E0706436C69 + 656E740946696C6C2E4B696E6407044E6F6E650748697454657374080A53697A + 652E576964746805000000000000A08A07400B53697A652E4865696768740500 + 000000000000B204401453697A652E506C6174666F726D44656661756C74080C + 5374726F6B652E436F6C6F720709784646324138324532000554546578740009 + 5374796C654E616D6506047465787405416C69676E0706436C69656E74074869 + 7454657374080A53697A652E576964746805000000000000809A05400B53697A + 652E4865696768740500000000000000B204401453697A652E506C6174666F72 + 6D44656661756C7408165465787453657474696E67732E466F6E74436F6C6F72 + 0708636C615768697465000007544C61796F757400095374796C654E616D6506 + 074C61796F75743105416C69676E07044C6566740A53697A652E576964746805 + 00000000000000C805400B53697A652E4865696768740500000000000000B204 + 401453697A652E506C6174666F726D44656661756C7408000554506174680009 + 5374796C654E616D650605506174683105416C69676E070643656E7465720944 + 6174612E506174680A24010000180000000000000073B8AC43C14A7843010000 + 006D2717435849DD430200000086CB0A431078E343020000009683ED421078E3 + 4302000000DACED4425849DD43020000009A19BC42081CD743020000009A19BC + 424C17CD4302000000DACED4421DEAC64301000000B4288B4385EB6143010000 + 0068D1D4426811584202000000281CBC42CAA1264202000000281CBC42E6FBAC + 410200000068D1D442D04D144102000000A886ED429CC245C002000000CCCC0A + 439CC245C002000000B4281743D04D14410100000016B9AC43918D4B43020000 + 00BECFAF43A5BB5143020000009F5AB143F1D25943020000009F5AB14343EB61 + 4302000000A05AB1439C046A4302000000FACEAF43711D72430200000073B8AC + 43C14A78430300000073B8AC43C14A78430A46696C6C2E436F6C6F720708636C + 6157686974650748697454657374080A53697A652E5769647468050000000000 + 0000F002400B53697A652E4865696768740500000000000000F002401453697A + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E6508577261704D6F64650703466974000005545061746800095374796C + 654E616D650605506174683205416C69676E070643656E74657209446174612E + 506174680A24010000180000000000000073B8AC43C14A7843010000006D2717 + 435849DD430200000086CB0A431078E343020000009683ED421078E343020000 + 00DACED4425849DD43020000009A19BC42081CD743020000009A19BC424C17CD + 4302000000DACED4421DEAC64301000000B4288B4385EB61430100000068D1D4 + 426811584202000000281CBC42CAA1264202000000281CBC42E6FBAC41020000 + 0068D1D442D04D144102000000A886ED429CC245C002000000CCCC0A439CC245 + C002000000B4281743D04D14410100000016B9AC43918D4B4302000000BECFAF + 43A5BB5143020000009F5AB143F1D25943020000009F5AB14343EB6143020000 + 00A05AB1439C046A4302000000FACEAF43711D72430200000073B8AC43C14A78 + 430300000073B8AC43C14A78430A46696C6C2E436F6C6F720708636C61576869 + 74650748697454657374080C4D617267696E732E4C6566740500000000000000 + A004400A53697A652E57696474680500000000000000F002400B53697A652E48 + 65696768740500000000000000F002401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F64 + 650703466974000005545061746800095374796C654E616D6506055061746833 + 05416C69676E070643656E74657209446174612E506174680A24010000180000 + 000000000073B8AC43C14A7843010000006D2717435849DD430200000086CB0A + 431078E343020000009683ED421078E34302000000DACED4425849DD43020000 + 009A19BC42081CD743020000009A19BC424C17CD4302000000DACED4421DEAC6 + 4301000000B4288B4385EB61430100000068D1D4426811584202000000281CBC + 42CAA1264202000000281CBC42E6FBAC410200000068D1D442D04D1441020000 + 00A886ED429CC245C002000000CCCC0A439CC245C002000000B4281743D04D14 + 410100000016B9AC43918D4B4302000000BECFAF43A5BB5143020000009F5AB1 + 43F1D25943020000009F5AB14343EB614302000000A05AB1439C046A43020000 + 00FACEAF43711D72430200000073B8AC43C14A78430300000073B8AC43C14A78 + 430A46696C6C2E436F6C6F720708636C6157686974650748697454657374080D + 4D617267696E732E52696768740500000000000000A004400A53697A652E5769 + 6474680500000000000000F002400B53697A652E486569676874050000000000 + 0000F002401453697A652E506C6174666F726D44656661756C74080B5374726F + 6B652E4B696E6407044E6F6E6508577261704D6F646507034669740000000754 + 4C61796F757400095374796C654E616D6506074C61796F75743205416C69676E + 070552696768740A506F736974696F6E2E580500000000000040B106400A5369 + 7A652E57696474680500000000000000C805400B53697A652E48656967687405 + 00000000000000B204401453697A652E506C6174666F726D44656661756C7408 + 0005545061746800095374796C654E616D650605506174683105416C69676E07 + 0643656E74657209446174612E506174680A24010000180000000000000073B8 + AC43C14A7843010000006D2717435849DD430200000086CB0A431078E3430200 + 00009683ED421078E34302000000DACED4425849DD43020000009A19BC42081C + D743020000009A19BC424C17CD4302000000DACED4421DEAC64301000000B428 + 8B4385EB61430100000068D1D4426811584202000000281CBC42CAA126420200 + 0000281CBC42E6FBAC410200000068D1D442D04D144102000000A886ED429CC2 + 45C002000000CCCC0A439CC245C002000000B4281743D04D14410100000016B9 + AC43918D4B4302000000BECFAF43A5BB5143020000009F5AB143F1D259430200 + 00009F5AB14343EB614302000000A05AB1439C046A4302000000FACEAF43711D + 72430200000073B8AC43C14A78430300000073B8AC43C14A78430A46696C6C2E + 436F6C6F720708636C6157686974650748697454657374080D526F746174696F + 6E416E676C650500000000000000B406400A53697A652E576964746805000000 + 00000000F002400B53697A652E4865696768740500000000000000F002401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E6508577261704D6F64650703466974000005545061746800095374 + 796C654E616D650605506174683205416C69676E070643656E74657209446174 + 612E506174680A24010000180000000000000073B8AC43C14A7843010000006D + 2717435849DD430200000086CB0A431078E343020000009683ED421078E34302 + 000000DACED4425849DD43020000009A19BC42081CD743020000009A19BC424C + 17CD4302000000DACED4421DEAC64301000000B4288B4385EB61430100000068 + D1D4426811584202000000281CBC42CAA1264202000000281CBC42E6FBAC4102 + 00000068D1D442D04D144102000000A886ED429CC245C002000000CCCC0A439C + C245C002000000B4281743D04D14410100000016B9AC43918D4B4302000000BE + CFAF43A5BB5143020000009F5AB143F1D25943020000009F5AB14343EB614302 + 000000A05AB1439C046A4302000000FACEAF43711D72430200000073B8AC43C1 + 4A78430300000073B8AC43C14A78430A46696C6C2E436F6C6F720708636C6157 + 686974650748697454657374080C4D617267696E732E4C656674050000000000 + 0000A004400D526F746174696F6E416E676C650500000000000000B406400A53 + 697A652E57696474680500000000000000F002400B53697A652E486569676874 + 0500000000000000F002401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F646507034669 + 74000005545061746800095374796C654E616D650605506174683305416C6967 + 6E070643656E74657209446174612E506174680A240100001800000000000000 + 73B8AC43C14A7843010000006D2717435849DD430200000086CB0A431078E343 + 020000009683ED421078E34302000000DACED4425849DD43020000009A19BC42 + 081CD743020000009A19BC424C17CD4302000000DACED4421DEAC64301000000 + B4288B4385EB61430100000068D1D4426811584202000000281CBC42CAA12642 + 02000000281CBC42E6FBAC410200000068D1D442D04D144102000000A886ED42 + 9CC245C002000000CCCC0A439CC245C002000000B4281743D04D144101000000 + 16B9AC43918D4B4302000000BECFAF43A5BB5143020000009F5AB143F1D25943 + 020000009F5AB14343EB614302000000A05AB1439C046A4302000000FACEAF43 + 711D72430200000073B8AC43C14A78430300000073B8AC43C14A78430A46696C + 6C2E436F6C6F720708636C6157686974650748697454657374080D4D61726769 + 6E732E52696768740500000000000000A004400D526F746174696F6E416E676C + 650500000000000000B406400A53697A652E57696474680500000000000000F0 + 02400B53697A652E4865696768740500000000000000F002401453697A652E50 + 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E + 6508577261704D6F6465070346697400000000005450463007544C61796F7574 + 00095374796C654E616D65060C706F706F7665727374796C6505416C69676E07 + 0643656E7465720756697369626C6508085461624F726465720230000A545265 + 6374616E676C6500095374796C654E616D650602626705416C69676E0706436C + 69656E740A46696C6C2E436F6C6F720709784646323032303230074869745465 + 7374080A53697A652E57696474680500000000000000C804400B53697A652E48 + 65696768740500000000000000C804401453697A652E506C6174666F726D4465 + 6661756C74080C5374726F6B652E436F6C6F7207097846463135313531350007 + 544C61796F757400095374796C654E616D650607636F6E74656E7405416C6967 + 6E0706436C69656E740C4D617267696E732E4C656674050000000000000080FF + 3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E73 + 2E5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D + 050000000000000080FF3F0A53697A652E57696474680500000000000000C004 + 400B53697A652E4865696768740500000000000000C004401453697A652E506C + 6174666F726D44656661756C740800000D54536861646F774566666563740008 + 44697374616E63650500000000000000C0004009446972656374696F6E050000 + 0000000000B4054008536F66746E657373050000000000000080FE3F074F7061 + 63697479050000000000000080FE3F0B536861646F77436F6C6F720708636C61 + 426C61636B000000005450463007544C61796F757400095374796C654E616D65 + 060D706F707570626F787374796C6505416C69676E070643656E7465720A5369 + 7A652E57696474680500000000000000C805400B53697A652E48656967687405 + 00000000000000C803401453697A652E506C6174666F726D44656661756C7408 + 0756697369626C6508085461624F726465720231000A5452656374616E676C65 + 00095374796C654E616D65060A6261636B67726F756E6405416C69676E070843 + 6F6E74656E74730A46696C6C2E436F6C6F720709784646323032303230074869 + 7454657374080A53697A652E57696474680500000000000000C805400B53697A + 652E4865696768740500000000000000C803401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E + 696D6174696F6E315374796C65084475726174696F6E05000000000000000000 + 000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374617274 + 56616C756507097846463230323032300953746F7056616C7565070978464634 + 30343034300754726967676572062049734D6F7573654F7665723D747275653B + 4973507265737365643D66616C73650E54726967676572496E76657273650621 + 49734D6F7573654F7665723D66616C73653B4973507265737365643D66616C73 + 6500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614 + 436F6C6F72416E696D6174696F6E325374796C65084475726174696F6E050000 + 00000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F + 720A537461727456616C756507097846463430343034300953746F7056616C75 + 6507097846463241383245320754726967676572062049734D6F7573654F7665 + 723D747275653B4973507265737365643D747275653B0E54726967676572496E + 7665727365062049734D6F7573654F7665723D747275653B4973507265737365 + 643D66616C736500000007544C61796F75740005416C69676E07084669745269 + 6768740A506F736974696F6E2E5805000000000000009605400A53697A652E57 + 696474680500000000000000C803400B53697A652E4865696768740500000000 + 000000C803401453697A652E506C6174666F726D44656661756C740800055450 + 6174680005416C69676E070643656E74657209446174612E506174680A400000 + 000500000000000000000000000000803F010000000000803F0000803F010000 + 000000003F0000000001000000000000000000803F0300000000000000000000 + 000A46696C6C2E436F6C6F720708636C6157686974650748697454657374080B + 4D617267696E732E546F700500000000000000E001C00A53697A652E57696474 + 6805000000000000008002400B53697A652E4865696768740500000000000000 + 8001401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E6500000554506174680005416C69676E070643656E74 + 657209446174612E506174680A34000000040000000000000000000000000000 + 00010000000000803F00000000010000000000003F0000803F03000000000000 + 00000000000A46696C6C2E436F6C6F720708636C615768697465074869745465 + 7374080B4D617267696E732E546F700500000000000000C001400A53697A652E + 576964746805000000000000008002400B53697A652E48656967687405000000 + 000000008001401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E6500000005545465787400095374796C654E + 616D6506047465787405416C69676E0706436C69656E74074869745465737408 + 0C4D617267696E732E4C656674050000000000000080FF3F0B4D617267696E73 + 2E546F70050000000000000080FF3F0D4D617267696E732E5269676874050000 + 000000000080FF3F0E4D617267696E732E426F74746F6D050000000000000080 + FF3F0A53697A652E576964746805000000000000009205400B53697A652E4865 + 696768740500000000000000B803401453697A652E506C6174666F726D446566 + 61756C74080454657874060454657874165465787453657474696E67732E466F + 6E74436F6C6F720708636C615768697465000000545046300A5452656374616E + 676C6500095374796C654E616D6506147374617475736261726E6F6772697073 + 74796C6505416C69676E070643656E7465720C436C69704368696C6472656E09 + 0A46696C6C2E436F6C6F7207097846463235323532350553696465730B03546F + 70000A53697A652E57696474680500000000000000F004400B53697A652E4865 + 696768740500000000000000C804401453697A652E506C6174666F726D446566 + 61756C74080C5374726F6B652E436F6C6F720709784646313531353135075669 + 7369626C650800005450463007544C61796F757400095374796C654E616D6506 + 13736D616C6C7363726F6C6C6261727374796C6505416C69676E070643656E74 + 65720756697369626C6508085461624F726465720233000654547261636B0009 + 5374796C654E616D65060668747261636B05416C69676E0706436C69656E7406 + 4C6F636B6564090B4F7269656E746174696F6E070A486F72697A6F6E74616C0A + 53697A652E57696474680500000000000000C804400B53697A652E4865696768 + 740500000000000000C804401453697A652E506C6174666F726D44656661756C + 74080B5374796C654C6F6F6B757006147363726F6C6C62617268747261636B73 + 74796C6500000654547261636B00095374796C654E616D65060676747261636B + 05416C69676E0706436C69656E74064C6F636B6564090B4F7269656E74617469 + 6F6E070A486F72697A6F6E74616C0A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000000000C804401453697A65 + 2E506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570061473 + 63726F6C6C62617276747261636B7374796C650000005450463007544C61796F + 757400095374796C654E616D65060D73706C69747465727374796C6505416C69 + 676E070643656E7465720A53697A652E57696474680500000000000000A90440 + 0B53697A652E4865696768740500000000000080C105401453697A652E506C61 + 74666F726D44656661756C74080756697369626C6508085461624F7264657202 + 34000A5452656374616E676C6500095374796C654E616D65060A52656374616E + 676C653105416C69676E0706436C69656E740A46696C6C2E436F6C6F72070978 + 46463330333033300748697454657374080553696465730B044C656674055269 + 676874000A53697A652E57696474680500000000000000A904400B53697A652E + 4865696768740500000000000080C105401453697A652E506C6174666F726D44 + 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313500 + 0007544C61796F757400095374796C654E616D6506064C61796F757405416C69 + 676E0706436C69656E740A53697A652E57696474680500000000000000A90440 + 0B53697A652E4865696768740500000000000080C105401453697A652E506C61 + 74666F726D44656661756C74080007544C61796F757400095374796C654E616D + 6506046772697005416C69676E070A5665727443656E746572064C6F636B6564 + 090A506F736974696F6E2E5905000000000000008004400A53697A652E576964 + 74680500000000000000A904400B53697A652E48656967687405000000000000 + 008004401453697A652E506C6174666F726D44656661756C7408000754436972 + 636C6500095374796C654E616D650607436972636C653305416C69676E070643 + 656E7465720A46696C6C2E436F6C6F7207097846463430343034300748697454 + 657374080E4D617267696E732E426F74746F6D0500000000000000A003400A53 + 697A652E57696474680500000000000000E001400B53697A652E486569676874 + 0500000000000000E001401453697A652E506C6174666F726D44656661756C74 + 080C5374726F6B652E436F6C6F72070978464631353135313500000754436972 + 636C6500095374796C654E616D650607436972636C653205416C69676E070643 + 656E7465720A46696C6C2E436F6C6F7207097846463430343034300748697454 + 657374080B4D617267696E732E546F700500000000000000A003400A53697A65 + 2E57696474680500000000000000E001400B53697A652E486569676874050000 + 0000000000E001401453697A652E506C6174666F726D44656661756C74080C53 + 74726F6B652E436F6C6F72070978464631353135313500000754436972636C65 + 00095374796C654E616D650607436972636C653105416C69676E070643656E74 + 65720A46696C6C2E436F6C6F7207097846463430343034300748697454657374 + 080A53697A652E57696474680500000000000000E001400B53697A652E486569 + 6768740500000000000000E001401453697A652E506C6174666F726D44656661 + 756C74080C5374726F6B652E436F6C6F72070978464631353135313500000000 + 005450463007544C61796F757400095374796C654E616D650610636C6F736562 + 7574746F6E7374796C6505416C69676E070643656E7465720A53697A652E5769 + 6474680500000000000000C804400B53697A652E486569676874050000000000 + 0000C803401453697A652E506C6174666F726D44656661756C74080756697369 + 626C6508085461624F726465720235000A5452656374616E676C650009537479 + 6C654E616D65060B636C6F7365627574746F6E05416C69676E0706436C69656E + 740A46696C6C2E436F6C6F720709784646323032303230074869745465737408 + 0A53697A652E57696474680500000000000000C804400B53697A652E48656967 + 68740500000000000000C803401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F + 6E315374796C65084475726174696F6E05000000000000000000000C50726F70 + 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 + 097846463230323032300953746F7056616C7565070978464646463631353707 + 54726967676572062049734D6F7573654F7665723D747275653B497350726573 + 7365643D66616C73650E54726967676572496E7665727365062149734D6F7573 + 654F7665723D66616C73653B4973507265737365643D66616C736500000F5443 + 6F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F7241 + 6E696D6174696F6E325374796C65084475726174696F6E050000000000000000 + 00000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 + 7456616C756507097846464646363135370953746F7056616C75650709784646 + 4532344634350754726967676572061F49734D6F7573654F7665723D74727565 + 3B4973507265737365643D747275650E54726967676572496E76657273650620 + 49734D6F7573654F7665723D747275653B4973507265737365643D66616C7365 + 00000005545061746800095374796C654E616D650605506174683105416C6967 + 6E070643656E74657209446174612E506174680AC40000001000000000000000 + 0000A0C00000704101000000000070410000A0C001000000000048420000F041 + 010000000000AA420000A0C0010000000000D242000070410100000000008C42 + 00004842010000000000D2420000B442010000000000AA420000DC4202000000 + 3BDF34429E6F8C4202000000FE547D427FAAB042020000000000484200009642 + 01000000000070410000DC42010000000000A0C00000B442010000000000F041 + 00005C42010000000000A0C000007041030000000000A0C0000070410A46696C + 6C2E436F6C6F720708636C6157686974650748697454657374080A53697A652E + 57696474680500000000000000A002400B53697A652E48656967687405000000 + 00000000A002401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E650000005450463007544C61796F75740009 + 5374796C654E616D65060E6D6178627574746F6E7374796C6505416C69676E07 + 0643656E7465720A53697A652E57696474680500000000000000C804400B5369 + 7A652E4865696768740500000000000000C803401453697A652E506C6174666F + 726D44656661756C74080756697369626C6508085461624F726465720236000A + 5452656374616E676C6500095374796C654E616D6506096D6178627574746F6E + 05416C69676E0706436C69656E740A46696C6C2E436F6C6F7207097846463230 + 323032300748697454657374080A53697A652E57696474680500000000000000 + C804400B53697A652E4865696768740500000000000000C803401453697A652E + 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F + 6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614 + 436F6C6F72416E696D6174696F6E315374796C65084475726174696F6E050000 + 00000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F + 720A537461727456616C756507097846463230323032300953746F7056616C75 + 6507097846463241383245320754726967676572062049734D6F7573654F7665 + 723D747275653B4973507265737365643D66616C73650E54726967676572496E + 7665727365062149734D6F7573654F7665723D66616C73653B49735072657373 + 65643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C + 654E616D650614436F6C6F72416E696D6174696F6E325374796C650844757261 + 74696F6E05000000000000000000000C50726F70657274794E616D65060A4669 + 6C6C2E436F6C6F720A537461727456616C756507097846463241383245320953 + 746F7056616C756507097846463137353739430754726967676572061F49734D + 6F7573654F7665723D747275653B4973507265737365643D747275650E547269 + 67676572496E7665727365062049734D6F7573654F7665723D747275653B4973 + 507265737365643D66616C736500000005545061746800095374796C654E616D + 650605506174683105416C69676E070643656E74657209446174612E50617468 + 0A5800000007000000000000000000C8420000C8420100000000002F440000C8 + 420100000000002F4400002F4401000000008009440080094401000000008009 + 4400007A430100000000007A4300007A43030000000000C8420000C8420A4669 6C6C2E436F6C6F720708636C6157686974650748697454657374080A53697A65 2E57696474680500000000000000A002400B53697A652E486569676874050000 0000000000A002401453697A652E506C6174666F726D44656661756C74080B53 74726F6B652E4B696E6407044E6F6E650000005450463007544C61796F757400 - 095374796C654E616D65060E6D6178627574746F6E7374796C6505416C69676E + 095374796C654E616D65060E726573627574746F6E7374796C6505416C69676E 070643656E7465720A53697A652E57696474680500000000000000C804400B53 697A652E4865696768740500000000000000C803401453697A652E506C617466 - 6F726D44656661756C74080756697369626C6508085461624F72646572022E00 - 0A5452656374616E676C6500095374796C654E616D6506096D6178627574746F + 6F726D44656661756C74080756697369626C6508085461624F72646572023700 + 0A5452656374616E676C6500095374796C654E616D650609726573627574746F 6E05416C69676E0706436C69656E740A46696C6C2E436F6C6F72070978464632 30323032300748697454657374080A53697A652E576964746805000000000000 00C804400B53697A652E4865696768740500000000000000C803401453697A65 @@ -9362,209 +9397,67 @@ object MainForm: TMainForm 680A5800000007000000000000000000C8420000C8420100000000002F440000 C8420100000000002F4400002F44010000000080094400800944010000000080 094400007A430100000000007A4300007A43030000000000C8420000C8420A46 - 696C6C2E436F6C6F720708636C6157686974650748697454657374080A53697A - 652E57696474680500000000000000A002400B53697A652E4865696768740500 - 000000000000A002401453697A652E506C6174666F726D44656661756C74080B - 5374726F6B652E4B696E6407044E6F6E650000005450463007544C61796F7574 - 00095374796C654E616D65060E726573627574746F6E7374796C6505416C6967 - 6E070643656E7465720A53697A652E57696474680500000000000000C804400B - 53697A652E4865696768740500000000000000C803401453697A652E506C6174 - 666F726D44656661756C74080756697369626C6508085461624F72646572022F - 000A5452656374616E676C6500095374796C654E616D65060972657362757474 - 6F6E05416C69676E0706436C69656E740A46696C6C2E436F6C6F720709784646 - 3230323032300748697454657374080A53697A652E5769647468050000000000 - 0000C804400B53697A652E4865696768740500000000000000C803401453697A - 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 - 4E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 - 0614436F6C6F72416E696D6174696F6E315374796C65084475726174696F6E05 + 696C6C2E436F6C6F720708636C6157686974650748697454657374080D526F74 + 6174696F6E416E676C650500000000000000B406400A53697A652E5769647468 + 0500000000000000A002400B53697A652E4865696768740500000000000000A0 + 02401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E650000005450463007544C61796F757400095374796C65 + 4E616D65060E6D696E627574746F6E7374796C6505416C69676E070643656E74 + 65720A53697A652E57696474680500000000000000C804400B53697A652E4865 + 696768740500000000000000C803401453697A652E506C6174666F726D446566 + 61756C74080756697369626C6508085461624F726465720238000A5452656374 + 616E676C6500095374796C654E616D6506096D696E627574746F6E05416C6967 + 6E0706436C69656E740A46696C6C2E436F6C6F72070978464632303230323007 + 48697454657374080A53697A652E57696474680500000000000000C804400B53 + 697A652E4865696768740500000000000000C803401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72 + 416E696D6174696F6E315374796C65084475726174696F6E0500000000000000 + 0000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461 + 727456616C756507097846463230323032300953746F7056616C756507097846 + 463241383245320754726967676572062049734D6F7573654F7665723D747275 + 653B4973507265737365643D66616C73650E54726967676572496E7665727365 + 062149734D6F7573654F7665723D66616C73653B4973507265737365643D6661 + 6C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 + 0614436F6C6F72416E696D6174696F6E325374796C65084475726174696F6E05 000000000000000000000C50726F70657274794E616D65060A46696C6C2E436F - 6C6F720A537461727456616C756507097846463230323032300953746F705661 - 6C756507097846463241383245320754726967676572062049734D6F7573654F - 7665723D747275653B4973507265737365643D66616C73650E54726967676572 - 496E7665727365062149734D6F7573654F7665723D66616C73653B4973507265 - 737365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 - 796C654E616D650614436F6C6F72416E696D6174696F6E325374796C65084475 - 726174696F6E05000000000000000000000C50726F70657274794E616D65060A - 46696C6C2E436F6C6F720A537461727456616C75650709784646324138324532 - 0953746F7056616C756507097846463137353739430754726967676572061F49 - 734D6F7573654F7665723D747275653B4973507265737365643D747275650E54 - 726967676572496E7665727365062049734D6F7573654F7665723D747275653B - 4973507265737365643D66616C736500000005545061746800095374796C654E - 616D650605506174683105416C69676E070643656E74657209446174612E5061 - 74680A5800000007000000000000000000C8420000C8420100000000002F4400 - 00C8420100000000002F4400002F440100000000800944008009440100000000 - 80094400007A430100000000007A4300007A43030000000000C8420000C8420A - 46696C6C2E436F6C6F720708636C6157686974650748697454657374080D526F - 746174696F6E416E676C650500000000000000B406400A53697A652E57696474 - 680500000000000000A002400B53697A652E4865696768740500000000000000 - A002401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 - 2E4B696E6407044E6F6E650000005450463007544C61796F757400095374796C - 654E616D65060E6D696E627574746F6E7374796C6505416C69676E070643656E - 7465720A53697A652E57696474680500000000000000C804400B53697A652E48 - 65696768740500000000000000C803401453697A652E506C6174666F726D4465 - 6661756C74080756697369626C6508085461624F726465720230000A54526563 - 74616E676C6500095374796C654E616D6506096D696E627574746F6E05416C69 - 676E0706436C69656E740A46696C6C2E436F6C6F720709784646323032303230 - 0748697454657374080A53697A652E57696474680500000000000000C804400B - 53697A652E4865696768740500000000000000C803401453697A652E506C6174 - 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F - 54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F - 72416E696D6174696F6E315374796C65084475726174696F6E05000000000000 - 000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 - 61727456616C756507097846463230323032300953746F7056616C7565070978 - 46463241383245320754726967676572062049734D6F7573654F7665723D7472 - 75653B4973507265737365643D66616C73650E54726967676572496E76657273 - 65062149734D6F7573654F7665723D66616C73653B4973507265737365643D66 - 616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D - 650614436F6C6F72416E696D6174696F6E325374796C65084475726174696F6E - 05000000000000000000000C50726F70657274794E616D65060A46696C6C2E43 - 6F6C6F720A537461727456616C756507097846463241383245320953746F7056 - 616C756507097846463137353739430754726967676572061F49734D6F757365 - 4F7665723D747275653B4973507265737365643D747275650E54726967676572 - 496E7665727365062049734D6F7573654F7665723D747275653B497350726573 - 7365643D66616C736500000005545061746800095374796C654E616D65060550 - 6174683105416C69676E070643656E74657209446174612E506174680A400000 - 00050000000000000000002F44008009440100000000002F4400002F44010000 - 000000C84200002F44010000000000C842008009440300000000002F44008009 - 440A46696C6C2E436F6C6F720708636C6157686974650748697454657374080B - 4D617267696E732E546F700500000000000000A002400D526F746174696F6E41 - 6E676C650500000000000000B406400A53697A652E5769647468050000000000 - 0000A002400B53697A652E4865696768740500000000000000C000401453697A - 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 - 4E6F6E650000005450463007544C61796F757400095374796C654E616D65060F - 746F6F6C77696E646F777374796C6505416C69676E070643656E7465720A5369 - 7A652E576964746805000000000056D5AF07400B53697A652E48656967687405 - 00000000000000B306401453697A652E506C6174666F726D44656661756C7408 - 0756697369626C6508085461624F726465720231000A5452656374616E676C65 - 00095374796C654E616D6506046D61736B05416C69676E0708436F6E74656E74 - 730A46696C6C2E436F6C6F7207097846463130313031300A53697A652E576964 - 746805000000000056D5AF07400B53697A652E48656967687405000000000000 - 00B306401453697A652E506C6174666F726D44656661756C74080B5374726F6B - 652E4B696E6407044E6F6E650756697369626C6508000007544C61796F757400 - 095374796C654E616D6506046C65667405416C69676E07084D6F73744C656674 - 064C6F636B6564090A506F736974696F6E2E590500000000000000C803400A53 - 697A652E57696474680500000000000000A001400B53697A652E486569676874 - 05000000000000009A06401453697A652E506C6174666F726D44656661756C74 - 08000A5452656374616E676C650005416C69676E07084D6F73744C6566740A46 - 696C6C2E436F6C6F720709784646323032303230074869745465737408055369 - 6465730B044C656674055269676874000A53697A652E57696474680500000000 - 000000A001400B53697A652E4865696768740500000000000000950640145369 - 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 - 070978464631353135313500000A5452656374616E676C6500095374796C654E - 616D65060A52656374616E676C653105416C69676E070A4D6F7374426F74746F - 6D13456E61626C6544726167486967686C69676874080A46696C6C2E436F6C6F - 7207097846463230323032300748697454657374080A506F736974696F6E2E59 - 05000000000000009506400553696465730B044C65667406426F74746F6D000A - 53697A652E57696474680500000000000000A001400B53697A652E4865696768 - 740500000000000000A001401453697A652E506C6174666F726D44656661756C - 74080C5374726F6B652E436F6C6F7207097846463135313531350007544C6179 - 6F757400095374796C654E616D6506074C61796F75743305416C69676E07094D - 6F737452696768740A506F736974696F6E2E5805000000000000008001400A53 - 697A652E5769647468050000000000000080FF3F0B53697A652E486569676874 - 0500000000000000A001401453697A652E506C6174666F726D44656661756C74 - 08000A5452656374616E676C6500095374796C654E616D65060A52656374616E - 676C653105416C69676E0703546F700A46696C6C2E436F6C6F72070978464631 - 35313531350748697454657374080A53697A652E576964746805000000000000 - 0080FF3F0B53697A652E486569676874050000000000000080FF3F1453697A65 + 6C6F720A537461727456616C756507097846463241383245320953746F705661 + 6C756507097846463137353739430754726967676572061F49734D6F7573654F + 7665723D747275653B4973507265737365643D747275650E5472696767657249 + 6E7665727365062049734D6F7573654F7665723D747275653B49735072657373 + 65643D66616C736500000005545061746800095374796C654E616D6506055061 + 74683105416C69676E070643656E74657209446174612E506174680A40000000 + 050000000000000000002F44008009440100000000002F4400002F4401000000 + 0000C84200002F44010000000000C842008009440300000000002F4400800944 + 0A46696C6C2E436F6C6F720708636C6157686974650748697454657374080B4D + 617267696E732E546F700500000000000000A002400D526F746174696F6E416E + 676C650500000000000000B406400A53697A652E576964746805000000000000 + 00A002400B53697A652E4865696768740500000000000000C000401453697A65 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E - 6F6E65000000000007544C61796F757400095374796C654E616D650605726967 - 687405416C69676E07094D6F73745269676874064C6F636B6564090A506F7369 - 74696F6E2E580500000000005655AD07400A506F736974696F6E2E5905000000 - 00000000C803400A53697A652E57696474680500000000000000A001400B5369 - 7A652E48656967687405000000000000009A06401453697A652E506C6174666F - 726D44656661756C7408000A5452656374616E676C650005416C69676E07094D - 6F737452696768740A46696C6C2E436F6C6F7207097846463230323032300748 - 697454657374080553696465730B044C656674055269676874000A53697A652E - 57696474680500000000000000A001400B53697A652E48656967687405000000 - 000000009506401453697A652E506C6174666F726D44656661756C74080C5374 - 726F6B652E436F6C6F72070978464631353135313500000A5452656374616E67 - 6C6500095374796C654E616D65060A52656374616E676C653105416C69676E07 - 0A4D6F7374426F74746F6D13456E61626C6544726167486967686C6967687408 - 0A46696C6C2E436F6C6F7207097846463230323032300748697454657374080A - 506F736974696F6E2E5905000000000000009506400553696465730B06426F74 - 746F6D055269676874000A53697A652E57696474680500000000000000A00140 - 0B53697A652E4865696768740500000000000000A001401453697A652E506C61 - 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 - 35313531350007544C61796F757400095374796C654E616D6506074C61796F75 - 743305416C69676E07084D6F73744C6566740A53697A652E5769647468050000 - 000000000080FF3F0B53697A652E4865696768740500000000000000A0014014 - 53697A652E506C6174666F726D44656661756C7408000A5452656374616E676C - 6500095374796C654E616D65060A52656374616E676C653105416C69676E0703 - 546F700A46696C6C2E436F6C6F72070978464631353135313507486974546573 - 74080A53697A652E5769647468050000000000000080FF3F0B53697A652E4865 - 69676874050000000000000080FF3F1453697A652E506C6174666F726D446566 - 61756C74080B5374726F6B652E4B696E6407044E6F6E6500000000000A545265 - 6374616E676C650005416C69676E07074D6F7374546F700A46696C6C2E436F6C - 6F720709784646323032303230064C6F636B6564090748697454657374080A53 - 697A652E576964746805000000000056D5AF07400B53697A652E486569676874 - 0500000000000000C803401453697A652E506C6174666F726D44656661756C74 - 080C5374726F6B652E436F6C6F7207097846463135313531350007544C61796F - 757400095374796C654E616D65060763617074696F6E05416C69676E0708436F - 6E74656E7473064C6F636B6564090748697454657374090A53697A652E576964 - 746805000000000056D5AF07400B53697A652E48656967687405000000000000 - 00C803401453697A652E506C6174666F726D44656661756C7408000007544C61 - 796F75740005416C69676E0706436C69656E74064C6F636B6564090C4D617267 - 696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F7005 - 0000000000000080FF3F0D4D617267696E732E52696768740500000000000000 - 80FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A5369 - 7A652E576964746805000000000056D5AE07400B53697A652E48656967687405 - 00000000000000B803401453697A652E506C6174666F726D44656661756C7408 - 0007544C61796F75740005416C69676E07044C656674064C6F636B6564090A53 - 697A652E576964746805000000000000009002400B53697A652E486569676874 - 0500000000000000B803401453697A652E506C6174666F726D44656661756C74 - 08000007544C61796F757400095374796C654E616D65060773797362746E7305 - 416C69676E0706436C69656E74064C6F636B6564090A53697A652E5769647468 - 0500000000005655AA07400B53697A652E4865696768740500000000000000B8 - 03401453697A652E506C6174666F726D44656661756C7408000C545370656564 - 427574746F6E00095374796C654E616D650605636C6F736505416C69676E0705 - 5269676874064C6F636B6564090A506F736974696F6E2E5805000000000056D5 - 9D07400A53697A652E57696474680500000000000000C803400B53697A652E48 - 65696768740500000000000000B803401453697A652E506C6174666F726D4465 - 6661756C74080B5374796C654C6F6F6B75700610636C6F7365627574746F6E73 - 74796C65000005545465787400095374796C654E616D6506057469746C650541 - 6C69676E0706436C69656E74064C6F636B6564090748697454657374080A5369 - 7A652E576964746805000000000056D59D07400B53697A652E48656967687405 - 00000000000000B803401453697A652E506C6174666F726D44656661756C7408 - 045465787406055469746C65165465787453657474696E67732E466F6E74436F - 6C6F720708636C615768697465000000000007544C61796F757400095374796C - 654E616D650606636C69656E7405416C69676E0706436C69656E74064C6F636B - 6564090748697454657374090A53697A652E576964746805000000000056D5AA - 07400B53697A652E48656967687405000000000000009506401453697A652E50 - 6C6174666F726D44656661756C7408000007544C61796F757400095374796C65 - 4E616D650606626F74746F6D05416C69676E0706426F74746F6D064C6F636B65 - 64090A506F736974696F6E2E580500000000000000A001400A506F736974696F - 6E2E590500000000000000AE06400A53697A652E576964746805000000000056 - D5AA07400B53697A652E4865696768740500000000000000A001401453697A65 - 2E506C6174666F726D44656661756C7408000A5452656374616E676C65000953 - 74796C654E616D6506047265637405416C69676E0706426F74746F6D0A46696C - 6C2E436F6C6F7207097846463230323032300553696465730B03546F7006426F - 74746F6D000A53697A652E576964746805000000000056D5AA07400B53697A65 - 2E4865696768740500000000000000A001401453697A652E506C6174666F726D - 44656661756C74080C5374726F6B652E436F6C6F720709784646313531353135 - 000000005450463007544C61796F757400095374796C654E616D65061177696E - 646F77626F726465727374796C6505416C69676E070643656E7465720A53697A + 6F6E650000005450463007544C61796F757400095374796C654E616D65060F74 + 6F6F6C77696E646F777374796C6505416C69676E070643656E7465720A53697A 652E576964746805000000000056D5AF07400B53697A652E4865696768740500 000000000000B306401453697A652E506C6174666F726D44656661756C740807 - 56697369626C6508085461624F726465720232000A5452656374616E676C6500 + 56697369626C6508085461624F726465720239000A5452656374616E676C6500 095374796C654E616D6506046D61736B05416C69676E0708436F6E74656E7473 0A46696C6C2E436F6C6F7207097846463130313031300A53697A652E57696474 6805000000000056D5AF07400B53697A652E4865696768740500000000000000 B306401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 2E4B696E6407044E6F6E650756697369626C6508000007544C61796F75740009 5374796C654E616D6506046C65667405416C69676E07084D6F73744C65667406 - 4C6F636B6564090A506F736974696F6E2E590500000000000000F003400A5369 + 4C6F636B6564090A506F736974696F6E2E590500000000000000C803400A5369 7A652E57696474680500000000000000A001400B53697A652E48656967687405 - 000000000000009506401453697A652E506C6174666F726D44656661756C7408 + 000000000000009A06401453697A652E506C6174666F726D44656661756C7408 000A5452656374616E676C650005416C69676E07084D6F73744C6566740A4669 6C6C2E436F6C6F72070978464632303230323007486974546573740805536964 65730B044C656674055269676874000A53697A652E5769647468050000000000 - 0000A001400B53697A652E48656967687405000000000000009006401453697A + 0000A001400B53697A652E48656967687405000000000000009506401453697A 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 0978464631353135313500000A5452656374616E676C6500095374796C654E61 6D65060A52656374616E676C653105416C69676E070A4D6F7374426F74746F6D 13456E61626C6544726167486967686C69676874080A46696C6C2E436F6C6F72 07097846463230323032300748697454657374080A506F736974696F6E2E5905 - 000000000000009006400553696465730B044C65667406426F74746F6D000A53 + 000000000000009506400553696465730B044C65667406426F74746F6D000A53 697A652E57696474680500000000000000A001400B53697A652E486569676874 0500000000000000A001401453697A652E506C6174666F726D44656661756C74 080C5374726F6B652E436F6C6F7207097846463135313531350007544C61796F @@ -9580,18 +9473,18 @@ object MainForm: TMainForm 6E65000000000007544C61796F757400095374796C654E616D65060572696768 7405416C69676E07094D6F73745269676874064C6F636B6564090A506F736974 696F6E2E580500000000005655AD07400A506F736974696F6E2E590500000000 - 000000F003400A53697A652E57696474680500000000000000A001400B53697A - 652E48656967687405000000000000009506401453697A652E506C6174666F72 + 000000C803400A53697A652E57696474680500000000000000A001400B53697A + 652E48656967687405000000000000009A06401453697A652E506C6174666F72 6D44656661756C7408000A5452656374616E676C650005416C69676E07094D6F 737452696768740A46696C6C2E436F6C6F720709784646323032303230074869 7454657374080553696465730B044C656674055269676874000A53697A652E57 696474680500000000000000A001400B53697A652E4865696768740500000000 - 0000009006401453697A652E506C6174666F726D44656661756C74080C537472 + 0000009506401453697A652E506C6174666F726D44656661756C74080C537472 6F6B652E436F6C6F72070978464631353135313500000A5452656374616E676C 6500095374796C654E616D65060A52656374616E676C653105416C69676E070A 4D6F7374426F74746F6D13456E61626C6544726167486967686C69676874080A 46696C6C2E436F6C6F7207097846463230323032300748697454657374080A50 - 6F736974696F6E2E5905000000000000009006400553696465730B06426F7474 + 6F736974696F6E2E5905000000000000009506400553696465730B06426F7474 6F6D055269676874000A53697A652E57696474680500000000000000A001400B 53697A652E4865696768740500000000000000A001401453697A652E506C6174 666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846463135 @@ -9607,3890 +9500,4860 @@ object MainForm: TMainForm 74616E676C650005416C69676E07074D6F7374546F700A46696C6C2E436F6C6F 720709784646323032303230064C6F636B6564090748697454657374080A5369 7A652E576964746805000000000056D5AF07400B53697A652E48656967687405 - 00000000000000F003401453697A652E506C6174666F726D44656661756C7408 + 00000000000000C803401453697A652E506C6174666F726D44656661756C7408 0C5374726F6B652E436F6C6F7207097846463135313531350007544C61796F75 7400095374796C654E616D65060763617074696F6E05416C69676E0708436F6E 74656E7473064C6F636B6564090748697454657374090A53697A652E57696474 6805000000000056D5AF07400B53697A652E4865696768740500000000000000 - F003401453697A652E506C6174666F726D44656661756C7408000007544C6179 + C803401453697A652E506C6174666F726D44656661756C7408000007544C6179 6F75740005416C69676E0706436C69656E74064C6F636B6564090C4D61726769 6E732E4C656674050000000000000080FF3F0B4D617267696E732E546F700500 00000000000080FF3F0D4D617267696E732E5269676874050000000000000080 FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A 652E576964746805000000000056D5AE07400B53697A652E4865696768740500 - 000000000000E003401453697A652E506C6174666F726D44656661756C740800 + 000000000000B803401453697A652E506C6174666F726D44656661756C740800 07544C61796F75740005416C69676E07044C656674064C6F636B6564090A5369 7A652E576964746805000000000000009002400B53697A652E48656967687405 - 00000000000000E003401453697A652E506C6174666F726D44656661756C7408 - 000007544C61796F757400095374796C654E616D65060469636F6E064C6F636B - 6564090A506F736974696F6E2E5805000000000000009002400A506F73697469 - 6F6E2E590500000000000000E001400A53697A652E5769647468050000000000 - 0000C803400B53697A652E4865696768740500000000000000A803401453697A - 652E506C6174666F726D44656661756C7408000007544C61796F757400095374 - 796C654E616D65060773797362746E7305416C69676E0706436C69656E74064C - 6F636B6564090A53697A652E57696474680500000000005655AA07400B53697A - 652E4865696768740500000000000000E003401453697A652E506C6174666F72 - 6D44656661756C7408000C545370656564427574746F6E00095374796C654E61 - 6D650605636C6F736505416C69676E07055269676874064C6F636B6564090A50 - 6F736974696F6E2E5805000000000056559107400A53697A652E576964746805 - 00000000000000C804400B53697A652E4865696768740500000000000000E003 - 401453697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F - 6B75700610636C6F7365627574746F6E7374796C6500000C5453706565644275 - 74746F6E00095374796C654E616D6506036D617805416C69676E070552696768 - 74064C6F636B6564090A506F736974696F6E2E5805000000000056558207400A - 53697A652E57696474680500000000000000F003400B53697A652E4865696768 - 740500000000000000E003401453697A652E506C6174666F726D44656661756C - 74080B5374796C654C6F6F6B7570060E6D6178627574746F6E7374796C650000 - 0C545370656564427574746F6E00095374796C654E616D65060372657305416C - 69676E07055269676874064C6F636B6564090A506F736974696F6E2E58050000 - 000000ACAAE606400A53697A652E57696474680500000000000000F003400B53 - 697A652E4865696768740500000000000000E003401453697A652E506C617466 - 6F726D44656661756C74080B5374796C654C6F6F6B7570060E72657362757474 - 6F6E7374796C6500000C545370656564427574746F6E00095374796C654E616D - 6506036D696E05416C69676E07055269676874064C6F636B6564090A506F7369 - 74696F6E2E58050000000000ACAAC806400A53697A652E576964746805000000 - 00000000F003400B53697A652E4865696768740500000000000000E003401453 - 697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570 - 060E6D696E627574746F6E7374796C65000005545465787400095374796C654E - 616D6506057469746C6505416C69676E0706436C69656E74064C6F636B656409 - 0748697454657374080A53697A652E5769647468050000000000ACAAC806400B - 53697A652E4865696768740500000000000000E003401453697A652E506C6174 - 666F726D44656661756C7408045465787406055469746C651654657874536574 - 74696E67732E466F6E74436F6C6F720708636C61576869746500000000000754 - 4C61796F757400095374796C654E616D650606636C69656E7405416C69676E07 - 06436C69656E74064C6F636B6564090748697454657374090A53697A652E5769 - 64746805000000000056D5AA07400B53697A652E486569676874050000000000 - 00009006401453697A652E506C6174666F726D44656661756C7408000007544C - 61796F757400095374796C654E616D650606626F74746F6D05416C69676E0706 - 426F74746F6D064C6F636B6564090A506F736974696F6E2E5805000000000000 - 00A001400A506F736974696F6E2E590500000000000000AE06400A53697A652E - 576964746805000000000056D5AA07400B53697A652E48656967687405000000 - 00000000A001401453697A652E506C6174666F726D44656661756C7408000A54 - 52656374616E676C6500095374796C654E616D6506047265637405416C69676E - 0706426F74746F6D0A46696C6C2E436F6C6F7207097846463230323032300748 - 697454657374080553696465730B03546F7006426F74746F6D000A53697A652E - 576964746805000000000056D5AA07400B53697A652E48656967687405000000 - 00000000A001401453697A652E506C6174666F726D44656661756C74080C5374 - 726F6B652E436F6C6F720709784646313531353135000000005450463007544C - 61796F757400095374796C654E616D650610726164696F627574746F6E737479 - 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 - 000000F205400B53697A652E4865696768740500000000000000A80340145369 - 7A652E506C6174666F726D44656661756C74080756697369626C650808546162 - 4F7264657202340007544C61796F75740005416C69676E07044C6566740A5369 - 7A652E57696474680500000000000000A803400B53697A652E48656967687405 - 00000000000000A803401453697A652E506C6174666F726D44656661756C7408 - 000854456C6C6970736500095374796C654E616D65060A6261636B67726F756E - 6405416C69676E070643656E7465720A46696C6C2E436F6C6F72070978464632 - 3032303230064C6F636B6564090748697454657374080A53697A652E57696474 - 680500000000000000F002400B53697A652E4865696768740500000000000000 - F002401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 - 2E436F6C6F720709784646313531353135000854456C6C697073650009537479 - 6C654E616D650609636865636B6D61726B05416C69676E0706436C69656E740A - 46696C6C2E436F6C6F720709784646324138324532064C6F636B656409074869 - 745465737408074F70616369747905000000000000000000000C4D617267696E - 732E4C65667405000000000000008000400B4D617267696E732E546F70050000 - 00000000008000400D4D617267696E732E526967687405000000000000008000 - 400E4D617267696E732E426F74746F6D05000000000000008000400A53697A65 - 2E57696474680500000000000000B002400B53697A652E486569676874050000 - 0000000000B002401453697A652E506C6174666F726D44656661756C74080B53 - 74726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F - 6E00095374796C654E616D65061A6F706163697479436865636B6D61726B416E - 696D6174696F6E31084475726174696F6E05000000000000000000000C50726F - 70657274794E616D6506074F7061636974790A537461727456616C7565050000 - 00000000000000000953746F7056616C7565050000000000000080FF3F075472 - 6967676572060E4973436865636B65643D747275650E54726967676572496E76 - 65727365060F4973436865636B65643D66616C73650000000F54436F6C6F7241 - 6E696D6174696F6E00095374796C654E616D65061A726164696F627574746F6E + 00000000000000B803401453697A652E506C6174666F726D44656661756C7408 + 000007544C61796F757400095374796C654E616D65060773797362746E730541 + 6C69676E0706436C69656E74064C6F636B6564090A53697A652E576964746805 + 00000000005655AA07400B53697A652E4865696768740500000000000000B803 + 401453697A652E506C6174666F726D44656661756C7408000C54537065656442 + 7574746F6E00095374796C654E616D650605636C6F736505416C69676E070552 + 69676874064C6F636B6564090A506F736974696F6E2E5805000000000056D59D + 07400A53697A652E57696474680500000000000000C803400B53697A652E4865 + 696768740500000000000000B803401453697A652E506C6174666F726D446566 + 61756C74080B5374796C654C6F6F6B75700610636C6F7365627574746F6E7374 + 796C65000005545465787400095374796C654E616D6506057469746C6505416C + 69676E0706436C69656E74064C6F636B6564090748697454657374080A53697A + 652E576964746805000000000056D59D07400B53697A652E4865696768740500 + 000000000000B803401453697A652E506C6174666F726D44656661756C740804 + 5465787406055469746C65165465787453657474696E67732E466F6E74436F6C + 6F720708636C615768697465000000000007544C61796F757400095374796C65 + 4E616D650606636C69656E7405416C69676E0706436C69656E74064C6F636B65 + 64090748697454657374090A53697A652E576964746805000000000056D5AA07 + 400B53697A652E48656967687405000000000000009506401453697A652E506C + 6174666F726D44656661756C7408000007544C61796F757400095374796C654E + 616D650606626F74746F6D05416C69676E0706426F74746F6D064C6F636B6564 + 090A506F736974696F6E2E580500000000000000A001400A506F736974696F6E + 2E590500000000000000AE06400A53697A652E576964746805000000000056D5 + AA07400B53697A652E4865696768740500000000000000A001401453697A652E + 506C6174666F726D44656661756C7408000A5452656374616E676C6500095374 + 796C654E616D6506047265637405416C69676E0706426F74746F6D0A46696C6C + 2E436F6C6F7207097846463230323032300553696465730B03546F7006426F74 + 746F6D000A53697A652E576964746805000000000056D5AA07400B53697A652E + 4865696768740500000000000000A001401453697A652E506C6174666F726D44 + 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313500 + 0000005450463007544C61796F757400095374796C654E616D65061072616469 + 6F627574746F6E7374796C6505416C69676E070643656E7465720A53697A652E + 57696474680500000000000000F205400B53697A652E48656967687405000000 + 00000000A803401453697A652E506C6174666F726D44656661756C7408075669 + 7369626C6508085461624F72646572023B0007544C61796F75740005416C6967 + 6E07044C6566740A53697A652E57696474680500000000000000A803400B5369 + 7A652E4865696768740500000000000000A803401453697A652E506C6174666F + 726D44656661756C7408000854456C6C6970736500095374796C654E616D6506 + 0A6261636B67726F756E6405416C69676E070643656E7465720A46696C6C2E43 + 6F6C6F720709784646323032303230064C6F636B656409074869745465737408 + 0A53697A652E57696474680500000000000000F002400B53697A652E48656967 + 68740500000000000000F002401453697A652E506C6174666F726D4465666175 + 6C74080C5374726F6B652E436F6C6F720709784646313531353135000854456C + 6C6970736500095374796C654E616D650609636865636B6D61726B05416C6967 + 6E0706436C69656E740A46696C6C2E436F6C6F72070978464632413832453206 + 4C6F636B656409074869745465737408074F7061636974790500000000000000 + 0000000C4D617267696E732E4C65667405000000000000008000400B4D617267 + 696E732E546F7005000000000000008000400D4D617267696E732E5269676874 + 05000000000000008000400E4D617267696E732E426F74746F6D050000000000 + 00008000400A53697A652E57696474680500000000000000B002400B53697A65 + 2E4865696768740500000000000000B002401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F + 6174416E696D6174696F6E00095374796C654E616D65061A6F70616369747943 + 6865636B6D61726B416E696D6174696F6E31084475726174696F6E0500000000 + 0000000000000C50726F70657274794E616D6506074F7061636974790A537461 + 727456616C756505000000000000000000000953746F7056616C756505000000 + 0000000080FF3F0754726967676572060E4973436865636B65643D747275650E + 54726967676572496E7665727365060F4973436865636B65643D66616C736500 + 00000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65061A72 + 6164696F627574746F6E436F6C6F72416E696D6174696F6E3108447572617469 + 6F6E050000000000000000000007496E7665727365090C50726F70657274794E + 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464632 + 30323032300953746F7056616C75650709784646343034303430075472696767 + 6572061049734D6F7573654F7665723D747275650E54726967676572496E7665 + 727365061149734D6F7573654F7665723D66616C736500000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174 + 696F6E315374796C65084475726174696F6E05000000000000000000000C5072 + 6F70657274794E616D65060C5374726F6B652E436F6C6F720A53746172745661 + 6C756507097846463135313531350953746F7056616C75650709784646324138 + 3245320754726967676572060E4973436865636B65643D747275650E54726967 + 676572496E7665727365060F4973436865636B65643D66616C73650000000005 + 545465787400095374796C654E616D6506047465787405416C69676E0706436C + 69656E74064C6F636B6564090748697454657374080A53697A652E5769647468 + 0500000000000000C805400B53697A652E4865696768740500000000000000A8 + 03401453697A652E506C6174666F726D44656661756C74081654657874536574 + 74696E67732E466F6E74436F6C6F720708636C61576869746500000054504630 + 07544C61796F757400095374796C654E616D650618756C63656E746572726164 + 696F627574746F6E7374796C6505416C69676E070643656E7465720A53697A65 + 2E57696474680500000000005655FB05400B53697A652E486569676874050000 + 0000000000A004401453697A652E506C6174666F726D44656661756C74080756 + 697369626C6508085461624F72646572023C0007544C61796F75740005416C69 + 676E0706426F74746F6D0A506F736974696F6E2E590500000000000000880440 + 0A53697A652E57696474680500000000005655FB05400B53697A652E48656967 + 68740500000000000000C001401453697A652E506C6174666F726D4465666175 + 6C7408000A5452656374616E676C6500095374796C654E616D65060A6261636B + 67726F756E6405416C69676E0708436F6E74656E747307436F726E6572730B07 + 546F704C6566740A426F74746F6D4C656674000A46696C6C2E436F6C6F720709 + 784646323032303230064C6F636B6564090748697454657374080A53697A652E + 57696474680500000000005655FB05400B53697A652E48656967687405000000 + 00000000C001401453697A652E506C6174666F726D44656661756C74080C5374 + 726F6B652E436F6C6F720709784646313531353135000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D6506216261636B67726F756E64556C42 + 7574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E050000 + 000000000000000007496E7665727365090C50726F70657274794E616D65060A + 46696C6C2E436F6C6F720A537461727456616C75650709784646323032303230 + 0953746F7056616C756507097846463430343034300754726967676572061049 + 734D6F7573654F7665723D747275650E54726967676572496E76657273650611 + 49734D6F7573654F7665723D66616C736500000A5452656374616E676C650009 + 5374796C654E616D650609636865636B6D61726B05416C69676E0708436F6E74 + 656E747307436F726E6572730B07546F704C6566740A426F74746F6D4C656674 + 000A46696C6C2E436F6C6F720709784646324138324532064C6F636B65640907 + 4869745465737408074F70616369747905000000000000000000000C4D617267 + 696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F7005 + 0000000000000080FF3F0D4D617267696E732E52696768740500000000000000 + 80FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A5369 + 7A652E57696474680500000000005655F705400B53697A652E48656967687405 + 000000000000008001401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174 + 696F6E00095374796C654E616D65061A636865636B6D61726B4F706163697479 + 416E696D6174696F6E31084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D6506074F7061636974790A537461727456616C756505 + 000000000000000000000953746F7056616C7565050000000000000080FF3F07 + 54726967676572060E4973436865636B65643D747275650E5472696767657249 + 6E7665727365060F4973436865636B65643D66616C7365000000000005545465 + 787400095374796C654E616D6506047465787405416C69676E0706436C69656E + 74064C6F636B6564090748697454657374080A53697A652E5769647468050000 + 0000005655FB05400B53697A652E486569676874050000000000000088044014 + 53697A652E506C6174666F726D44656661756C7408165465787453657474696E + 67732E466F6E74436F6C6F720708636C6157686974650000005450463007544C + 61796F757400095374796C654E616D650617756C7269676874726164696F6275 + 74746F6E7374796C6505416C69676E070643656E7465720A53697A652E576964 + 74680500000000005655FB05400B53697A652E48656967687405000000000000 + 00A004401453697A652E506C6174666F726D44656661756C7408075669736962 + 6C6508085461624F72646572023D0007544C61796F75740005416C69676E0706 + 426F74746F6D0A506F736974696F6E2E5905000000000000008804400A53697A + 652E57696474680500000000005655FB05400B53697A652E4865696768740500 + 000000000000C001401453697A652E506C6174666F726D44656661756C740800 + 0A5452656374616E676C6500095374796C654E616D65060A6261636B67726F75 + 6E6405416C69676E0708436F6E74656E747307436F726E6572730B08546F7052 + 696768740B426F74746F6D5269676874000A46696C6C2E436F6C6F7207097846 + 46323032303230064C6F636B6564090748697454657374080A53697A652E5769 + 6474680500000000005655FB05400B53697A652E486569676874050000000000 + 0000C001401453697A652E506C6174666F726D44656661756C74080C5374726F + 6B652E436F6C6F720709784646313531353135000F54436F6C6F72416E696D61 + 74696F6E00095374796C654E616D6506216261636B67726F756E64556C427574 + 746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E0500000000 + 00000000000007496E7665727365090C50726F70657274794E616D65060A4669 + 6C6C2E436F6C6F720A537461727456616C756507097846463230323032300953 + 746F7056616C756507097846463430343034300754726967676572061049734D + 6F7573654F7665723D747275650E54726967676572496E766572736506114973 + 4D6F7573654F7665723D66616C736500000A5452656374616E676C6500095374 + 796C654E616D650609636865636B6D61726B05416C69676E0708436F6E74656E + 747307436F726E6572730B08546F7052696768740B426F74746F6D5269676874 + 000A46696C6C2E436F6C6F720709784646324138324532064C6F636B65640907 + 4869745465737408074F70616369747905000000000000000000000C4D617267 + 696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F7005 + 0000000000000080FF3F0D4D617267696E732E52696768740500000000000000 + 80FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A5369 + 7A652E57696474680500000000005655F705400B53697A652E48656967687405 + 000000000000008001401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174 + 696F6E00095374796C654E616D65061A636865636B6D61726B4F706163697479 + 416E696D6174696F6E31084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D6506074F7061636974790A537461727456616C756505 + 000000000000000000000953746F7056616C7565050000000000000080FF3F07 + 54726967676572060E4973436865636B65643D747275650E5472696767657249 + 6E7665727365060F4973436865636B65643D66616C7365000000000005545465 + 787400095374796C654E616D6506047465787405416C69676E0706436C69656E + 74064C6F636B6564090748697454657374080A53697A652E5769647468050000 + 0000005655FB05400B53697A652E486569676874050000000000000088044014 + 53697A652E506C6174666F726D44656661756C7408165465787453657474696E + 67732E466F6E74436F6C6F720708636C6157686974650000005450463007544C + 61796F757400095374796C654E616D650616756C6C656674726164696F627574 + 746F6E7374796C6505416C69676E070643656E7465720A53697A652E57696474 + 680500000000005655FB05400B53697A652E4865696768740500000000000000 + A004401453697A652E506C6174666F726D44656661756C74080756697369626C + 6508085461624F72646572023E0007544C61796F75740005416C69676E070642 + 6F74746F6D0A506F736974696F6E2E5905000000000000008804400A53697A65 + 2E57696474680500000000005655FB05400B53697A652E486569676874050000 + 0000000000C001401453697A652E506C6174666F726D44656661756C7408000A + 5452656374616E676C6500095374796C654E616D65060A6261636B67726F756E + 6405416C69676E0708436F6E74656E747307436F726E6572730B07546F704C65 + 66740A426F74746F6D4C656674000A46696C6C2E436F6C6F7207097846463230 + 32303230064C6F636B6564090748697454657374080A53697A652E5769647468 + 0500000000005655FB05400B53697A652E4865696768740500000000000000C0 + 01401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E + 436F6C6F720709784646313531353135000F54436F6C6F72416E696D6174696F + 6E00095374796C654E616D6506216261636B67726F756E64556C427574746F6E 436F6C6F72416E696D6174696F6E31084475726174696F6E0500000000000000 00000007496E7665727365090C50726F70657274794E616D65060A46696C6C2E 436F6C6F720A537461727456616C756507097846463230323032300953746F70 56616C756507097846463430343034300754726967676572061049734D6F7573 654F7665723D747275650E54726967676572496E7665727365061149734D6F75 - 73654F7665723D66616C736500000F54436F6C6F72416E696D6174696F6E0009 - 5374796C654E616D650614436F6C6F72416E696D6174696F6E315374796C6508 - 4475726174696F6E05000000000000000000000C50726F70657274794E616D65 - 060C5374726F6B652E436F6C6F720A537461727456616C756507097846463135 - 313531350953746F7056616C7565070978464632413832453207547269676765 - 72060E4973436865636B65643D747275650E54726967676572496E7665727365 - 060F4973436865636B65643D66616C7365000000000554546578740009537479 - 6C654E616D6506047465787405416C69676E0706436C69656E74064C6F636B65 - 64090748697454657374080A53697A652E57696474680500000000000000C805 - 400B53697A652E4865696768740500000000000000A803401453697A652E506C - 6174666F726D44656661756C7408165465787453657474696E67732E466F6E74 - 436F6C6F720708636C6157686974650000005450463007544C61796F75740009 - 5374796C654E616D650618756C63656E746572726164696F627574746F6E7374 + 73654F7665723D66616C736500000A5452656374616E676C6500095374796C65 + 4E616D650609636865636B6D61726B05416C69676E0708436F6E74656E747307 + 436F726E6572730B07546F704C6566740A426F74746F6D4C656674000A46696C + 6C2E436F6C6F720709784646324138324532064C6F636B656409074869745465 + 737408074F70616369747905000000000000000000000C4D617267696E732E4C + 656674050000000000000080FF3F0B4D617267696E732E546F70050000000000 + 000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D + 617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E5769 + 6474680500000000005655F705400B53697A652E486569676874050000000000 + 00008001401453697A652E506C6174666F726D44656661756C74080B5374726F + 6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E0009 + 5374796C654E616D65061A636865636B6D61726B4F706163697479416E696D61 + 74696F6E31084475726174696F6E05000000000000000000000C50726F706572 + 74794E616D6506074F7061636974790A537461727456616C7565050000000000 + 00000000000953746F7056616C7565050000000000000080FF3F075472696767 + 6572060E4973436865636B65643D747275650E54726967676572496E76657273 + 65060F4973436865636B65643D66616C73650000000000055454657874000953 + 74796C654E616D6506047465787405416C69676E0706436C69656E74064C6F63 + 6B6564090748697454657374080A53697A652E57696474680500000000005655 + FB05400B53697A652E48656967687405000000000000008804401453697A652E + 506C6174666F726D44656661756C7408165465787453657474696E67732E466F + 6E74436F6C6F720708636C6157686974650000005450463007544C61796F7574 + 00095374796C654E616D65061670726F677265737362617266696E6973687374 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 - 00005655FB05400B53697A652E4865696768740500000000000000A004401453 + 000033338505400B53697A652E4865696768740500000000009999E104401453 697A652E506C6174666F726D44656661756C74080756697369626C6508085461 - 624F7264657202360007544C61796F75740005416C69676E0706426F74746F6D - 0A506F736974696F6E2E5905000000000000008804400A53697A652E57696474 - 680500000000005655FB05400B53697A652E4865696768740500000000000000 - C001401453697A652E506C6174666F726D44656661756C7408000A5452656374 - 616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C69 - 676E0708436F6E74656E747307436F726E6572730B07546F704C6566740A426F - 74746F6D4C656674000A46696C6C2E436F6C6F72070978464632303230323006 - 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 - 005655FB05400B53697A652E4865696768740500000000000000C00140145369 - 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 - 0709784646313531353135000F54436F6C6F72416E696D6174696F6E00095374 - 796C654E616D6506216261636B67726F756E64556C427574746F6E436F6C6F72 - 416E696D6174696F6E31084475726174696F6E05000000000000000000000749 - 6E7665727365090C50726F70657274794E616D65060A46696C6C2E436F6C6F72 - 0A537461727456616C756507097846463230323032300953746F7056616C7565 - 07097846463430343034300754726967676572061049734D6F7573654F766572 - 3D747275650E54726967676572496E7665727365061149734D6F7573654F7665 - 723D66616C736500000A5452656374616E676C6500095374796C654E616D6506 - 09636865636B6D61726B05416C69676E0708436F6E74656E747307436F726E65 - 72730B07546F704C6566740A426F74746F6D4C656674000A46696C6C2E436F6C - 6F720709784646324138324532064C6F636B656409074869745465737408074F - 70616369747905000000000000000000000C4D617267696E732E4C6566740500 - 00000000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F - 0D4D617267696E732E5269676874050000000000000080FF3F0E4D617267696E - 732E426F74746F6D050000000000000080FF3F0A53697A652E57696474680500 - 000000005655F705400B53697A652E4865696768740500000000000000800140 - 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 - 6E6407044E6F6E65000F54466C6F6174416E696D6174696F6E00095374796C65 - 4E616D65061A636865636B6D61726B4F706163697479416E696D6174696F6E31 - 084475726174696F6E05000000000000000000000C50726F70657274794E616D - 6506074F7061636974790A537461727456616C75650500000000000000000000 - 0953746F7056616C7565050000000000000080FF3F0754726967676572060E49 - 73436865636B65643D747275650E54726967676572496E7665727365060F4973 - 436865636B65643D66616C7365000000000005545465787400095374796C654E - 616D6506047465787405416C69676E0706436C69656E74064C6F636B65640907 - 48697454657374080A53697A652E57696474680500000000005655FB05400B53 - 697A652E48656967687405000000000000008804401453697A652E506C617466 - 6F726D44656661756C7408165465787453657474696E67732E466F6E74436F6C - 6F720708636C6157686974650000005450463007544C61796F75740009537479 - 6C654E616D650617756C7269676874726164696F627574746F6E7374796C6505 - 416C69676E070643656E7465720A53697A652E57696474680500000000005655 - FB05400B53697A652E4865696768740500000000000000A004401453697A652E - 506C6174666F726D44656661756C74080756697369626C6508085461624F7264 - 657202380007544C61796F75740005416C69676E0706426F74746F6D0A506F73 - 6974696F6E2E5905000000000000008804400A53697A652E5769647468050000 - 0000005655FB05400B53697A652E4865696768740500000000000000C0014014 - 53697A652E506C6174666F726D44656661756C7408000A5452656374616E676C - 6500095374796C654E616D65060A6261636B67726F756E6405416C69676E0708 - 436F6E74656E747307436F726E6572730B08546F7052696768740B426F74746F - 6D5269676874000A46696C6C2E436F6C6F720709784646323032303230064C6F - 636B6564090748697454657374080A53697A652E576964746805000000000056 - 55FB05400B53697A652E4865696768740500000000000000C001401453697A65 - 2E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709 - 784646313531353135000F54436F6C6F72416E696D6174696F6E00095374796C - 654E616D6506216261636B67726F756E64556C427574746F6E436F6C6F72416E - 696D6174696F6E31084475726174696F6E050000000000000000000007496E76 - 65727365090C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53 - 7461727456616C756507097846463230323032300953746F7056616C75650709 - 7846463430343034300754726967676572061049734D6F7573654F7665723D74 - 7275650E54726967676572496E7665727365061149734D6F7573654F7665723D - 66616C736500000A5452656374616E676C6500095374796C654E616D65060963 - 6865636B6D61726B05416C69676E0708436F6E74656E747307436F726E657273 - 0B08546F7052696768740B426F74746F6D5269676874000A46696C6C2E436F6C - 6F720709784646324138324532064C6F636B656409074869745465737408074F - 70616369747905000000000000000000000C4D617267696E732E4C6566740500 - 00000000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F - 0D4D617267696E732E5269676874050000000000000080FF3F0E4D617267696E - 732E426F74746F6D050000000000000080FF3F0A53697A652E57696474680500 - 000000005655F705400B53697A652E4865696768740500000000000000800140 - 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 - 6E6407044E6F6E65000F54466C6F6174416E696D6174696F6E00095374796C65 - 4E616D65061A636865636B6D61726B4F706163697479416E696D6174696F6E31 - 084475726174696F6E05000000000000000000000C50726F70657274794E616D - 6506074F7061636974790A537461727456616C75650500000000000000000000 - 0953746F7056616C7565050000000000000080FF3F0754726967676572060E49 - 73436865636B65643D747275650E54726967676572496E7665727365060F4973 - 436865636B65643D66616C7365000000000005545465787400095374796C654E - 616D6506047465787405416C69676E0706436C69656E74064C6F636B65640907 - 48697454657374080A53697A652E57696474680500000000005655FB05400B53 - 697A652E48656967687405000000000000008804401453697A652E506C617466 - 6F726D44656661756C7408165465787453657474696E67732E466F6E74436F6C - 6F720708636C6157686974650000005450463007544C61796F75740009537479 - 6C654E616D650616756C6C656674726164696F627574746F6E7374796C650541 - 6C69676E070643656E7465720A53697A652E57696474680500000000005655FB - 05400B53697A652E4865696768740500000000000000A004401453697A652E50 - 6C6174666F726D44656661756C74080756697369626C6508085461624F726465 - 72023A0007544C61796F75740005416C69676E0706426F74746F6D0A506F7369 - 74696F6E2E5905000000000000008804400A53697A652E576964746805000000 - 00005655FB05400B53697A652E4865696768740500000000000000C001401453 - 697A652E506C6174666F726D44656661756C7408000A5452656374616E676C65 - 00095374796C654E616D65060A6261636B67726F756E6405416C69676E070843 - 6F6E74656E747307436F726E6572730B07546F704C6566740A426F74746F6D4C - 656674000A46696C6C2E436F6C6F720709784646323032303230064C6F636B65 - 64090748697454657374080A53697A652E57696474680500000000005655FB05 - 400B53697A652E4865696768740500000000000000C001401453697A652E506C - 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 - 313531353135000F54436F6C6F72416E696D6174696F6E00095374796C654E61 - 6D6506216261636B67726F756E64556C427574746F6E436F6C6F72416E696D61 - 74696F6E31084475726174696F6E050000000000000000000007496E76657273 - 65090C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 - 7456616C756507097846463230323032300953746F7056616C75650709784646 - 3430343034300754726967676572061049734D6F7573654F7665723D74727565 - 0E54726967676572496E7665727365061149734D6F7573654F7665723D66616C - 736500000A5452656374616E676C6500095374796C654E616D65060963686563 - 6B6D61726B05416C69676E0708436F6E74656E747307436F726E6572730B0754 - 6F704C6566740A426F74746F6D4C656674000A46696C6C2E436F6C6F72070978 - 4646324138324532064C6F636B656409074869745465737408074F7061636974 - 7905000000000000000000000C4D617267696E732E4C65667405000000000000 - 0080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267 - 696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F74 - 746F6D050000000000000080FF3F0A53697A652E576964746805000000000056 - 55F705400B53697A652E48656967687405000000000000008001401453697A65 - 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E - 6F6E65000F54466C6F6174416E696D6174696F6E00095374796C654E616D6506 - 1A636865636B6D61726B4F706163697479416E696D6174696F6E310844757261 - 74696F6E05000000000000000000000C50726F70657274794E616D6506074F70 - 61636974790A537461727456616C756505000000000000000000000953746F70 - 56616C7565050000000000000080FF3F0754726967676572060E497343686563 - 6B65643D747275650E54726967676572496E7665727365060F4973436865636B - 65643D66616C7365000000000005545465787400095374796C654E616D650604 - 7465787405416C69676E0706436C69656E74064C6F636B656409074869745465 - 7374080A53697A652E57696474680500000000005655FB05400B53697A652E48 - 656967687405000000000000008804401453697A652E506C6174666F726D4465 - 6661756C7408165465787453657474696E67732E466F6E74436F6C6F72070863 - 6C6157686974650000005450463007544C61796F757400095374796C654E616D - 65061070726F67726573736261727374796C6505416C69676E070643656E7465 - 720A53697A652E576964746805000000000033338505400B53697A652E486569 - 6768740500000000009999E104401453697A652E506C6174666F726D44656661 - 756C74080756697369626C6508085461624F72646572023D000A545265637461 - 6E676C6500095374796C654E616D65060668747261636B05416C69676E070843 - 6F6E74656E74730A46696C6C2E436F6C6F720709784646323032303230064C6F - 636B6564090748697454657374080A53697A652E576964746805000000000033 - 338505400B53697A652E4865696768740500000000009999E104401453697A65 - 2E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709 - 784646313531353135000A5452656374616E676C6500095374796C654E616D65 - 060A68696E64696361746F7205416C69676E07044C6566740A46696C6C2E436F - 6C6F720709784646324138324532064C6F636B6564090748697454657374080C - 4D617267696E732E4C656674050000000000000080FF3F0B4D617267696E732E - 546F70050000000000000080FF3F0D4D617267696E732E526967687405000000 - 0000000080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF - 3F0A506F736974696F6E2E58050000000000000080FF3F0A506F736974696F6E - 2E59050000000000000080FF3F0A53697A652E57696474680500000000000000 - C804400B53697A652E4865696768740500000000009999D904401453697A652E - 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F - 6E650000000A5452656374616E676C6500095374796C654E616D650606767472 - 61636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709 - 784646323032303230064C6F636B6564090748697454657374080A53697A652E - 576964746805000000000033338505400B53697A652E48656967687405000000 - 00009999E104401453697A652E506C6174666F726D44656661756C74080C5374 - 726F6B652E436F6C6F720709784646313531353135000A5452656374616E676C - 6500095374796C654E616D65060A76696E64696361746F7205416C69676E0706 - 426F74746F6D0A46696C6C2E436F6C6F720709784646324138324532064C6F63 - 6B6564090748697454657374080C4D617267696E732E4C656674050000000000 - 000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D6172 - 67696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F - 74746F6D050000000000000080FF3F0A506F736974696F6E2E58050000000000 - 000080FF3F0A506F736974696F6E2E5905000000000099998904400A53697A65 - 2E576964746805000000000033338105400B53697A652E486569676874050000 - 0000000000A803401453697A652E506C6174666F726D44656661756C74080B53 - 74726F6B652E4B696E6407044E6F6E65000000005450463007544C61796F7574 - 00095374796C654E616D65060D657870616E6465727374796C6505416C69676E - 070643656E7465720A53697A652E576964746805000000000000C08407400B53 - 697A652E4865696768740500000000000000C803401453697A652E506C617466 - 6F726D44656661756C74080756697369626C6508085461624F72646572023F00 - 0A5452656374616E676C6500095374796C654E616D65060B626772656374616E - 676C6505416C69676E0708436F6E74656E74730C436C69704368696C6472656E - 090A46696C6C2E436F6C6F720709784646324432443244064C6F636B65640907 - 48697454657374080A53697A652E576964746805000000000000C08407400B53 - 697A652E4865696768740500000000000000C803401453697A652E506C617466 - 6F726D44656661756C74080C5374726F6B652E436F6C6F720709784646313531 - 3531350007544C61796F757400095374796C654E616D6506074C61796F757433 - 05416C69676E0703546F700A53697A652E576964746805000000000000C08407 - 400B53697A652E4865696768740500000000000000C803401453697A652E506C - 6174666F726D44656661756C74080007544C61796F757400095374796C654E61 - 6D6506074C61796F75743405416C69676E0708436F6E74656E74730A53697A65 - 2E576964746805000000000000C08407400B53697A652E486569676874050000 - 0000000000C803401453697A652E506C6174666F726D44656661756C7408000A - 5452656374616E676C6500095374796C654E616D65060A52656374616E676C65 - 3205416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846 - 46323532353235064C6F636B6564090748697454657374080A53697A652E5769 + 624F726465720240000A5452656374616E676C6500095374796C654E616D6506 + 0668747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C + 6F720709784646323032303230064C6F636B6564090748697454657374080A53 + 697A652E576964746805000000000033338505400B53697A652E486569676874 + 0500000000009999E104401453697A652E506C6174666F726D44656661756C74 + 080C5374726F6B652E436F6C6F720709784646313531353135000A5452656374 + 616E676C6500095374796C654E616D65060A68696E64696361746F7205416C69 + 676E07044C6566740A46696C6C2E436F6C6F720709784646324345323434064C + 6F636B6564090748697454657374080C4D617267696E732E4C65667405000000 + 0000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D + 617267696E732E5269676874050000000000000080FF3F0E4D617267696E732E + 426F74746F6D050000000000000080FF3F0A506F736974696F6E2E5805000000 + 0000000080FF3F0A506F736974696F6E2E59050000000000000080FF3F0A5369 + 7A652E57696474680500000000000000C804400B53697A652E48656967687405 + 00000000009999D904401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E650000000A5452656374616E676C65 + 00095374796C654E616D65060676747261636B05416C69676E0708436F6E7465 + 6E74730A46696C6C2E436F6C6F720709784646323032303230064C6F636B6564 + 090748697454657374080A53697A652E57696474680500000000003333850540 + 0B53697A652E4865696768740500000000009999E104401453697A652E506C61 + 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 + 3531353135000A5452656374616E676C6500095374796C654E616D65060A7669 + 6E64696361746F7205416C69676E0706426F74746F6D0A46696C6C2E436F6C6F + 720709784646324345323434064C6F636B6564090748697454657374080C4D61 + 7267696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F + 70050000000000000080FF3F0D4D617267696E732E5269676874050000000000 + 000080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A + 506F736974696F6E2E58050000000000000080FF3F0A506F736974696F6E2E59 + 05000000000099998904400A53697A652E576964746805000000000033338105 + 400B53697A652E4865696768740500000000000000A803401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 000000005450463007544C61796F757400095374796C654E616D65060D657870 + 616E6465727374796C6505416C69676E070643656E7465720A53697A652E5769 + 64746805000000000000C08407400B53697A652E486569676874050000000000 + 0000C803401453697A652E506C6174666F726D44656661756C74080756697369 + 626C6508085461624F726465720241000A5452656374616E676C650009537479 + 6C654E616D65060B626772656374616E676C6505416C69676E0708436F6E7465 + 6E74730C436C69704368696C6472656E090A46696C6C2E436F6C6F7207097846 + 46324432443244064C6F636B6564090748697454657374080A53697A652E5769 64746805000000000000C08407400B53697A652E486569676874050000000000 0000C803401453697A652E506C6174666F726D44656661756C74080C5374726F - 6B652E436F6C6F72070978464631353135313500000A5452656374616E676C65 - 00095374796C654E616D65060A52656374616E676C653105416C69676E070843 - 6F6E74656E74730A46696C6C2E436F6C6F720709784646313531353135064C6F - 636B6564090748697454657374080A53697A652E576964746805000000000000 - C08407400B53697A652E4865696768740500000000000000C803401453697A65 - 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E - 6F6E65000F54466C6F6174416E696D6174696F6E00095374796C654E616D6506 - 14466C6F6174416E696D6174696F6E315374796C65084475726174696F6E0500 - 00000000CDCCCCFB3F0D496E746572706F6C6174696F6E070843697263756C61 - 720C50726F70657274794E616D6506075363616C652E580A537461727456616C - 7565050000000000000080FF3F0953746F7056616C7565050000000000000000 - 00000754726967676572060F4973457870616E6465643D747275650E54726967 - 676572496E766572736506104973457870616E6465643D66616C736500000000 - 07544C61796F757400095374796C654E616D6506074C61796F75743305416C69 - 676E0708436F6E74656E74730A53697A652E576964746805000000000000C084 - 07400B53697A652E4865696768740500000000000000C803401453697A652E50 - 6C6174666F726D44656661756C74080005545465787400095374796C654E616D - 6506047465787405416C69676E07044C656674084175746F53697A65090A436C - 6970506172656E7409064C6F636B6564090748697454657374080C4D61726769 - 6E732E4C6566740500000000000000A002400A506F736974696F6E2E58050000 - 0000000000A002400A53697A652E576964746805000000000000B8C703400B53 + 6B652E436F6C6F7207097846463135313531350007544C61796F757400095374 + 796C654E616D6506074C61796F75743305416C69676E0703546F700A53697A65 + 2E576964746805000000000000C08407400B53697A652E486569676874050000 + 0000000000C803401453697A652E506C6174666F726D44656661756C74080007 + 544C61796F757400095374796C654E616D6506074C61796F75743405416C6967 + 6E0708436F6E74656E74730A53697A652E576964746805000000000000C08407 + 400B53697A652E4865696768740500000000000000C803401453697A652E506C + 6174666F726D44656661756C7408000A5452656374616E676C6500095374796C + 654E616D65060A52656374616E676C653205416C69676E0708436F6E74656E74 + 730A46696C6C2E436F6C6F720709784646323532353235064C6F636B65640907 + 48697454657374080A53697A652E576964746805000000000000C08407400B53 697A652E4865696768740500000000000000C803401453697A652E506C617466 - 6F726D44656661756C7408165465787453657474696E67732E466F6E74436F6C - 6F720708636C615768697465165465787453657474696E67732E486F727A416C - 69676E07074C656164696E670000000F54457870616E646572427574746F6E00 - 095374796C654E616D650606627574746F6E05416C69676E0705526967687406 - 4C6F636B6564090A506F736974696F6E2E580500000000000080F506400A5369 - 7A652E57696474680500000000000000A003400B53697A652E48656967687405 - 00000000000000C803401453697A652E506C6174666F726D44656661756C7408 - 00000000005450463007544C61796F757400095374796C654E616D6506136578 - 70616E646572627574746F6E7374796C6505416C69676E070643656E7465720B - 4D617267696E732E546F70050000000000000080FF3F0A53697A652E57696474 - 680500000000000000B003400B53697A652E4865696768740500000000000000 - B003401453697A652E506C6174666F726D44656661756C74080756697369626C - 6508085461624F7264657202410005545061746800095374796C654E616D6506 - 05506174683105416C69676E070643656E74657209446174612E506174680A34 - 00000004000000000000000000C8420000C84201000000000096430000C84201 - 0000000000484300009643030000000000C8420000C8420A46696C6C2E436F6C - 6F720708636C6157686974650748697454657374080D526F746174696F6E416E - 676C650500000000000000B405400A53697A652E576964746805000000000000 - 00A002400B53697A652E4865696768740500000000000000C001401453697A65 - 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E - 6F6E65000F54466C6F6174416E696D6174696F6E00095374796C654E616D6506 - 14466C6F6174416E696D6174696F6E315374796C65084475726174696F6E0500 - 00000000CDCCCCFB3F0D496E746572706F6C6174696F6E070843697263756C61 - 720C50726F70657274794E616D65060D526F746174696F6E416E676C650A5374 - 61727456616C75650500000000000000B405400953746F7056616C7565050000 - 00000000000000000754726967676572060F4973457870616E6465643D747275 - 650E54726967676572496E766572736506104973457870616E6465643D66616C - 7365000000005450463007544C61796F757400095374796C654E616D65061565 - 7870616E646572636865636B626F787374796C6505416C69676E070643656E74 - 65720A53697A652E576964746805000000000000008406400B53697A652E4865 - 6967687405000000000000008404401453697A652E506C6174666F726D446566 - 61756C74080756697369626C6508085461624F7264657202430007544C61796F - 75740005416C69676E07044C6566740A53697A652E5769647468050000000000 - 0000C003400B53697A652E48656967687405000000000000008404401453697A - 652E506C6174666F726D44656661756C7408000554506174680005416C69676E - 0706436C69656E7409446174612E506174680AD80100002700000000000000FE - C8BA4402E79244020000002592AD4402E79244020000006D5BA544FEB09E4402 - 0000006D5BA544FEB09E440200000093A4A4446A0C9F44020000004A80AC44FC - 79AA4402000000046EBA44FC79AA44020000004A00C844FC79AA440200000000 - 80CF44FEB09E44020000000080CF44FEB09E44020000000080CF44FEB09E4402 - 0000004C5BC84402E7924402000000FEC8BA4402E7924400000000FE88BA44FE - 30974402000000B876BF44FE309744020000000277C344EEA09A440200000002 - 77C34404DE9E44020000000277C344121BA34402000000B876BF44008CA64402 - 000000FE88BA44008CA644020000004C9BB544008CA64402000000009CB14412 - 1BA34402000000009CB14404DE9E4402000000009CB144EEA09A44020000004C - 9BB544FE30974402000000FE88BA44FE309744000000000080BA44045E9B4402 - 000000146EB844045E9B440200000000C0B64454F79C440200000000C0B64400 - F09E440200000000C0B644ACE8A04402000000146EB844FC81A2440200000000 - 80BA44FC81A24402000000EC91BC44FC81A244020000000040BE44ACE8A04402 - 0000000040BE4400F09E44020000000040BE4454F79C4402000000EC91BC4404 - 5E9B44020000000080BA44045E9B440A46696C6C2E436F6C6F72070978363030 - 30303030300748697454657374080C4D617267696E732E4C6566740500000000 - 0000008000400B4D617267696E732E546F7005000000000000008000400D4D61 - 7267696E732E526967687405000000000000008000400E4D617267696E732E42 - 6F74746F6D05000000000000008000400A53697A652E57696474680500000000 - 000000A003400B53697A652E4865696768740500000000000000E80340145369 - 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 - 044E6F6E6508577261704D6F64650703466974000F54436F6C6F72416E696D61 - 74696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F706572 - 74794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978 - 36303030303030300953746F7056616C75650708636C61426C61636B07547269 - 67676572060E4973436865636B65643D7472756500000F54436F6C6F72416E69 - 6D6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F70 - 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 - 08636C61426C61636B0953746F7056616C756507097836303030303030300754 - 726967676572060F4973436865636B65643D66616C7365000000000554546578 - 7400095374796C654E616D6506047465787405416C69676E0706436C69656E74 - 064C6F636B6564090748697454657374080C4D617267696E732E4C6566740500 - 0000000000008002400B4D617267696E732E546F700500000000000000800040 - 0D4D617267696E732E5269676874050000000000000080FF3F0A53697A652E57 - 696474680500000000000000C605400B53697A652E4865696768740500000000 - 000000F803401453697A652E506C6174666F726D44656661756C740816546578 - 7453657474696E67732E466F6E74436F6C6F7207097846464545454545451654 - 65787453657474696E67732E486F727A416C69676E07074C656164696E670000 - 005450463007544C61796F757400095374796C654E616D65060E6C6162656C66 - 696C6C7374796C6505416C69676E070643656E7465720A53697A652E57696474 - 680500000000000000C805400B53697A652E4865696768740500000000000000 - C803401453697A652E506C6174666F726D44656661756C74080756697369626C - 6508085461624F726465720246000A5452656374616E676C6500095374796C65 - 4E616D65060A52656374616E676C653105416C69676E0708436F6E74656E7473 - 0A46696C6C2E436F6C6F7207097846463135313531350A53697A652E57696474 - 680500000000000000C805400B53697A652E4865696768740500000000000000 - C803401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 - 2E4B696E6407044E6F6E65000005545465787400095374796C654E616D650604 - 7465787405416C69676E0708436F6E74656E74730748697454657374080A5369 - 7A652E57696474680500000000000000C805400B53697A652E48656967687405 - 00000000000000C803401453697A652E506C6174666F726D44656661756C7408 - 165465787453657474696E67732E466F6E74436F6C6F720708636C6157686974 - 650000005450463007544C61796F757400095374796C654E616D650613636F6D - 626F656469746572726F727374796C6505416C69676E070643656E7465720A53 - 697A652E57696474680500000000000000C805400B53697A652E486569676874 + 6F726D44656661756C74080C5374726F6B652E436F6C6F720709784646313531 + 35313500000A5452656374616E676C6500095374796C654E616D65060A526563 + 74616E676C653105416C69676E0708436F6E74656E74730A46696C6C2E436F6C + 6F720709784646313531353135064C6F636B6564090748697454657374080A53 + 697A652E576964746805000000000000C08407400B53697A652E486569676874 0500000000000000C803401453697A652E506C6174666F726D44656661756C74 - 080756697369626C6508085461624F72646572020F000C5442727573684F626A - 65637400095374796C654E616D65060A666F726567726F756E6400000B54466F - 6E744F626A65637400095374796C654E616D650604666F6E7409466F6E742E53 - 697A650500000000000000D00240000007544C61796F757400095374796C654E - 616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A - 53697A652E57696474680500000000000000C805400B53697A652E4865696768 - 740500000000000000C803401453697A652E506C6174666F726D44656661756C - 7408000A5452656374616E676C6500095374796C654E616D65060A5265637461 - 6E676C653105416C69676E0706436C69656E740A46696C6C2E436F6C6F720709 - 7846463230323032300748697454657374080A53697A652E5769647468050000 - 0000000000C805400B53697A652E4865696768740500000000000000C8034014 - 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C - 6F720709784646323032303230000F54436F6C6F72416E696D6174696F6E0009 - 5374796C654E616D650614436F6C6F72416E696D6174696F6E315374796C6508 - 4475726174696F6E050000000000000000000007496E7665727365090C50726F - 70657274794E616D65060C5374726F6B652E436F6C6F720A537461727456616C - 756507097846463230323032300953746F7056616C7565070978464634303430 - 34300754726967676572062049734D6F7573654F7665723D747275653B497346 - 6F63757365643D66616C73650E54726967676572496E7665727365062149734D - 6F7573654F7665723D66616C73653B4973466F63757365643D66616C73650000 - 0F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C - 6F72416E696D6174696F6E325374796C65084475726174696F6E050000000000 - 000000000007496E7665727365090C50726F70657274794E616D65060C537472 - 6F6B652E436F6C6F720A537461727456616C7565070978464634303430343009 - 53746F7056616C756507097846464532324132410754726967676572061F4973 - 4D6F7573654F7665723D747275653B4973466F63757365643D747275650E5472 - 6967676572496E7665727365062049734D6F7573654F7665723D747275653B49 - 73466F63757365643D66616C7365000007544C61796F757400095374796C654E - 616D6506056172726F7705416C69676E070846697452696768740B4D61726769 - 6E732E546F70050000000000000080FF3F0D4D617267696E732E526967687405 - 0000000000000080FF3F0E4D617267696E732E426F74746F6D05000000000000 - 0080FF3F0A506F736974696F6E2E580500000000005ED99705400A506F736974 - 696F6E2E59050000000000000080FF3F0A53697A652E57696474680500000000 - 00889AB803400B53697A652E4865696768740500000000000000B80340145369 - 7A652E506C6174666F726D44656661756C7408000A5452656374616E676C6500 - 095374796C654E616D65060A52656374616E676C653105416C69676E0708436F - 6E74656E74730A46696C6C2E436F6C6F72070978464633303330333007486974 - 54657374080A53697A652E5769647468050000000000889AB803400B53697A65 - 2E4865696768740500000000000000B803401453697A652E506C6174666F726D - 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C - 6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E69 - 6D6174696F6E315374796C65084475726174696F6E0500000000000000000000 - 07496E7665727365090C50726F70657274794E616D65060A46696C6C2E436F6C - 6F720A537461727456616C756507097846463330333033300953746F7056616C - 756507097846463430343034300754726967676572062049734D6F7573654F76 - 65723D747275653B4973466F63757365643D66616C73650E5472696767657249 - 6E7665727365062149734D6F7573654F7665723D66616C73653B4973466F6375 - 7365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009537479 - 6C654E616D650614436F6C6F72416E696D6174696F6E325374796C6508447572 - 6174696F6E05000000000000000000000C50726F70657274794E616D65060A46 - 696C6C2E436F6C6F720A537461727456616C7565070978464634303430343009 - 53746F7056616C756507097846463943313731370754726967676572061F4973 - 466F63757365643D747275653B49734D6F7573654F7665723D74727565000000 - 07544C61796F757400095374796C654E616D6506074C61796F75743105416C69 - 676E070643656E7465720C4D617267696E732E4C656674050000000000000080 - FF3F0A53697A652E57696474680500000000000000A002400B53697A652E4865 - 696768740500000000000000C001401453697A652E506C6174666F726D446566 - 61756C74080005545061746800095374796C654E616D65060550617468310541 - 6C69676E0706436C69656E7409446174612E506174680A340000000400000000 - 0000000000C8420000C84201000000000096430000C842010000000000484300 - 009643030000000000C8420000C8420A46696C6C2E436F6C6F720708636C6157 - 686974650748697454657374080A53697A652E57696474680500000000000000 - A002400B53697A652E4865696768740500000000000000C001401453697A652E - 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F - 6E650000000000000C5442727573684F626A65637400095374796C654E616D65 - 060973656C656374696F6E0B42727573682E436F6C6F72070978393632413832 - 4532000007544C61796F757400095374796C654E616D650607636F6E74656E74 - 05416C69676E0706436C69656E740C4D617267696E732E4C6566740500000000 - 0000008000400B4D617267696E732E546F7005000000000000008000400D4D61 - 7267696E732E52696768740500000000000000F003400E4D617267696E732E42 - 6F74746F6D05000000000000008000400A53697A652E57696474680500000000 - 0000008805400B53697A652E4865696768740500000000000000A80340145369 - 7A652E506C6174666F726D44656661756C74080000005450463007544C61796F - 757400095374796C654E616D65061E70726F6772657373626172696E64657465 - 726D696E61626C657374796C6505416C69676E070643656E7465720A53697A65 - 2E5769647468050000000000ABAAB006400B53697A652E486569676874050000 - 0000000000C003401453697A652E506C6174666F726D44656661756C74080756 - 697369626C6508085461624F72646572023C000A5452656374616E676C650009 - 5374796C654E616D65060676747261636B05416C69676E0708436F6E74656E74 - 7307456E61626C6564080A46696C6C2E436F6C6F720709784646323032303230 - 064C6F636B6564090748697454657374080A53697A652E576964746805000000 - 00000000E006400B53697A652E48656967687405000000000000009404401453 - 697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F - 7207097846463135313531350756697369626C6508000A5452656374616E676C - 6500095374796C654E616D65060A76696E64696361746F7205416C69676E0706 - 426F74746F6D0A46696C6C2E436F6C6F720709784646324138324532064C6F63 - 6B6564090748697454657374080C4D617267696E732E4C656674050000000000 - 000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D6172 - 67696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F - 74746F6D050000000000000080FF3F0A506F736974696F6E2E58050000000000 - 000080FF3F0A506F736974696F6E2E590500000000000000F002400A53697A65 - 2E57696474680500000000000000DE06400B53697A652E486569676874050000 - 0000000000A803401453697A652E506C6174666F726D44656661756C74080B53 - 74726F6B652E4B696E6407044E6F6E6500000007544C61796F75740009537479 - 6C654E616D65060668747261636B05416C69676E0708436F6E74656E74730A53 - 697A652E5769647468050000000000ABAAB006400B53697A652E486569676874 - 0500000000000000C003401453697A652E506C6174666F726D44656661756C74 - 08000A5452656374616E676C6500095374796C654E616D65060A6261636B6772 - 6F756E6405416C69676E0708436F6E74656E74730C436C69704368696C647265 - 6E090A46696C6C2E436F6C6F720709784646324138324532064C6F636B656409 - 0748697454657374080A53697A652E5769647468050000000000ABAAB006400B - 53697A652E4865696768740500000000000000C003401453697A652E506C6174 - 666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846463135 - 31353135000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 - 0614436F6C6F72416E696D6174696F6E315374796C6507456E61626C65640908 - 4475726174696F6E0500000000000000800140044C6F6F70090C50726F706572 - 74794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978 - 46463230323032300953746F7056616C75650709784646324138324532075472 - 6967676572060E497356697369626C653D747275650000000000545046300754 - 4C61796F757400095374796C654E616D650611616E69696E64696361746F7273 - 74796C6505416C69676E070643656E7465720756697369626C65080004544172 - 6300095374796C654E616D65060341726305416C69676E0708436F6E74656E74 - 730748697454657374080D526F746174696F6E416E676C650500000000000000 - B407400A53697A652E57696474680500000000000000C804400B53697A652E48 - 65696768740500000000000000C804401453697A652E506C6174666F726D4465 - 6661756C74080C5374726F6B652E436F6C6F720708636C615768697465105374 - 726F6B652E546869636B6E657373050000000000000080004008456E64416E67 - 6C650500000000000000B405C0000F54466C6F6174416E696D6174696F6E0009 - 5374796C654E616D650603616E6907456E61626C656409084475726174696F6E - 050000000000000080FF3F044C6F6F70090C50726F70657274794E616D65060D + 080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D61 + 74696F6E00095374796C654E616D650614466C6F6174416E696D6174696F6E31 + 5374796C65084475726174696F6E050000000000CDCCCCFB3F0D496E74657270 + 6F6C6174696F6E070843697263756C61720C50726F70657274794E616D650607 + 5363616C652E580A537461727456616C7565050000000000000080FF3F095374 + 6F7056616C756505000000000000000000000754726967676572060F49734578 + 70616E6465643D747275650E54726967676572496E7665727365061049734578 + 70616E6465643D66616C73650000000007544C61796F757400095374796C654E + 616D6506074C61796F75743305416C69676E0708436F6E74656E74730A53697A + 652E576964746805000000000000C08407400B53697A652E4865696768740500 + 000000000000C803401453697A652E506C6174666F726D44656661756C740800 + 05545465787400095374796C654E616D6506047465787405416C69676E07044C + 656674084175746F53697A65090A436C6970506172656E7409064C6F636B6564 + 090748697454657374080C4D617267696E732E4C6566740500000000000000A0 + 02400A506F736974696F6E2E580500000000000000A002400A53697A652E5769 + 64746805000000000000B8C703400B53697A652E486569676874050000000000 + 0000C803401453697A652E506C6174666F726D44656661756C74081654657874 + 53657474696E67732E466F6E74436F6C6F720708636C61576869746516546578 + 7453657474696E67732E486F727A416C69676E07074C656164696E670000000F + 54457870616E646572427574746F6E00095374796C654E616D65060662757474 + 6F6E05416C69676E07055269676874064C6F636B6564090A506F736974696F6E + 2E580500000000000080F506400A53697A652E57696474680500000000000000 + A003400B53697A652E4865696768740500000000000000C803401453697A652E + 506C6174666F726D44656661756C740800000000005450463007544C61796F75 + 7400095374796C654E616D650613657870616E646572627574746F6E7374796C + 6505416C69676E070643656E7465720B4D617267696E732E546F700500000000 + 00000080FF3F0A53697A652E57696474680500000000000000B003400B53697A + 652E4865696768740500000000000000B003401453697A652E506C6174666F72 + 6D44656661756C74080756697369626C6508085461624F726465720242000554 + 5061746800095374796C654E616D650605506174683105416C69676E07064365 + 6E74657209446174612E506174680A3400000004000000000000000000C84200 + 00C84201000000000096430000C8420100000000004843000096430300000000 + 00C8420000C8420A46696C6C2E436F6C6F720708636C61576869746507486974 + 54657374080D526F746174696F6E416E676C650500000000000000B405400A53 + 697A652E57696474680500000000000000A002400B53697A652E486569676874 + 0500000000000000C001401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D61 + 74696F6E00095374796C654E616D650614466C6F6174416E696D6174696F6E31 + 5374796C65084475726174696F6E050000000000CDCCCCFB3F0D496E74657270 + 6F6C6174696F6E070843697263756C61720C50726F70657274794E616D65060D 526F746174696F6E416E676C650A537461727456616C75650500000000000000 - 0000000953746F7056616C75650500000000000000B407400754726967676572 - 060E497356697369626C653D74727565000000005450463007544C61796F7574 - 00095374796C654E616D650615616E69696E64696361746F72686F727A737479 - 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 - 000040C006400B53697A652E4865696768740500000000000000800040145369 - 7A652E506C6174666F726D44656661756C74080756697369626C6508000A5452 - 656374616E676C6500095374796C654E616D65060A52656374616E676C653105 - 416C69676E0706436C69656E740C436C69704368696C6472656E090A46696C6C - 2E436F6C6F7207097846463430343034300A53697A652E576964746805000000 - 00000040C006400B53697A652E48656967687405000000000000008000401453 - 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 - 07044E6F6E650005544C696E6500095374796C654E616D6506054C696E653108 - 4C696E65547970650706426F74746F6D0A53697A652E57696474680500000000 - 000000A00B400B53697A652E4865696768740500000000000000800040145369 - 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 - 0709784646324138324532105374726F6B652E546869636B6E65737305000000 - 000000008002400B5374726F6B652E44617368070444617368000F54466C6F61 - 74416E696D6174696F6E00095374796C654E616D650603616E6907456E61626C - 656409084475726174696F6E0500000000000000800340044C6F6F70090C5072 - 6F70657274794E616D65060A506F736974696F6E2E580A537461727456616C75 - 650500000000000000C808C00953746F7056616C756505000000000000000000 - 000754726967676572060E497356697369626C653D7472756500000000005450 - 463007544C61796F757400095374796C654E616D65060A70616E656C7374796C - 6505416C69676E070643656E7465720A53697A652E5769647468050000000000 - 0000C006400B53697A652E4865696768740500000000000000A406401453697A - 652E506C6174666F726D44656661756C74080756697369626C6508000A545265 - 6374616E676C6500095374796C654E616D65060A6261636B67726F756E640541 - 6C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846463230 - 323032300A53697A652E57696474680500000000000000C006400B53697A652E - 4865696768740500000000000000A406401453697A652E506C6174666F726D44 - 656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000054504630 - 07544C61796F757400095374796C654E616D65060E6C6F67627574746F6E7374 - 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 - 00000000C005400B53697A652E4865696768740500000000000000C005401453 - 697A652E506C6174666F726D44656661756C74080756697369626C6508085461 - 624F726465720201000A5452656374616E676C6500095374796C654E616D6506 - 0A6261636B67726F756E6405416C69676E0706436C69656E740C436C69704368 - 696C6472656E090A436C6970506172656E74090A46696C6C2E436F6C6F720709 - 7846463230323032300748697454657374080A53697A652E5769647468050000 - 0000000000C005400B53697A652E4865696768740500000000000000C0054014 - 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E - 6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E - 616D650615627574746F6E436F6C6F72416E696D6174696F6E31084475726174 - 696F6E05000000000000000000000C50726F70657274794E616D65060A46696C - 6C2E436F6C6F720A537461727456616C75650709784646323032303230095374 - 6F7056616C756507097846463430343034300754726967676572063049734D6F - 7573654F7665723D747275653B4973507265737365643D66616C73653B497346 - 6F63757365643D66616C73650E54726967676572496E7665727365063149734D - 6F7573654F7665723D66616C73653B4973507265737365643D66616C73653B49 - 73466F63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E - 00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F - 6E32084475726174696F6E05000000000000000000000C50726F70657274794E - 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464634 - 30343034300953746F7056616C75650709784646313735373943075472696767 - 6572062F4973507265737365643D747275653B49734D6F7573654F7665723D74 - 7275653B4973466F63757365643D66616C736500000F54436F6C6F72416E696D - 6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E69 - 6D6174696F6E33084475726174696F6E05000000000000000000000C50726F70 - 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 - 097846463241383245320953746F7056616C7565070978464631373537394307 - 54726967676572062E4973507265737365643D747275653B49734D6F7573654F - 7665723D747275653B4973466F63757365643D747275650E5472696767657249 - 6E7665727365062F4973507265737365643D66616C73653B49734D6F7573654F - 7665723D747275653B4973466F63757365643D74727565000005545061746800 - 095374796C654E616D650605506174683105416C69676E0706436C69656E7409 - 446174612E506174680A5C02000032000000000000000000A841CDCCCC400100 - 00000000A8410000C041010000000000C03F0000C041010000000000C03F0000 - 0000010000009A99694100000000010000000000A841CDCCCC40030000000000 - A841CDCCCC400000000000009C410000F04001000000000058410000F0400100 - 0000000058410000C03F01000000000040400000C03F01000000000040400000 - B4410100000000009C410000B4410100000000009C410000F040030000000000 - 9C410000F04000000000000040410000F04001000000000090400000F0400100 - 0000000090400000C04001000000000040410000C04001000000000040410000 - F04003000000000040410000F040000000000000904000001041010000000000 - 9041000010410100000000009041000028410100000000009040000028410100 - 0000000090400000104103000000000090400000104100000000000090400000 - 4041010000000000904100004041010000000000904100005841010000000000 - 9040000058410100000000009040000040410300000000009040000040410000 - 0000000090400000704101000000000090410000704101000000000090410000 - 8441010000000000904000008441010000000000904000007041030000000000 - 9040000070410000000000009040000090410100000000009041000090410100 - 00000000904100009C41010000000000904000009C4101000000000090400000 - 904103000000000090400000904100000000000070410000C040010000003333 - 93410000C04001000000000070416666264001000000000070410000C0400300 - 0000000070410000C0400A46696C6C2E436F6C6F720708636C61576869746507 - 48697454657374080C4D617267696E732E4C6566740500000000000000A00240 - 0B4D617267696E732E546F700500000000000000A002400D4D617267696E732E - 52696768740500000000000000A002400E4D617267696E732E426F74746F6D05 - 00000000000000A002400A53697A652E57696474680500000000000000980540 - 0B53697A652E48656967687405000000000000009805401453697A652E506C61 - 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6508 - 577261704D6F64650703466974000000005450463007544C61796F7574000953 - 74796C654E616D65061470726F67726573736261726D696E697374796C650541 - 6C69676E070643656E7465720A53697A652E5769647468050000000000333385 - 05400B53697A652E4865696768740500000000009999E104401453697A652E50 - 6C6174666F726D44656661756C74080756697369626C6508085461624F726465 - 720219000A5452656374616E676C6500095374796C654E616D65060668747261 - 636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978 - 4646343034303430064C6F636B6564090748697454657374080A53697A652E57 - 6964746805000000000033338505400B53697A652E4865696768740500000000 - 009999E104401453697A652E506C6174666F726D44656661756C74080B537472 - 6F6B652E4B696E6407044E6F6E65000A5452656374616E676C6500095374796C - 654E616D65060A68696E64696361746F7205416C69676E07044C6566740A4669 - 6C6C2E436F6C6F720709784646324138324532064C6F636B6564090748697454 - 657374080A53697A652E57696474680500000000000000C804400B53697A652E - 4865696768740500000000009999E104401453697A652E506C6174666F726D44 - 656661756C74080B5374726F6B652E4B696E6407044E6F6E650000000A545265 - 6374616E676C6500095374796C654E616D65060676747261636B05416C69676E - 0708436F6E74656E74730A46696C6C2E436F6C6F720709784646343034303430 - 064C6F636B6564090748697454657374080A53697A652E576964746805000000 - 000033338505400B53697A652E4865696768740500000000009999E104401453 - 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 - 07044E6F6E65000A5452656374616E676C6500095374796C654E616D65060A76 - 696E64696361746F7205416C69676E0706426F74746F6D0A46696C6C2E436F6C - 6F720709784646324138324532064C6F636B6564090748697454657374080A50 - 6F736974696F6E2E5905000000000099998D04400A53697A652E576964746805 - 000000000033338505400B53697A652E4865696768740500000000000000A803 - 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B - 696E6407044E6F6E6500000000} - end - item - Platform = 'OSX Yosemite' - ResourcesBin = { - 464D585F5354594C4520322E3501060F6261636B67726F756E647374796C6503 - AF00060B627574746F6E7374796C6503EB04060D636865636B626F787374796C - 6503EA050609656469747374796C6503D4050609677269647374796C6503E608 - 060D67726F7570626F787374796C6503B402060F6865616465726974656D7374 - 796C6503F403060E696D61676563656C6C7374796C65033D01060A6C6162656C - 7374796C65032001060D6C697374626F78666F6F746572038B0106106C697374 - 626F786974656D7374796C6503520306126C697374626F78706C61696E686561 - 646572036C02060C6C697374626F787374796C6503B307060E706F7075706365 - 6C6C7374796C65038E03061070726F67726573736261727374796C6503020506 - 1170726F677265737363656C6C7374796C6503CB0206147363726F6C6C626172 - 68747261636B7374796C65033B01060E7363726F6C6C6261727374796C650363 - 0406147363726F6C6C62617276747261636B7374796C65033B01060C7370696E - 626F787374796C65034F08060B7377697463687374796C6503ED01060F746162 - 636F6E74726F6C7374796C6503F701060B746162646F747374796C65037F0106 - 0C7461626974656D7374796C65032B05060D7465787463656C6C7374796C6503 - A601060D7468756D626261727374796C65034C03060A7468756D627374796C65 - 033B02060D747261636B6261727374796C65034A0806096D656D6F7374796C65 - 030D08060D73697A65677269707374796C6503FB04060E737461747573626172 - 7374796C6503DB01060C746F6F6C6261727374796C6503CA00061570726F6772 - 6573736261726572726F727374796C65030705060E6C696E6B6C6162656C7374 - 796C65035003060C706F706F7665727374796C65035B02060D706F707570626F - 787374796C6503630606157363726F6C6C626172626F74746F6D627574746F6E - 036E0406137363726F6C6C6261726C656674627574746F6E0387040614736372 - 6F6C6C6261727269676874627574746F6E038A0406127363726F6C6C62617274 - 6F70627574746F6E038404060D636F6D626F626F787374796C65032607061473 - 74617475736261726E6F677269707374796C6503D4000613736D616C6C736372 - 6F6C6C6261727374796C6503AE01060D73706C69747465727374796C65030103 - 06106D656E756261726974656D7374796C65035C0B060C6D656E756261727374 - 796C6503B802060D6D656E756974656D7374796C6503890B06126D656E757365 - 70617261746F727374796C6503E501060D6D656E75766965777374796C6503DD - 020610726164696F627574746F6E7374796C6503C4050618756C63656E746572 - 726164696F627574746F6E7374796C65035D050616756C6C656674726164696F - 627574746F6E7374796C6503A7050617756C7269676874726164696F62757474 - 6F6E7374796C6503B705061470726F67726573736261726D696E697374796C65 - 03F403060E636F6D626F656469747374796C6503F8090613657870616E646572 - 627574746F6E7374796C650381020615657870616E646572636865636B626F78 - 7374796C6503DB05060D657870616E6465727374796C650316070615616E6969 - 6E64696361746F72686F727A7374796C6503D5020611616E69696E6469636174 - 6F727374796C6503BA01060A70616E656C7374796C65034401061970726F6772 - 6573736261726D696E696572726F727374796C6503E503060E6C6F6762757474 - 6F6E7374796C6503DA0700545046300A5452656374616E676C6500095374796C - 654E616D65060F6261636B67726F756E647374796C6505416C69676E07064365 - 6E7465720A46696C6C2E436F6C6F7207097846463244324432440A53697A652E - 576964746805000000000000009407400B53697A652E48656967687405000000 - 00000080D206401453697A652E506C6174666F726D44656661756C74080B5374 - 726F6B652E4B696E6407044E6F6E650756697369626C65080000545046300754 - 4C61796F757400095374796C654E616D65060B627574746F6E7374796C650541 - 6C69676E070643656E7465720A53697A652E57696474680500000000000000C8 - 05400B53697A652E4865696768740500000000000000C803401453697A652E50 - 6C6174666F726D44656661756C74080756697369626C6508085461624F726465 - 720202000A5452656374616E676C6500095374796C654E616D65060A6261636B - 67726F756E6405416C69676E0706436C69656E740C436C69704368696C647265 - 6E090A436C6970506172656E74090A46696C6C2E436F6C6F7207097846463230 - 323032300748697454657374080A53697A652E57696474680500000000000000 + B405400953746F7056616C756505000000000000000000000754726967676572 + 060F4973457870616E6465643D747275650E54726967676572496E7665727365 + 06104973457870616E6465643D66616C7365000000005450463007544C61796F + 757400095374796C654E616D650615657870616E646572636865636B626F7873 + 74796C6505416C69676E070643656E7465720A53697A652E5769647468050000 + 00000000008406400B53697A652E486569676874050000000000000084044014 + 53697A652E506C6174666F726D44656661756C74080756697369626C65080854 + 61624F7264657202430007544C61796F75740005416C69676E07044C6566740A + 53697A652E57696474680500000000000000C003400B53697A652E4865696768 + 7405000000000000008404401453697A652E506C6174666F726D44656661756C + 7408000554506174680005416C69676E0706436C69656E7409446174612E5061 + 74680AD80100002700000000000000FEC8BA4402E79244020000002592AD4402 + E79244020000006D5BA544FEB09E44020000006D5BA544FEB09E440200000093 + A4A4446A0C9F44020000004A80AC44FC79AA4402000000046EBA44FC79AA4402 + 0000004A00C844FC79AA44020000000080CF44FEB09E44020000000080CF44FE + B09E44020000000080CF44FEB09E44020000004C5BC84402E7924402000000FE + C8BA4402E7924400000000FE88BA44FE30974402000000B876BF44FE30974402 + 0000000277C344EEA09A44020000000277C34404DE9E44020000000277C34412 + 1BA34402000000B876BF44008CA64402000000FE88BA44008CA644020000004C + 9BB544008CA64402000000009CB144121BA34402000000009CB14404DE9E4402 + 000000009CB144EEA09A44020000004C9BB544FE30974402000000FE88BA44FE + 309744000000000080BA44045E9B4402000000146EB844045E9B440200000000 + C0B64454F79C440200000000C0B64400F09E440200000000C0B644ACE8A04402 + 000000146EB844FC81A244020000000080BA44FC81A24402000000EC91BC44FC + 81A244020000000040BE44ACE8A044020000000040BE4400F09E440200000000 + 40BE4454F79C4402000000EC91BC44045E9B44020000000080BA44045E9B440A + 46696C6C2E436F6C6F7207097836303030303030300748697454657374080C4D + 617267696E732E4C65667405000000000000008000400B4D617267696E732E54 + 6F7005000000000000008000400D4D617267696E732E52696768740500000000 + 0000008000400E4D617267696E732E426F74746F6D0500000000000000800040 + 0A53697A652E57696474680500000000000000A003400B53697A652E48656967 + 68740500000000000000E803401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F64650703 + 466974000F54436F6C6F72416E696D6174696F6E00084475726174696F6E0500 + 00000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C + 6F720A537461727456616C756507097836303030303030300953746F7056616C + 75650708636C61426C61636B0754726967676572060E4973436865636B65643D + 7472756500000F54436F6C6F72416E696D6174696F6E00084475726174696F6E + 050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E43 + 6F6C6F720A537461727456616C75650708636C61426C61636B0953746F705661 + 6C756507097836303030303030300754726967676572060F4973436865636B65 + 643D66616C73650000000005545465787400095374796C654E616D6506047465 + 787405416C69676E0706436C69656E74064C6F636B6564090748697454657374 + 080C4D617267696E732E4C65667405000000000000008002400B4D617267696E + 732E546F7005000000000000008000400D4D617267696E732E52696768740500 + 00000000000080FF3F0A53697A652E57696474680500000000000000C605400B + 53697A652E4865696768740500000000000000F803401453697A652E506C6174 + 666F726D44656661756C7408165465787453657474696E67732E466F6E74436F + 6C6F720709784646454545454545165465787453657474696E67732E486F727A + 416C69676E07074C656164696E670000005450463007544C61796F7574000953 + 74796C654E616D65060E6C6162656C66696C6C7374796C6505416C69676E0706 + 43656E7465720A53697A652E57696474680500000000000000C805400B53697A + 652E4865696768740500000000000000C803401453697A652E506C6174666F72 + 6D44656661756C74080756697369626C6508085461624F726465720244000A54 + 52656374616E676C6500095374796C654E616D65060A52656374616E676C6531 + 05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646 + 3135313531350A53697A652E57696474680500000000000000C805400B53697A + 652E4865696768740500000000000000C803401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000055454 + 65787400095374796C654E616D6506047465787405416C69676E0708436F6E74 + 656E74730748697454657374080A53697A652E57696474680500000000000000 C805400B53697A652E4865696768740500000000000000C803401453697A652E - 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F - 6E6507585261646975730500000000000000C000400759526164697573050000 - 0000000000C00040000F54436F6C6F72416E696D6174696F6E00095374796C65 - 4E616D650615627574746F6E436F6C6F72416E696D6174696F6E310844757261 - 74696F6E05000000000000000000000C50726F70657274794E616D65060A4669 - 6C6C2E436F6C6F720A537461727456616C756507097846463230323032300953 - 746F7056616C756507097846463430343034300754726967676572063049734D - 6F7573654F7665723D747275653B4973507265737365643D66616C73653B4973 - 466F63757365643D66616C73650E54726967676572496E766572736506314973 - 4D6F7573654F7665723D66616C73653B4973507265737365643D66616C73653B - 4973466F63757365643D66616C736500000F54436F6C6F72416E696D6174696F - 6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D617469 - 6F6E32084475726174696F6E05000000000000000000000C50726F7065727479 - 4E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709784646 - 3430343034300953746F7056616C756507097846463137353739430754726967 - 676572062F4973507265737365643D747275653B49734D6F7573654F7665723D - 747275653B4973466F63757365643D66616C736500000F54436F6C6F72416E69 - 6D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E - 696D6174696F6E33084475726174696F6E05000000000000000000000C50726F - 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 - 07097846463241383245320953746F7056616C75650709784646313735373943 - 0754726967676572062E4973507265737365643D747275653B49734D6F757365 - 4F7665723D747275653B4973466F63757365643D747275650E54726967676572 - 496E7665727365062F4973507265737365643D66616C73653B49734D6F757365 - 4F7665723D747275653B4973466F63757365643D747275650000000554546578 - 7400095374796C654E616D6506047465787405416C69676E0706436C69656E74 - 13456E61626C6544726167486967686C69676874080748697454657374080A53 - 697A652E57696474680500000000000000C805400B53697A652E486569676874 - 0500000000000000C803401453697A652E506C6174666F726D44656661756C74 - 08165465787453657474696E67732E466F6E74436F6C6F720708636C61576869 - 74650000005450463007544C61796F757400095374796C654E616D65060D6368 - 65636B626F787374796C6505416C69676E070643656E7465720A53697A652E57 - 69647468050000000000ACAA8006400B53697A652E4865696768740500000000 - 0058559904401453697A652E506C6174666F726D44656661756C740807566973 - 69626C6508085461624F7264657202030007544C61796F75740005416C69676E - 07044C6566740A53697A652E576964746805000000000000009003400B53697A - 652E48656967687405000000000058559904401453697A652E506C6174666F72 - 6D44656661756C7408000A5452656374616E676C6500095374796C654E616D65 - 060A6261636B67726F756E6405416C69676E070643656E7465720A46696C6C2E - 436F6C6F7207097846463230323032300748697454657374080A53697A652E57 - 696474680500000000000000F002400B53697A652E4865696768740500000000 - 000000F002401453697A652E506C6174666F726D44656661756C74080C537472 - 6F6B652E436F6C6F720709784646313531353135075852616469757305000000 - 00000000C0004007595261646975730500000000000000C00040000A54526563 - 74616E676C6500095374796C654E616D65060A52656374616E676C653105416C - 69676E0706436C69656E740A46696C6C2E436F6C6F7207097846463241383245 - 32074869745465737408074F70616369747905000000000000000000000C4D61 - 7267696E732E4C65667405000000000000008000400B4D617267696E732E546F - 7005000000000000008000400D4D617267696E732E5269676874050000000000 - 00008000400E4D617267696E732E426F74746F6D05000000000000008000400A - 53697A652E57696474680500000000000000B002400B53697A652E4865696768 - 740500000000000000B002401453697A652E506C6174666F726D44656661756C - 74080B5374726F6B652E4B696E6407044E6F6E65075852616469757305000000 - 00000000C0004007595261646975730500000000000000C00040000F54466C6F - 6174416E696D6174696F6E00095374796C654E616D65061B6368656368626F78 - 56697362696C697479416E696D6174696F6E31084475726174696F6E05000000 - 000000000000000C50726F70657274794E616D6506074F7061636974790A5374 - 61727456616C756505000000000000000000000953746F7056616C7565050000 - 0000000000C805400754726967676572060E4973436865636B65643D74727565 - 0E54726967676572496E7665727365060F4973436865636B65643D66616C7365 - 0000000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650618 - 636865636B626F785374726F6B65416E696D6174696F6E31084475726174696F - 6E05000000000000000000000C50726F70657274794E616D65060C5374726F6B - 652E436F6C6F720A537461727456616C75650709784646313531353135095374 - 6F7056616C756507097846463241383245320754726967676572060E49734368 - 65636B65643D747275650E54726967676572496E7665727365060F4973436865 - 636B65643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 - 796C654E616D650617636865636B626F78436F6C6F72416E696D6174696F6E31 - 084475726174696F6E05000000000000000000000C50726F70657274794E616D - 65060A46696C6C2E436F6C6F720A537461727456616C75650709784646323032 - 3032300953746F7056616C756507097846463430343034300754726967676572 - 061049734D6F7573654F7665723D747275650E54726967676572496E76657273 - 65061149734D6F7573654F7665723D66616C7365000000000554546578740009 - 5374796C654E616D6506047465787405416C69676E0706436C69656E740A5369 - 7A652E57696474680500000000005855DD05400B53697A652E48656967687405 - 000000000058559904401453697A652E506C6174666F726D44656661756C7408 - 0454657874060454657874165465787453657474696E67732E466F6E74436F6C - 6F720708636C6157686974650000005450463007544C61796F75740009537479 - 6C654E616D650609656469747374796C6505416C69676E070643656E7465720A - 53697A652E57696474680500000000000000C805400B53697A652E4865696768 - 740500000000000000C803401453697A652E506C6174666F726D44656661756C - 74080756697369626C6508085461624F726465720204000C5442727573684F62 - 6A65637400095374796C654E616D65060A666F726567726F756E6400000C5442 - 727573684F626A65637400095374796C654E616D65060973656C656374696F6E - 0B42727573682E436F6C6F72070978393632413832453200000B54466F6E744F - 626A65637400095374796C654E616D650604666F6E7409466F6E742E53697A65 - 0500000000000000D0024000000A5452656374616E676C6500095374796C654E - 616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A - 46696C6C2E436F6C6F7207097846463230323032300748697454657374080A53 - 697A652E57696474680500000000000000C805400B53697A652E486569676874 - 0500000000000000C803401453697A652E506C6174666F726D44656661756C74 - 080C5374726F6B652E436F6C6F72070978464631353135313507585261646975 - 730500000000000000C0004007595261646975730500000000000000C0004000 - 0F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614656469 - 745374726F6B65416E696D6174696F6E31084475726174696F6E050000000000 - 00000000000C50726F70657274794E616D65060C5374726F6B652E436F6C6F72 - 0A537461727456616C756507097846463135313531350953746F7056616C7565 - 07097846463241383245320754726967676572060E4973466F63757365643D74 - 7275650E54726967676572496E7665727365060F4973466F63757365643D6661 - 6C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 - 0614656469745374726F6B65416E696D6174696F6E32084475726174696F6E05 - 0000000000000000000007496E7665727365090C50726F70657274794E616D65 - 060C5374726F6B652E436F6C6F720A537461727456616C756507097846463135 - 313531350953746F7056616C7565070978464634433443344307547269676765 - 72062149734D6F7573654F7665723D747275653B4973466F63757365643D6661 - 6C73653B0E54726967676572496E7665727365062249734D6F7573654F766572 - 3D66616C73653B4973466F63757365643D66616C73653B00000007544C61796F - 757400095374796C654E616D650607627574746F6E7305416C69676E07055269 - 676874064C6F636B6564090B4D617267696E732E546F70050000000000000080 - 00400D4D617267696E732E526967687405000000000000008000400E4D617267 - 696E732E426F74746F6D05000000000000008000400A506F736974696F6E2E58 - 0500000000000000C004400A506F736974696F6E2E5905000000000000008000 - 400A53697A652E57696474680500000000000000C804400B53697A652E486569 - 6768740500000000000000A803401453697A652E506C6174666F726D44656661 - 756C7408000007544C61796F757400095374796C654E616D650607636F6E7465 - 6E7405416C69676E0706436C69656E74064C6F636B6564090C4D617267696E73 - 2E4C65667405000000000000008001400B4D617267696E732E546F7005000000 - 000000008000400D4D617267696E732E52696768740500000000000000800040 - 0E4D617267696E732E426F74746F6D05000000000000008000400A53697A652E - 57696474680500000000000000A804400B53697A652E48656967687405000000 - 00000000A803401453697A652E506C6174666F726D44656661756C7408000006 - 544C6162656C00095374796C654E616D65060670726F6D7074064C6F636B6564 - 09074F706163697479050000000000000080FE3F165465787453657474696E67 - 732E466F6E74436F6C6F720708636C6157686974650454657874060454657874 - 0000005450463007544C61796F757400095374796C654E616D65060967726964 - 7374796C6505416C69676E070643656E7465720A53697A652E57696474680500 - 00000000FFFFE905400B53697A652E4865696768740500000000000000830640 - 1453697A652E506C6174666F726D44656661756C74080756697369626C650808 - 5461624F726465720205000C5442727573684F626A65637400095374796C654E - 616D650618416C7465726E6174696E67526F774261636B67726F756E640B4272 - 7573682E436F6C6F72070978333237383738373800000C5442727573684F626A - 65637400095374796C654E616D6506086C696E6566696C6C0B42727573682E43 - 6F6C6F72070978464631353135313500000A5452656374616E676C6500095374 - 796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E7465 - 6E74730A46696C6C2E436F6C6F720709784646323032303230064C6F636B6564 - 090748697454657374080C50616464696E672E4C656674050000000000000080 - 00400B50616464696E672E546F7005000000000000008000400D50616464696E - 672E526967687405000000000000008000400E50616464696E672E426F74746F - 6D05000000000000008000400A53697A652E5769647468050000000000FFFFE9 - 05400B53697A652E48656967687405000000000000008306401453697A652E50 - 6C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846 - 4631353135313507585261646975730500000000000000C00040075952616469 - 75730500000000000000C0004000075448656164657200095374796C654E616D - 6506066865616465720553696465730B03546F70044C65667406426F74746F6D - 0552696768740005416C69676E0703546F700A506F736974696F6E2E58050000 - 00000000008000400A506F736974696F6E2E5905000000000000008000400A53 - 697A652E5769647468050000000000FFFFE105400B53697A652E486569676874 - 0500000000000000A803401453697A652E506C6174666F726D44656661756C74 - 08000007544C61796F757400095374796C654E616D650607636F6E74656E7405 - 416C69676E0706436C69656E740C436C69704368696C6472656E090A53697A65 - 2E5769647468050000000000FFFFC105400B53697A652E486569676874050000 - 0000000000B405401453697A652E506C6174666F726D44656661756C7408000A - 5452656374616E676C6500095374796C654E616D65060973656C656374696F6E - 0A46696C6C2E436F6C6F7207097846463241383245320748697454657374080A - 53697A652E57696474680500000000000000C804400B53697A652E4865696768 - 740500000000000000C804401453697A652E506C6174666F726D44656661756C - 74080B5374726F6B652E4B696E6407044E6F6E65075852616469757305000000 - 00000000C0004007595261646975730500000000000000C0004000000A545265 - 6374616E676C6500095374796C654E616D650605666F6375730A46696C6C2E43 - 6F6C6F7207097841463241383245320748697454657374080C4D617267696E73 - 2E4C656674050000000000000080FF3F0B4D617267696E732E546F7005000000 - 0000000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F - 0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E - 57696474680500000000000000C804400B53697A652E48656967687405000000 - 00000000C804401453697A652E506C6174666F726D44656661756C74080B5374 - 726F6B652E4B696E6407044E6F6E6507585261646975730500000000000000C0 - 004007595261646975730500000000000000C000400000000A545363726F6C6C - 42617200095374796C654E616D65060A767363726F6C6C62617205416C69676E - 070552696768740B536D616C6C4368616E676505000000000000000000000B4F - 7269656E746174696F6E0708566572746963616C0A506F736974696F6E2E5805 - 0000000000FFFFC505400A506F736974696F6E2E590500000000000000B80340 - 0A53697A652E576964746805000000000000008003400B53697A652E48656967 - 68740500000000000000B405401453697A652E506C6174666F726D4465666175 - 6C740800000A545363726F6C6C42617200095374796C654E616D65060A687363 - 726F6C6C62617205416C69676E0706426F74746F6D0B536D616C6C4368616E67 - 6505000000000000000000000B4F7269656E746174696F6E070A486F72697A6F - 6E74616C0A506F736974696F6E2E5805000000000000008000400A506F736974 - 696F6E2E590500000000000000E205400A53697A652E57696474680500000000 - 00FFFFE105400B53697A652E4865696768740500000000000000800340145369 - 7A652E506C6174666F726D44656661756C740800000F54536D616C6C5363726F - 6C6C42617200095374796C654E616D65060F76736D616C6C7363726F6C6C6261 - 7205416C69676E070552696768740B536D616C6C4368616E6765050000000000 - 00000000000B4F7269656E746174696F6E0708566572746963616C0C4D617267 - 696E732E4C65667405000000000000008000400A506F736974696F6E2E580500 - 000000000000C605400A506F736974696F6E2E5905000000000000008000400A - 53697A652E576964746805000000000000008002400B53697A652E4865696768 - 7405000000000000008002401453697A652E506C6174666F726D44656661756C - 74080756697369626C650800000F54536D616C6C5363726F6C6C426172000953 - 74796C654E616D65060F68736D616C6C7363726F6C6C62617205416C69676E07 - 06426F74746F6D0B536D616C6C4368616E676505000000000000000000000B4F - 7269656E746174696F6E070A486F72697A6F6E74616C0B4D617267696E732E54 - 6F7005000000000000008000400A506F736974696F6E2E580500000000000000 - 8000400A506F736974696F6E2E590500000000000000E205400A53697A652E57 - 6964746805000000000000009606400B53697A652E4865696768740500000000 - 0000008002401453697A652E506C6174666F726D44656661756C740807566973 - 69626C6508000000005450463007544C61796F757400095374796C654E616D65 - 060D67726F7570626F787374796C6505416C69676E070643656E7465720A5369 - 7A652E57696474680500000000000000F004400B53697A652E48656967687405 - 00000000000000C804401453697A652E506C6174666F726D44656661756C7408 - 0756697369626C6508085461624F726465720206000A5452656374616E676C65 - 00095374796C654E616D65060A6261636B67726F756E6405416C69676E070843 - 6F6E74656E74730946696C6C2E4B696E6407044E6F6E65074869745465737408 - 0C4D617267696E732E4C6566740500000000000000C000400B4D617267696E73 - 2E546F7005000000000000009002400D4D617267696E732E5269676874050000 - 0000000000C000400E4D617267696E732E426F74746F6D0500000000000000C0 - 00400A53697A652E57696474680500000000000000D804400B53697A652E4865 - 6967687405000000000000009804401453697A652E506C6174666F726D446566 - 61756C74080C5374726F6B652E436F6C6F720709784646313531353135075852 - 61646975730500000000000000C0004007595261646975730500000000000000 - C000400005545465787400095374796C654E616D65060474657874084175746F - 53697A65090A436C6970506172656E74090748697454657374080C4D61726769 - 6E732E4C6566740500000000000000A002400A506F736974696F6E2E58050000 - 00000060559502400A506F736974696F6E2E590500000000004055D501C00A53 - 697A652E576964746805000000000000B8C703400B53697A652E486569676874 - 0500000000000060FF02401453697A652E506C6174666F726D44656661756C74 - 08165465787453657474696E67732E466F6E74436F6C6F720708636C61576869 - 7465155465787453657474696E67732E576F7264577261700800000000545046 - 3007544C61796F757400095374796C654E616D65060F6865616465726974656D - 7374796C6505416C69676E070643656E7465720A53697A652E57696474680500 - 0000000000009205400B53697A652E4865696768740500000000000000D00340 - 1453697A652E506C6174666F726D44656661756C74080756697369626C650808 - 5461624F726465720207000A5452656374616E676C6500095374796C654E616D - 65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A4669 - 6C6C2E436F6C6F720709784646344334433443064C6F636B6564090748697454 - 657374080A53697A652E576964746805000000000000009205400B53697A652E - 4865696768740500000000000000D003401453697A652E506C6174666F726D44 - 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313507 - 585261646975730500000000000000C000400759526164697573050000000000 - 0000C00040000F54436F6C6F72416E696D6174696F6E00095374796C654E616D - 650615686561646572436F6C6F72416E696D6174696F6E31084475726174696F - 6E05000000000000000000000C50726F70657274794E616D65060A46696C6C2E - 436F6C6F720A537461727456616C756507097846463443344334430953746F70 - 56616C756507097846463241383245320754726967676572060E497350726573 - 7365643D747275650E54726967676572496E7665727365060F49735072657373 - 65643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C - 654E616D6506166865616465725374726F6B65416E696D6174696F6E31084475 - 726174696F6E05000000000000000000000C50726F70657274794E616D65060C - 5374726F6B652E436F6C6F720A537461727456616C7565070978464631353135 - 31350953746F7056616C75650709784646324138324532075472696767657206 - 0E4973507265737365643D747275650E54726967676572496E7665727365060F - 4973507265737365643D66616C736500000005545465787400095374796C654E - 616D6506047465787405416C69676E0706436C69656E74064C6F636B65640907 - 48697454657374080C4D617267696E732E4C6566740500000000000000A00140 - 0B4D617267696E732E546F7005000000000000008000400D4D617267696E732E - 52696768740500000000000000A001400E4D617267696E732E426F74746F6D05 - 000000000000008000400A53697A652E57696474680500000000000000FC0440 - 0B53697A652E4865696768740500000000000000B003401453697A652E506C61 - 74666F726D44656661756C7408165465787453657474696E67732E466F6E7443 - 6F6C6F720708636C6157686974650000005450463007544C61796F7574000953 - 74796C654E616D65060E696D61676563656C6C7374796C6505416C69676E0706 - 43656E7465720756697369626C6508085461624F726465720208000654496D61 - 676500095374796C654E616D650605696D6167650E4D756C7469526573426974 - 6D61700E01000005416C69676E0706436C69656E74064C6F636B656409074869 - 7454657374080C4D617267696E732E4C656674050000000000000080FF3F0B4D - 617267696E732E546F70050000000000000080FF3F0D4D617267696E732E5269 - 676874050000000000000080FF3F0E4D617267696E732E426F74746F6D050000 - 000000000080FF3F0A53697A652E57696474680500000000000000C004400B53 - 697A652E4865696768740500000000000000C004401453697A652E506C617466 - 6F726D44656661756C74080000005450463007544C61796F757400095374796C - 654E616D65060A6C6162656C7374796C6505416C69676E070643656E7465720A - 53697A652E57696474680500000000000000C805400B53697A652E4865696768 - 740500000000000000C803401453697A652E506C6174666F726D44656661756C - 74080756697369626C6508085461624F72646572020900055454657874000953 - 74796C654E616D6506047465787405416C69676E0708436F6E74656E74730748 - 697454657374080A53697A652E57696474680500000000000000C805400B5369 - 7A652E4865696768740500000000000000C803401453697A652E506C6174666F - 726D44656661756C7408165465787453657474696E67732E466F6E74436F6C6F - 720708636C6157686974650000005450463007544C61796F757400095374796C - 654E616D65060D6C697374626F78666F6F74657205416C69676E070643656E74 - 65720A53697A652E576964746805000000000000009205400B53697A652E4865 - 696768740500000000000000D003401453697A652E506C6174666F726D446566 - 61756C74080756697369626C6508085461624F72646572020A00055454657874 - 00095374796C654E616D6506047465787405416C69676E0706436C69656E7406 - 4C6F636B6564090748697454657374080C4D617267696E732E4C656674050000 - 0000000000A001400B4D617267696E732E546F7005000000000000008000400D - 4D617267696E732E52696768740500000000000000A001400E4D617267696E73 - 2E426F74746F6D05000000000000008000400A53697A652E5769647468050000 - 0000000000FC04400B53697A652E4865696768740500000000000000B0034014 - 53697A652E506C6174666F726D44656661756C7408165465787453657474696E - 67732E466F6E74436F6C6F720708636C6157686974650000005450463007544C - 61796F757400095374796C654E616D6506106C697374626F786974656D737479 + 506C6174666F726D44656661756C7408165465787453657474696E67732E466F + 6E74436F6C6F720708636C6157686974650000005450463007544C61796F7574 + 00095374796C654E616D650613636F6D626F656469746572726F727374796C65 + 05416C69676E070643656E7465720A53697A652E576964746805000000000000 + 00C805400B53697A652E4865696768740500000000000000C803401453697A65 + 2E506C6174666F726D44656661756C74080756697369626C6508085461624F72 + 6465720245000C5442727573684F626A65637400095374796C654E616D65060A + 666F726567726F756E6400000B54466F6E744F626A65637400095374796C654E + 616D650604666F6E7409466F6E742E53697A650500000000000000D002400000 + 07544C61796F757400095374796C654E616D65060A6261636B67726F756E6405 + 416C69676E0708436F6E74656E74730A53697A652E5769647468050000000000 + 0000C805400B53697A652E4865696768740500000000000000C803401453697A + 652E506C6174666F726D44656661756C7408000A5452656374616E676C650009 + 5374796C654E616D65060A52656374616E676C653105416C69676E0706436C69 + 656E740A46696C6C2E436F6C6F72070978464632303230323007486974546573 + 74080A53697A652E57696474680500000000000000C805400B53697A652E4865 + 696768740500000000000000C803401453697A652E506C6174666F726D446566 + 61756C74080C5374726F6B652E436F6C6F720709784646323032303230000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72 + 416E696D6174696F6E315374796C65084475726174696F6E0500000000000000 + 00000007496E7665727365090C50726F70657274794E616D65060C5374726F6B + 652E436F6C6F720A537461727456616C75650709784646323032303230095374 + 6F7056616C756507097846463430343034300754726967676572062049734D6F + 7573654F7665723D747275653B4973466F63757365643D66616C73650E547269 + 67676572496E7665727365062149734D6F7573654F7665723D66616C73653B49 + 73466F63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E + 00095374796C654E616D650614436F6C6F72416E696D6174696F6E325374796C + 65084475726174696F6E050000000000000000000007496E7665727365090C50 + 726F70657274794E616D65060C5374726F6B652E436F6C6F720A537461727456 + 616C756507097846463430343034300953746F7056616C756507097846464532 + 324132410754726967676572061F49734D6F7573654F7665723D747275653B49 + 73466F63757365643D747275650E54726967676572496E766572736506204973 + 4D6F7573654F7665723D747275653B4973466F63757365643D66616C73650000 + 07544C61796F757400095374796C654E616D6506056172726F7705416C69676E + 070846697452696768740B4D617267696E732E546F70050000000000000080FF + 3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D61726769 + 6E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E5805 + 00000000005ED99705400A506F736974696F6E2E59050000000000000080FF3F + 0A53697A652E5769647468050000000000889AB803400B53697A652E48656967 + 68740500000000000000B803401453697A652E506C6174666F726D4465666175 + 6C7408000A5452656374616E676C6500095374796C654E616D65060A52656374 + 616E676C653105416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F + 7207097846463330333033300748697454657374080A53697A652E5769647468 + 050000000000889AB803400B53697A652E4865696768740500000000000000B8 + 03401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E0009537479 + 6C654E616D650614436F6C6F72416E696D6174696F6E315374796C6508447572 + 6174696F6E050000000000000000000007496E7665727365090C50726F706572 + 74794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978 + 46463330333033300953746F7056616C75650709784646343034303430075472 + 6967676572062049734D6F7573654F7665723D747275653B4973466F63757365 + 643D66616C73650E54726967676572496E7665727365062149734D6F7573654F + 7665723D66616C73653B4973466F63757365643D66616C736500000F54436F6C + 6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E69 + 6D6174696F6E325374796C65084475726174696F6E0500000000000000000000 + 0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456 + 616C756507097846463430343034300953746F7056616C756507097846463943 + 313731370754726967676572061F4973466F63757365643D747275653B49734D + 6F7573654F7665723D7472756500000007544C61796F757400095374796C654E + 616D6506074C61796F75743105416C69676E070643656E7465720C4D61726769 + 6E732E4C656674050000000000000080FF3F0A53697A652E5769647468050000 + 0000000000A002400B53697A652E4865696768740500000000000000C0014014 + 53697A652E506C6174666F726D44656661756C74080005545061746800095374 + 796C654E616D650605506174683105416C69676E0706436C69656E7409446174 + 612E506174680A3400000004000000000000000000C8420000C8420100000000 + 0096430000C842010000000000484300009643030000000000C8420000C8420A + 46696C6C2E436F6C6F720708636C6157686974650748697454657374080A5369 + 7A652E57696474680500000000000000A002400B53697A652E48656967687405 + 00000000000000C001401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E650000000000000C5442727573684F + 626A65637400095374796C654E616D65060973656C656374696F6E0B42727573 + 682E436F6C6F720709783936324138324532000007544C61796F757400095374 + 796C654E616D650607636F6E74656E7405416C69676E0706436C69656E740C4D + 617267696E732E4C65667405000000000000008000400B4D617267696E732E54 + 6F7005000000000000008000400D4D617267696E732E52696768740500000000 + 000000F003400E4D617267696E732E426F74746F6D0500000000000000800040 + 0A53697A652E576964746805000000000000008805400B53697A652E48656967 + 68740500000000000000A803401453697A652E506C6174666F726D4465666175 + 6C74080000005450463007544C61796F757400095374796C654E616D65061E70 + 726F6772657373626172696E64657465726D696E61626C657374796C6505416C + 69676E070643656E7465720A53697A652E5769647468050000000000ABAAB006 + 400B53697A652E4865696768740500000000000000C003401453697A652E506C + 6174666F726D44656661756C74080756697369626C6508085461624F72646572 + 0246000A5452656374616E676C6500095374796C654E616D6506067674726163 + 6B05416C69676E0708436F6E74656E747307456E61626C6564080A46696C6C2E + 436F6C6F720709784646323032303230064C6F636B6564090748697454657374 + 080A53697A652E57696474680500000000000000E006400B53697A652E486569 + 67687405000000000000009404401453697A652E506C6174666F726D44656661 + 756C74080C5374726F6B652E436F6C6F72070978464631353135313507566973 + 69626C6508000A5452656374616E676C6500095374796C654E616D65060A7669 + 6E64696361746F7205416C69676E0706426F74746F6D0A46696C6C2E436F6C6F + 720709784646324138324532064C6F636B6564090748697454657374080C4D61 + 7267696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F + 70050000000000000080FF3F0D4D617267696E732E5269676874050000000000 + 000080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A + 506F736974696F6E2E58050000000000000080FF3F0A506F736974696F6E2E59 + 0500000000000000F002400A53697A652E57696474680500000000000000DE06 + 400B53697A652E4865696768740500000000000000A803401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 00000007544C61796F757400095374796C654E616D65060668747261636B0541 + 6C69676E0708436F6E74656E74730A53697A652E5769647468050000000000AB + AAB006400B53697A652E4865696768740500000000000000C003401453697A65 + 2E506C6174666F726D44656661756C7408000A5452656374616E676C65000953 + 74796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74 + 656E74730C436C69704368696C6472656E090A46696C6C2E436F6C6F72070978 + 4646324138324532064C6F636B6564090748697454657374080A53697A652E57 + 69647468050000000000ABAAB006400B53697A652E4865696768740500000000 + 000000C003401453697A652E506C6174666F726D44656661756C74080C537472 + 6F6B652E436F6C6F720709784646313531353135000F54436F6C6F72416E696D + 6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E + 315374796C6507456E61626C656409084475726174696F6E0500000000000000 + 800140044C6F6F70090C50726F70657274794E616D65060A46696C6C2E436F6C + 6F720A537461727456616C756507097846463230323032300953746F7056616C + 756507097846463241383245320754726967676572060E497356697369626C65 + 3D7472756500000000005450463007544C61796F757400095374796C654E616D + 650611616E69696E64696361746F727374796C6505416C69676E070643656E74 + 65720756697369626C6508085461624F72646572024700045441726300095374 + 796C654E616D65060341726305416C69676E0708436F6E74656E747307486974 + 54657374080D526F746174696F6E416E676C650500000000000000B407400A53 + 697A652E57696474680500000000000000C804400B53697A652E486569676874 + 0500000000000000C804401453697A652E506C6174666F726D44656661756C74 + 080C5374726F6B652E436F6C6F720708636C615768697465105374726F6B652E + 546869636B6E65737305000000000000008001400A5374726F6B652E43617007 + 05526F756E640B5374726F6B652E4A6F696E0705426576656C08456E64416E67 + 6C650500000000000000B405C0000F54466C6F6174416E696D6174696F6E0009 + 5374796C654E616D650603616E6907456E61626C656409084475726174696F6E + 050000000000000080FF3F044C6F6F70090C50726F70657274794E616D65060D + 526F746174696F6E416E676C650A537461727456616C75650500000000000000 + 0000000953746F7056616C75650500000000000000B407400754726967676572 + 060E497356697369626C653D74727565000000005450463007544C61796F7574 + 00095374796C654E616D650615616E69696E64696361746F72686F727A737479 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 - 000000D605400B53697A652E4865696768740500000000000000C00340145369 + 000040C006400B53697A652E4865696768740500000000000000800040145369 7A652E506C6174666F726D44656661756C74080756697369626C650808546162 - 4F72646572020B000654476C79706800095374796C654E616D65060A676C7970 - 687374796C650C4D617267696E732E4C65667405000000000000008000400B4D - 617267696E732E546F70050000000000000080FF3F0D4D617267696E732E5269 - 67687405000000000000008000400E4D617267696E732E426F74746F6D050000 - 000000000080FF3F05416C69676E07044C6566740A506F736974696F6E2E5805 - 000000000000008000400A506F736974696F6E2E59050000000000000080FF3F - 0A53697A652E576964746805000000000000008003400B53697A652E48656967 - 68740500000000000000B003401453697A652E506C6174666F726D4465666175 - 6C7408000005545465787400095374796C654E616D6506047465787405416C69 - 676E0706436C69656E740748697454657374080C4D617267696E732E4C656674 - 0500000000000000C000400B4D617267696E732E546F70050000000000000080 - FF3F0D4D617267696E732E52696768740500000000000000C000400E4D617267 - 696E732E426F74746F6D050000000000000080FF3F0A53697A652E5769647468 - 0500000000000000CA05400B53697A652E4865696768740500000000000000B0 - 03401453697A652E506C6174666F726D44656661756C74081654657874536574 - 74696E67732E466F6E74436F6C6F720708636C61576869746515546578745365 - 7474696E67732E576F72645772617008165465787453657474696E67732E486F - 727A416C69676E07074C656164696E6700000954436865636B426F7800095374 - 796C654E616D650605636865636B05416C69676E07084D6F73744C6566740843 - 616E466F637573081244697361626C65466F637573456666656374090A53697A - 652E57696474680500000000000000A003400B53697A652E4865696768740500 - 000000000000C003401453697A652E506C6174666F726D44656661756C740807 - 56697369626C65080000005450463007544C61796F757400095374796C654E61 - 6D6506126C697374626F78706C61696E68656164657205416C69676E07064365 - 6E7465720A53697A652E576964746805000000000000009205400B53697A652E - 4865696768740500000000000000D003401453697A652E506C6174666F726D44 - 656661756C74080756697369626C6508085461624F72646572020C000A545265 - 6374616E676C6500095374796C654E616D65060A6261636B67726F756E640541 - 6C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846463244 - 32443244064C6F636B6564090748697454657374080A53697A652E5769647468 - 05000000000000009205400B53697A652E4865696768740500000000000000D0 - 03401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E - 436F6C6F72070978464631353135313507585261646975730500000000000000 - C0004007595261646975730500000000000000C0004000000554546578740009 - 5374796C654E616D6506047465787405416C69676E0706436C69656E74064C6F - 636B6564090748697454657374080C4D617267696E732E4C6566740500000000 - 000000A001400B4D617267696E732E546F7005000000000000008000400D4D61 - 7267696E732E52696768740500000000000000A001400E4D617267696E732E42 - 6F74746F6D05000000000000008000400A53697A652E57696474680500000000 - 000000FC04400B53697A652E4865696768740500000000000000B00340145369 - 7A652E506C6174666F726D44656661756C7408165465787453657474696E6773 - 2E466F6E74436F6C6F720708636C6157686974650000005450463007544C6179 - 6F757400095374796C654E616D65060C6C697374626F787374796C6505416C69 - 676E070643656E7465720A53697A652E5769647468050000000000FFFFE90540 - 0B53697A652E48656967687405000000000000008306401453697A652E506C61 - 74666F726D44656661756C74080756697369626C6508085461624F7264657202 - 0D000C5442727573684F626A65637400095374796C654E616D650618416C7465 - 726E6174696E67526F774261636B67726F756E640B42727573682E436F6C6F72 - 070978464632433243324300000A5452656374616E676C6500095374796C654E - 616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A - 46696C6C2E436F6C6F720709784646323032303230064C6F636B656409074869 - 7454657374080C50616464696E672E4C65667405000000000000008000400B50 - 616464696E672E546F7005000000000000008000400D50616464696E672E5269 - 67687405000000000000008000400E50616464696E672E426F74746F6D050000 - 00000000008000400A53697A652E5769647468050000000000FFFFE905400B53 - 697A652E48656967687405000000000000008306401453697A652E506C617466 - 6F726D44656661756C74080C5374726F6B652E436F6C6F720709784646313531 - 35313507585261646975730500000000000000C0004007595261646975730500 - 000000000000C000400007544C61796F757400095374796C654E616D65060763 - 6F6E74656E7405416C69676E0706436C69656E740C436C69704368696C647265 - 6E090A53697A652E5769647468050000000000FFFFC105400B53697A652E4865 - 696768740500000000000000DE05401453697A652E506C6174666F726D446566 - 61756C7408000A5452656374616E676C6500095374796C654E616D6506097365 - 6C656374696F6E0A46696C6C2E436F6C6F720709784646324138324532074869 - 7454657374080A53697A652E57696474680500000000000000C804400B53697A - 652E4865696768740500000000000000C804401453697A652E506C6174666F72 - 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650758526164 - 6975730500000000000000C0004007595261646975730500000000000000C000 - 4000000A5452656374616E676C6500095374796C654E616D650610666F637573 - 656473656C656374696F6E0A46696C6C2E436F6C6F7207097846463241383245 - 320748697454657374080A53697A652E57696474680500000000000000C80440 - 0B53697A652E4865696768740500000000000000C804401453697A652E506C61 - 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650B - 5374726F6B652E446173680703446F7407585261646975730500000000000000 - C0004007595261646975730500000000000000C000400000000A545363726F6C - 6C42617200095374796C654E616D65060A767363726F6C6C62617205416C6967 - 6E070552696768740B536D616C6C4368616E676505000000000000000000000B - 4F7269656E746174696F6E0708566572746963616C0A506F736974696F6E2E58 - 050000000000FFFFC505400A506F736974696F6E2E5905000000000000008000 - 400A53697A652E576964746805000000000000008003400B53697A652E486569 - 6768740500000000000000DE05401453697A652E506C6174666F726D44656661 - 756C740800000A545363726F6C6C42617200095374796C654E616D65060A6873 - 63726F6C6C62617205416C69676E0706426F74746F6D0B536D616C6C4368616E - 676505000000000000000000000B4F7269656E746174696F6E070A486F72697A - 6F6E74616C0A506F736974696F6E2E5805000000000000008000400A506F7369 - 74696F6E2E590500000000000000E205400A53697A652E576964746805000000 - 0000FFFFE105400B53697A652E48656967687405000000000000008003401453 - 697A652E506C6174666F726D44656661756C740800000F54536D616C6C536372 - 6F6C6C42617200095374796C654E616D65060F76736D616C6C7363726F6C6C62 - 617205416C69676E070552696768740B536D616C6C4368616E67650500000000 - 0000000000000B4F7269656E746174696F6E0708566572746963616C0C4D6172 - 67696E732E4C65667405000000000000008000400A506F736974696F6E2E5805 - 00000000000000C605400A506F736974696F6E2E590500000000000000800040 - 0A53697A652E576964746805000000000000008002400B53697A652E48656967 - 687405000000000000008002401453697A652E506C6174666F726D4465666175 - 6C74080756697369626C650800000F54536D616C6C5363726F6C6C4261720009 - 5374796C654E616D65060F68736D616C6C7363726F6C6C62617205416C69676E - 0706426F74746F6D0B536D616C6C4368616E676505000000000000000000000B - 4F7269656E746174696F6E070A486F72697A6F6E74616C0B4D617267696E732E - 546F7005000000000000008000400A506F736974696F6E2E5805000000000000 - 008000400A506F736974696F6E2E590500000000000000E205400A53697A652E - 576964746805000000000000009606400B53697A652E48656967687405000000 - 000000008002401453697A652E506C6174666F726D44656661756C7408075669 - 7369626C6508000000005450463007544C61796F757400095374796C654E616D - 65060E706F70757063656C6C7374796C6505416C69676E070643656E74657207 - 56697369626C6508085461624F72646572020E0007544C61796F75740005416C - 69676E070552696768740A506F736974696F6E2E5805000000000000008C0440 - 0A53697A652E57696474680500000000000000F002400B53697A652E48656967 - 68740500000000000000C804401453697A652E506C6174666F726D4465666175 - 6C7408000554506174680005416C69676E070643656E74657209446174612E50 - 6174680A400000000500000000000000000000000000803F010000000000803F - 0000803F010000000000003F0000000001000000000000000000803F03000000 - 00000000000000000A46696C6C2E436F6C6F720708636C615768697465074869 - 7454657374080B4D617267696E732E546F700500000000000000E001C00A5369 - 7A652E576964746805000000000000008002400B53697A652E48656967687405 - 000000000000008001401453697A652E506C6174666F726D44656661756C7408 - 0B5374726F6B652E4B696E6407044E6F6E6500000554506174680005416C6967 - 6E070643656E74657209446174612E506174680A340000000400000000000000 - 0000000000000000010000000000803F00000000010000000000003F0000803F - 0300000000000000000000000A46696C6C2E436F6C6F720708636C6157686974 - 650748697454657374080B4D617267696E732E546F700500000000000000C001 - 400A53697A652E576964746805000000000000008002400B53697A652E486569 - 67687405000000000000008001401453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E6500000005545465787400 - 095374796C654E616D6506047465787405416C69676E0706436C69656E74064C - 6F636B6564090748697454657374080C4D617267696E732E4C65667405000000 - 00000000A001400B4D617267696E732E546F7005000000000000008000400D4D - 617267696E732E52696768740500000000000000A001400E4D617267696E732E - 426F74746F6D05000000000000008000400A53697A652E576964746805000000 - 00000000C803400B53697A652E4865696768740500000000000000B804401453 - 697A652E506C6174666F726D44656661756C7408165465787453657474696E67 - 732E466F6E74436F6C6F720708636C6157686974650000005450463007544C61 - 796F757400095374796C654E616D65061070726F67726573736261727374796C - 6505416C69676E070643656E7465720A53697A652E5769647468050000000000 + 4F726465720248000A5452656374616E676C6500095374796C654E616D65060A + 52656374616E676C653105416C69676E0706436C69656E740C436C6970436869 + 6C6472656E090A46696C6C2E436F6C6F7207097846463430343034300A53697A + 652E57696474680500000000000040C006400B53697A652E4865696768740500 + 0000000000008000401453697A652E506C6174666F726D44656661756C74080B + 5374726F6B652E4B696E6407044E6F6E650005544C696E6500095374796C654E + 616D6506054C696E6531084C696E65547970650706426F74746F6D0A53697A65 + 2E57696474680500000000000000A00B400B53697A652E486569676874050000 + 00000000008000401453697A652E506C6174666F726D44656661756C74080C53 + 74726F6B652E436F6C6F720709784646324138324532105374726F6B652E5468 + 69636B6E65737305000000000000008002400B5374726F6B652E446173680704 + 44617368000F54466C6F6174416E696D6174696F6E00095374796C654E616D65 + 0603616E6907456E61626C656409084475726174696F6E050000000000000080 + 0340044C6F6F70090C50726F70657274794E616D65060A506F736974696F6E2E + 580A537461727456616C75650500000000000000C808C00953746F7056616C75 + 6505000000000000000000000754726967676572060E497356697369626C653D + 7472756500000000005450463007544C61796F757400095374796C654E616D65 + 060A70616E656C7374796C6505416C69676E070643656E7465720A53697A652E + 57696474680500000000000000C006400B53697A652E48656967687405000000 + 00000000A406401453697A652E506C6174666F726D44656661756C7408075669 + 7369626C6508085461624F726465720249000A5452656374616E676C65000953 + 74796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74 + 656E74730A46696C6C2E436F6C6F7207097846463230323032300A53697A652E + 57696474680500000000000000C006400B53697A652E48656967687405000000 + 00000000A406401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E650000005450463007544C61796F75740009 + 5374796C654E616D65060E6C6F67627574746F6E7374796C6505416C69676E07 + 0643656E7465720A53697A652E57696474680500000000000000C005400B5369 + 7A652E4865696768740500000000000000C005401453697A652E506C6174666F + 726D44656661756C74080756697369626C6508085461624F72646572024A000A + 5452656374616E676C6500095374796C654E616D65060A6261636B67726F756E + 6405416C69676E0706436C69656E740C436C69704368696C6472656E090A436C + 6970506172656E74090A46696C6C2E436F6C6F72070978464632303230323007 + 48697454657374080A53697A652E57696474680500000000000000C005400B53 + 697A652E4865696768740500000000000000C005401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F + 6E436F6C6F72416E696D6174696F6E31084475726174696F6E05000000000000 + 000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 + 61727456616C756507097846463230323032300953746F7056616C7565070978 + 46463430343034300754726967676572063049734D6F7573654F7665723D7472 + 75653B4973507265737365643D66616C73653B4973466F63757365643D66616C + 73650E54726967676572496E7665727365063149734D6F7573654F7665723D66 + 616C73653B4973507265737365643D66616C73653B4973466F63757365643D66 + 616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650615627574746F6E436F6C6F72416E696D6174696F6E32084475726174696F + 6E05000000000000000000000C50726F70657274794E616D65060A46696C6C2E + 436F6C6F720A537461727456616C756507097846463430343034300953746F70 + 56616C756507097846463137353739430754726967676572062F497350726573 + 7365643D747275653B49734D6F7573654F7665723D747275653B4973466F6375 + 7365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009537479 + 6C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E33084475 + 726174696F6E05000000000000000000000C50726F70657274794E616D65060A + 46696C6C2E436F6C6F720A537461727456616C75650709784646324138324532 + 0953746F7056616C756507097846463137353739430754726967676572062E49 + 73507265737365643D747275653B49734D6F7573654F7665723D747275653B49 + 73466F63757365643D747275650E54726967676572496E7665727365062F4973 + 507265737365643D66616C73653B49734D6F7573654F7665723D747275653B49 + 73466F63757365643D74727565000005545061746800095374796C654E616D65 + 0605506174683105416C69676E0706436C69656E7409446174612E506174680A + 5C02000032000000000000000000A841CDCCCC40010000000000A8410000C041 + 010000000000C03F0000C041010000000000C03F00000000010000009A996941 + 00000000010000000000A841CDCCCC40030000000000A841CDCCCC4000000000 + 00009C410000F04001000000000058410000F04001000000000058410000C03F + 01000000000040400000C03F01000000000040400000B4410100000000009C41 + 0000B4410100000000009C410000F0400300000000009C410000F04000000000 + 000040410000F04001000000000090400000F04001000000000090400000C040 + 01000000000040410000C04001000000000040410000F0400300000000004041 + 0000F04000000000000090400000104101000000000090410000104101000000 + 0000904100002841010000000000904000002841010000000000904000001041 + 0300000000009040000010410000000000009040000040410100000000009041 + 0000404101000000000090410000584101000000000090400000584101000000 + 0000904000004041030000000000904000004041000000000000904000007041 + 0100000000009041000070410100000000009041000084410100000000009040 + 0000844101000000000090400000704103000000000090400000704100000000 + 0000904000009041010000000000904100009041010000000000904100009C41 + 010000000000904000009C410100000000009040000090410300000000009040 + 0000904100000000000070410000C04001000000333393410000C04001000000 + 000070416666264001000000000070410000C04003000000000070410000C040 + 0A46696C6C2E436F6C6F720708636C6157686974650748697454657374080C4D + 617267696E732E4C6566740500000000000000A002400B4D617267696E732E54 + 6F700500000000000000A002400D4D617267696E732E52696768740500000000 + 000000A002400E4D617267696E732E426F74746F6D0500000000000000A00240 + 0A53697A652E576964746805000000000000009805400B53697A652E48656967 + 687405000000000000009805401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F64650703 + 466974000000005450463007544C61796F757400095374796C654E616D650614 + 70726F67726573736261726D696E697374796C6505416C69676E070643656E74 + 65720A53697A652E576964746805000000000033338505400B53697A652E4865 + 696768740500000000009999E104401453697A652E506C6174666F726D446566 + 61756C74080756697369626C6508085461624F72646572024C000A5452656374 + 616E676C6500095374796C654E616D65060668747261636B05416C69676E0708 + 436F6E74656E74730A46696C6C2E436F6C6F720709784646343034303430064C + 6F636B6564090748697454657374080A53697A652E5769647468050000000000 33338505400B53697A652E4865696768740500000000009999E104401453697A - 652E506C6174666F726D44656661756C74080756697369626C6508085461624F - 72646572020F000A5452656374616E676C6500095374796C654E616D65060668 - 747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72 - 0709784646323032303230064C6F636B6564090748697454657374080A53697A - 652E576964746805000000000033338505400B53697A652E4865696768740500 - 000000009999E104401453697A652E506C6174666F726D44656661756C74080C - 5374726F6B652E436F6C6F720709784646313531353135075852616469757305 - 00000000000000C0004007595261646975730500000000000000C00040000A54 - 52656374616E676C6500095374796C654E616D65060A68696E64696361746F72 - 05416C69676E07044C6566740A46696C6C2E436F6C6F72070978464632413832 - 4532064C6F636B6564090748697454657374080C4D617267696E732E4C656674 - 050000000000000080FF3F0B4D617267696E732E546F70050000000000000080 - FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D617267 - 696E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E58 - 050000000000000080FF3F0A506F736974696F6E2E59050000000000000080FF - 3F0A53697A652E57696474680500000000000000C804400B53697A652E486569 - 6768740500000000009999D904401453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E6507585261646975730500 - 000000000000C0004007595261646975730500000000000000C000400000000A - 5452656374616E676C6500095374796C654E616D65060676747261636B05416C - 69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646323032 - 303230064C6F636B6564090748697454657374080A53697A652E576964746805 - 000000000033338505400B53697A652E4865696768740500000000009999E104 - 401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E43 - 6F6C6F72070978464631353135313507585261646975730500000000000000C0 - 004007595261646975730500000000000000C00040000A5452656374616E676C - 6500095374796C654E616D65060A76696E64696361746F7205416C69676E0706 - 426F74746F6D0A46696C6C2E436F6C6F720709784646324138324532064C6F63 - 6B6564090748697454657374080C4D617267696E732E4C656674050000000000 - 000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D6172 - 67696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F - 74746F6D050000000000000080FF3F0A506F736974696F6E2E58050000000000 - 000080FF3F0A506F736974696F6E2E5905000000000099998904400A53697A65 - 2E576964746805000000000033338105400B53697A652E486569676874050000 - 0000000000A803401453697A652E506C6174666F726D44656661756C74080B53 - 74726F6B652E4B696E6407044E6F6E6507585261646975730500000000000000 - C0004007595261646975730500000000000000C0004000000000545046300754 - 4C61796F757400095374796C654E616D65061170726F677265737363656C6C73 - 74796C6505416C69676E070643656E7465720A53697A652E5769647468050000 - 0000000000F805400B53697A652E4865696768740500000000000000FC054014 - 53697A652E506C6174666F726D44656661756C74080756697369626C65080854 - 61624F7264657202100007544C61796F757400095374796C654E616D65060668 - 747261636B05416C69676E0708436F6E74656E7473064C6F636B6564090C4D61 - 7267696E732E4C65667405000000000000008000400B4D617267696E732E546F - 7005000000000000008000400D4D617267696E732E5269676874050000000000 - 00008000400E4D617267696E732E426F74746F6D05000000000000008000400A - 53697A652E57696474680500000000000000F005400B53697A652E4865696768 - 740500000000000000F405401453697A652E506C6174666F726D44656661756C - 7408000A5452656374616E676C6500095374796C654E616D65060A68696E6469 - 6361746F7205416C69676E07044C6566740A46696C6C2E436F6C6F7207097846 - 46324138324532064C6F636B6564090748697454657374080C4D617267696E73 - 2E4C65667405000000000000008000400B4D617267696E732E546F7005000000 - 000000008000400D4D617267696E732E52696768740500000000000000800040 - 0E4D617267696E732E426F74746F6D05000000000000008000400A506F736974 - 696F6E2E5805000000000000008000400A506F736974696F6E2E590500000000 - 0000008000400A53697A652E57696474680500000000000000C804400B53697A - 652E4865696768740500000000000000EC05401453697A652E506C6174666F72 - 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650758526164 - 6975730500000000000000C0004007595261646975730500000000000000C000 - 4000000000545046300A5452656374616E676C6500095374796C654E616D6506 - 147363726F6C6C62617268747261636B7374796C6505416C69676E070643656E - 7465720A46696C6C2E436F6C6F72070978464631353135313507486974546573 - 74080A53697A652E57696474680500000000000000C804400B53697A652E4865 - 696768740500000000000000C804401453697A652E506C6174666F726D446566 - 61756C74080B5374726F6B652E4B696E6407044E6F6E650756697369626C6508 - 0006545468756D6200095374796C654E616D6506057468756D62064C6F636B65 - 64090A53697A652E576964746805000000000000008003400B53697A652E4865 - 696768740500000000000000C804401453697A652E506C6174666F726D446566 - 61756C74080B5374796C654C6F6F6B7570060A7468756D627374796C65000000 - 5450463007544C61796F757400095374796C654E616D65060E7363726F6C6C62 - 61727374796C6505416C69676E070643656E7465720756697369626C65080854 - 61624F726465720211000754427574746F6E00095374796C654E616D65060A6C - 656674627574746F6E05416C69676E07044C656674064C6F636B6564090A506F - 736974696F6E2E5905000000000000008003400A53697A652E57696474680500 - 0000000000008003400B53697A652E4865696768740500000000000000900340 - 1453697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B - 757006137363726F6C6C6261726C656674627574746F6E00000754427574746F - 6E00095374796C654E616D65060B7269676874627574746F6E05416C69676E07 - 055269676874064C6F636B6564090A506F736974696F6E2E5805000000000000 - 008804400A506F736974696F6E2E5905000000000000008003400A53697A652E - 576964746805000000000000008003400B53697A652E48656967687405000000 - 000000009003401453697A652E506C6174666F726D44656661756C74080B5374 - 796C654C6F6F6B757006147363726F6C6C6261727269676874627574746F6E00 - 000754427574746F6E00095374796C654E616D65060C626F74746F6D62757474 - 6F6E05416C69676E0706426F74746F6D064C6F636B6564090A506F736974696F - 6E2E5905000000000000008804400A53697A652E576964746805000000000000 - 00C804400B53697A652E48656967687405000000000000008003401453697A65 - 2E506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570061573 - 63726F6C6C626172626F74746F6D627574746F6E00000654547261636B000953 - 74796C654E616D65060668747261636B05416C69676E0706436C69656E74064C - 6F636B6564090B4F7269656E746174696F6E070A486F72697A6F6E74616C0A53 - 697A652E576964746805000000000000009003400B53697A652E486569676874 - 05000000000000009003401453697A652E506C6174666F726D44656661756C74 - 080B5374796C654C6F6F6B757006147363726F6C6C62617268747261636B7374 - 796C6500000654547261636B00095374796C654E616D65060676747261636B05 - 416C69676E0706436C69656E74064C6F636B6564090B4F7269656E746174696F - 6E070A486F72697A6F6E74616C0A53697A652E57696474680500000000000000 - 9003400B53697A652E48656967687405000000000000009003401453697A652E - 506C6174666F726D44656661756C74080B5374796C654C6F6F6B757006147363 - 726F6C6C62617276747261636B7374796C6500000754427574746F6E00095374 - 796C654E616D650609746F70627574746F6E05416C69676E0703546F700A5369 - 7A652E57696474680500000000000000C804400B53697A652E48656967687405 - 000000000000008003401453697A652E506C6174666F726D44656661756C7408 - 0B5374796C654C6F6F6B757006127363726F6C6C626172746F70627574746F6E - 000000545046300A5452656374616E676C6500095374796C654E616D65061473 - 63726F6C6C62617276747261636B7374796C6505416C69676E070643656E7465 - 720A46696C6C2E436F6C6F720709784646313531353135074869745465737408 - 0A53697A652E57696474680500000000000000C804400B53697A652E48656967 - 68740500000000000000C804401453697A652E506C6174666F726D4465666175 - 6C74080B5374726F6B652E4B696E6407044E6F6E650756697369626C65080006 - 545468756D6200095374796C654E616D6506057468756D62064C6F636B656409 - 0A53697A652E57696474680500000000000000C804400B53697A652E48656967 - 687405000000000000008003401453697A652E506C6174666F726D4465666175 - 6C74080B5374796C654C6F6F6B7570060A7468756D627374796C650000005450 - 463007544C61796F757400095374796C654E616D65060C7370696E626F787374 - 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 - 00006666E005400B53697A652E4865696768740500000000000000A803401453 - 697A652E506C6174666F726D44656661756C74080756697369626C6508085461 - 624F726465720212000A5452656374616E676C6500095374796C654E616D6506 - 0A6261636B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C - 2E436F6C6F7207097846463230323032300A53697A652E576964746805000000 - 00006666E005400B53697A652E4865696768740500000000000000A803401453 - 697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F - 72070978464631353135313507585261646975730500000000000000C0004007 - 595261646975730500000000000000C00040000F54436F6C6F72416E696D6174 - 696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E3153 - 74796C65084475726174696F6E050000000000000000000007496E7665727365 - 090C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A537461 - 727456616C756507097846463135313531350953746F7056616C756507097846 - 463430343034300754726967676572061049734D6F7573654F7665723D747275 - 650E54726967676572496E7665727365061149734D6F7573654F7665723D6661 - 6C73650000000C5442727573684F626A65637400095374796C654E616D65060A - 666F726567726F756E640B42727573682E436F6C6F7207097846464541454145 - 4100000C5442727573684F626A65637400095374796C654E616D65060973656C - 656374696F6E0B42727573682E436F6C6F720709783936324138324532000007 - 544C61796F757400095374796C654E616D650607636F6E74656E7405416C6967 - 6E0706436C69656E74064C6F636B6564090C4D617267696E732E4C6566740500 - 0000000000008000400B4D617267696E732E546F700500000000000000800040 - 0D4D617267696E732E526967687405000000000000008000400E4D617267696E - 732E426F74746F6D05000000000000008000400A53697A652E57696474680500 - 0000000070668405400B53697A652E4865696768740500000000000000880340 - 1453697A652E506C6174666F726D44656661756C740800000754427574746F6E - 00095374796C654E616D65060B6D696E7573627574746F6E05416C69676E0707 - 4669744C6566740843616E466F6375730806437572736F72070763724172726F - 770C4D617267696E732E4C65667405000000000000008000400B4D617267696E - 732E546F7005000000000000008000400D4D617267696E732E52696768740500 - 0000000000008000400E4D617267696E732E426F74746F6D0500000000000000 - 8000400A506F736974696F6E2E5805000000000000008000400A506F73697469 - 6F6E2E5905000000000000008000400A53697A652E5769647468050000000000 - E8FF8703400B53697A652E48656967687405000000000000008803401453697A - 652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570060B - 627574746F6E7374796C65000554506174680005416C69676E0706436C69656E - 7409446174612E506174680A4000000005000000000000000000803F00000000 - 010000000000803F0000803F01000000000000000000003F010000000000803F - 00000000030000000000803F000000000A46696C6C2E436F6C6F720708636C61 - 57686974650748697454657374080C4D617267696E732E4C6566740500000000 - 000000C001400B4D617267696E732E546F700500000000000000C001400D4D61 - 7267696E732E52696768740500000000000000C001400E4D617267696E732E42 - 6F74746F6D0500000000000000C001400A53697A652E57696474680500000000 - 00A0FF9F01400B53697A652E4865696768740500000000000000A00140145369 - 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 - 044E6F6E650000000754427574746F6E00095374796C654E616D65060A706C75 - 73627574746F6E05416C69676E070846697452696768740843616E466F637573 - 0806437572736F72070763724172726F770C4D617267696E732E4C6566740500 - 0000000000008000400B4D617267696E732E546F700500000000000000800040 - 0D4D617267696E732E526967687405000000000000008000400E4D617267696E - 732E426F74746F6D05000000000000008000400A506F736974696F6E2E580500 - 000000006A66BA05400A506F736974696F6E2E5905000000000000008000400A - 53697A652E5769647468050000000000F0FF8703400B53697A652E4865696768 - 7405000000000000008803401453697A652E506C6174666F726D44656661756C - 74080B5374796C654C6F6F6B7570060B627574746F6E7374796C650005545061 - 74680005416C69676E0706436C69656E7409446174612E506174680A34000000 - 0400000000000000000000000000000001000000000000000000803F01000000 - 0000803F0000003F0300000000000000000000000A46696C6C2E436F6C6F7207 - 08636C6157686974650748697454657374080C4D617267696E732E4C65667405 - 00000000000000C001400B4D617267696E732E546F700500000000000000C001 - 400D4D617267696E732E52696768740500000000000000C001400E4D61726769 - 6E732E426F74746F6D0500000000000000C001400A53697A652E576964746805 - 0000000000C0FF9F01400B53697A652E4865696768740500000000000000A001 + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E65000A5452656374616E676C6500095374796C654E616D65060A68696E + 64696361746F7205416C69676E07044C6566740A46696C6C2E436F6C6F720709 + 784646324138324532064C6F636B6564090748697454657374080A53697A652E + 57696474680500000000000000C804400B53697A652E48656967687405000000 + 00009999E104401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E650000000A5452656374616E676C65000953 + 74796C654E616D65060676747261636B05416C69676E0708436F6E74656E7473 + 0A46696C6C2E436F6C6F720709784646343034303430064C6F636B6564090748 + 697454657374080A53697A652E576964746805000000000033338505400B5369 + 7A652E4865696768740500000000009999E104401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000A5452 + 656374616E676C6500095374796C654E616D65060A76696E64696361746F7205 + 416C69676E0706426F74746F6D0A46696C6C2E436F6C6F720709784646324138 + 324532064C6F636B6564090748697454657374080A506F736974696F6E2E5905 + 000000000099998D04400A53697A652E57696474680500000000003333850540 + 0B53697A652E4865696768740500000000000000A803401453697A652E506C61 + 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500 + 0000005450463007544C61796F757400095374796C654E616D65061B74726565 + 76696577657870616E646572627574746F6E7374796C6505416C69676E070643 + 656E7465720B4D617267696E732E546F70050000000000000080FF3F0A53697A + 652E57696474680500000000000000B003400B53697A652E4865696768740500 + 000000000000B003401453697A652E506C6174666F726D44656661756C740807 + 56697369626C6508085461624F72646572024D0005545061746800095374796C + 654E616D650605506174683105416C69676E070643656E74657209446174612E + 506174680A3400000004000000000000000000C8420000C84201000000000096 + 430000C842010000000000484300009643030000000000C8420000C8420A4669 + 6C6C2E436F6C6F720708636C6157686974650748697454657374080D526F7461 + 74696F6E416E676C650500000000000000B405C00A53697A652E576964746805 + 00000000000000A002400B53697A652E4865696768740500000000000000C001 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B - 696E6407044E6F6E6500000000545046300D545377697463684F626A65637400 - 095374796C654E616D65060B7377697463687374796C6505416C69676E070643 - 656E746572044B696E64070C466164696E67547261636B730A53697A652E5769 - 6474680500000000000000C805400B53697A652E486569676874050000000000 - 0000C803401453697A652E506C6174666F726D44656661756C7408085461624F - 72646572021312547261636B696E675468756D625363616C6505000000000000 - 0080FF3F0756697369626C65080A46696C6C2E436F6C6F720709784646323032 - 3032300C46696C6C4F6E2E436F6C6F7207097846463137353739430B46696C6C - 4F6E2E4B696E640705536F6C69640B5374726F6B652E4B696E6407044E6F6E65 - 0B5468756D622E436F6C6F7207097846463430343034300D5468756D624F6E2E - 436F6C6F7207097846463241383245320C5468756D624F6E2E4B696E64070553 - 6F6C6964105468756D625374726F6B652E4B696E6407044E6F6E650F5468756D - 625374726F6B652E4361700705526F756E64105468756D625374726F6B652E44 - 6173680706437573746F6D105468756D625374726F6B652E4A6F696E0705526F - 756E64165468756D625374726F6B652E437573746F6D446173680A0800000000 - 000000000000000553686170650709526F756E64526563740000545046300754 - 4C61796F757400095374796C654E616D65060F746162636F6E74726F6C737479 - 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 - 0000008E06400B53697A652E486569676874050000000000FFFFC90540145369 - 7A652E506C6174666F726D44656661756C74080756697369626C650808546162 - 4F726465720214000A5452656374616E676C6500095374796C654E616D65060A - 6261636B67726F756E6405416C69676E0708436F6E74656E747307436F726E65 - 72730B08546F7052696768740A426F74746F6D4C6566740B426F74746F6D5269 - 676874000A46696C6C2E436F6C6F720709784646333033303330064C6F636B65 - 64090748697454657374080C50616464696E672E4C6566740500000000000000 - 8000400B50616464696E672E546F7005000000000000008000400D5061646469 - 6E672E526967687405000000000000008000400E50616464696E672E426F7474 - 6F6D05000000000000008000400A53697A652E57696474680500000000000000 - 8E06400B53697A652E486569676874050000000000FFFFC905401453697A652E - 506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72070978 - 464631353135313507585261646975730500000000000000C000400759526164 - 6975730500000000000000C00040000000545046300A5452656374616E676C65 - 00095374796C654E616D65060B746162646F747374796C6505416C69676E0706 - 43656E7465720A46696C6C2E436F6C6F72070978464631353135313507486974 + 696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E00095374796C + 654E616D650614466C6F6174416E696D6174696F6E315374796C650844757261 + 74696F6E05000000000000000000000D496E746572706F6C6174696F6E070843 + 697263756C61720C50726F70657274794E616D65060D526F746174696F6E416E + 676C650A537461727456616C75650500000000000000B405C00953746F705661 + 6C756505000000000000000000000754726967676572060F4973457870616E64 + 65643D747275650E54726967676572496E766572736506104973457870616E64 + 65643D66616C736500000000545046300A5452656374616E676C650009537479 + 6C654E616D65061174726565766965776974656D7374796C6505416C69676E07 + 0643656E7465720946696C6C2E4B696E6407044E6F6E65074869745465737408 + 0553696465730B06426F74746F6D000A53697A652E5769647468050000000000 + 0000AE05400B53697A652E4865696768740500000000000000A004401453697A + 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 + 097846463135313531350756697369626C6508000C545370656564427574746F + 6E00095374796C654E616D650606627574746F6E05416C69676E07044C656674 + 0A53697A652E57696474680500000000000000A003400B53697A652E48656967 + 68740500000000000000A004401453697A652E506C6174666F726D4465666175 + 6C74080B5374796C654C6F6F6B7570061B7472656576696577657870616E6465 + 72627574746F6E7374796C65000007544C61796F75740005416C69676E070843 + 6F6E74656E74730C4D617267696E732E4C6566740500000000000000A003400A + 53697A652E576964746805000000000000008605400B53697A652E4865696768 + 740500000000000000A004401453697A652E506C6174666F726D44656661756C + 7408000954436865636B426F7800095374796C654E616D650605636865636B05 + 416C69676E07044C6566740843616E466F637573081244697361626C65466F63 + 7573456666656374090A53697A652E57696474680500000000000000A003400B + 53697A652E4865696768740500000000000000A004401453697A652E506C6174 + 666F726D44656661756C740800000654476C79706800095374796C654E616D65 + 060A676C7970687374796C650C4D617267696E732E4C65667405000000000000 + 008000400B4D617267696E732E546F70050000000000000080FF3F0D4D617267 + 696E732E526967687405000000000000008000400E4D617267696E732E426F74 + 746F6D050000000000000080FF3F05416C69676E07044C6566740A506F736974 + 696F6E2E580500000000000000B003400A506F736974696F6E2E590500000000 + 00000080FF3F0A53697A652E576964746805000000000000008003400B53697A + 652E48656967687405000000000000009804401453697A652E506C6174666F72 + 6D44656661756C7408000005545465787400095374796C654E616D6506047465 + 787405416C69676E0706436C69656E74064C6F636B6564090748697454657374 + 080A53697A652E57696474680500000000000000BC04400B53697A652E486569 + 6768740500000000000000A004401453697A652E506C6174666F726D44656661 + 756C7408165465787453657474696E67732E466F6E74436F6C6F720708636C61 + 5768697465155465787453657474696E67732E576F7264577261700816546578 + 7453657474696E67732E486F727A416C69676E07074C656164696E670000000A + 5452656374616E676C650005416C69676E0708436F6E74656E74730946696C6C + 2E4B696E6407044E6F6E650748697454657374080E4D617267696E732E426F74 + 746F6D050000000000000080FF3F0553696465730B044C656674000A53697A65 + 2E57696474680500000000000000AE05400B53697A652E486569676874050000 + 00000000009C04401453697A652E506C6174666F726D44656661756C74080C53 + 74726F6B652E436F6C6F720709784646324138324532105374726F6B652E5468 + 69636B6E65737305000000000000008000400000005450463007544C61796F75 + 7400095374796C654E616D65060D74726565766965777374796C6505416C6967 + 6E070643656E7465720A53697A652E57696474680500000000000000E106400B + 53697A652E48656967687405000000000000808107401453697A652E506C6174 + 666F726D44656661756C74080756697369626C6508085461624F72646572024E + 000C5442727573684F626A65637400095374796C654E616D650618416C746572 + 6E6174696E67526F774261636B67726F756E640B42727573682E436F6C6F7207 + 0978304646464646464600000A5452656374616E676C6500095374796C654E61 + 6D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A46 + 696C6C2E436F6C6F720709784646323032303230064C6F636B65640907486974 + 54657374080C50616464696E672E4C656674050000000000000080FF3F0D5061 + 6464696E672E5269676874050000000000000080FF3F0A53697A652E57696474 + 680500000000000000E106400B53697A652E4865696768740500000000000080 + 8107401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 + 2E436F6C6F7207097846463135313531350007544C61796F757400095374796C + 654E616D650607636F6E74656E7405416C69676E0706436C69656E740C436C69 + 704368696C6472656E090B4D617267696E732E546F70050000000000000080FF + 3F0A53697A652E57696474680500000000000000CD06400B53697A652E486569 + 6768740500000000000000F006401453697A652E506C6174666F726D44656661 + 756C7408000A5452656374616E676C6500095374796C654E616D65060973656C + 656374696F6E0A46696C6C2E436F6C6F72070978464632413832453207486974 54657374080A53697A652E57696474680500000000000000C804400B53697A65 2E4865696768740500000000000000C804401453697A652E506C6174666F726D - 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65075669736962 - 6C650807585261646975730500000000000000C8034007595261646975730500 - 000000000000C80340000F54436F6C6F72416E696D6174696F6E000844757261 - 74696F6E05000000000018B7D1F23F0C50726F70657274794E616D65060A4669 - 6C6C2E436F6C6F720A537461727456616C756507097846463135313531350953 - 746F7056616C756507097846463241383245320754726967676572060F497353 - 656C65637465643D747275650E54726967676572496E76657273650610497353 - 656C65637465643D66616C73650000005450463007544C61796F757400095374 - 796C654E616D65060C7461626974656D7374796C6505416C69676E070643656E - 7465720A53697A652E57696474680500000000000000C804400B53697A652E48 - 65696768740500000000000000C803401453697A652E506C6174666F726D4465 - 6661756C74080756697369626C6508085461624F726465720215000A54526563 - 74616E676C6500095374796C654E616D650603746F7005416C69676E0708436F - 6E74656E74730C436C69704368696C6472656E0907436F726E6572730B07546F - 704C65667408546F705269676874000A46696C6C2E436F6C6F72070978464632 - 3032303230064C6F636B6564090748697454657374080553696465730B03546F - 70044C656674055269676874000A53697A652E57696474680500000000000000 - C804400B53697A652E4865696768740500000000000000C803401453697A652E - 506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72070978 - 464631353135313507585261646975730500000000000000C000400759526164 - 6975730500000000000000C00040000654476C79706800095374796C654E616D - 65060A676C7970687374796C650C4D617267696E732E4C656674050000000000 - 00008001400D4D617267696E732E526967687405000000000000008001C00541 - 6C69676E07044C6566740A506F736974696F6E2E580500000000000000800140 - 0A53697A652E576964746805000000000000008003400B53697A652E48656967 - 68740500000000000000C803401453697A652E506C6174666F726D4465666175 - 6C7408000005545465787400095374796C654E616D6506047465787405416C69 - 676E0706436C69656E74064C6F636B6564090748697454657374080C4D617267 - 696E732E4C6566740500000000000000C000400B4D617267696E732E546F7005 - 00000000000000C000400D4D617267696E732E52696768740500000000000000 - C000400E4D617267696E732E426F74746F6D0500000000000000C000400A5369 - 7A652E57696474680500000000000000B004400B53697A652E48656967687405 - 000000000000009803401453697A652E506C6174666F726D44656661756C7408 + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000A545265 + 6374616E676C6500095374796C654E616D650610666F637573656473656C6563 + 74696F6E0A46696C6C2E436F6C6F720709784646324138324532074869745465 + 7374080A53697A652E57696474680500000000000000C804400B53697A652E48 + 65696768740500000000000000C804401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E650B5374726F6B652E + 446173680703446F740000000A545363726F6C6C42617200095374796C654E61 + 6D65060A767363726F6C6C62617205416C69676E070552696768740B536D616C + 6C4368616E676505000000000000000000000B4F7269656E746174696F6E0708 + 566572746963616C0C4D617267696E732E4C6566740500000000000000800040 + 0A506F736974696F6E2E580500000000000000D006400A53697A652E57696474 + 6805000000000000008003400B53697A652E4865696768740500000000000000 + F106401453697A652E506C6174666F726D44656661756C740800000A54536372 + 6F6C6C42617200095374796C654E616D65060A687363726F6C6C62617205416C + 69676E0706426F74746F6D0B536D616C6C4368616E6765050000000000000000 + 00000B4F7269656E746174696F6E070A486F72697A6F6E74616C0B4D61726769 + 6E732E546F7005000000000000008000400A506F736974696F6E2E5805000000 + 0000000080FF3F0A506F736974696F6E2E590500000000000000F306400A5369 + 7A652E57696474680500000000000000DF06400B53697A652E48656967687405 + 000000000000008003401453697A652E506C6174666F726D44656661756C7408 + 00000F54536D616C6C5363726F6C6C42617200095374796C654E616D65060F76 + 736D616C6C7363726F6C6C62617205416C69676E070552696768740B536D616C + 6C4368616E676505000000000000000000000B4F7269656E746174696F6E0708 + 566572746963616C0C4D617267696E732E4C6566740500000000000000800040 + 0A506F736974696F6E2E580500000000000000C605400A506F736974696F6E2E + 5905000000000000008000400A53697A652E5769647468050000000000000080 + 02400B53697A652E48656967687405000000000000008002401453697A652E50 + 6C6174666F726D44656661756C74080756697369626C650800000F54536D616C + 6C5363726F6C6C42617200095374796C654E616D65060F68736D616C6C736372 + 6F6C6C62617205416C69676E0706426F74746F6D0B536D616C6C4368616E6765 + 05000000000000000000000B4F7269656E746174696F6E070A486F72697A6F6E + 74616C0B4D617267696E732E546F7005000000000000008000400A506F736974 + 696F6E2E5805000000000000008000400A506F736974696F6E2E590500000000 + 000000E205400A53697A652E576964746805000000000000009606400B53697A + 652E48656967687405000000000000008002401453697A652E506C6174666F72 + 6D44656661756C74080756697369626C6508000000005450463007544C61796F + 757400095374796C654E616D650619616374696F6E746F6F6C627574746F6E6D + 756C74697669657705416C69676E070643656E7465720A53697A652E57696474 + 680500000000000000C805400B53697A652E4865696768740500000000000000 + C804401453697A652E506C6174666F726D44656661756C74080756697369626C + 6508085461624F7264657202780B46697865644865696768740232000654476C + 79706800095374796C654E616D65060A676C7970687374796C650C4D61726769 + 6E732E4C65667405000000000000009002400B4D617267696E732E546F700500 + 0000000000009002400E4D617267696E732E426F74746F6D0500000000000000 + 90024005416C69676E07044C6566740A506F736974696F6E2E58050000000000 + 00009002400A506F736974696F6E2E5905000000000000009002400A53697A65 + 2E576964746805000000000000008004400B53697A652E486569676874050000 + 00000000008004401453697A652E506C6174666F726D44656661756C74080000 + 0A5452656374616E676C6500095374796C654E616D65060A6261636B67726F75 + 6E6405416C69676E0706436C69656E740C436C69704368696C6472656E090A43 + 6C6970506172656E74090A46696C6C2E436F6C6F720709784646323032303230 + 0748697454657374080C4D617267696E732E4C6566740500000000000000C804 + C00A53697A652E57696474680500000000000000C805400B53697A652E486569 + 6768740500000000000000C804401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E + 696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F7241 + 6E696D6174696F6E31084475726174696F6E05000000000000000000000C5072 + 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 + 6507097846463230323032300953746F7056616C756507097846463430343034 + 300754726967676572063049734D6F7573654F7665723D747275653B49735072 + 65737365643D66616C73653B4973466F63757365643D66616C73650E54726967 + 676572496E7665727365063149734D6F7573654F7665723D66616C73653B4973 + 507265737365643D66616C73653B4973466F63757365643D66616C736500000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D65061562757474 + 6F6E436F6C6F72416E696D6174696F6E33084475726174696F6E050000000000 + 00000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53 + 7461727456616C756507097846463241383245320953746F7056616C75650709 + 7846463137353739430754726967676572062E4973507265737365643D747275 + 653B49734D6F7573654F7665723D747275653B4973466F63757365643D747275 + 650E54726967676572496E7665727365062F4973507265737365643D66616C73 + 653B49734D6F7573654F7665723D747275653B4973466F63757365643D747275 + 6500000005545465787400095374796C654E616D6506047465787405416C6967 + 6E0706436C69656E740748697454657374080A53697A652E5769647468050000 + 0000000000C804400B53697A652E4865696768740500000000000000C8044014 + 53697A652E506C6174666F726D44656661756C74080454657874060454657874 165465787453657474696E67732E466F6E74436F6C6F720708636C6157686974 - 65155465787453657474696E67732E576F7264577261700800000F54436F6C6F - 72416E696D6174696F6E00095374796C654E616D650612746162436F6C6F7241 - 6E696D6174696F6E310D416E696D6174696F6E547970650705496E4F75740844 - 75726174696F6E05000000000000000000000C50726F70657274794E616D6506 - 0A46696C6C2E436F6C6F720A537461727456616C756507097846463230323032 - 300953746F7056616C7565070978464634303430343007547269676765720621 - 49734D6F7573654F7665723D747275653B497353656C65637465643D66616C73 - 650E54726967676572496E7665727365062249734D6F7573654F7665723D6661 - 6C73653B497353656C65637465643D66616C736500000F54436F6C6F72416E69 - 6D6174696F6E00095374796C654E616D650612746162436F6C6F72416E696D61 - 74696F6E32084475726174696F6E05000000000000000000000C50726F706572 - 74794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978 - 46463230323032300953746F7056616C75650709784646324138324532075472 - 6967676572060F497353656C65637465643D747275650E54726967676572496E - 76657273650610497353656C65637465643D66616C7365000000005450463007 - 544C61796F757400095374796C654E616D65060D7465787463656C6C7374796C - 6505416C69676E070643656E7465720756697369626C6508085461624F726465 - 7202160007544C61796F757400095374796C654E616D650607636F6E74656E74 - 05416C69676E0708436F6E74656E7473064C6F636B6564090C4D617267696E73 - 2E4C65667405000000000000008001400B4D617267696E732E546F7005000000 - 000000008001400D4D617267696E732E52696768740500000000000000800140 - 0E4D617267696E732E426F74746F6D05000000000000008001400A53697A652E - 57696474680500000000000000A804400B53697A652E48656967687405000000 - 00000000A804401453697A652E506C6174666F726D44656661756C740800000C - 5442727573684F626A65637400095374796C654E616D65060A666F726567726F - 756E6400000C5442727573684F626A65637400095374796C654E616D65060973 - 656C656374696F6E0B42727573682E436F6C6F72070978393632413832453200 - 000B54466F6E744F626A65637400095374796C654E616D650604666F6E740000 - 00545046300754436972636C6500095374796C654E616D65060D7468756D6262 - 61727374796C6505416C69676E070643656E7465720A46696C6C2E436F6C6F72 - 07097846463241383245320748697454657374080A53697A652E576964746805 - 00000000000000A003400B53697A652E4865696768740500000000000000A003 - 401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E43 - 6F6C6F7207097846463135313531350756697369626C6508000F54436F6C6F72 - 416E696D6174696F6E00095374796C654E616D6506147468756D62436F6C6F72 - 416E696D6174696F6E31084475726174696F6E05000000000000000000000C50 - 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C - 756507097846463241383245320953746F7056616C7565070978464631373537 - 39430754726967676572061F4973507265737365643D747275653B49734D6F75 - 73654F7665723D747275650E54726967676572496E7665727365061049735072 - 65737365643D66616C73653B00000F54436F6C6F72416E696D6174696F6E0009 - 5374796C654E616D6506147468756D62436F6C6F72416E696D6174696F6E3208 - 4475726174696F6E05000000000000000000000C50726F70657274794E616D65 - 060A46696C6C2E436F6C6F720A537461727456616C7565070978464632413832 - 45320953746F7056616C75650709784646343039424646075472696767657206 - 2049734D6F7573654F7665723D747275653B4973507265737365643D66616C73 - 650E54726967676572496E7665727365062149734D6F7573654F7665723D6661 - 6C73653B4973507265737365643D66616C736500000F54436F6C6F72416E696D - 6174696F6E00095374796C654E616D6506157468756D625374726F6B65416E69 - 6D6174696F6E31084475726174696F6E05000000000000000000000C50726F70 - 657274794E616D65060C5374726F6B652E436F6C6F720A537461727456616C75 - 6507097846463135313531350953746F7056616C756507097846463137353739 - 430754726967676572061F4973507265737365643D747275653B49734D6F7573 - 654F7665723D747275650E54726967676572496E7665727365060F4973507265 - 737365643D66616C7365000000545046300A5452656374616E676C6500095374 - 796C654E616D65060A7468756D627374796C6505416C69676E070643656E7465 - 720A46696C6C2E436F6C6F720709784646344434443444074869745465737408 - 0A53697A652E57696474680500000000000000C804400B53697A652E48656967 - 68740500000000000000C804401453697A652E506C6174666F726D4465666175 - 6C74080B5374726F6B652E4B696E6407044E6F6E650756697369626C6508000F - 54436F6C6F72416E696D6174696F6E00095374796C654E616D6506147468756D - 62436F6C6F72416E696D6174696F6E31084475726174696F6E05000000000000 + 65000007544C61796F757400095374796C654E616D6506074C61796F75743205 + 416C69676E07044C6566740A53697A652E57696474680500000000000000C804 + 400B53697A652E4865696768740500000000000000C804401453697A652E506C + 6174666F726D44656661756C74080005545061746800095374796C654E616D65 + 060469636F6E05416C69676E070643656E74657209446174612E506174680A18 + 01000017000000000000000000C03F0000C03F01000000000000000000000001 + 0000000000404000000000010000000000C03F0000C03F030000000000C03F00 + 00C03F0000000000009040000000000100000000004041000000000100000000 + 004041CDCC4C3F0100000000009040CDCC4C3F01000000000090400000000003 + 0000000000904000000000000000000000904033337340010000000000904000 + 0040400100000000004041000040400100000000004041333373400100000000 + 0090403333734003000000000090403333734000000000000090409A99D94001 + 000000000090400000C04001000000000040410000C04001000000000040419A + 99D94001000000000090409A99D94003000000000090409A99D9400A46696C6C + 2E436F6C6F720708636C6157686974650748697454657374080A53697A652E57 + 696474680500000000000000D003400B53697A652E4865696768740500000000 + 000000E003401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E6508577261704D6F6465070346697400000000 + 5450463007544C61796F757400095374796C654E616D65060E61646462757474 + 6F6E7374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 0500000000000000C805400B53697A652E4865696768740500000000000000C0 + 03401453697A652E506C6174666F726D44656661756C74080756697369626C65 + 08085461624F72646572027C0B46697865644865696768740218000654476C79 + 706800095374796C654E616D65060A676C7970687374796C650C4D617267696E + 732E4C65667405000000000000009002400B4D617267696E732E546F70050000 + 00000000009002400E4D617267696E732E426F74746F6D050000000000000090 + 024005416C69676E07044C6566740A506F736974696F6E2E5805000000000000 + 009002400A506F736974696F6E2E5905000000000000009002400A53697A652E + 576964746805000000000000008004400B53697A652E48656967687405000000 + 000000008004401453697A652E506C6174666F726D44656661756C740800000A + 5452656374616E676C6500095374796C654E616D65060A6261636B67726F756E + 6405416C69676E0706436C69656E740C436C69704368696C6472656E090A436C + 6970506172656E74090A46696C6C2E436F6C6F72070978464632303230323007 + 48697454657374080C4D617267696E732E4C6566740500000000000000C003C0 + 0A53697A652E57696474680500000000000000C805400B53697A652E48656967 + 68740500000000000000C003401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E + 696D6174696F6E31084475726174696F6E05000000000000000000000C50726F + 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 + 07097846463230323032300953746F7056616C75650709784646343034303430 + 0754726967676572063049734D6F7573654F7665723D747275653B4973507265 + 737365643D66616C73653B4973466F63757365643D66616C73650E5472696767 + 6572496E7665727365063149734D6F7573654F7665723D66616C73653B497350 + 7265737365643D66616C73653B4973466F63757365643D66616C736500000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F + 6E436F6C6F72416E696D6174696F6E33084475726174696F6E05000000000000 000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 - 61727456616C756507097846463444344434440953746F7056616C7565070978 - 46463137353739430754726967676572060E4973507265737365643D74727565 - 0E54726967676572496E7665727365060F4973507265737365643D66616C7365 - 00000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65061443 - 6F6C6F72416E696D6174696F6E315374796C65084475726174696F6E05000000 - 000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F72 - 0A537461727456616C756507097846463444344434440953746F7056616C7565 - 0707636C61477261790754726967676572061049734D6F7573654F7665723D74 - 7275650E54726967676572496E7665727365061149734D6F7573654F7665723D - 66616C73650000005450463007544C61796F757400095374796C654E616D6506 - 0D747261636B6261727374796C6505416C69676E070643656E7465720A53697A - 652E57696474680500000000000000C805400B53697A652E4865696768740500 - 000000000000C805401453697A652E506C6174666F726D44656661756C740807 - 56697369626C6508085461624F7264657202170B466978656448656967687402 - 11000A5452656374616E676C6500095374796C654E616D65060668747261636B - 05416C69676E070A5665727443656E7465720A46696C6C2E436F6C6F72070978 - 46463135313531350748697454657374080A506F736974696F6E2E5905000000 - 00000000BC04400A53697A652E57696474680500000000000000C805400B5369 - 7A652E4865696768740500000000000000A001401453697A652E506C6174666F - 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6507585261 - 646975730500000000000000A0004007595261646975730500000000000000A0 - 0040000A5452656374616E676C6500095374796C654E616D65060A6261636B67 - 726F756E6405416C69676E0708436F6E74656E74730946696C6C2E4B696E6407 - 044E6F6E65064C6F636B6564090748697454657374080C4D617267696E732E4C - 6566740500000000000000C001400B4D617267696E732E546F70050000000000 - 000080FF3F0D4D617267696E732E52696768740500000000000000C001400E4D - 617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E5769 - 6474680500000000000000B005400B53697A652E486569676874050000000000 - 0000C000401453697A652E506C6174666F726D44656661756C74080B5374726F - 6B652E4B696E6407044E6F6E6507585261646975730500000000000000C0FF3F - 07595261646975730500000000000000C0FF3F00000A5452656374616E676C65 - 00095374796C654E616D650609686967686C6967687405416C69676E07044C65 - 66740A46696C6C2E436F6C6F7207097846463241383245320748697454657374 - 080C50616464696E672E4C6566740500000000000000A002400A53697A652E57 - 696474680500000000000000F003400B53697A652E4865696768740500000000 - 000000A001401453697A652E506C6174666F726D44656661756C74080B537472 - 6F6B652E4B696E6407044E6F6E6507585261646975730500000000000000A000 - 4007595261646975730500000000000000A0004000000B54476C6F7745666665 - 63740008536F66746E657373050000000000CDCCCCFC3F09476C6F77436F6C6F - 720709784646324138324532074F706163697479050000000000000080FF3F07 - 456E61626C6564080000000A5452656374616E676C6500095374796C654E616D - 65060676747261636B05416C69676E070A486F727A43656E7465720A46696C6C - 2E436F6C6F7207097846463135313531350748697454657374080A506F736974 - 696F6E2E580500000000000000BC04400A53697A652E57696474680500000000 - 000000A001400B53697A652E4865696768740500000000000000C80540145369 - 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 - 044E6F6E6507585261646975730500000000000000A000400759526164697573 - 0500000000000000A00040000A5452656374616E676C6500095374796C654E61 - 6D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730946 - 696C6C2E4B696E6407044E6F6E65064C6F636B6564090748697454657374080C - 4D617267696E732E4C6566740500000000000000C001400B4D617267696E732E - 546F70050000000000000080FF3F0D4D617267696E732E526967687405000000 - 00000000C001400E4D617267696E732E426F74746F6D050000000000000080FF - 3F0A53697A652E576964746805000000000000000000000B53697A652E486569 - 6768740500000000000000C405401453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E - 676C6500095374796C654E616D650609686967686C6967687405416C69676E07 - 03546F700A46696C6C2E436F6C6F720709784646324138324532074869745465 - 7374080A53697A652E57696474680500000000000000A001400B53697A652E48 - 65696768740500000000000000F003401453697A652E506C6174666F726D4465 - 6661756C74080B5374726F6B652E4B696E6407044E6F6E650758526164697573 - 0500000000000000A0004007595261646975730500000000000000A000400000 - 0B54476C6F774566666563740008536F66746E657373050000000000CDCCCCFC - 3F09476C6F77436F6C6F720709784646324138324532074F7061636974790500 - 00000000000080FF3F07456E61626C65640800000006545468756D6200095374 - 796C654E616D650606687468756D62064C6F636B6564090A506F736974696F6E - 2E580500000000003033AB03400A506F736974696F6E2E59050000000000FFFF - A304400A53697A652E57696474680500000000000000F002400B53697A652E48 - 65696768740500000000000000F002401453697A652E506C6174666F726D4465 - 6661756C74080B5374796C654C6F6F6B7570060D7468756D626261727374796C - 65000006545468756D6200095374796C654E616D650606767468756D62064C6F - 636B6564090A506F736974696F6E2E58050000000000CBCCA804400A506F7369 - 74696F6E2E590500000000009899B103400A53697A652E576964746805000000 - 00000000F002400B53697A652E4865696768740500000000000000F002401453 - 697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570 - 060D7468756D626261727374796C650000005450463007544C61796F75740009 - 5374796C654E616D6506096D656D6F7374796C6505416C69676E070643656E74 - 65720A53697A652E5769647468050000000000CCCC8806400B53697A652E4865 - 696768740500000000006666F405401453697A652E506C6174666F726D446566 - 61756C74080756697369626C6508085461624F726465720218000C5442727573 - 684F626A65637400095374796C654E616D65060A666F726567726F756E640000 - 0C5442727573684F626A65637400095374796C654E616D65060973656C656374 - 696F6E0B42727573682E436F6C6F72070978374634343735394400000B54466F - 6E744F626A65637400095374796C654E616D650604666F6E7400000A54526563 - 74616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C - 69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646323032 - 3032300748697454657374080A53697A652E5769647468050000000000CCCC88 - 06400B53697A652E4865696768740500000000006666F405401453697A652E50 - 6C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846 - 4631353135313507585261646975730500000000000000C00040075952616469 - 75730500000000000000C000400007544C61796F757400095374796C654E616D - 650607636F6E74656E7405416C69676E0706436C69656E740C4D617267696E73 - 2E4C65667405000000000000008000400B4D617267696E732E546F7005000000 - 000000008000400D4D617267696E732E52696768740500000000000000800040 - 0E4D617267696E732E426F74746F6D05000000000000008000400A53697A652E - 57696474680500000000009899E905400B53697A652E48656967687405000000 - 00006666CC05401453697A652E506C6174666F726D44656661756C740800000A - 545363726F6C6C42617200095374796C654E616D65060A687363726F6C6C6261 - 7205416C69676E0706426F74746F6D06437572736F72070763724172726F770B - 536D616C6C4368616E676505000000000000000000000B4F7269656E74617469 - 6F6E070A486F72697A6F6E74616C0A506F736974696F6E2E5905000000000066 - 66D405400A53697A652E5769647468050000000000CCCC8806400B53697A652E - 48656967687405000000000000008003401453697A652E506C6174666F726D44 - 656661756C740800000A545363726F6C6C42617200095374796C654E616D6506 - 0A767363726F6C6C62617205416C69676E0705526967687406437572736F7207 - 0763724172726F770B536D616C6C4368616E676505000000000000000000000B - 4F7269656E746174696F6E0708566572746963616C0A506F736974696F6E2E58 - 0500000000009899F105400A53697A652E576964746805000000000000008003 - 400B53697A652E4865696768740500000000006666D405401453697A652E506C - 6174666F726D44656661756C7408000007544C61796F75740005416C69676E07 - 06436C69656E740A53697A652E57696474680500000000009899F105400B5369 - 7A652E4865696768740500000000006666D405401453697A652E506C6174666F - 726D44656661756C7408000F54536D616C6C5363726F6C6C4261720009537479 - 6C654E616D65060F76736D616C6C7363726F6C6C62617205416C69676E070552 - 6967687406437572736F72070763724172726F770B536D616C6C4368616E6765 - 05000000000000000000000B4F7269656E746174696F6E070856657274696361 - 6C0C4D617267696E732E4C65667405000000000000008000400A53697A652E57 - 6964746805000000000000008002400B53697A652E4865696768740500000000 - 0000008002401453697A652E506C6174666F726D44656661756C740807566973 - 69626C650800000F54536D616C6C5363726F6C6C42617200095374796C654E61 - 6D65060F68736D616C6C7363726F6C6C62617205416C69676E0706426F74746F - 6D06437572736F72070763724172726F770B536D616C6C4368616E6765050000 - 00000000000000000B4F7269656E746174696F6E070A486F72697A6F6E74616C - 0B4D617267696E732E546F7005000000000000008000400A53697A652E576964 - 746805000000000000009606400B53697A652E48656967687405000000000000 - 008002401453697A652E506C6174666F726D44656661756C7408075669736962 - 6C65080000000F54436F6C6F72416E696D6174696F6E00095374796C654E616D - 6506146D656D6F5374726F6B65416E696D6174696F6E31084475726174696F6E - 050000000000000000000007496E7665727365090C50726F70657274794E616D - 65060C5374726F6B652E436F6C6F720A537461727456616C7565070978464631 - 35313531350953746F7056616C75650709784646343034303430075472696767 - 6572062049734D6F7573654F7665723D747275653B4973466F63757365643D66 - 616C73650E54726967676572496E7665727365062149734D6F7573654F766572 - 3D66616C73653B4973466F63757365643D66616C736500000F54436F6C6F7241 - 6E696D6174696F6E00095374796C654E616D6506146D656D6F5374726F6B6541 - 6E696D6174696F6E32084475726174696F6E05000000000000000000000C5072 - 6F70657274794E616D65060C5374726F6B652E436F6C6F720A53746172745661 - 6C756507097846463430343034300953746F7056616C75650709784646324138 - 3245320754726967676572060E4973466F63757365643D747275650E54726967 - 676572496E7665727365060F4973466F63757365643D66616C73650000000054 - 50463007544C61796F757400095374796C654E616D65060D73697A6567726970 - 7374796C6505416C69676E070643656E7465720A53697A652E57696474680500 - 000000000000C803400B53697A652E4865696768740500000000000000C80340 - 1453697A652E506C6174666F726D44656661756C74080756697369626C650808 - 5461624F726465720219000A5452656374616E676C6500095374796C654E616D - 65060A52656374616E676C653105416C69676E070643656E7465720A46696C6C - 2E436F6C6F7207097846463630363036300A53697A652E576964746805000000 - 00000000A000400B53697A652E4865696768740500000000000000A000401453 - 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 - 07044E6F6E6500000A5452656374616E676C6500095374796C654E616D65060A - 52656374616E676C653205416C69676E070643656E7465720A46696C6C2E436F - 6C6F7207097846463630363036300C4D617267696E732E4C6566740500000000 - 000000A002400A53697A652E57696474680500000000000000A000400B53697A - 652E4865696768740500000000000000A000401453697A652E506C6174666F72 - 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000A5452 - 656374616E676C6500095374796C654E616D65060A52656374616E676C653305 - 416C69676E070643656E7465720A46696C6C2E436F6C6F720709784646363036 - 3036300C4D617267696E732E4C6566740500000000000000A002400B4D617267 - 696E732E546F700500000000000000A002400A53697A652E5769647468050000 - 0000000000A000400B53697A652E4865696768740500000000000000A0004014 - 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E - 6407044E6F6E6500000A5452656374616E676C6500095374796C654E616D6506 - 0A52656374616E676C653405416C69676E070643656E7465720A46696C6C2E43 - 6F6C6F7207097846463630363036300B4D617267696E732E546F700500000000 - 000000A002400A53697A652E57696474680500000000000000A000400B53697A - 652E4865696768740500000000000000A000401453697A652E506C6174666F72 - 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000A5452 - 656374616E676C6500095374796C654E616D65060A52656374616E676C653505 - 416C69676E070643656E7465720A46696C6C2E436F6C6F720709784646363036 - 3036300B4D617267696E732E546F700500000000000000A002400D4D61726769 - 6E732E52696768740500000000000000A002400A53697A652E57696474680500 - 000000000000A000400B53697A652E4865696768740500000000000000A00040 - 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 - 6E6407044E6F6E6500000A5452656374616E676C6500095374796C654E616D65 - 060A52656374616E676C653605416C69676E070643656E7465720A46696C6C2E - 436F6C6F7207097846463630363036300C4D617267696E732E4C656674050000 - 0000000000A002400E4D617267696E732E426F74746F6D0500000000000000A0 - 02400A53697A652E57696474680500000000000000A000400B53697A652E4865 - 696768740500000000000000A000401453697A652E506C6174666F726D446566 - 61756C74080B5374726F6B652E4B696E6407044E6F6E65000000545046300A54 - 52656374616E676C6500095374796C654E616D65060E73746174757362617273 - 74796C6505416C69676E070643656E7465720C436C69704368696C6472656E09 - 0A46696C6C2E436F6C6F7207097846463235323532350553696465730B03546F - 70000A53697A652E57696474680500000000000000F004400B53697A652E4865 + 61727456616C756507097846463241383245320953746F7056616C7565070978 + 46463137353739430754726967676572062E4973507265737365643D74727565 + 3B49734D6F7573654F7665723D747275653B4973466F63757365643D74727565 + 0E54726967676572496E7665727365062F4973507265737365643D66616C7365 + 3B49734D6F7573654F7665723D747275653B4973466F63757365643D74727565 + 00000005545465787400095374796C654E616D6506047465787405416C69676E + 0706436C69656E740748697454657374080A53697A652E576964746805000000 + 000000009805400B53697A652E4865696768740500000000000000C003401453 + 697A652E506C6174666F726D44656661756C7408165465787453657474696E67 + 732E466F6E74436F6C6F720708636C615768697465000007544C61796F757400 + 095374796C654E616D6506074C61796F75743205416C69676E07044C6566740A + 53697A652E57696474680500000000000000C003400B53697A652E4865696768 + 740500000000000000C003401453697A652E506C6174666F726D44656661756C + 74080005545061746800095374796C654E616D65060469636F6E05416C69676E + 0708436F6E74656E747309446174612E506174680AAC0000000E000000000000 + 00CDCC34410000C040010000000000C0400000C040010000000000C040CDCC34 + 41010000009A99A940CDCC3441010000009A99A9400000C04001000000000000 + 000000C04001000000000000009A99A940010000009A99A9409A99A940010000 + 009A99A94000000000010000000000C04000000000010000000000C0409A99A9 + 4001000000CDCC34419A99A94001000000CDCC34410000C04003000000CDCC34 + 410000C0400A46696C6C2E436F6C6F720708636C615768697465074869745465 + 7374080C4D617267696E732E4C65667405000000000000008001400B4D617267 + 696E732E546F7005000000000000008001400D4D617267696E732E5269676874 + 05000000000000008001400E4D617267696E732E426F74746F6D050000000000 + 00008001400A53697A652E576964746805000000000000008003400B53697A65 + 2E48656967687405000000000000008003401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E6508577261704D + 6F64650703466974000000005450463007544C61796F757400095374796C654E + 616D650617696E666F746F6F6C627574746F6E6D756C74697669657705416C69 + 676E070643656E7465720A53697A652E57696474680500000000000000C80540 + 0B53697A652E4865696768740500000000000000C804401453697A652E506C61 + 74666F726D44656661756C74080756697369626C6508085461624F7264657202 + 7B0B46697865644865696768740232000654476C79706800095374796C654E61 + 6D65060A676C7970687374796C650C4D617267696E732E4C6566740500000000 + 0000009002400B4D617267696E732E546F7005000000000000009002400E4D61 + 7267696E732E426F74746F6D050000000000000090024005416C69676E07044C + 6566740A506F736974696F6E2E5805000000000000009002400A506F73697469 + 6F6E2E5905000000000000009002400A53697A652E5769647468050000000000 + 00008004400B53697A652E48656967687405000000000000008004401453697A + 652E506C6174666F726D44656661756C740800000A5452656374616E676C6500 + 095374796C654E616D65060A6261636B67726F756E6405416C69676E0706436C + 69656E740C436C69704368696C6472656E090A436C6970506172656E74090A46 + 696C6C2E436F6C6F7207097846463230323032300748697454657374080C4D61 + 7267696E732E4C6566740500000000000000C804C00A53697A652E5769647468 + 0500000000000000C805400B53697A652E4865696768740500000000000000C8 + 04401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E0009537479 + 6C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E31084475 + 726174696F6E05000000000000000000000C50726F70657274794E616D65060A + 46696C6C2E436F6C6F720A537461727456616C75650709784646323032303230 + 0953746F7056616C756507097846463430343034300754726967676572063049 + 734D6F7573654F7665723D747275653B4973507265737365643D66616C73653B + 4973466F63757365643D66616C73650E54726967676572496E76657273650631 + 49734D6F7573654F7665723D66616C73653B4973507265737365643D66616C73 + 653B4973466F63757365643D66616C736500000F54436F6C6F72416E696D6174 + 696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D61 + 74696F6E33084475726174696F6E05000000000000000000000C50726F706572 + 74794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978 + 46463241383245320953746F7056616C75650709784646313735373943075472 + 6967676572062E4973507265737365643D747275653B49734D6F7573654F7665 + 723D747275653B4973466F63757365643D747275650E54726967676572496E76 + 65727365062F4973507265737365643D66616C73653B49734D6F7573654F7665 + 723D747275653B4973466F63757365643D747275650000000554546578740009 + 5374796C654E616D6506047465787405416C69676E0706436C69656E74074869 + 7454657374080A53697A652E57696474680500000000000000C804400B53697A + 652E4865696768740500000000000000C804401453697A652E506C6174666F72 + 6D44656661756C74080454657874060454657874165465787453657474696E67 + 732E466F6E74436F6C6F720708636C615768697465000007544C61796F757400 + 095374796C654E616D6506074C61796F75743205416C69676E07044C6566740A + 53697A652E57696474680500000000000000C804400B53697A652E4865696768 + 740500000000000000C804401453697A652E506C6174666F726D44656661756C + 74080005545061746800095374796C654E616D65060469636F6E05416C69676E + 070643656E74657209446174612E506174680A84070000A0000000000000009A + 9987429A99074302000000010076429A9907430200000001005E42CDCC064302 + 000000343347423433054302000000010030429A9903430200000067661A42CE + 4C01430200000067660642CECCFC4202000000CECCE4410100F7420200000001 + 00C041CECCEF420200000034339F419B99E74202000000CECC7C416866DF4202 + 000000353343413533D64202000000CECC14413533CC42020000009A99C94000 + 00C24202000000000080403333B742020000009A991940CDCCAB4202000000CD + CC4C3F3333A04202000000000000003333944202000000000000009A99874202 + 000000000000000100764202000000CDCC4C3F01005E42020000009A991940CE + CC4642020000000000804000003042020000009A99C94066661A420200000033 + 33134166660642020000009A994141CCCCE4410200000033337B41FFFFBF4102 + 00000066669E4132339F41020000003333BF41CACC7C41020000000000E44131 + 3343410200000000000642CACC14410200000066661A429A99C9400200000000 + 0030420000804002000000333347429A9919400200000000005E42CDCC4C3F02 + 0000006666764200000000020000009A99874200000000020000003433944200 + 000000020000003433A042CDCC4C3F02000000CDCCAB429A9919400200000033 + 33B74200008040020000000000C2429A99C940020000003333CC423333134102 + 0000003333D6429A994141020000006666DF4233337B41020000009999E74266 + 669E4102000000CCCCEF423333BF4102000000FFFFF6420000E44102000000CC + CCFC420000064202000000CC4C014300001A4202000000999903439A992F4202 + 00000033330543CDCC464202000000CDCC064300005E42020000009999074300 + 00764202000000999907439A99874202000000999907433433944202000000CC + CC06433433A0420200000033330543CDCCAB4202000000999903436766B74202 + 000000CD4C01433333C24202000000CCCCFC423433CC4202000000FFFFF64234 + 33D64202000000CCCCEF426766DF42020000009999E7429A99E7420200000066 + 66DF42CDCCEF42020000003333D6420000F742020000003333CC42CDCCFC4202 + 0000003333C242CD4C0143020000006666B7429A99034302000000CCCCAB4233 + 330543020000003333A042CDCC064302000000333394429A990743020000009A + 9987429A990743030000009A9987429A990743000000009A9987420000104102 + 0000009A9979420000104102000000CECC644233331B4102000000CECC50429A + 99314102000000CECC3C42000048410200000001002A420000684102000000CE + CC184200008841020000003433074200009C41020000003633EF41CDCCB44102 + 0000006966D2419A99D141020000009C99B5416766EE41020000009C999D41CD + CC064202000000D0CC88416666184202000000A099694100002A4202000000A0 + 99494166663C42020000003A333341CCCC50420200000033331B413333654202 + 0000000000104100007A4202000000000010419A998742020000000000104134 + 3392420200000033331B41CDCC9C42020000009A993141CDCCA6420200000000 + 004841CDCCB04202000000000068413333BA4202000000000088410000C34202 + 00000000009C41CDCCCB4202000000CDCCB4419A99D342020000009A99D141CD + CCDA42020000006766EE410000E24202000000CDCC06420000E8420200000066 + 6618423333ED420200000000002A423333F2420200000066663C423333F64202 + 000000666650420000F9420200000066666442CDCCFB42020000003333794233 + 33FD4202000000666687423333FD4202000000333392423333FD420200000099 + 999C42CDCCFB42020000009999A6420000F942020000009999B0423333F64202 + 000000FFFFB9423333F24202000000CCCCC2423333ED42020000009999CB4233 + 33E842020000006666D3420000E242020000009999DA42CDCCDA4202000000CC + CCE1429A99D34202000000CCCCE742CDCCCB4202000000FFFFEC420000C34202 + 000000FFFFF1423333BA4202000000FFFFF5420000B14202000000CCCCF84200 + 00A742020000009999FB4200009D4202000000FFFFFC429A99924202000000FF + FFFC42CDCC874202000000FFFFFC4200007A42020000009999FB423433654202 + 000000CCCCF8423433514202000000FFFFF54234333D4202000000FFFFF14267 + 662A4202000000FFFFEC42CECC184202000000FFFFE7423433074202000000CC + CCE1423633EF41020000009999DA426966D241020000006666D3429C99B54102 + 0000009999CB429C999D4102000000CCCCC242D0CC884102000000FFFFB942A0 + 99694102000000CCCCB042A0994941020000009999A6423A33334102000000CD + CC9C4233331B41020000006666924200001041020000009A9987420000104103 + 0000009A998742000010410000000033337D42CDCC1042010000009A999042CD + CC1042010000009A999042CDCC34420100000034337D42CDCC34420100000034 + 337D42CDCC10420300000033337D42CDCC10420000000033337D423333594201 + 0000009A99904233335942010000009A9990420000C7420100000034337D4200 + 00C7420100000034337D42333359420300000033337D42333359420A46696C6C + 2E436F6C6F720708636C6157686974650748697454657374080A53697A652E57 + 696474680500000000000000D003400B53697A652E4865696768740500000000 + 000000E003401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E6508577261704D6F6465070346697400000000 + 5450463007544C61796F757400095374796C654E616D65061B6F7267616E697A + 65746F6F6C627574746F6E6D756C74697669657705416C69676E070643656E74 + 65720A53697A652E57696474680500000000000000C805400B53697A652E4865 696768740500000000000000C804401453697A652E506C6174666F726D446566 - 61756C74080C5374726F6B652E436F6C6F720709784646313531353135075669 - 7369626C65080007544C61796F757400095374796C654E616D6506074C61796F - 75743105416C69676E070552696768740A506F736974696F6E2E580500000000 - 0000008C04400A53697A652E57696474680500000000000000C803400B53697A + 61756C74080756697369626C6508085461624F7264657202770B466978656448 + 65696768740232000654476C79706800095374796C654E616D65060A676C7970 + 687374796C650C4D617267696E732E4C65667405000000000000009002400B4D + 617267696E732E546F7005000000000000009002400E4D617267696E732E426F + 74746F6D050000000000000090024005416C69676E07044C6566740A506F7369 + 74696F6E2E5805000000000000009002400A506F736974696F6E2E5905000000 + 000000009002400A53697A652E576964746805000000000000008004400B5369 + 7A652E48656967687405000000000000008004401453697A652E506C6174666F + 726D44656661756C740800000A5452656374616E676C6500095374796C654E61 + 6D65060A6261636B67726F756E6405416C69676E0706436C69656E740C436C69 + 704368696C6472656E090A436C6970506172656E74090A46696C6C2E436F6C6F + 7207097846463230323032300748697454657374080C4D617267696E732E4C65 + 66740500000000000000C804C00A53697A652E57696474680500000000000000 + C805400B53697A652E4865696768740500000000000000C804401453697A652E + 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F + 6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650615 + 627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E0500 + 0000000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C + 6F720A537461727456616C756507097846463230323032300953746F7056616C + 756507097846463430343034300754726967676572063049734D6F7573654F76 + 65723D747275653B4973507265737365643D66616C73653B4973466F63757365 + 643D66616C73650E54726967676572496E7665727365063149734D6F7573654F + 7665723D66616C73653B4973507265737365643D66616C73653B4973466F6375 + 7365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009537479 + 6C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E33084475 + 726174696F6E05000000000000000000000C50726F70657274794E616D65060A + 46696C6C2E436F6C6F720A537461727456616C75650709784646324138324532 + 0953746F7056616C756507097846463137353739430754726967676572062E49 + 73507265737365643D747275653B49734D6F7573654F7665723D747275653B49 + 73466F63757365643D747275650E54726967676572496E7665727365062F4973 + 507265737365643D66616C73653B49734D6F7573654F7665723D747275653B49 + 73466F63757365643D7472756500000005545465787400095374796C654E616D + 6506047465787405416C69676E0706436C69656E740748697454657374080A53 + 697A652E57696474680500000000000000C804400B53697A652E486569676874 + 0500000000000000C804401453697A652E506C6174666F726D44656661756C74 + 08165465787453657474696E67732E466F6E74436F6C6F720708636C61576869 + 7465000007544C61796F757400095374796C654E616D6506074C61796F757432 + 05416C69676E07044C6566740A53697A652E57696474680500000000000000C8 + 04400B53697A652E4865696768740500000000000000C804401453697A652E50 + 6C6174666F726D44656661756C74080005545061746800095374796C654E616D + 65060469636F6E05416C69676E070643656E74657209446174612E506174680A + D000000011000000000000009A99E9409A99C940010000006666664066661E41 + 01000000000000009A99C940010000000000003F9A99B94001000000CDCC4C40 + 9A99094101000000CDCC4C400000000001000000000080400000000001000000 + 0000804000000841010000006666D6406666B640010000009A99E9409A99C940 + 030000009A99E9409A99C940000000009A99993E00004041010000009A99993E + 33333341010000000000E04033333341010000000000E0400000404101000000 + 9A99993E00004041030000009A99993E000040410A46696C6C2E436F6C6F7207 + 08636C6157686974650748697454657374080A53697A652E5769647468050000 + 0000000000D003400B53697A652E4865696768740500000000000000E0034014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E6508577261704D6F64650703466974000000005450463007544C + 61796F757400095374796C654E616D65061B73657474696E6773746F6F6C6275 + 74746F6E6D756C74697669657705416C69676E070643656E7465720A53697A65 + 2E57696474680500000000000000C805400B53697A652E486569676874050000 + 0000000000C804401453697A652E506C6174666F726D44656661756C74080756 + 697369626C6508085461624F72646572027A0B46697865644865696768740232 + 000654476C79706800095374796C654E616D65060A676C7970687374796C650C + 4D617267696E732E4C65667405000000000000009002400B4D617267696E732E + 546F7005000000000000009002400E4D617267696E732E426F74746F6D050000 + 000000000090024005416C69676E07044C6566740A506F736974696F6E2E5805 + 000000000000009002400A506F736974696F6E2E590500000000000000900240 + 0A53697A652E576964746805000000000000008004400B53697A652E48656967 + 687405000000000000008004401453697A652E506C6174666F726D4465666175 + 6C740800000A5452656374616E676C6500095374796C654E616D65060A626163 + 6B67726F756E6405416C69676E0706436C69656E740C436C69704368696C6472 + 656E090A436C6970506172656E74090A46696C6C2E436F6C6F72070978464632 + 30323032300748697454657374080C4D617267696E732E4C6566740500000000 + 000000C804C00A53697A652E57696474680500000000000000C805400B53697A 652E4865696768740500000000000000C804401453697A652E506C6174666F72 - 6D44656661756C740800095453697A654772697000095374796C654E616D6506 - 0973697A65677267697005416C69676E0706426F74746F6D0A506F736974696F - 6E2E590500000000000000C803400A53697A652E576964746805000000000000 - 00C803400B53697A652E4865696768740500000000000000C803401453697A65 - 2E506C6174666F726D44656661756C740800000000545046300A545265637461 - 6E676C6500095374796C654E616D65060C746F6F6C6261727374796C6505416C - 69676E070643656E7465720A46696C6C2E436F6C6F7207097846463235323532 - 350748697454657374080553696465730B06426F74746F6D000A53697A652E57 - 696474680500000000000000C804400B53697A652E4865696768740500000000 - 000000C804401453697A652E506C6174666F726D44656661756C74080C537472 - 6F6B652E436F6C6F7207097846463135313531350756697369626C6508000054 - 50463007544C61796F757400095374796C654E616D65061570726F6772657373 - 6261726572726F727374796C6505416C69676E070643656E7465720A53697A65 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E43 + 6F6C6F72416E696D6174696F6E31084475726174696F6E050000000000000000 + 00000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 + 7456616C756507097846463230323032300953746F7056616C75650709784646 + 3430343034300754726967676572063049734D6F7573654F7665723D74727565 + 3B4973507265737365643D66616C73653B4973466F63757365643D66616C7365 + 0E54726967676572496E7665727365063149734D6F7573654F7665723D66616C + 73653B4973507265737365643D66616C73653B4973466F63757365643D66616C + 736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 15627574746F6E436F6C6F72416E696D6174696F6E33084475726174696F6E05 + 000000000000000000000C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463241383245320953746F705661 + 6C756507097846463137353739430754726967676572062E4973507265737365 + 643D747275653B49734D6F7573654F7665723D747275653B4973466F63757365 + 643D747275650E54726967676572496E7665727365062F497350726573736564 + 3D66616C73653B49734D6F7573654F7665723D747275653B4973466F63757365 + 643D7472756500000005545465787400095374796C654E616D65060474657874 + 05416C69676E0706436C69656E740748697454657374080A53697A652E576964 + 74680500000000000000C804400B53697A652E48656967687405000000000000 + 00C804401453697A652E506C6174666F726D44656661756C7408045465787406 + 0454657874165465787453657474696E67732E466F6E74436F6C6F720708636C + 615768697465000007544C61796F757400095374796C654E616D6506074C6179 + 6F75743205416C69676E07044C6566740A53697A652E57696474680500000000 + 000000C804400B53697A652E4865696768740500000000000000C80440145369 + 7A652E506C6174666F726D44656661756C74080005545061746800095374796C + 654E616D65060469636F6E05416C69676E070643656E74657209446174612E50 + 6174680A540D00001C01000000000000333351423333E7410200000033335142 + CDCCE84102000000333351426666EA4102000000333351423333EB4102000000 + 33335142CDCCEC4102000000333351426666EE4102000000333351423333EF41 + 0200000033335142CDCCF04102000000333351426666F2410200000033335142 + 3333F3410200000033335142CDCCF44102000000333351426666F64102000000 + 333351423333F7410100000099996F4266660E4201000000CDCC5C4200003C42 + 0100000000003A42000034420200000000003842000036420200000000003642 + 00003842020000000000344200003A420100000000003C42CDCC5C4201000000 + CDCC0E429A996F42010000000000F84133335142020000006666F64133335142 + 02000000CDCCF44133335142020000000000F44133335142020000006666F241 + 3333514202000000CDCCF04133335142020000000000F0413333514202000000 + 6666EE413333514202000000CDCCEC4133335142020000000000EC4133335142 + 020000006666EA413333514202000000CDCCE84133335142020000000000E841 + 33335142010000006666C24199996F4201000000FFFF4F41CCCC5C4201000000 + FFFF6F41FFFF394202000000FFFF6741FFFF374202000000FFFF5F41FFFF3542 + 02000000FFFF5741FFFF33420100000098999940FFFF3B420100000000000000 + CDCC0E42010000003333F3400000F841020000003333F3406666F64102000000 + 3333F340CDCCF441020000003333F3400000F441020000003333F3406666F241 + 020000003333F340CDCCF041020000003333F3400000F041020000003333F340 + 6666EE41020000003333F340CDCCEC41020000003333F3400000EC4102000000 + 3333F3406666EA41020000003333F340CDCCE841020000003333F3400000E841 + 0100000000000000CDCCC0410100000066669640CDCC4C410100000066665641 + CDCC6C410200000066665E41CDCC64410200000066666641CDCC5C4102000000 + 66666E41CDCC54410100000066664E413433934001000000CDCCC04100000000 + 010000006666E6413333F340020000000000E8413333F340020000009999E941 + 3333F340020000006666EA413333F340020000000000EC413333F34002000000 + 9999ED413333F340020000006666EE413333F340020000000000F0413333F340 + 020000009999F1413333F340020000006666F2413333F340020000000000F441 + 3333F340020000009999F5413333F340020000006666F6413333F34001000000 + CDCC0E42000000000100000000003C4266669640010000000000344266665641 + 020000000000364266665E410200000000003842666666410200000000003A42 + 66666E4101000000CDCC5C4266664E41010000009A996F429A99C14101000000 + 333351423333E74103000000333351423333E7410000000033334342CDCC0242 + 0200000033334342CDCC004202000000999943426766FE410200000099994342 + 6766FA4102000000999943426766F64102000000FFFF43423433F34102000000 + FFFF43423433EF4102000000FFFF43423433EB4102000000FFFF43420100E841 + 02000000999943420100E44102000000999943420100E0410200000033334342 + CECCDC410200000033334342CECCD84101000000CDCC5E426866B64101000000 + CDCC54429B99854101000000CDCC3442CECC9441020000006766324234338F41 + 02000000000030429B9989410200000033332D42010084410200000066662A42 + CECC7C4102000000000028423533734102000000CDCC24429C99694101000000 + 67662C423833D340010000000100144238338340010000006766024202003041 + 020000006766004202003041020000009B99FD4168662E41020000009B99F941 + 68662E41020000009B99F54168662E41020000006866F241CECC2C4102000000 + 6866EE41CECC2C41020000006866EA41CECC2C41020000003533E741CECC2C41 + 020000003533E34168662E41020000003533DF4168662E41020000000200DC41 + 02003041020000000200D84102003041010000009C99B5413733834001000000 + CFCC84413733D34001000000020094419C9969410200000068668E4136337341 + 02000000CFCC8841CFCC7C410200000035338341010084410200000036337B41 + 9A998941020000009D99714167668E410200000004006841CECC944101000000 + 0800D0409B99854101000000080080406866B641010000006A662E419B99D941 + 020000006A662E419B99DD4102000000D0CC2C41CECCE04102000000D0CC2C41 + CECCE44102000000D0CC2C41CECCE8410200000036332B410100EC4102000000 + 36332B410100F0410200000036332B410100F4410200000036332B413433F741 + 02000000D0CC2C413433FB4102000000D0CC2C413433FF41020000006A662E41 + 34330142020000006A662E413433034201000000070080406766144201000000 + 0700D040CDCC2C42010000000400684133332542020000009E99714100002842 + 0200000037337B41CDCC2A42020000003533834199992D4202000000CECC8841 + 65663042020000009B998D41CCCC324202000000020094413333354201000000 + CFCC844133335542010000009C99B54133335F4201000000CFCCD84199994342 + 02000000CFCCDC4199994342020000000200E041FFFF4342020000000200E441 + FFFF4342020000000200E841FFFF4342020000003533EB416566444202000000 + 3533EF4165664442020000003533F34165664442020000006866F64165664442 + 020000006866FA41FFFF4342020000006866FE41FFFF434202000000CECC0042 + 9999434202000000CECC024299994342010000000100144233335F4201000000 + 67662C423333554201000000CDCC244233333542020000009A992742CDCC3242 + 0200000067662A42666630420200000033332D4299992D4202000000FFFF2F42 + CCCC2A4202000000666632426666284202000000CDCC34423333254201000000 + CDCC5442CDCC2C4201000000CDCC5E42676614420100000033334342CDCC0242 + 0300000033334342CDCC0242000000003333EF4133339741020000003333FB41 + 33339741020000009A9903429999994102000000CDCC084266669E4102000000 + 00000E423333A34102000000CDCC12429999A94102000000CDCC16429999B141 + 02000000CDCC1A429999B9410200000000001E423333C3410200000067662042 + 9999CD4102000000CDCC2242FFFFD7410200000001002442FFFFE34102000000 + 010024420000F04102000000010024420100FC4102000000CECC224200000442 + 0200000067662042333309420200000001001E4266660E4202000000CDCC1A42 + 3333134202000000CDCC16423333174202000000CDCC124233331B4202000000 + 00000E4266661E4202000000CDCC0842CDCC2042020000009A99034233332342 + 020000003433FB4167662442020000003433EF4167662442020000003433E341 + 67662442020000003433D7413433234202000000CECCCC41CDCC204202000000 + 6866C24167661E4202000000CECCB84133331B4202000000CECCB04133331742 + 02000000CECCA84133331342020000006866A24166660E42020000009B999D41 + 3333094202000000CECC98410000044202000000686696410000FC4102000000 + 686696410000F04102000000686696410000E44102000000CECC98410000D841 + 020000009B999D419A99CD41020000006866A2413433C34102000000CECCA841 + 9A99B94102000000CECCB0419A99B14102000000CECCB8419A99A94102000000 + 6866C2413433A34102000000CECCCC4167669E41020000000000D8419A999941 + 020000003333E34133339741020000003333EF4133339741030000003333EF41 + 33339741000000003333EF41CDCC1642020000000000F841CDCC164202000000 + 0000004200001642020000009A990342676614420200000034330742CDCC1242 + 02000000CDCC0A4267661042020000009A990D429A990D420200000067661042 + CDCC0A4202000000CDCC12429A99074202000000676614429A99034202000000 + 010016420000004202000000CDCC16423433F74102000000CDCC16423433EF41 + 02000000CDCC16426766E64102000000000016426766DE410200000067661442 + 3433D74102000000CDCC12420100D0410200000067661042CECCC84102000000 + 9A990D423433C34102000000CDCC0A429A99BD41020000009A990742CECCB841 + 020000009A9903429A99B54102000000000000426766B241020000003433F741 + CDCCB041020000003433EF41CDCCB041020000006766E641CDCCB04102000000 + 6766DE416766B241020000003433D7419A99B541020000000100D041CDCCB841 + 02000000CECCC8419A99BD41020000003433C3413433C341020000009A99BD41 + CECCC84102000000CECCB8413433CF41020000009A99B5413433D74102000000 + 6766B2416766DE4102000000CDCCB0413433E74102000000CDCCB0413433EF41 + 02000000CDCCB0410100F841020000006766B24100000042020000009A99B541 + 9A99034202000000CDCCB84134330742020000009A99BD41CDCC0A4202000000 + 3433C3419A990D4202000000CECCC84167661042020000003433CF41CDCC1242 + 020000003433D74167661442020000003333DF4100001642020000003333E741 + CDCC1642020000003333EF41CDCC1642030000003333EF41CDCC16420A46696C + 6C2E436F6C6F720708636C6157686974650748697454657374080A53697A652E + 57696474680500000000000000D003400B53697A652E48656967687405000000 + 00000000E003401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E6508577261704D6F64650703466974000000 + 005450463007544C61796F757400095374796C654E616D65061172656D6F7665 + 627574746F6E7374796C6505416C69676E070643656E7465720A53697A652E57 + 696474680500000000000000C805400B53697A652E4865696768740500000000 + 000000C003401453697A652E506C6174666F726D44656661756C740807566973 + 69626C6508085461624F72646572027E0B466978656448656967687402180006 + 54476C79706800095374796C654E616D65060A676C7970687374796C650C4D61 + 7267696E732E4C65667405000000000000009002400B4D617267696E732E546F + 7005000000000000009002400E4D617267696E732E426F74746F6D0500000000 + 00000090024005416C69676E07044C6566740A506F736974696F6E2E58050000 + 00000000008404400A506F736974696F6E2E5905000000000000009002400A53 + 697A652E576964746805000000000000008004400B53697A652E486569676874 + 0500000000000000C001401453697A652E506C6174666F726D44656661756C74 + 0800000A5452656374616E676C6500095374796C654E616D65060A6261636B67 + 726F756E6405416C69676E0706436C69656E740C436C69704368696C6472656E + 090A436C6970506172656E74090A46696C6C2E436F6C6F720709784646323032 + 3032300748697454657374080C4D617267696E732E4C65667405000000000000 + 00C003C00A53697A652E57696474680500000000000000C805400B53697A652E + 4865696768740500000000000000C003401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F + 72416E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C + 6F72416E696D6174696F6E31084475726174696F6E0500000000000000000000 + 0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456 + 616C756507097846463230323032300953746F7056616C756507097846463430 + 343034300754726967676572063049734D6F7573654F7665723D747275653B49 + 73507265737365643D66616C73653B4973466F63757365643D66616C73650E54 + 726967676572496E7665727365063149734D6F7573654F7665723D66616C7365 + 3B4973507265737365643D66616C73653B4973466F63757365643D66616C7365 + 00000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65061562 + 7574746F6E436F6C6F72416E696D6174696F6E33084475726174696F6E050000 + 00000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F + 720A537461727456616C756507097846463241383245320953746F7056616C75 + 6507097846463137353739430754726967676572062E4973507265737365643D + 747275653B49734D6F7573654F7665723D747275653B4973466F63757365643D + 747275650E54726967676572496E7665727365062F4973507265737365643D66 + 616C73653B49734D6F7573654F7665723D747275653B4973466F63757365643D + 7472756500000005545465787400095374796C654E616D650604746578740541 + 6C69676E0706436C69656E740748697454657374080A53697A652E5769647468 + 05000000000000009805400B53697A652E4865696768740500000000000000C0 + 03401453697A652E506C6174666F726D44656661756C74080454657874060454 + 657874165465787453657474696E67732E466F6E74436F6C6F720708636C6157 + 68697465000007544C61796F757400095374796C654E616D6506074C61796F75 + 743205416C69676E07044C6566740A53697A652E576964746805000000000000 + 00C003400B53697A652E4865696768740500000000000000C003401453697A65 + 2E506C6174666F726D44656661756C74080005545061746800095374796C654E + 616D65060469636F6E05416C69676E0708436F6E74656E747309446174612E50 + 6174680A4C000000060000000000000000004041CDCC4C3F0100000000000000 + CDCC4C3F01000000000000000000000001000000000040410000000001000000 + 00004041CDCC4C3F0300000000004041CDCC4C3F0A46696C6C2E436F6C6F7207 + 08636C6157686974650748697454657374080C4D617267696E732E4C65667405 + 000000000000008001400B4D617267696E732E546F7005000000000000008001 + 400D4D617267696E732E526967687405000000000000008001400E4D61726769 + 6E732E426F74746F6D05000000000000008001400A53697A652E576964746805 + 000000000000008003400B53697A652E48656967687405000000000000008003 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E6508577261704D6F6465070346697400000000545046300A + 5452656374616E676C6500095374796C654E616D650614706F7075706261636B + 67726F756E647374796C6505416C69676E070643656E7465720A46696C6C2E43 + 6F6C6F7207097846463244324432440A53697A652E5769647468050000000000 + 00009407400B53697A652E4865696768740500000000000080D206401453697A + 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 + 097846463135313531350756697369626C650800005450463007544C61796F75 + 7400095374796C654E616D65061A70726F67726573736261726D696E6966696E + 6973687374796C6505416C69676E070643656E7465720A53697A652E57696474 + 6805000000000033338505400B53697A652E4865696768740500000000009999 + E104401453697A652E506C6174666F726D44656661756C74080756697369626C + 6508085461624F72646572024B000A5452656374616E676C6500095374796C65 + 4E616D65060668747261636B05416C69676E0708436F6E74656E74730A46696C + 6C2E436F6C6F720709784646343034303430064C6F636B656409074869745465 + 7374080A53697A652E576964746805000000000033338505400B53697A652E48 + 65696768740500000000009999E104401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E65000A545265637461 + 6E676C6500095374796C654E616D65060A68696E64696361746F7205416C6967 + 6E07044C6566740A46696C6C2E436F6C6F720709784646324345323434064C6F + 636B6564090748697454657374080A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000009999E104401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E650000000A5452656374616E676C6500095374796C654E616D6506067674 + 7261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207 + 09784646343034303430064C6F636B6564090748697454657374080A53697A65 2E576964746805000000000033338505400B53697A652E486569676874050000 - 0000009999E104401453697A652E506C6174666F726D44656661756C74080756 - 697369626C6508085461624F72646572021A000A5452656374616E676C650009 - 5374796C654E616D65060668747261636B05416C69676E0708436F6E74656E74 - 730A46696C6C2E436F6C6F720709784646323032303230064C6F636B65640907 - 48697454657374080A53697A652E576964746805000000000033338505400B53 - 697A652E4865696768740500000000009999E104401453697A652E506C617466 - 6F726D44656661756C74080C5374726F6B652E436F6C6F720709784646313531 - 35313507585261646975730500000000000000C0004007595261646975730500 - 000000000000C00040000A5452656374616E676C6500095374796C654E616D65 - 060A68696E64696361746F7205416C69676E07044C6566740A46696C6C2E436F - 6C6F720709784646453232413241064C6F636B6564090748697454657374080C + 0000009999E104401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E65000A5452656374616E676C6500095374 + 796C654E616D65060A76696E64696361746F7205416C69676E0706426F74746F + 6D0A46696C6C2E436F6C6F720709784646324345323434064C6F636B65640907 + 48697454657374080A506F736974696F6E2E5905000000000099998D04400A53 + 697A652E576964746805000000000033338505400B53697A652E486569676874 + 0500000000000000A803401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C6179 + 6F757400095374796C654E616D65061070726F67726573736261727374796C65 + 05416C69676E070643656E7465720A53697A652E576964746805000000000033 + 338505400B53697A652E4865696768740500000000009999E104401453697A65 + 2E506C6174666F726D44656661756C74080756697369626C6508085461624F72 + 646572023F000A5452656374616E676C6500095374796C654E616D6506066874 + 7261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207 + 09784646323032303230064C6F636B6564090748697454657374080A53697A65 + 2E576964746805000000000033338505400B53697A652E486569676874050000 + 0000009999E104401453697A652E506C6174666F726D44656661756C74080C53 + 74726F6B652E436F6C6F720709784646313531353135000A5452656374616E67 + 6C6500095374796C654E616D65060A68696E64696361746F7205416C69676E07 + 044C6566740A46696C6C2E436F6C6F720709784646324138324532064C6F636B + 6564090748697454657374080C4D617267696E732E4C65667405000000000000 + 0080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267 + 696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F74 + 746F6D050000000000000080FF3F0A506F736974696F6E2E5805000000000000 + 0080FF3F0A506F736974696F6E2E59050000000000000080FF3F0A53697A652E + 57696474680500000000000000C804400B53697A652E48656967687405000000 + 00009999D904401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E650000000A5452656374616E676C65000953 + 74796C654E616D65060676747261636B05416C69676E0708436F6E74656E7473 + 0A46696C6C2E436F6C6F720709784646323032303230064C6F636B6564090748 + 697454657374080A53697A652E576964746805000000000033338505400B5369 + 7A652E4865696768740500000000009999E104401453697A652E506C6174666F + 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 + 3135000A5452656374616E676C6500095374796C654E616D65060A76696E6469 + 6361746F7205416C69676E0706426F74746F6D0A46696C6C2E436F6C6F720709 + 784646324138324532064C6F636B6564090748697454657374080C4D61726769 + 6E732E4C656674050000000000000080FF3F0B4D617267696E732E546F700500 + 00000000000080FF3F0D4D617267696E732E5269676874050000000000000080 + FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A506F73 + 6974696F6E2E58050000000000000080FF3F0A506F736974696F6E2E59050000 + 00000099998904400A53697A652E576964746805000000000033338105400B53 + 697A652E4865696768740500000000000000A803401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000 + 005450463007544C61796F757400095374796C654E616D65061177696E646F77 + 626F726465727374796C6505416C69676E070643656E7465720A53697A652E57 + 6964746805000000000056D5AF07400B53697A652E4865696768740500000000 + 000000B306401453697A652E506C6174666F726D44656661756C740807566973 + 69626C6508085461624F72646572023A000A5452656374616E676C6500095374 + 796C654E616D6506046D61736B05416C69676E0708436F6E74656E74730A4669 + 6C6C2E436F6C6F7207097846463130313031300A53697A652E57696474680500 + 0000000056D5AF07400B53697A652E4865696768740500000000000000B30640 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E650756697369626C6508000007544C61796F75740009537479 + 6C654E616D6506046C65667405416C69676E07084D6F73744C656674064C6F63 + 6B6564090A506F736974696F6E2E5905000000000000008004400A53697A652E + 576964746805000000000000008001400B53697A652E48656967687405000000 + 000000009306401453697A652E506C6174666F726D44656661756C7408000A54 + 52656374616E676C650005416C69676E07084D6F73744C6566740A46696C6C2E + 436F6C6F7207097846463230323032300748697454657374080553696465730B + 044C656674055269676874000A53697A652E5769647468050000000000000080 + 01400B53697A652E48656967687405000000000000008F06401453697A652E50 + 6C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846 + 4631353135313500000A5452656374616E676C6500095374796C654E616D6506 + 0A52656374616E676C653105416C69676E070A4D6F7374426F74746F6D13456E + 61626C6544726167486967686C69676874080A46696C6C2E436F6C6F72070978 + 46463230323032300748697454657374080A506F736974696F6E2E5905000000 + 000000008F06400553696465730B044C65667406426F74746F6D000A53697A65 + 2E576964746805000000000000008001400B53697A652E486569676874050000 + 00000000008001401453697A652E506C6174666F726D44656661756C74080C53 + 74726F6B652E436F6C6F7207097846463135313531350007544C61796F757400 + 095374796C654E616D6506074C61796F75743305416C69676E07094D6F737452 + 696768740A506F736974696F6E2E580500000000000000C000400A53697A652E + 5769647468050000000000000080FF3F0B53697A652E48656967687405000000 + 000000008001401453697A652E506C6174666F726D44656661756C7408000A54 + 52656374616E676C6500095374796C654E616D65060A52656374616E676C6531 + 05416C69676E0703546F700A46696C6C2E436F6C6F7207097846463135313531 + 350748697454657374080A53697A652E5769647468050000000000000080FF3F + 0B53697A652E486569676874050000000000000080FF3F1453697A652E506C61 + 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500 + 0000000007544C61796F757400095374796C654E616D65060572696768740541 + 6C69676E07094D6F73745269676874064C6F636B6564090A506F736974696F6E + 2E5805000000000056D5AD07400A506F736974696F6E2E590500000000000000 + 8004400A53697A652E576964746805000000000000008001400B53697A652E48 + 656967687405000000000000009306401453697A652E506C6174666F726D4465 + 6661756C7408000A5452656374616E676C650005416C69676E07094D6F737452 + 696768740A46696C6C2E436F6C6F720709784646323032303230074869745465 + 7374080553696465730B044C656674055269676874000A53697A652E57696474 + 6805000000000000008001400B53697A652E4865696768740500000000000000 + 8F06401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 + 2E436F6C6F72070978464631353135313500000A5452656374616E676C650009 + 5374796C654E616D65060A52656374616E676C653105416C69676E070A4D6F73 + 74426F74746F6D13456E61626C6544726167486967686C69676874080A46696C + 6C2E436F6C6F7207097846463230323032300748697454657374080A506F7369 + 74696F6E2E5905000000000000008F06400553696465730B06426F74746F6D05 + 5269676874000A53697A652E576964746805000000000000008001400B53697A + 652E48656967687405000000000000008001401453697A652E506C6174666F72 + 6D44656661756C74080C5374726F6B652E436F6C6F7207097846463135313531 + 350007544C61796F757400095374796C654E616D6506074C61796F7574330541 + 6C69676E07084D6F73744C6566740A53697A652E576964746805000000000000 + 0080FF3F0B53697A652E48656967687405000000000000008001401453697A65 + 2E506C6174666F726D44656661756C7408000A5452656374616E676C65000953 + 74796C654E616D65060A52656374616E676C653105416C69676E0703546F700A + 46696C6C2E436F6C6F7207097846463135313531350748697454657374080A53 + 697A652E5769647468050000000000000080FF3F0B53697A652E486569676874 + 050000000000000080FF3F1453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E6500000000000A5452656374616E + 676C650005416C69676E07074D6F7374546F700A46696C6C2E436F6C6F720709 + 784646323032303230064C6F636B6564090748697454657374080A53697A652E + 576964746805000000000056D5AF07400B53697A652E48656967687405000000 + 000000008004401453697A652E506C6174666F726D44656661756C74080C5374 + 726F6B652E436F6C6F7207097846463135313531350007544C61796F75740009 + 5374796C654E616D65060763617074696F6E05416C69676E0708436F6E74656E + 7473064C6F636B6564090748697454657374090C4D617267696E732E4C656674 + 05000000000000008001400B4D617267696E732E546F70050000000000000080 + 01400D4D617267696E732E526967687405000000000000008001400A53697A65 + 2E576964746805000000000056D5AB07400B53697A652E486569676874050000 + 0000000000E003401453697A652E506C6174666F726D44656661756C74080000 + 07544C61796F75740005416C69676E0706436C69656E74064C6F636B6564090C 4D617267696E732E4C656674050000000000000080FF3F0B4D617267696E732E 546F70050000000000000080FF3F0D4D617267696E732E526967687405000000 0000000080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF - 3F0A506F736974696F6E2E58050000000000000080FF3F0A506F736974696F6E - 2E59050000000000000080FF3F0A53697A652E57696474680500000000000000 - C804400B53697A652E4865696768740500000000009999D904401453697A652E - 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F - 6E6507585261646975730500000000000000C000400759526164697573050000 - 0000000000C000400000000A5452656374616E676C6500095374796C654E616D - 65060676747261636B05416C69676E0708436F6E74656E74730A46696C6C2E43 - 6F6C6F720709784646323032303230064C6F636B656409074869745465737408 - 0A53697A652E576964746805000000000033338505400B53697A652E48656967 - 68740500000000009999E104401453697A652E506C6174666F726D4465666175 - 6C74080C5374726F6B652E436F6C6F7207097846463135313531350758526164 - 6975730500000000000000C0004007595261646975730500000000000000C000 - 40000A5452656374616E676C6500095374796C654E616D65060A76696E646963 - 61746F7205416C69676E0706426F74746F6D0A46696C6C2E436F6C6F72070978 - 4646453232413241064C6F636B6564090748697454657374080C4D617267696E - 732E4C656674050000000000000080FF3F0B4D617267696E732E546F70050000 - 000000000080FF3F0D4D617267696E732E5269676874050000000000000080FF - 3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A506F7369 - 74696F6E2E58050000000000000080FF3F0A506F736974696F6E2E5905000000 - 000099998904400A53697A652E576964746805000000000033338105400B5369 - 7A652E4865696768740500000000000000A803401453697A652E506C6174666F - 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6507585261 - 646975730500000000000000C0004007595261646975730500000000000000C0 - 0040000000005450463007544C61796F757400095374796C654E616D65060E6C - 696E6B6C6162656C7374796C6505416C69676E070643656E7465720A53697A65 - 2E5769647468050000000000CCCC8006400B53697A652E486569676874050000 - 0000009A998104401453697A652E506C6174666F726D44656661756C74080756 - 697369626C6508085461624F72646572021B0005545465787400095374796C65 - 4E616D6506047465787405416C69676E0708436F6E74656E7473074869745465 - 7374080A53697A652E5769647468050000000000CCCC8006400B53697A652E48 - 65696768740500000000009A998104401453697A652E506C6174666F726D4465 - 6661756C74081A5465787453657474696E67732E466F6E742E5374796C654578 - 740A0D00000004040000000000000004000000165465787453657474696E6773 - 2E466F6E74436F6C6F72070D636C61446F64676572626C7565000F54436F6C6F - 72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D - 6174696F6E315374796C65084475726174696F6E050000000000000000000007 - 496E7665727365090C50726F70657274794E616D650616546578745365747469 - 6E67732E466F6E74436F6C6F720A537461727456616C7565070D636C61446F64 - 676572626C75650953746F7056616C7565070E636C6144656570736B79626C75 - 650754726967676572063049734D6F7573654F7665723D747275653B49735072 - 65737365643D66616C73653B4973466F63757365643D66616C73650E54726967 - 676572496E7665727365063149734D6F7573654F7665723D66616C73653B4973 - 507265737365643D66616C73653B4973466F63757365643D66616C736500000F - 54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F - 72416E696D6174696F6E325374796C65084475726174696F6E05000000000000 - 000000000C50726F70657274794E616D6506165465787453657474696E67732E - 466F6E74436F6C6F720A537461727456616C7565070E636C6144656570736B79 - 626C75650953746F7056616C7565070978464631373537394307547269676765 - 72062F4973507265737365643D747275653B49734D6F7573654F7665723D7472 - 75653B4973466F63757365643D66616C7365000000005450463007544C61796F - 757400095374796C654E616D65060C706F706F7665727374796C6505416C6967 - 6E070643656E7465720756697369626C6508085461624F72646572021C000A54 - 52656374616E676C6500095374796C654E616D650602626705416C69676E0706 - 436C69656E740A46696C6C2E436F6C6F72070978464632303230323007486974 - 54657374080A53697A652E57696474680500000000000000C804400B53697A65 - 2E4865696768740500000000000000C804401453697A652E506C6174666F726D - 44656661756C74080C5374726F6B652E436F6C6F720709784646313531353135 - 07585261646975730500000000000000C0004007595261646975730500000000 - 000000C000400007544C61796F757400095374796C654E616D650607636F6E74 - 656E7405416C69676E0706436C69656E740C4D617267696E732E4C6566740500 - 00000000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F - 0D4D617267696E732E5269676874050000000000000080FF3F0E4D617267696E - 732E426F74746F6D050000000000000080FF3F0A53697A652E57696474680500 - 000000000000C004400B53697A652E4865696768740500000000000000C00440 - 1453697A652E506C6174666F726D44656661756C740800000D54536861646F77 - 456666656374000844697374616E63650500000000000000C000400944697265 - 6374696F6E0500000000000000B4054008536F66746E65737305000000000000 - 0080FE3F074F706163697479050000000000000080FE3F0B536861646F77436F - 6C6F720708636C61426C61636B000000005450463007544C61796F7574000953 - 74796C654E616D65060D706F707570626F787374796C6505416C69676E070643 - 656E7465720A53697A652E57696474680500000000000080C406400B53697A65 - 2E4865696768740500000000000000D404401453697A652E506C6174666F726D - 44656661756C74080756697369626C6508085461624F72646572021D000A5452 - 656374616E676C6500095374796C654E616D65060A6261636B67726F756E6405 - 416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978464632 - 30323032300748697454657374080A53697A652E576964746805000000000000 - 80C406400B53697A652E4865696768740500000000000000D404401453697A65 - 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E - 6F6E6507585261646975730500000000000000C0004007595261646975730500 - 000000000000C00040000F54436F6C6F72416E696D6174696F6E00095374796C - 654E616D650614436F6C6F72416E696D6174696F6E315374796C650844757261 - 74696F6E05000000000000000000000C50726F70657274794E616D65060A4669 - 6C6C2E436F6C6F720A537461727456616C756507097846463230323032300953 - 746F7056616C756507097846463430343034300754726967676572062049734D - 6F7573654F7665723D747275653B4973507265737365643D66616C73650E5472 - 6967676572496E7665727365062149734D6F7573654F7665723D66616C73653B - 4973507265737365643D66616C736500000F54436F6C6F72416E696D6174696F - 6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E32537479 - 6C65084475726174696F6E05000000000000000000000C50726F70657274794E - 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464634 - 30343034300953746F7056616C75650709784646324138324532075472696767 - 6572062049734D6F7573654F7665723D747275653B4973507265737365643D74 - 7275653B0E54726967676572496E7665727365062049734D6F7573654F766572 - 3D747275653B4973507265737365643D66616C736500000007544C61796F7574 - 0005416C69676E070552696768740A506F736974696F6E2E5805000000000000 - 80B506400A53697A652E57696474680500000000000000F002400B53697A652E - 4865696768740500000000000000D404401453697A652E506C6174666F726D44 - 656661756C7408000554506174680005416C69676E070643656E746572094461 - 74612E506174680A400000000500000000000000000000000000803F01000000 - 0000803F0000803F010000000000003F0000000001000000000000000000803F - 0300000000000000000000000A46696C6C2E436F6C6F720708636C6157686974 - 650748697454657374080B4D617267696E732E546F700500000000000000E001 - C00A53697A652E576964746805000000000000008002400B53697A652E486569 - 67687405000000000000008001401453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E6500000554506174680005 - 416C69676E070643656E74657209446174612E506174680A3400000004000000 - 000000000000000000000000010000000000803F00000000010000000000003F - 0000803F0300000000000000000000000A46696C6C2E436F6C6F720708636C61 - 57686974650748697454657374080B4D617267696E732E546F70050000000000 - 0000C001400A53697A652E576964746805000000000000008002400B53697A65 - 2E48656967687405000000000000008001401453697A652E506C6174666F726D - 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000055454 - 65787400095374796C654E616D6506047465787405416C69676E0706436C6965 - 6E740748697454657374080C4D617267696E732E4C6566740500000000000000 - 80FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D61726769 - 6E732E5269676874050000000000000080FF3F0E4D617267696E732E426F7474 - 6F6D050000000000000080FF3F0A53697A652E57696474680500000000000080 - B306400B53697A652E4865696768740500000000000000CC04401453697A652E - 506C6174666F726D44656661756C7408165465787453657474696E67732E466F - 6E74436F6C6F720708636C6157686974650000005450463007544C61796F7574 - 00095374796C654E616D6506157363726F6C6C626172626F74746F6D62757474 - 6F6E05416C69676E070643656E7465720756697369626C6508085461624F7264 - 6572021E000A5452656374616E676C6500095374796C654E616D65060A626163 - 6B67726F756E6405416C69676E0706436C69656E740C436C69704368696C6472 - 656E090A436C6970506172656E740907436F726E6572730B07546F704C656674 - 08546F705269676874000A46696C6C2E436F6C6F720709784646323032303230 - 0748697454657374080A53697A652E57696474680500000000000000C804400B - 53697A652E4865696768740500000000000000C804401453697A652E506C6174 - 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650758 - 5261646975730500000000000000C00040075952616469757305000000000000 - 00C00040000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 - 0615627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E - 05000000000000000000000C50726F70657274794E616D65060A46696C6C2E43 - 6F6C6F720A537461727456616C756507097846463230323032300953746F7056 - 616C756507097846463430343034300754726967676572062049734D6F757365 - 4F7665723D747275653B4973507265737365643D66616C73650E547269676765 - 72496E7665727365062149734D6F7573654F7665723D66616C73653B49735072 - 65737365643D66616C736500000F54436F6C6F72416E696D6174696F6E000953 - 74796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E3208 - 4475726174696F6E05000000000000000000000C50726F70657274794E616D65 - 060A46696C6C2E436F6C6F720A537461727456616C7565070978464634303430 - 34300953746F7056616C75650709784646313735373943075472696767657206 - 1F4973507265737365643D747275653B49734D6F7573654F7665723D74727565 - 0E54726967676572496E766572736506204973507265737365643D66616C7365 - 3B49734D6F7573654F7665723D7472756500000007544C61796F757400095374 - 796C654E616D6506074C61796F75743105416C69676E070643656E7465720A53 - 697A652E57696474680500000000000000A002400B53697A652E486569676874 - 0500000000000000C001401453697A652E506C6174666F726D44656661756C74 - 080005545061746800095374796C654E616D650605506174683105416C69676E - 0706436C69656E7409446174612E506174680A34000000040000000000000000 - 00C8420000C84201000000000096430000C84201000000000048430000964303 - 0000000000C8420000C8420A46696C6C2E436F6C6F720708636C615768697465 - 0748697454657374080A53697A652E57696474680500000000000000A002400B - 53697A652E4865696768740500000000000000C001401453697A652E506C6174 - 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000 - 00005450463007544C61796F757400095374796C654E616D6506137363726F6C - 6C6261726C656674627574746F6E05416C69676E070643656E74657207566973 - 69626C6508085461624F72646572021F000A5452656374616E676C6500095374 - 796C654E616D65060A6261636B67726F756E6405416C69676E0706436C69656E - 740C436C69704368696C6472656E090A436C6970506172656E740907436F726E - 6572730B07546F704C6566740A426F74746F6D4C656674000A46696C6C2E436F - 6C6F7207097846463230323032300748697454657374080A53697A652E576964 - 74680500000000000000C804400B53697A652E48656967687405000000000000 - 00C804401453697A652E506C6174666F726D44656661756C74080B5374726F6B - 652E4B696E6407044E6F6E6507585261646975730500000000000000C0004007 - 595261646975730500000000000000C00040000F54436F6C6F72416E696D6174 - 696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D61 - 74696F6E31084475726174696F6E05000000000000000000000C50726F706572 - 74794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978 - 46463230323032300953746F7056616C75650709784646343034303430075472 - 6967676572062049734D6F7573654F7665723D747275653B4973507265737365 - 643D66616C73650E54726967676572496E7665727365062149734D6F7573654F - 7665723D66616C73653B4973507265737365643D66616C736500000F54436F6C - 6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E436F - 6C6F72416E696D6174696F6E32084475726174696F6E05000000000000000000 - 000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374617274 - 56616C756507097846463430343034300953746F7056616C7565070978464631 - 37353739430754726967676572061F4973507265737365643D747275653B4973 - 4D6F7573654F7665723D747275650E54726967676572496E7665727365062049 - 73507265737365643D66616C73653B49734D6F7573654F7665723D7472756500 - 000007544C61796F757400095374796C654E616D6506074C61796F7574310541 - 6C69676E070643656E7465720A53697A652E57696474680500000000000000A0 - 02400B53697A652E4865696768740500000000000000C001401453697A652E50 - 6C6174666F726D44656661756C74080005545061746800095374796C654E616D - 650605506174683105416C69676E0706436C69656E7409446174612E50617468 - 0A3400000004000000000000000000C8420000C84201000000000096430000C8 - 42010000000000484300009643030000000000C8420000C8420A46696C6C2E43 - 6F6C6F720708636C6157686974650748697454657374080D526F746174696F6E - 416E676C650500000000000000B405400A53697A652E57696474680500000000 - 000000A002400B53697A652E4865696768740500000000000000C00140145369 - 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 - 044E6F6E65000000005450463007544C61796F757400095374796C654E616D65 - 06147363726F6C6C6261727269676874627574746F6E05416C69676E07064365 - 6E7465720756697369626C6508085461624F726465720220000A545265637461 - 6E676C6500095374796C654E616D65060A6261636B67726F756E6405416C6967 - 6E0706436C69656E740C436C69704368696C6472656E090A436C697050617265 - 6E740907436F726E6572730B08546F7052696768740B426F74746F6D52696768 - 74000A46696C6C2E436F6C6F7207097846463230323032300748697454657374 - 080A53697A652E57696474680500000000000000C804400B53697A652E486569 - 6768740500000000000000C804401453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E6507585261646975730500 - 000000000000C0004007595261646975730500000000000000C00040000F5443 - 6F6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E - 436F6C6F72416E696D6174696F6E31084475726174696F6E0500000000000000 - 0000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461 - 727456616C756507097846463230323032300953746F7056616C756507097846 - 463430343034300754726967676572062049734D6F7573654F7665723D747275 - 653B4973507265737365643D66616C73650E54726967676572496E7665727365 - 062149734D6F7573654F7665723D66616C73653B4973507265737365643D6661 - 6C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 - 0615627574746F6E436F6C6F72416E696D6174696F6E32084475726174696F6E - 05000000000000000000000C50726F70657274794E616D65060A46696C6C2E43 - 6F6C6F720A537461727456616C756507097846463430343034300953746F7056 - 616C756507097846463137353739430754726967676572061F49735072657373 - 65643D747275653B49734D6F7573654F7665723D747275650E54726967676572 - 496E766572736506204973507265737365643D66616C73653B49734D6F757365 - 4F7665723D7472756500000007544C61796F757400095374796C654E616D6506 - 074C61796F75743105416C69676E070643656E7465720A53697A652E57696474 - 680500000000000000A002400B53697A652E4865696768740500000000000000 - C001401453697A652E506C6174666F726D44656661756C740800055450617468 - 00095374796C654E616D650605506174683105416C69676E0706436C69656E74 - 09446174612E506174680A3400000004000000000000000000C8420000C84201 - 000000000096430000C842010000000000484300009643030000000000C84200 - 00C8420A46696C6C2E436F6C6F720708636C6157686974650748697454657374 - 080D526F746174696F6E416E676C650500000000000000B405C00A53697A652E - 57696474680500000000000000A002400B53697A652E48656967687405000000 - 00000000C001401453697A652E506C6174666F726D44656661756C74080B5374 - 726F6B652E4B696E6407044E6F6E65000000005450463007544C61796F757400 - 095374796C654E616D6506127363726F6C6C626172746F70627574746F6E0541 - 6C69676E070643656E7465720756697369626C6508085461624F726465720221 - 000A5452656374616E676C6500095374796C654E616D65060A6261636B67726F - 756E6405416C69676E0706436C69656E740C436C69704368696C6472656E090A - 436C6970506172656E740907436F726E6572730B07546F704C65667408546F70 - 5269676874000A46696C6C2E436F6C6F72070978464632303230323007486974 - 54657374080A53697A652E57696474680500000000000000C804400B53697A65 - 2E4865696768740500000000000000C804401453697A652E506C6174666F726D - 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65075852616469 - 75730500000000000000C0004007595261646975730500000000000000C00040 - 000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506156275 - 74746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E05000000 - 000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F72 - 0A537461727456616C756507097846463230323032300953746F7056616C7565 - 07097846463430343034300754726967676572062049734D6F7573654F766572 - 3D747275653B4973507265737365643D66616C73650E54726967676572496E76 - 65727365062149734D6F7573654F7665723D66616C73653B4973507265737365 - 643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C65 - 4E616D650615627574746F6E436F6C6F72416E696D6174696F6E320844757261 - 74696F6E05000000000000000000000C50726F70657274794E616D65060A4669 - 6C6C2E436F6C6F720A537461727456616C756507097846463430343034300953 - 746F7056616C756507097846463137353739430754726967676572061F497350 - 7265737365643D747275653B49734D6F7573654F7665723D747275650E547269 - 67676572496E766572736506204973507265737365643D66616C73653B49734D - 6F7573654F7665723D7472756500000007544C61796F757400095374796C654E - 616D6506074C61796F75743105416C69676E070643656E7465720A53697A652E - 57696474680500000000000000A002400B53697A652E48656967687405000000 - 00000000C001401453697A652E506C6174666F726D44656661756C7408000554 - 5061746800095374796C654E616D650605506174683105416C69676E0706436C - 69656E7409446174612E506174680A3400000004000000000000000000C84200 - 00C84201000000000096430000C8420100000000004843000096430300000000 - 00C8420000C8420A46696C6C2E436F6C6F720708636C61576869746507486974 - 54657374080D526F746174696F6E416E676C650500000000000000B406400A53 - 697A652E57696474680500000000000000A002400B53697A652E486569676874 - 0500000000000000C001401453697A652E506C6174666F726D44656661756C74 - 080B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C6179 - 6F757400095374796C654E616D65060D636F6D626F626F787374796C6505416C - 69676E070643656E7465720A53697A652E57696474680500000000000000C805 - 400B53697A652E4865696768740500000000000000C803401453697A652E506C - 6174666F726D44656661756C74080756697369626C6508085461624F72646572 - 0222000C5442727573684F626A65637400095374796C654E616D65060A666F72 - 6567726F756E6400000B54466F6E744F626A65637400095374796C654E616D65 - 0604666F6E7409466F6E742E53697A650500000000000000D00240000007544C - 61796F757400095374796C654E616D65060A6261636B67726F756E6405416C69 - 676E0708436F6E74656E74730A53697A652E57696474680500000000000000C8 + 3F0A53697A652E576964746805000000000056D5AE07400B53697A652E486569 + 6768740500000000000000F003401453697A652E506C6174666F726D44656661 + 756C74080007544C61796F75740005416C69676E07044C656674064C6F636B65 + 64090A53697A652E576964746805000000000000009002400B53697A652E4865 + 696768740500000000000000F003401453697A652E506C6174666F726D446566 + 61756C7408000007544C61796F757400095374796C654E616D65060469636F6E + 064C6F636B6564090A506F736974696F6E2E5805000000000000009002400A50 + 6F736974696F6E2E590500000000000000E001400A53697A652E576964746805 + 00000000000000C803400B53697A652E4865696768740500000000000000A803 + 401453697A652E506C6174666F726D44656661756C7408000007544C61796F75 + 7400095374796C654E616D65060773797362746E7305416C69676E0706436C69 + 656E74064C6F636B6564090A53697A652E57696474680500000000005655AA07 + 400B53697A652E4865696768740500000000000000F003401453697A652E506C + 6174666F726D44656661756C7408000C545370656564427574746F6E00095374 + 796C654E616D650605636C6F736505416C69676E07055269676874064C6F636B + 6564090A506F736974696F6E2E5805000000000056559107400A53697A652E57 + 696474680500000000000000C804400B53697A652E4865696768740500000000 + 000000F003401453697A652E506C6174666F726D44656661756C74080B537479 + 6C654C6F6F6B75700610636C6F7365627574746F6E7374796C6500000C545370 + 656564427574746F6E00095374796C654E616D6506036D617805416C69676E07 + 055269676874064C6F636B6564090A506F736974696F6E2E5805000000000056 + 558107400A53697A652E576964746805000000000000008004400B53697A652E + 4865696768740500000000000000F003401453697A652E506C6174666F726D44 + 656661756C74080B5374796C654C6F6F6B7570060E6D6178627574746F6E7374 + 796C6500000C545370656564427574746F6E00095374796C654E616D65060372 + 657305416C69676E07055269676874064C6F636B6564090A506F736974696F6E + 2E58050000000000ACAAE206400A53697A652E57696474680500000000000000 + 8004400B53697A652E4865696768740500000000000000F003401453697A652E + 506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570060E7265 + 73627574746F6E7374796C6500000C545370656564427574746F6E0009537479 + 6C654E616D6506036D696E05416C69676E07055269676874064C6F636B656409 + 0A506F736974696F6E2E58050000000000ACAAC206400A53697A652E57696474 + 6805000000000000008004400B53697A652E4865696768740500000000000000 + F003401453697A652E506C6174666F726D44656661756C74080B5374796C654C + 6F6F6B7570060E6D696E627574746F6E7374796C650000055454657874000953 + 74796C654E616D6506057469746C6505416C69676E0706436C69656E74064C6F + 636B6564090748697454657374080A53697A652E5769647468050000000000AC + AAC206400B53697A652E4865696768740500000000000000F003401453697A65 + 2E506C6174666F726D44656661756C7408045465787406055469746C65165465 + 787453657474696E67732E466F6E74436F6C6F720708636C6157686974650000 + 00000007544C61796F757400095374796C654E616D650606636C69656E740541 + 6C69676E0706436C69656E74064C6F636B6564090748697454657374090A5369 + 7A652E576964746805000000000056D5AB07400B53697A652E48656967687405 + 000000000000008F06401453697A652E506C6174666F726D44656661756C7408 + 000007544C61796F757400095374796C654E616D650606626F74746F6D05416C + 69676E0706426F74746F6D064C6F636B6564090A506F736974696F6E2E580500 + 0000000000008001400A506F736974696F6E2E590500000000000000AF06400A + 53697A652E576964746805000000000056D5AB07400B53697A652E4865696768 + 7405000000000000008001401453697A652E506C6174666F726D44656661756C + 7408000A5452656374616E676C6500095374796C654E616D6506047265637405 + 416C69676E0706426F74746F6D0A46696C6C2E436F6C6F720709784646323032 + 3032300748697454657374080553696465730B03546F7006426F74746F6D000A + 53697A652E576964746805000000000056D5AB07400B53697A652E4865696768 + 7405000000000000008001401453697A652E506C6174666F726D44656661756C + 74080C5374726F6B652E436F6C6F720709784646313531353135000000005450 + 463007544C61796F757400095374796C654E616D6506136172726F77646F776E + 746F6F6C627574746F6E05416C69676E070643656E7465720A53697A652E5769 + 6474680500000000000000C805400B53697A652E486569676874050000000000 + 0000C803401453697A652E506C6174666F726D44656661756C74080756697369 + 626C6508085461624F726465720201000A5452656374616E676C650009537479 + 6C654E616D65060A6261636B67726F756E6405416C69676E0706436C69656E74 + 0C436C69704368696C6472656E090A436C6970506172656E74090A46696C6C2E + 436F6C6F7207097830303230323032300748697454657374080A53697A652E57 + 696474680500000000000000C805400B53697A652E4865696768740500000000 + 000000C803401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E + 31084475726174696F6E05000000000000000000000C50726F70657274794E61 + 6D65060A46696C6C2E436F6C6F720A537461727456616C756507097830303230 + 323032300953746F7056616C7565070978464634303430343007547269676765 + 72063049734D6F7573654F7665723D747275653B4973507265737365643D6661 + 6C73653B4973466F63757365643D66616C73650E54726967676572496E766572 + 7365063149734D6F7573654F7665723D66616C73653B4973507265737365643D + 66616C73653B4973466F63757365643D66616C736500000F54436F6C6F72416E + 696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F7241 + 6E696D6174696F6E32084475726174696F6E05000000000000000000000C5072 + 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 + 6507097846463430343034300953746F7056616C756507097846463137353739 + 430754726967676572062F4973507265737365643D747275653B49734D6F7573 + 654F7665723D747275653B4973466F63757365643D66616C736500000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E43 + 6F6C6F72416E696D6174696F6E33084475726174696F6E050000000000000000 + 00000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 + 7456616C756507097846463241383245320953746F7056616C75650709784646 + 3137353739430754726967676572062E4973507265737365643D747275653B49 + 734D6F7573654F7665723D747275653B4973466F63757365643D747275650E54 + 726967676572496E7665727365062F4973507265737365643D66616C73653B49 + 734D6F7573654F7665723D747275653B4973466F63757365643D747275650000 + 0005545061746800095374796C654E616D6506047061746805416C69676E0706 + 43656E74657209446174612E506174680A3400000004000000000000000000C8 + 420000C84201000000000096430000C842010000000000484300009643030000 + 000000C8420000C8420A46696C6C2E436F6C6F720708636C6157686974650748 + 697454657374080A53697A652E57696474680500000000000000A002400B5369 + 7A652E4865696768740500000000000000C001401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000554 + 5465787400095374796C654E616D6506047465787405416C69676E0706436C69 + 656E740748697454657374080A53697A652E57696474680500000000000000C8 05400B53697A652E4865696768740500000000000000C803401453697A652E50 - 6C6174666F726D44656661756C7408000A5452656374616E676C650009537479 - 6C654E616D65060A52656374616E676C653105416C69676E0706436C69656E74 - 0A46696C6C2E436F6C6F7207097846463230323032300748697454657374080A - 53697A652E57696474680500000000000000C805400B53697A652E4865696768 - 740500000000000000C803401453697A652E506C6174666F726D44656661756C - 74080B5374726F6B652E4B696E6407044E6F6E65075852616469757305000000 - 00000000C0004007595261646975730500000000000000C000400007544C6179 - 6F757400095374796C654E616D650611427574746F6E5374796C654F626A6563 - 7405416C69676E070846697452696768740B4D617267696E732E546F70050000 - 000000000080FF3F0D4D617267696E732E5269676874050000000000000080FF - 3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A506F7369 - 74696F6E2E580500000000005ED99705400A506F736974696F6E2E5905000000 - 0000000080FF3F0A53697A652E5769647468050000000000889AB803400B5369 - 7A652E4865696768740500000000000000B803401453697A652E506C6174666F - 726D44656661756C74080007544C61796F757400095374796C654E616D650607 - 4C61796F75743105416C69676E070643656E7465720C4D617267696E732E4C65 - 6674050000000000000080FF3F0A53697A652E57696474680500000000000000 - A002400B53697A652E4865696768740500000000000000C001401453697A652E - 506C6174666F726D44656661756C74080005545061746800095374796C654E61 - 6D650605506174683105416C69676E0706436C69656E7409446174612E506174 - 680A3400000004000000000000000000C8420000C84201000000000096430000 - C842010000000000484300009643030000000000C8420000C8420A46696C6C2E - 436F6C6F720708636C6157686974650748697454657374080A53697A652E5769 - 6474680500000000000000A002400B53697A652E486569676874050000000000 - 0000C001401453697A652E506C6174666F726D44656661756C74080B5374726F - 6B652E4B696E6407044E6F6E65000000000F54436F6C6F72416E696D6174696F - 6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E31537479 - 6C65084475726174696F6E05000000000000000000000C50726F70657274794E + 6C6174666F726D44656661756C74080454657874060454657874165465787453 + 657474696E67732E466F6E74436F6C6F720708636C6157686974650756697369 + 626C6508000000} + end + item + Platform = 'OSX Yosemite' + ResourcesBin = { + 464D585F5354594C4520322E3501060F6261636B67726F756E647374796C6503 + AF00060B627574746F6E7374796C6503EB04060D636865636B626F787374796C + 6503EA050609656469747374796C6503D4050609677269647374796C6503E608 + 060D67726F7570626F787374796C6503B402060F6865616465726974656D7374 + 796C6503F403060E696D61676563656C6C7374796C65033D01060A6C6162656C + 7374796C65032001060D6C697374626F78666F6F746572038B0106106C697374 + 626F786974656D7374796C6503520306126C697374626F78706C61696E686561 + 646572036C02060C6C697374626F787374796C6503B307060E706F7075706365 + 6C6C7374796C65038E03061070726F67726573736261727374796C6503020506 + 1170726F677265737363656C6C7374796C6503CB0206147363726F6C6C626172 + 68747261636B7374796C65033B01060E7363726F6C6C6261727374796C650363 + 0406147363726F6C6C62617276747261636B7374796C65033B01060C7370696E + 626F787374796C65038507060B7377697463687374796C6503ED01060F746162 + 636F6E74726F6C7374796C6503F701060B746162646F747374796C65037F0106 + 0C7461626974656D7374796C65032B05060D7465787463656C6C7374796C6503 + A601060D7468756D626261727374796C65034C03060A7468756D627374796C65 + 033B02060D747261636B6261727374796C65034A0806096D656D6F7374796C65 + 030D08060D73697A65677269707374796C6503FB04060E737461747573626172 + 7374796C6503DB01060C746F6F6C6261727374796C6503CA00061570726F6772 + 6573736261726572726F727374796C65030705060E6C696E6B6C6162656C7374 + 796C65035003060C706F706F7665727374796C65035B02060D706F707570626F + 787374796C6503680606157363726F6C6C626172626F74746F6D627574746F6E + 036E0406137363726F6C6C6261726C656674627574746F6E0387040614736372 + 6F6C6C6261727269676874627574746F6E038A0406127363726F6C6C62617274 + 6F70627574746F6E038404060D636F6D626F626F787374796C65032607061473 + 74617475736261726E6F677269707374796C6503D4000613736D616C6C736372 + 6F6C6C6261727374796C6503AE01060D73706C69747465727374796C65030103 + 06106D656E756261726974656D7374796C65035C0B060C6D656E756261727374 + 796C6503B802060D6D656E756974656D7374796C6503890B06126D656E757365 + 70617261746F727374796C6503E501060D6D656E75766965777374796C6503B7 + 020610726164696F627574746F6E7374796C6503C4050618756C63656E746572 + 726164696F627574746F6E7374796C65035D050616756C6C656674726164696F + 627574746F6E7374796C6503A7050617756C7269676874726164696F62757474 + 6F6E7374796C6503B705061470726F67726573736261726D696E697374796C65 + 03F403060E636F6D626F656469747374796C6503F8090613657870616E646572 + 627574746F6E7374796C650381020615657870616E646572636865636B626F78 + 7374796C6503DB05060D657870616E6465727374796C650316070615616E6969 + 6E64696361746F72686F727A7374796C6503E0020611616E69696E6469636174 + 6F727374796C6503D701060A70616E656C7374796C65034F01061970726F6772 + 6573736261726D696E696572726F727374796C6503F903060E6C6F6762757474 + 6F6E7374796C6503DA07061B7472656576696577657870616E64657262757474 + 6F6E7374796C65038902060D74726565766965777374796C65038D0706117472 + 6565766965776974656D7374796C65032705061670726F677265737362617266 + 696E6973687374796C65030805061A70726F67726573736261726D696E696669 + 6E6973687374796C6503FA0306136172726F77646F776E746F6F6C627574746F + 6E03EC0500545046300A5452656374616E676C6500095374796C654E616D6506 + 0F6261636B67726F756E647374796C6505416C69676E070643656E7465720A46 + 696C6C2E436F6C6F7207097846463244324432440A53697A652E576964746805 + 000000000000009407400B53697A652E4865696768740500000000000080D206 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E650756697369626C650800005450463007544C61796F7574 + 00095374796C654E616D65060B627574746F6E7374796C6505416C69676E0706 + 43656E7465720A53697A652E57696474680500000000000000C805400B53697A + 652E4865696768740500000000000000C803401453697A652E506C6174666F72 + 6D44656661756C74080756697369626C6508085461624F726465720203000A54 + 52656374616E676C6500095374796C654E616D65060A6261636B67726F756E64 + 05416C69676E0706436C69656E740C436C69704368696C6472656E090A436C69 + 70506172656E74090A46696C6C2E436F6C6F7207097846463230323032300748 + 697454657374080A53697A652E57696474680500000000000000C805400B5369 + 7A652E4865696768740500000000000000C803401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6507585261 + 646975730500000000000000C0004007595261646975730500000000000000C0 + 0040000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650615 + 627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E0500 + 0000000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C + 6F720A537461727456616C756507097846463230323032300953746F7056616C + 756507097846463430343034300754726967676572063049734D6F7573654F76 + 65723D747275653B4973507265737365643D66616C73653B4973466F63757365 + 643D66616C73650E54726967676572496E7665727365063149734D6F7573654F + 7665723D66616C73653B4973507265737365643D66616C73653B4973466F6375 + 7365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009537479 + 6C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E32084475 + 726174696F6E05000000000000000000000C50726F70657274794E616D65060A + 46696C6C2E436F6C6F720A537461727456616C75650709784646343034303430 + 0953746F7056616C756507097846463137353739430754726967676572062F49 + 73507265737365643D747275653B49734D6F7573654F7665723D747275653B49 + 73466F63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E + 00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F + 6E33084475726174696F6E05000000000000000000000C50726F70657274794E 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464632 - 30323032300953746F7056616C75650709784646343034303430075472696767 - 6572062149734D6F7573654F7665723D747275653B4973507265737365643D66 - 616C73653B0E54726967676572496E7665727365062249734D6F7573654F7665 - 723D66616C73653B4973507265737365643D66616C73653B00000F54436F6C6F - 72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D - 6174696F6E325374796C65084475726174696F6E05000000000000000000000C - 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 - 6C756507097846463430343034300953746F7056616C75650709784646324138 - 3245320754726967676572062049734D6F7573654F7665723D747275653B4973 - 466F63757365643D747275653B0E54726967676572496E766572736506214973 - 4D6F7573654F7665723D747275653B4973466F63757365643D66616C73653B00 - 00000007544C61796F757400095374796C654E616D650607636F6E74656E7405 - 416C69676E0706436C69656E74064C6F636B6564090C4D617267696E732E4C65 - 667405000000000000008000400B4D617267696E732E546F7005000000000000 - 008000400D4D617267696E732E52696768740500000000000000D803400E4D61 - 7267696E732E426F74746F6D05000000000000008000400A53697A652E576964 - 746805000000000000008E05400B53697A652E48656967687405000000000000 - 00A803401453697A652E506C6174666F726D44656661756C7408000000545046 - 300A5452656374616E676C6500095374796C654E616D65061473746174757362 - 61726E6F677269707374796C6505416C69676E070643656E7465720C436C6970 - 4368696C6472656E090A46696C6C2E436F6C6F72070978464632353235323505 - 53696465730B03546F70000A53697A652E57696474680500000000000000F004 - 400B53697A652E4865696768740500000000000000C804401453697A652E506C - 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 - 3135313531350756697369626C650800005450463007544C61796F7574000953 - 74796C654E616D650613736D616C6C7363726F6C6C6261727374796C6505416C - 69676E070643656E7465720756697369626C6508085461624F72646572022300 - 0654547261636B00095374796C654E616D65060668747261636B05416C69676E - 0706436C69656E74064C6F636B6564090B4F7269656E746174696F6E070A486F - 72697A6F6E74616C0A53697A652E57696474680500000000000000C804400B53 - 697A652E4865696768740500000000000000C804401453697A652E506C617466 - 6F726D44656661756C74080B5374796C654C6F6F6B757006147363726F6C6C62 - 617268747261636B7374796C6500000654547261636B00095374796C654E616D - 65060676747261636B05416C69676E0706436C69656E74064C6F636B6564090B - 4F7269656E746174696F6E070A486F72697A6F6E74616C0A53697A652E576964 - 74680500000000000000C804400B53697A652E48656967687405000000000000 - 00C804401453697A652E506C6174666F726D44656661756C74080B5374796C65 - 4C6F6F6B757006147363726F6C6C62617276747261636B7374796C6500000054 - 50463007544C61796F757400095374796C654E616D65060D73706C6974746572 + 41383245320953746F7056616C75650709784646313735373943075472696767 + 6572062E4973507265737365643D747275653B49734D6F7573654F7665723D74 + 7275653B4973466F63757365643D747275650E54726967676572496E76657273 + 65062F4973507265737365643D66616C73653B49734D6F7573654F7665723D74 + 7275653B4973466F63757365643D747275650000000554546578740009537479 + 6C654E616D6506047465787405416C69676E0706436C69656E7413456E61626C + 6544726167486967686C69676874080748697454657374080A53697A652E5769 + 6474680500000000000000C805400B53697A652E486569676874050000000000 + 0000C803401453697A652E506C6174666F726D44656661756C74081654657874 + 53657474696E67732E466F6E74436F6C6F720708636C61576869746500000054 + 50463007544C61796F757400095374796C654E616D65060D636865636B626F78 7374796C6505416C69676E070643656E7465720A53697A652E57696474680500 - 000000000000A904400B53697A652E4865696768740500000000000080C10540 + 00000000ACAA8006400B53697A652E4865696768740500000000005855990440 1453697A652E506C6174666F726D44656661756C74080756697369626C650808 - 5461624F7264657202240007544C61796F757400095374796C654E616D650604 - 6772697005416C69676E0706436C69656E740A53697A652E5769647468050000 - 0000000000A904400B53697A652E4865696768740500000000000080C1054014 - 53697A652E506C6174666F726D44656661756C7408000754436972636C650009 - 5374796C654E616D650607436972636C653105416C69676E070643656E746572 - 0A46696C6C2E436F6C6F7207097846463430343034300A53697A652E57696474 - 680500000000000000E001400B53697A652E4865696768740500000000000000 - E001401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 - 2E436F6C6F72070978464631353135313500000754436972636C650009537479 - 6C654E616D650607436972636C653205416C69676E070643656E7465720A4669 - 6C6C2E436F6C6F7207097846463430343034300B4D617267696E732E546F7005 - 00000000000000A003400A53697A652E57696474680500000000000000E00140 - 0B53697A652E4865696768740500000000000000E001401453697A652E506C61 - 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 - 353135313500000754436972636C6500095374796C654E616D65060743697263 - 6C653305416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846 - 463430343034300E4D617267696E732E426F74746F6D0500000000000000A003 - 400A53697A652E57696474680500000000000000E001400B53697A652E486569 - 6768740500000000000000E001401453697A652E506C6174666F726D44656661 - 756C74080C5374726F6B652E436F6C6F72070978464631353135313500000000 - 5450463007544C61796F757400095374796C654E616D6506106D656E75626172 - 6974656D7374796C6505416C69676E070643656E7465720C4D617267696E732E - 4C656674050000000000000080FF3F0B4D617267696E732E546F700500000000 - 00000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E - 4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E57 - 6964746805000000000000009205400B53697A652E4865696768740500000000 - 000000D003401453697A652E506C6174666F726D44656661756C740807566973 - 69626C6508085461624F726465720225000A5452656374616E676C650005416C - 69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646324138 - 324532074869745465737408074F70616369747905000000000017B7D1F13F0A - 53697A652E576964746805000000000000009205400B53697A652E4865696768 - 740500000000000000D003401453697A652E506C6174666F726D44656661756C - 74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D - 6174696F6E00084475726174696F6E05000000000018B7D1F23F0C50726F7065 - 7274794E616D6506074F7061636974790A537461727456616C75650500000000 - 0000000000000953746F7056616C7565050000000000000080FF3F0754726967 - 676572060F497353656C65637465643D747275650E54726967676572496E7665 - 7273650610497353656C65637465643D66616C73650000000A5452656374616E - 676C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E - 0708436F6E74656E74730A46696C6C2E436F6C6F720709784646324138324532 - 074869745465737408074F70616369747905000000000017B7D1F13F0A53697A - 652E576964746805000000000000009205400B53697A652E4865696768740500 - 000000000000D003401453697A652E506C6174666F726D44656661756C74080B - 5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D617469 - 6F6E00084475726174696F6E05000000000018B7D1F23F0C50726F7065727479 - 4E616D6506074F7061636974790A537461727456616C75650500000000000000 - 0000000953746F7056616C7565050000000000000080FF3F0754726967676572 - 061049734D6F7573654F7665723D747275650E54726967676572496E76657273 - 65061149734D6F7573654F7665723D66616C736500000007544C61796F757400 - 095374796C654E616D650605676C79706805416C69676E07044C6566740A5369 - 7A652E57696474680500000000000000C803400B53697A652E48656967687405 - 00000000000000D003401453697A652E506C6174666F726D44656661756C7408 - 0007544C61796F757400095374796C654E616D650609636865636B6D61726B05 - 416C69676E0708436F6E74656E7473074F7061636974790500000000006F1283 - F53F0A53697A652E57696474680500000000000000C803400B53697A652E4865 - 696768740500000000000000D003401453697A652E506C6174666F726D446566 - 61756C7408000554506174680005416C69676E070643656E7465720944617461 - 2E506174680A58000000070000000000000056D9524391AE2C43010000009276 - 664365021643010000009F3983432B7C3C43010000009E9AA64382D2B4420100 - 00006F1CB04375A4D1420100000026DF8243263F67430300000056D9524391AE - 2C430A46696C6C2E436F6C6F720708636C615768697465074869745465737408 - 0A53697A652E57696474680500000000000000B002400B53697A652E48656967 - 68740500000000000000B002401453697A652E506C6174666F726D4465666175 - 6C74080B5374726F6B652E4B696E6407044E6F6E6500000F54466C6F6174416E - 696D6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F - 70657274794E616D6506074F7061636974790A537461727456616C7565050000 - 00000000000000000953746F7056616C7565050000000000000080FF3F075472 - 6967676572060E4973436865636B65643D747275650E54726967676572496E76 - 65727365060F4973436865636B65643D66616C73650000000654476C79706800 - 095374796C654E616D65060A676C7970687374796C650C4D617267696E732E4C - 656674050000000000000080FF3F0B4D617267696E732E546F70050000000000 - 00008000400D4D617267696E732E52696768740500000000000000C000400E4D - 617267696E732E426F74746F6D050000000000000080FF3F05416C69676E0705 - 52696768740A506F736974696F6E2E580500000000000000C001400A506F7369 - 74696F6E2E5905000000000000008000400A53697A652E576964746805000000 - 000000008003400B53697A652E4865696768740500000000000000B803401453 - 697A652E506C6174666F726D44656661756C740800000654496D616765000953 - 74796C654E616D6506066269746D61700E4D756C74695265734269746D61700E - 01000005416C69676E0708436F6E74656E74730C4D617267696E732E4C656674 - 05000000000000008000400B4D617267696E732E546F70050000000000000080 - 00400D4D617267696E732E526967687405000000000000008000400E4D617267 - 696E732E426F74746F6D05000000000000008000400A53697A652E5769647468 - 0500000000000000A803400B53697A652E4865696768740500000000000000B0 - 03401453697A652E506C6174666F726D44656661756C74080000000554546578 - 7400095374796C654E616D6506047465787405416C69676E07044C656674064C - 6F636B6564090748697454657374080C4D617267696E732E4C65667405000000 - 000000008002400D4D617267696E732E52696768740500000000000000800240 - 0A506F736974696F6E2E5805000000000000008404400A53697A652E57696474 - 680500000000000000C804400B53697A652E4865696768740500000000000000 - D003401453697A652E506C6174666F726D44656661756C740816546578745365 - 7474696E67732E466F6E74436F6C6F720708636C615768697465165465787453 - 657474696E67732E486F727A416C69676E07074C656164696E67000005545465 - 787400095374796C654E616D65060873686F727463757405416C69676E070552 - 69676874064C6F636B6564090748697454657374080C4D617267696E732E4C65 - 66740500000000000000C002400D4D617267696E732E52696768740500000000 - 000000C001400A506F736974696F6E2E580500000000000000C000C00A53697A - 652E57696474680500000000000000C804400B53697A652E4865696768740500 - 000000000000D003401453697A652E506C6174666F726D44656661756C740816 - 5465787453657474696E67732E466F6E74436F6C6F720708636C615768697465 - 165465787453657474696E67732E486F727A416C69676E07074C656164696E67 - 000007544C61796F757400095374796C654E616D6506077375626D61726B0541 - 6C69676E070552696768740A506F736974696F6E2E580500000000000000D404 - 400A53697A652E57696474680500000000000000A003400B53697A652E486569 - 6768740500000000000000D003401453697A652E506C6174666F726D44656661 - 756C7408000554506174680005416C69676E070643656E74657209446174612E - 506174680A340000000400000000000000000000000000000001000000000000 - 000000803F010000000000803F0000003F0300000000000000000000000A4669 - 6C6C2E436F6C6F720708636C615768697465064C6F636B656409074869745465 - 7374080A53697A652E57696474680500000000000000E001400B53697A652E48 - 656967687405000000000000008002401453697A652E506C6174666F726D4465 - 6661756C74080B5374726F6B652E4B696E6407044E6F6E650000000054504630 - 0A5452656374616E676C6500095374796C654E616D65060C6D656E7562617273 - 74796C6505416C69676E070643656E7465720C436C69704368696C6472656E09 - 0946696C6C2E4B696E6407044E6F6E650748697454657374080A53697A652E57 - 696474680500000000000000C804400B53697A652E4865696768740500000000 - 000000C804401453697A652E506C6174666F726D44656661756C74080B537472 - 6F6B652E4B696E6407044E6F6E650756697369626C6508075852616469757305 - 00000000000000C0004007595261646975730500000000000000C00040000A54 - 52656374616E676C650005416C69676E0706436C69656E740A46696C6C2E436F - 6C6F7207097846463230323032300748697454657374080C4D617267696E732E - 4C656674050000000000000080FFBF0B4D617267696E732E546F700500000000 - 00000080FFBF0D4D617267696E732E5269676874050000000000000080FFBF0A - 53697A652E57696474680500000000000000D004400B53697A652E4865696768 - 740500000000000000CC04401453697A652E506C6174666F726D44656661756C - 74080C5374726F6B652E436F6C6F720709784646313531353135075852616469 - 75730500000000000000C0004007595261646975730500000000000000C00040 - 000007544C61796F757400095374796C654E616D650607636F6E74656E740541 - 6C69676E0706436C69656E740C4D617267696E732E4C65667405000000000000 - 0080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267 - 696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F74 - 746F6D050000000000000080FF3F0A53697A652E576964746805000000000000 - 00C004400B53697A652E4865696768740500000000000000C004401453697A65 - 2E506C6174666F726D44656661756C74080000005450463007544C61796F7574 - 00095374796C654E616D65060D6D656E756974656D7374796C6505416C69676E - 070643656E7465720C4D617267696E732E4C656674050000000000000080FF3F - 0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E - 5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D05 - 0000000000000080FF3F0A53697A652E57696474680500000000000000920540 - 0B53697A652E4865696768740500000000000000D003401453697A652E506C61 - 74666F726D44656661756C74080756697369626C6508085461624F7264657202 - 26000A5452656374616E676C650005416C69676E0708436F6E74656E74730A46 - 696C6C2E436F6C6F720709784646324138324532074869745465737408074F70 - 616369747905000000000017B7D1F13F0A53697A652E57696474680500000000 - 0000009205400B53697A652E4865696768740500000000000000D00340145369 - 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 - 044E6F6E65000F54466C6F6174416E696D6174696F6E00084475726174696F6E - 05000000000018B7D1F23F0C50726F70657274794E616D6506074F7061636974 - 790A537461727456616C756505000000000000000000000953746F7056616C75 - 65050000000000000080FF3F0754726967676572060F497353656C6563746564 - 3D747275650E54726967676572496E76657273650610497353656C6563746564 - 3D66616C73650000000A5452656374616E676C6500095374796C654E616D6506 - 0A6261636B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C - 2E436F6C6F720709784646324138324532074869745465737408074F70616369 - 747905000000000000000000000A53697A652E57696474680500000000000000 - 9205400B53697A652E4865696768740500000000000000D003401453697A652E - 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F - 6E65000F54466C6F6174416E696D6174696F6E00084475726174696F6E050000 - 00000018B7D1F23F07496E7665727365090C50726F70657274794E616D650607 - 4F7061636974790A537461727456616C75650500000000000000000000095374 - 6F7056616C7565050000000000000080FF3F0754726967676572061049734D6F - 7573654F7665723D747275650E54726967676572496E7665727365061149734D - 6F7573654F7665723D66616C736500000007544C61796F757400095374796C65 - 4E616D650605676C79706805416C69676E07044C6566740A53697A652E576964 - 74680500000000000000C803400B53697A652E48656967687405000000000000 - 00D003401453697A652E506C6174666F726D44656661756C74080007544C6179 - 6F757400095374796C654E616D650609636865636B6D61726B05416C69676E07 - 08436F6E74656E7473074F7061636974790500000000006F1283F53F0A53697A - 652E57696474680500000000000000C803400B53697A652E4865696768740500 - 000000000000D003401453697A652E506C6174666F726D44656661756C740800 - 0554506174680005416C69676E070643656E74657209446174612E506174680A - 58000000070000000000000056D9524391AE2C43010000009276664365021643 - 010000009F3983432B7C3C43010000009E9AA64382D2B442010000006F1CB043 - 75A4D1420100000026DF8243263F67430300000056D9524391AE2C430A46696C - 6C2E436F6C6F720708636C6157686974650748697454657374080A53697A652E - 57696474680500000000000000B002400B53697A652E48656967687405000000 - 00000000B002401453697A652E506C6174666F726D44656661756C74080B5374 - 726F6B652E4B696E6407044E6F6E6500000F54466C6F6174416E696D6174696F - 6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E - 616D6506074F7061636974790A537461727456616C7565050000000000000000 - 00000953746F7056616C7565050000000000000080FF3F075472696767657206 - 0E4973436865636B65643D747275650E54726967676572496E7665727365060F - 4973436865636B65643D66616C73650000000654476C79706800095374796C65 - 4E616D65060A676C7970687374796C650C4D617267696E732E4C656674050000 - 000000000080FF3F0B4D617267696E732E546F7005000000000000008000400D - 4D617267696E732E52696768740500000000000000C000400E4D617267696E73 - 2E426F74746F6D050000000000000080FF3F05416C69676E07044C6566740A50 - 6F736974696F6E2E58050000000000000080FF3F0A506F736974696F6E2E5905 - 000000000000008000400A53697A652E57696474680500000000000000800340 - 0B53697A652E4865696768740500000000000000B803401453697A652E506C61 - 74666F726D44656661756C740800000654496D61676500095374796C654E616D - 6506066269746D61700E4D756C74695265734269746D61700E01000005416C69 - 676E07044C6566740C4D617267696E732E4C6566740500000000000000800040 - 0B4D617267696E732E546F7005000000000000008000400D4D617267696E732E - 526967687405000000000000008000400E4D617267696E732E426F74746F6D05 - 000000000000008000400A506F736974696F6E2E580500000000000000800040 - 0A506F736974696F6E2E5905000000000000008000400A53697A652E57696474 - 680500000000000000A803400B53697A652E4865696768740500000000000000 - B003401453697A652E506C6174666F726D44656661756C740800000005545465 - 787400095374796C654E616D6506047465787405416C69676E07044C65667406 - 4C6F636B6564090748697454657374080C4D617267696E732E4C656674050000 - 00000000008002400D4D617267696E732E526967687405000000000000008002 - 400A506F736974696F6E2E5805000000000000008404400A53697A652E576964 - 74680500000000000000C804400B53697A652E48656967687405000000000000 - 00D003401453697A652E506C6174666F726D44656661756C7408165465787453 - 657474696E67732E466F6E74436F6C6F720708636C6157686974651654657874 - 53657474696E67732E486F727A416C69676E07074C656164696E670000055454 - 65787400095374796C654E616D65060873686F727463757405416C69676E0705 - 5269676874064C6F636B6564090748697454657374080C4D617267696E732E4C - 6566740500000000000000C002400D4D617267696E732E526967687405000000 - 00000000C001400A506F736974696F6E2E580500000000000000C000C00A5369 - 7A652E57696474680500000000000000C804400B53697A652E48656967687405 - 00000000000000D003401453697A652E506C6174666F726D44656661756C7408 - 165465787453657474696E67732E466F6E74436F6C6F720708636C6157686974 - 65165465787453657474696E67732E486F727A416C69676E07074C656164696E - 67000007544C61796F757400095374796C654E616D6506077375626D61726B05 - 416C69676E070552696768740A506F736974696F6E2E580500000000000000D4 - 04400A53697A652E57696474680500000000000000A003400B53697A652E4865 - 696768740500000000000000D003401453697A652E506C6174666F726D446566 - 61756C7408000554506174680005416C69676E070643656E7465720944617461 - 2E506174680A3400000004000000000000000000000000000000010000000000 - 00000000803F010000000000803F0000003F0300000000000000000000000A46 - 696C6C2E436F6C6F720708636C615768697465064C6F636B6564090748697454 - 657374080A53697A652E57696474680500000000000000E001400B53697A652E - 48656967687405000000000000008002401453697A652E506C6174666F726D44 - 656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000000545046 - 3007544C61796F757400095374796C654E616D6506126D656E75736570617261 - 746F727374796C6505416C69676E070643656E7465720C4D617267696E732E4C - 656674050000000000000080FF3F0B4D617267696E732E546F70050000000000 - 000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D - 617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E5769 - 6474680500000000000000C804400B53697A652E486569676874050000000000 - 0000C804401453697A652E506C6174666F726D44656661756C74080756697369 - 626C6508085461624F7264657202270005544C696E650005416C69676E070354 - 6F70084C696E65547970650703546F700C4D617267696E732E4C656674050000 - 0000000000C000400B4D617267696E732E546F7005000000000000008000400D - 4D617267696E732E52696768740500000000000000C000400A506F736974696F - 6E2E580500000000000000C000400A506F736974696F6E2E5905000000000000 - 008000400A53697A652E57696474680500000000000000B004400B53697A652E - 486569676874050000000000000080FF3F1453697A652E506C6174666F726D44 - 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313500 - 0000545046300A5452656374616E676C6500095374796C654E616D65060D6D65 - 6E75766965777374796C6505416C69676E070643656E7465720A46696C6C2E43 - 6F6C6F7207097846463230323032300A53697A652E5769647468050000000000 - 0000C804400B53697A652E4865696768740500000000000000C804401453697A - 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 - 097846463135313531350756697369626C650807585261646975730500000000 - 000000C0004007595261646975730500000000000000C00040000A5452656374 - 616E676C650005416C69676E0706436C69656E740A46696C6C2E436F6C6F7207 + 5461624F7264657202040007544C61796F75740005416C69676E07044C656674 + 0A53697A652E576964746805000000000000009003400B53697A652E48656967 + 687405000000000058559904401453697A652E506C6174666F726D4465666175 + 6C7408000A5452656374616E676C6500095374796C654E616D65060A6261636B + 67726F756E6405416C69676E070643656E7465720A46696C6C2E436F6C6F7207 097846463230323032300748697454657374080A53697A652E57696474680500 - 000000000000C804400B53697A652E4865696768740500000000000000C80440 + 000000000000F002400B53697A652E4865696768740500000000000000F00240 1453697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F 6C6F72070978464631353135313507585261646975730500000000000000C000 - 4007595261646975730500000000000000C00040000D54536861646F77456666 - 656374000844697374616E63650500000000000000C000400944697265637469 - 6F6E0500000000000000B4054008536F66746E657373050000000000000080FE - 3F074F706163697479050000000000000080FE3F0B536861646F77436F6C6F72 - 0708636C61426C61636B00000007544C61796F757400095374796C654E616D65 - 0607636F6E74656E7405416C69676E0706436C69656E740C4D617267696E732E - 4C656674050000000000000080FF3F0B4D617267696E732E546F700500000000 - 00000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E - 4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E57 - 696474680500000000000000C004400B53697A652E4865696768740500000000 - 000000C004401453697A652E506C6174666F726D44656661756C740800000054 - 50463007544C61796F757400095374796C654E616D650610726164696F627574 - 746F6E7374796C6505416C69676E070643656E7465720A53697A652E57696474 - 680500000000000000F205400B53697A652E4865696768740500000000000000 - A803401453697A652E506C6174666F726D44656661756C74080756697369626C - 6508085461624F7264657202280007544C61796F75740005416C69676E07044C - 6566740A53697A652E57696474680500000000000000A803400B53697A652E48 - 65696768740500000000000000A803401453697A652E506C6174666F726D4465 - 6661756C7408000854456C6C6970736500095374796C654E616D65060A626163 - 6B67726F756E6405416C69676E070643656E7465720A46696C6C2E436F6C6F72 - 0709784646323032303230064C6F636B6564090748697454657374080A53697A - 652E57696474680500000000000000F002400B53697A652E4865696768740500 - 000000000000F002401453697A652E506C6174666F726D44656661756C74080C - 5374726F6B652E436F6C6F720709784646313531353135000854456C6C697073 - 6500095374796C654E616D650609636865636B6D61726B05416C69676E070643 - 6C69656E740A46696C6C2E436F6C6F720709784646324138324532064C6F636B - 656409074869745465737408074F70616369747905000000000000000000000C - 4D617267696E732E4C65667405000000000000008000400B4D617267696E732E - 546F7005000000000000008000400D4D617267696E732E526967687405000000 - 000000008000400E4D617267696E732E426F74746F6D05000000000000008000 - 400A53697A652E57696474680500000000000000B002400B53697A652E486569 - 6768740500000000000000B002401453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E - 696D6174696F6E00095374796C654E616D65061A6F706163697479436865636B - 6D61726B416E696D6174696F6E31084475726174696F6E050000000000000000 - 00000C50726F70657274794E616D6506074F7061636974790A53746172745661 - 6C756505000000000000000000000953746F7056616C75650500000000000000 - 80FF3F0754726967676572060E4973436865636B65643D747275650E54726967 - 676572496E7665727365060F4973436865636B65643D66616C73650000000F54 - 436F6C6F72416E696D6174696F6E00095374796C654E616D65061A726164696F - 627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E0500 - 00000000000000000007496E7665727365090C50726F70657274794E616D6506 - 0A46696C6C2E436F6C6F720A537461727456616C756507097846463230323032 - 300953746F7056616C7565070978464634303430343007547269676765720610 - 49734D6F7573654F7665723D747275650E54726967676572496E766572736506 - 1149734D6F7573654F7665723D66616C736500000F54436F6C6F72416E696D61 - 74696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E31 - 5374796C65084475726174696F6E05000000000000000000000C50726F706572 - 74794E616D65060C5374726F6B652E436F6C6F720A537461727456616C756507 - 097846463135313531350953746F7056616C7565070978464632413832453207 - 54726967676572060E4973436865636B65643D747275650E5472696767657249 - 6E7665727365060F4973436865636B65643D66616C7365000000000554546578 - 7400095374796C654E616D6506047465787405416C69676E0706436C69656E74 - 064C6F636B6564090748697454657374080A53697A652E576964746805000000 - 00000000C805400B53697A652E4865696768740500000000000000A803401453 - 697A652E506C6174666F726D44656661756C7408045465787406045465787416 - 5465787453657474696E67732E466F6E74436F6C6F720708636C615768697465 - 0000005450463007544C61796F757400095374796C654E616D650618756C6365 - 6E746572726164696F627574746F6E7374796C6505416C69676E070643656E74 - 65720A53697A652E57696474680500000000005655FB05400B53697A652E4865 - 696768740500000000000000A004401453697A652E506C6174666F726D446566 - 61756C74080756697369626C6508085461624F7264657202290007544C61796F - 75740005416C69676E0706426F74746F6D0A506F736974696F6E2E5905000000 - 000000008804400A53697A652E57696474680500000000005655FB05400B5369 - 7A652E4865696768740500000000000000C001401453697A652E506C6174666F - 726D44656661756C7408000A5452656374616E676C6500095374796C654E616D - 65060A6261636B67726F756E6405416C69676E0708436F6E74656E747307436F - 726E6572730B07546F704C6566740A426F74746F6D4C656674000A46696C6C2E - 436F6C6F720709784646323032303230064C6F636B6564090748697454657374 - 080A53697A652E57696474680500000000005655FB05400B53697A652E486569 - 6768740500000000000000C001401453697A652E506C6174666F726D44656661 - 756C74080C5374726F6B652E436F6C6F720709784646313531353135000F5443 - 6F6C6F72416E696D6174696F6E00095374796C654E616D6506216261636B6772 - 6F756E64556C427574746F6E436F6C6F72416E696D6174696F6E310844757261 - 74696F6E050000000000000000000007496E7665727365090C50726F70657274 - 794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507097846 - 463230323032300953746F7056616C7565070978464634303430343007547269 - 67676572061049734D6F7573654F7665723D747275650E54726967676572496E - 7665727365061149734D6F7573654F7665723D66616C736500000A5452656374 - 616E676C6500095374796C654E616D650609636865636B6D61726B05416C6967 - 6E0708436F6E74656E747307436F726E6572730B07546F704C6566740A426F74 - 746F6D4C656674000A46696C6C2E436F6C6F720709784646324138324532064C - 6F636B656409074869745465737408074F706163697479050000000000000000 - 00000C4D617267696E732E4C656674050000000000000080FF3F0B4D61726769 - 6E732E546F70050000000000000080FF3F0D4D617267696E732E526967687405 - 0000000000000080FF3F0E4D617267696E732E426F74746F6D05000000000000 - 0080FF3F0A53697A652E57696474680500000000005655F705400B53697A652E - 48656967687405000000000000008001401453697A652E506C6174666F726D44 - 656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F61 - 74416E696D6174696F6E00095374796C654E616D65061A636865636B6D61726B - 4F706163697479416E696D6174696F6E31084475726174696F6E050000000000 - 00000000000C50726F70657274794E616D6506074F7061636974790A53746172 - 7456616C756505000000000000000000000953746F7056616C75650500000000 - 00000080FF3F0754726967676572060E4973436865636B65643D747275650E54 - 726967676572496E7665727365060F4973436865636B65643D66616C73650000 - 00000005545465787400095374796C654E616D6506047465787405416C69676E - 0706436C69656E74064C6F636B6564090748697454657374080A53697A652E57 - 696474680500000000005655FB05400B53697A652E4865696768740500000000 - 0000008804401453697A652E506C6174666F726D44656661756C740816546578 - 7453657474696E67732E466F6E74436F6C6F720708636C615768697465000000 - 5450463007544C61796F757400095374796C654E616D650616756C6C65667472 - 6164696F627574746F6E7374796C6505416C69676E070643656E7465720A5369 - 7A652E57696474680500000000005655FB05400B53697A652E48656967687405 - 00000000000000A004401453697A652E506C6174666F726D44656661756C7408 - 0756697369626C6508085461624F72646572022A0007544C61796F7574000541 - 6C69676E0706426F74746F6D0A506F736974696F6E2E59050000000000000088 - 04400A53697A652E57696474680500000000005655FB05400B53697A652E4865 - 696768740500000000000000C001401453697A652E506C6174666F726D446566 - 61756C7408000A5452656374616E676C6500095374796C654E616D65060A6261 - 636B67726F756E6405416C69676E0708436F6E74656E747307436F726E657273 - 0B07546F704C6566740A426F74746F6D4C656674000A46696C6C2E436F6C6F72 - 0709784646323032303230064C6F636B6564090748697454657374080A53697A - 652E57696474680500000000005655FB05400B53697A652E4865696768740500 - 000000000000C001401453697A652E506C6174666F726D44656661756C74080C - 5374726F6B652E436F6C6F720709784646313531353135075852616469757305 - 00000000000000C0004007595261646975730500000000000000C00040000F54 - 436F6C6F72416E696D6174696F6E00095374796C654E616D6506216261636B67 - 726F756E64556C427574746F6E436F6C6F72416E696D6174696F6E3108447572 - 6174696F6E050000000000000000000007496E7665727365090C50726F706572 - 74794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978 - 46463230323032300953746F7056616C75650709784646343034303430075472 - 6967676572061049734D6F7573654F7665723D747275650E5472696767657249 - 6E7665727365061149734D6F7573654F7665723D66616C736500000A54526563 - 74616E676C6500095374796C654E616D650609636865636B6D61726B05416C69 - 676E0708436F6E74656E747307436F726E6572730B07546F704C6566740A426F - 74746F6D4C656674000A46696C6C2E436F6C6F72070978464632413832453206 - 4C6F636B656409074869745465737408074F7061636974790500000000000000 - 0000000C4D617267696E732E4C656674050000000000000080FF3F0B4D617267 - 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 - 050000000000000080FF3F0E4D617267696E732E426F74746F6D050000000000 - 000080FF3F0A53697A652E57696474680500000000005655F705400B53697A65 - 2E48656967687405000000000000008001401453697A652E506C6174666F726D - 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65075852616469 - 7573050000000000000080004007595261646975730500000000000000800040 - 000F54466C6F6174416E696D6174696F6E00095374796C654E616D65061A6368 - 65636B6D61726B4F706163697479416E696D6174696F6E31084475726174696F - 6E05000000000000000000000C50726F70657274794E616D6506074F70616369 - 74790A537461727456616C756505000000000000000000000953746F7056616C - 7565050000000000000080FF3F0754726967676572060E4973436865636B6564 - 3D747275650E54726967676572496E7665727365060F4973436865636B65643D - 66616C7365000000000005545465787400095374796C654E616D650604746578 - 7405416C69676E0706436C69656E74064C6F636B656409074869745465737408 - 0A53697A652E57696474680500000000005655FB05400B53697A652E48656967 - 687405000000000000008804401453697A652E506C6174666F726D4465666175 - 6C7408165465787453657474696E67732E466F6E74436F6C6F720708636C6157 - 686974650000005450463007544C61796F757400095374796C654E616D650617 - 756C7269676874726164696F627574746F6E7374796C6505416C69676E070643 - 656E7465720A53697A652E57696474680500000000005655FB05400B53697A65 - 2E4865696768740500000000000000A004401453697A652E506C6174666F726D - 44656661756C74080756697369626C6508085461624F72646572022C0007544C - 61796F75740005416C69676E0706426F74746F6D0A506F736974696F6E2E5905 - 000000000000008804400A53697A652E57696474680500000000005655FB0540 - 0B53697A652E4865696768740500000000000000C001401453697A652E506C61 - 74666F726D44656661756C7408000A5452656374616E676C6500095374796C65 - 4E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E7473 - 07436F726E6572730B08546F7052696768740B426F74746F6D5269676874000A - 46696C6C2E436F6C6F720709784646323032303230064C6F636B656409074869 - 7454657374080A53697A652E57696474680500000000005655FB05400B53697A - 652E4865696768740500000000000000C001401453697A652E506C6174666F72 + 4007595261646975730500000000000000C00040000A5452656374616E676C65 + 00095374796C654E616D65060A52656374616E676C653105416C69676E070643 + 6C69656E740A46696C6C2E436F6C6F7207097846463241383245320748697454 + 65737408074F70616369747905000000000000000000000C4D617267696E732E + 4C65667405000000000000008000400B4D617267696E732E546F700500000000 + 0000008000400D4D617267696E732E526967687405000000000000008000400E + 4D617267696E732E426F74746F6D05000000000000008000400A53697A652E57 + 696474680500000000000000B002400B53697A652E4865696768740500000000 + 000000B002401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E6507585261646975730500000000000000C000 + 4007595261646975730500000000000000C00040000F54466C6F6174416E696D + 6174696F6E00095374796C654E616D65061B6368656368626F7856697362696C + 697479416E696D6174696F6E31084475726174696F6E05000000000000000000 + 000C50726F70657274794E616D6506074F7061636974790A537461727456616C + 756505000000000000000000000953746F7056616C75650500000000000000C8 + 05400754726967676572060E4973436865636B65643D747275650E5472696767 + 6572496E7665727365060F4973436865636B65643D66616C73650000000F5443 + 6F6C6F72416E696D6174696F6E00095374796C654E616D650618636865636B62 + 6F785374726F6B65416E696D6174696F6E31084475726174696F6E0500000000 + 0000000000000C50726F70657274794E616D65060C5374726F6B652E436F6C6F + 720A537461727456616C756507097846463135313531350953746F7056616C75 + 6507097846463241383245320754726967676572060E4973436865636B65643D + 747275650E54726967676572496E7665727365060F4973436865636B65643D66 + 616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650617636865636B626F78436F6C6F72416E696D6174696F6E31084475726174 + 696F6E05000000000000000000000C50726F70657274794E616D65060A46696C + 6C2E436F6C6F720A537461727456616C75650709784646323032303230095374 + 6F7056616C756507097846463430343034300754726967676572061049734D6F + 7573654F7665723D747275650E54726967676572496E7665727365061149734D + 6F7573654F7665723D66616C73650000000005545465787400095374796C654E + 616D6506047465787405416C69676E0706436C69656E740A53697A652E576964 + 74680500000000005855DD05400B53697A652E48656967687405000000000058 + 559904401453697A652E506C6174666F726D44656661756C7408045465787406 + 0454657874165465787453657474696E67732E466F6E74436F6C6F720708636C + 6157686974650000005450463007544C61796F757400095374796C654E616D65 + 0609656469747374796C6505416C69676E070643656E7465720A53697A652E57 + 696474680500000000000000C805400B53697A652E4865696768740500000000 + 000000C803401453697A652E506C6174666F726D44656661756C740807566973 + 69626C6508085461624F726465720205000C5442727573684F626A6563740009 + 5374796C654E616D65060A666F726567726F756E6400000C5442727573684F62 + 6A65637400095374796C654E616D65060973656C656374696F6E0B4272757368 + 2E436F6C6F72070978393632413832453200000B54466F6E744F626A65637400 + 095374796C654E616D650604666F6E7409466F6E742E53697A65050000000000 + 0000D0024000000A5452656374616E676C6500095374796C654E616D65060A62 + 61636B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E43 + 6F6C6F7207097846463230323032300748697454657374080A53697A652E5769 + 6474680500000000000000C805400B53697A652E486569676874050000000000 + 0000C803401453697A652E506C6174666F726D44656661756C74080C5374726F + 6B652E436F6C6F72070978464631353135313507585261646975730500000000 + 000000C0004007595261646975730500000000000000C00040000F54436F6C6F + 72416E696D6174696F6E00095374796C654E616D650614656469745374726F6B + 65416E696D6174696F6E31084475726174696F6E05000000000000000000000C + 50726F70657274794E616D65060C5374726F6B652E436F6C6F720A5374617274 + 56616C756507097846463135313531350953746F7056616C7565070978464632 + 41383245320754726967676572060E4973466F63757365643D747275650E5472 + 6967676572496E7665727365060F4973466F63757365643D66616C736500000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D65061465646974 + 5374726F6B65416E696D6174696F6E32084475726174696F6E05000000000000 + 0000000007496E7665727365090C50726F70657274794E616D65060C5374726F + 6B652E436F6C6F720A537461727456616C756507097846463135313531350953 + 746F7056616C756507097846463443344334430754726967676572062149734D + 6F7573654F7665723D747275653B4973466F63757365643D66616C73653B0E54 + 726967676572496E7665727365062249734D6F7573654F7665723D66616C7365 + 3B4973466F63757365643D66616C73653B00000007544C61796F757400095374 + 796C654E616D650607627574746F6E7305416C69676E07055269676874064C6F + 636B6564090B4D617267696E732E546F7005000000000000008000400D4D6172 + 67696E732E526967687405000000000000008000400E4D617267696E732E426F + 74746F6D05000000000000008000400A506F736974696F6E2E58050000000000 + 0000C004400A506F736974696F6E2E5905000000000000008000400A53697A65 + 2E57696474680500000000000000C804400B53697A652E486569676874050000 + 0000000000A803401453697A652E506C6174666F726D44656661756C74080000 + 07544C61796F757400095374796C654E616D650607636F6E74656E7405416C69 + 676E0706436C69656E74064C6F636B6564090C4D617267696E732E4C65667405 + 000000000000008001400B4D617267696E732E546F7005000000000000008000 + 400D4D617267696E732E526967687405000000000000008000400E4D61726769 + 6E732E426F74746F6D05000000000000008000400A53697A652E576964746805 + 00000000000000A804400B53697A652E4865696768740500000000000000A803 + 401453697A652E506C6174666F726D44656661756C7408000006544C6162656C + 00095374796C654E616D65060670726F6D7074064C6F636B656409074F706163 + 697479050000000000000080FE3F165465787453657474696E67732E466F6E74 + 436F6C6F720708636C6157686974650454657874060454657874000000545046 + 3007544C61796F757400095374796C654E616D650609677269647374796C6505 + 416C69676E070643656E7465720A53697A652E5769647468050000000000FFFF + E905400B53697A652E48656967687405000000000000008306401453697A652E + 506C6174666F726D44656661756C74080756697369626C6508085461624F7264 + 65720206000C5442727573684F626A65637400095374796C654E616D65061841 + 6C7465726E6174696E67526F774261636B67726F756E640B42727573682E436F + 6C6F72070978333237383738373800000C5442727573684F626A656374000953 + 74796C654E616D6506086C696E6566696C6C0B42727573682E436F6C6F720709 + 78464631353135313500000A5452656374616E676C6500095374796C654E616D + 65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A4669 + 6C6C2E436F6C6F720709784646323032303230064C6F636B6564090748697454 + 657374080C50616464696E672E4C65667405000000000000008000400B506164 + 64696E672E546F7005000000000000008000400D50616464696E672E52696768 + 7405000000000000008000400E50616464696E672E426F74746F6D0500000000 + 0000008000400A53697A652E5769647468050000000000FFFFE905400B53697A + 652E48656967687405000000000000008306401453697A652E506C6174666F72 6D44656661756C74080C5374726F6B652E436F6C6F7207097846463135313531 3507585261646975730500000000000000C00040075952616469757305000000 - 00000000C00040000F54436F6C6F72416E696D6174696F6E00095374796C654E - 616D6506216261636B67726F756E64556C427574746F6E436F6C6F72416E696D - 6174696F6E31084475726174696F6E050000000000000000000007496E766572 - 7365090C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461 - 727456616C756507097846463230323032300953746F7056616C756507097846 - 463430343034300754726967676572061049734D6F7573654F7665723D747275 - 650E54726967676572496E7665727365061149734D6F7573654F7665723D6661 - 6C736500000A5452656374616E676C6500095374796C654E616D650609636865 - 636B6D61726B05416C69676E0708436F6E74656E747307436F726E6572730B08 - 546F7052696768740B426F74746F6D5269676874000A46696C6C2E436F6C6F72 - 0709784646324138324532064C6F636B656409074869745465737408074F7061 - 6369747905000000000000000000000C4D617267696E732E4C65667405000000 - 0000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D - 617267696E732E5269676874050000000000000080FF3F0E4D617267696E732E - 426F74746F6D050000000000000080FF3F0A53697A652E576964746805000000 - 00005655F705400B53697A652E48656967687405000000000000008001401453 - 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 - 07044E6F6E650758526164697573050000000000000080004007595261646975 - 730500000000000000800040000F54466C6F6174416E696D6174696F6E000953 - 74796C654E616D65061A636865636B6D61726B4F706163697479416E696D6174 - 696F6E31084475726174696F6E05000000000000000000000C50726F70657274 - 794E616D6506074F7061636974790A537461727456616C756505000000000000 - 000000000953746F7056616C7565050000000000000080FF3F07547269676765 - 72060E4973436865636B65643D747275650E54726967676572496E7665727365 - 060F4973436865636B65643D66616C7365000000000005545465787400095374 - 796C654E616D6506047465787405416C69676E0706436C69656E74064C6F636B - 6564090748697454657374080A53697A652E57696474680500000000005655FB - 05400B53697A652E48656967687405000000000000008804401453697A652E50 - 6C6174666F726D44656661756C74080454657874060454657874165465787453 - 657474696E67732E466F6E74436F6C6F720708636C6157686974650000005450 - 463007544C61796F757400095374796C654E616D65061470726F677265737362 - 61726D696E697374796C6505416C69676E070643656E7465720A53697A652E57 - 6964746805000000000033338505400B53697A652E4865696768740500000000 - 009999E104401453697A652E506C6174666F726D44656661756C740807566973 - 69626C6508085461624F72646572022E000A5452656374616E676C6500095374 - 796C654E616D65060668747261636B05416C69676E0708436F6E74656E74730A - 46696C6C2E436F6C6F720709784646343034303430064C6F636B656409074869 - 7454657374080A53697A652E576964746805000000000033338505400B53697A - 652E4865696768740500000000009999E104401453697A652E506C6174666F72 - 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650758526164 - 6975730500000000000000800040075952616469757305000000000000008000 - 40000A5452656374616E676C6500095374796C654E616D65060A68696E646963 - 61746F7205416C69676E07044C6566740A46696C6C2E436F6C6F720709784646 - 324138324532064C6F636B6564090748697454657374080A53697A652E576964 - 74680500000000000000C804400B53697A652E48656967687405000000000099 - 99E104401453697A652E506C6174666F726D44656661756C74080B5374726F6B - 652E4B696E6407044E6F6E650758526164697573050000000000000080004007 - 5952616469757305000000000000008000400000000A5452656374616E676C65 - 00095374796C654E616D65060676747261636B05416C69676E0708436F6E7465 - 6E74730A46696C6C2E436F6C6F720709784646343034303430064C6F636B6564 - 090748697454657374080A53697A652E57696474680500000000003333850540 - 0B53697A652E4865696768740500000000009999E104401453697A652E506C61 - 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6507 - 5852616469757305000000000000008000400759526164697573050000000000 - 0000800040000A5452656374616E676C6500095374796C654E616D65060A7669 - 6E64696361746F7205416C69676E0706426F74746F6D0A46696C6C2E436F6C6F - 720709784646324138324532064C6F636B6564090748697454657374080A506F - 736974696F6E2E5905000000000099998D04400A53697A652E57696474680500 - 0000000033338505400B53697A652E4865696768740500000000000000A80340 - 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 - 6E6407044E6F6E65075852616469757305000000000000008000400759526164 - 6975730500000000000000800040000000005450463007544C61796F75740009 - 5374796C654E616D65060E636F6D626F656469747374796C6505416C69676E07 - 0643656E7465720A53697A652E57696474680500000000000000C805400B5369 - 7A652E4865696768740500000000000000C803401453697A652E506C6174666F - 726D44656661756C74080756697369626C6508085461624F726465720230000C - 5442727573684F626A65637400095374796C654E616D65060A666F726567726F - 756E6400000B54466F6E744F626A65637400095374796C654E616D650604666F - 6E7409466F6E742E53697A650500000000000000D00240000007544C61796F75 - 7400095374796C654E616D65060A6261636B67726F756E6405416C69676E0708 - 436F6E74656E74730A53697A652E57696474680500000000000000C805400B53 - 697A652E4865696768740500000000000000C803401453697A652E506C617466 - 6F726D44656661756C7408000A5452656374616E676C6500095374796C654E61 - 6D65060A52656374616E676C653105416C69676E0706436C69656E740A46696C - 6C2E436F6C6F7207097846463230323032300748697454657374080A53697A65 - 2E57696474680500000000000000C805400B53697A652E486569676874050000 - 0000000000C803401453697A652E506C6174666F726D44656661756C74080C53 - 74726F6B652E436F6C6F72070978464632303230323007585261646975730500 - 000000000000C0004007595261646975730500000000000000C00040000F5443 - 6F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F7241 - 6E696D6174696F6E315374796C65084475726174696F6E050000000000000000 - 000007496E7665727365090C50726F70657274794E616D65060C5374726F6B65 - 2E436F6C6F720A537461727456616C756507097846463230323032300953746F - 7056616C756507097846463430343034300754726967676572062049734D6F75 - 73654F7665723D747275653B4973466F63757365643D66616C73650E54726967 - 676572496E7665727365062149734D6F7573654F7665723D66616C73653B4973 - 466F63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E00 - 095374796C654E616D650614436F6C6F72416E696D6174696F6E325374796C65 - 084475726174696F6E050000000000000000000007496E7665727365090C5072 - 6F70657274794E616D65060C5374726F6B652E436F6C6F720A53746172745661 - 6C756507097846463430343034300953746F7056616C75650709784646324138 - 3245320754726967676572061F49734D6F7573654F7665723D747275653B4973 - 466F63757365643D747275650E54726967676572496E7665727365062049734D - 6F7573654F7665723D747275653B4973466F63757365643D66616C7365000007 - 544C61796F757400095374796C654E616D6506056172726F7705416C69676E07 - 0846697452696768740B4D617267696E732E546F70050000000000000080FF3F - 0D4D617267696E732E5269676874050000000000000080FF3F0E4D617267696E - 732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E580500 - 000000005ED99705400A506F736974696F6E2E59050000000000000080FF3F0A - 53697A652E5769647468050000000000889AB803400B53697A652E4865696768 - 740500000000000000B803401453697A652E506C6174666F726D44656661756C - 7408000A5452656374616E676C6500095374796C654E616D65060A5265637461 - 6E676C653105416C69676E0708436F6E74656E747307436F726E6572730B0854 - 6F7052696768740B426F74746F6D5269676874000A46696C6C2E436F6C6F7207 - 097846463330333033300748697454657374080A53697A652E57696474680500 - 00000000889AB803400B53697A652E4865696768740500000000000000B80340 - 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 - 6E6407044E6F6E6507585261646975730500000000000000C000400759526164 - 6975730500000000000000C00040000F54436F6C6F72416E696D6174696F6E00 - 095374796C654E616D650614436F6C6F72416E696D6174696F6E315374796C65 - 084475726174696F6E050000000000000000000007496E7665727365090C5072 - 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 - 6507097846463330333033300953746F7056616C756507097846463430343034 - 300754726967676572062049734D6F7573654F7665723D747275653B4973466F - 63757365643D66616C73650E54726967676572496E7665727365062149734D6F - 7573654F7665723D66616C73653B4973466F63757365643D66616C736500000F - 54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F - 72416E696D6174696F6E325374796C65084475726174696F6E05000000000000 - 000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 - 61727456616C756507097846463430343034300953746F7056616C7565070978 - 46463137353739430754726967676572061F4973466F63757365643D74727565 - 3B49734D6F7573654F7665723D7472756500000007544C61796F757400095374 - 796C654E616D6506074C61796F75743105416C69676E070643656E7465720C4D - 617267696E732E4C656674050000000000000080FF3F0A53697A652E57696474 - 680500000000000000A002400B53697A652E4865696768740500000000000000 - C001401453697A652E506C6174666F726D44656661756C740800055450617468 - 00095374796C654E616D650605506174683105416C69676E0706436C69656E74 - 09446174612E506174680A3400000004000000000000000000C8420000C84201 - 000000000096430000C842010000000000484300009643030000000000C84200 - 00C8420A46696C6C2E436F6C6F720708636C6157686974650748697454657374 - 080A53697A652E57696474680500000000000000A002400B53697A652E486569 - 6768740500000000000000C001401453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E650000000000000C544272 - 7573684F626A65637400095374796C654E616D65060973656C656374696F6E0B - 42727573682E436F6C6F720709783936324138324532000007544C61796F7574 - 00095374796C654E616D650607636F6E74656E7405416C69676E0706436C6965 - 6E740C4D617267696E732E4C65667405000000000000008000400B4D61726769 + 00000000C0004000075448656164657200095374796C654E616D650606686561 + 6465720553696465730B03546F70044C65667406426F74746F6D055269676874 + 0005416C69676E0703546F700A506F736974696F6E2E58050000000000000080 + 00400A506F736974696F6E2E5905000000000000008000400A53697A652E5769 + 647468050000000000FFFFE105400B53697A652E486569676874050000000000 + 0000A803401453697A652E506C6174666F726D44656661756C7408000007544C + 61796F757400095374796C654E616D650607636F6E74656E7405416C69676E07 + 06436C69656E740C436C69704368696C6472656E090A53697A652E5769647468 + 050000000000FFFFC105400B53697A652E4865696768740500000000000000B4 + 05401453697A652E506C6174666F726D44656661756C7408000A545265637461 + 6E676C6500095374796C654E616D65060973656C656374696F6E0A46696C6C2E + 436F6C6F7207097846463241383245320748697454657374080A53697A652E57 + 696474680500000000000000C804400B53697A652E4865696768740500000000 + 000000C804401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E6507585261646975730500000000000000C000 + 4007595261646975730500000000000000C0004000000A5452656374616E676C + 6500095374796C654E616D650605666F6375730A46696C6C2E436F6C6F720709 + 7841463241383245320748697454657374080C4D617267696E732E4C65667405 + 0000000000000080FF3F0B4D617267696E732E546F70050000000000000080FF + 3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D61726769 + 6E732E426F74746F6D050000000000000080FF3F0A53697A652E576964746805 + 00000000000000C804400B53697A652E4865696768740500000000000000C804 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E6507585261646975730500000000000000C0004007595261 + 646975730500000000000000C000400000000A545363726F6C6C426172000953 + 74796C654E616D65060A767363726F6C6C62617205416C69676E070552696768 + 740B536D616C6C4368616E676505000000000000000000000B4F7269656E7461 + 74696F6E0708566572746963616C0A506F736974696F6E2E58050000000000FF + FFC505400A506F736974696F6E2E590500000000000000B803400A53697A652E + 576964746805000000000000008003400B53697A652E48656967687405000000 + 00000000B405401453697A652E506C6174666F726D44656661756C740800000A + 545363726F6C6C42617200095374796C654E616D65060A687363726F6C6C6261 + 7205416C69676E0706426F74746F6D0B536D616C6C4368616E67650500000000 + 0000000000000B4F7269656E746174696F6E070A486F72697A6F6E74616C0A50 + 6F736974696F6E2E5805000000000000008000400A506F736974696F6E2E5905 + 00000000000000E205400A53697A652E5769647468050000000000FFFFE10540 + 0B53697A652E48656967687405000000000000008003401453697A652E506C61 + 74666F726D44656661756C740800000F54536D616C6C5363726F6C6C42617200 + 095374796C654E616D65060F76736D616C6C7363726F6C6C62617205416C6967 + 6E070552696768740B536D616C6C4368616E676505000000000000000000000B + 4F7269656E746174696F6E0708566572746963616C0C4D617267696E732E4C65 + 667405000000000000008000400A506F736974696F6E2E580500000000000000 + C605400A506F736974696F6E2E5905000000000000008000400A53697A652E57 + 6964746805000000000000008002400B53697A652E4865696768740500000000 + 0000008002401453697A652E506C6174666F726D44656661756C740807566973 + 69626C650800000F54536D616C6C5363726F6C6C42617200095374796C654E61 + 6D65060F68736D616C6C7363726F6C6C62617205416C69676E0706426F74746F + 6D0B536D616C6C4368616E676505000000000000000000000B4F7269656E7461 + 74696F6E070A486F72697A6F6E74616C0B4D617267696E732E546F7005000000 + 000000008000400A506F736974696F6E2E5805000000000000008000400A506F + 736974696F6E2E590500000000000000E205400A53697A652E57696474680500 + 0000000000009606400B53697A652E4865696768740500000000000000800240 + 1453697A652E506C6174666F726D44656661756C74080756697369626C650800 + 0000005450463007544C61796F757400095374796C654E616D65060D67726F75 + 70626F787374796C6505416C69676E070643656E7465720A53697A652E576964 + 74680500000000000000F004400B53697A652E48656967687405000000000000 + 00C804401453697A652E506C6174666F726D44656661756C7408075669736962 + 6C6508085461624F726465720207000A5452656374616E676C6500095374796C + 654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74 + 730946696C6C2E4B696E6407044E6F6E650748697454657374080C4D61726769 + 6E732E4C6566740500000000000000C000400B4D617267696E732E546F700500 + 0000000000009002400D4D617267696E732E52696768740500000000000000C0 + 00400E4D617267696E732E426F74746F6D0500000000000000C000400A53697A + 652E57696474680500000000000000D804400B53697A652E4865696768740500 + 0000000000009804401453697A652E506C6174666F726D44656661756C74080C + 5374726F6B652E436F6C6F720709784646313531353135075852616469757305 + 00000000000000C0004007595261646975730500000000000000C00040000554 + 5465787400095374796C654E616D65060474657874084175746F53697A65090A + 436C6970506172656E74090748697454657374080C4D617267696E732E4C6566 + 740500000000000000A002400A506F736974696F6E2E58050000000000605595 + 02400A506F736974696F6E2E590500000000004055D501C00A53697A652E5769 + 64746805000000000000B8C703400B53697A652E486569676874050000000000 + 0060FF02401453697A652E506C6174666F726D44656661756C74081654657874 + 53657474696E67732E466F6E74436F6C6F720708636C61576869746515546578 + 7453657474696E67732E576F72645772617008000000005450463007544C6179 + 6F757400095374796C654E616D65060F6865616465726974656D7374796C6505 + 416C69676E070643656E7465720A53697A652E57696474680500000000000000 + 9205400B53697A652E4865696768740500000000000000D003401453697A652E + 506C6174666F726D44656661756C74080756697369626C6508085461624F7264 + 65720208000A5452656374616E676C6500095374796C654E616D65060A626163 + 6B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C + 6F720709784646344334433443064C6F636B6564090748697454657374080A53 + 697A652E576964746805000000000000009205400B53697A652E486569676874 + 0500000000000000D003401453697A652E506C6174666F726D44656661756C74 + 080C5374726F6B652E436F6C6F72070978464631353135313507585261646975 + 730500000000000000C0004007595261646975730500000000000000C0004000 + 0F54436F6C6F72416E696D6174696F6E00095374796C654E616D650615686561 + 646572436F6C6F72416E696D6174696F6E31084475726174696F6E0500000000 + 0000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A + 537461727456616C756507097846463443344334430953746F7056616C756507 + 097846463241383245320754726967676572060E4973507265737365643D7472 + 75650E54726967676572496E7665727365060F4973507265737365643D66616C + 736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 166865616465725374726F6B65416E696D6174696F6E31084475726174696F6E + 05000000000000000000000C50726F70657274794E616D65060C5374726F6B65 + 2E436F6C6F720A537461727456616C756507097846463135313531350953746F + 7056616C756507097846463241383245320754726967676572060E4973507265 + 737365643D747275650E54726967676572496E7665727365060F497350726573 + 7365643D66616C736500000005545465787400095374796C654E616D65060474 + 65787405416C69676E0706436C69656E74064C6F636B65640907486974546573 + 74080C4D617267696E732E4C6566740500000000000000A001400B4D61726769 6E732E546F7005000000000000008000400D4D617267696E732E526967687405 - 00000000000000F003400E4D617267696E732E426F74746F6D05000000000000 - 008000400A53697A652E576964746805000000000000008805400B53697A652E - 4865696768740500000000000000A803401453697A652E506C6174666F726D44 - 656661756C74080000005450463007544C61796F757400095374796C654E616D - 650613657870616E646572627574746F6E7374796C6505416C69676E07064365 - 6E7465720B4D617267696E732E546F70050000000000000080FF3F0A53697A65 - 2E57696474680500000000000000B003400B53697A652E486569676874050000 - 0000000000B003401453697A652E506C6174666F726D44656661756C74080756 - 697369626C6508085461624F7264657202330005545061746800095374796C65 - 4E616D650605506174683105416C69676E070643656E74657209446174612E50 - 6174680A3400000004000000000000000000C8420000C8420100000000009643 - 0000C842010000000000484300009643030000000000C8420000C8420A46696C - 6C2E436F6C6F720708636C6157686974650748697454657374080D526F746174 - 696F6E416E676C650500000000000000B405400A53697A652E57696474680500 - 000000000000A002400B53697A652E4865696768740500000000000000C00140 - 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 - 6E6407044E6F6E65000F54466C6F6174416E696D6174696F6E00095374796C65 - 4E616D650614466C6F6174416E696D6174696F6E315374796C65084475726174 - 696F6E050000000000CDCCCCFB3F0D496E746572706F6C6174696F6E07084369 - 7263756C61720C50726F70657274794E616D65060D526F746174696F6E416E67 - 6C650A537461727456616C75650500000000000000B405400953746F7056616C - 756505000000000000000000000754726967676572060F4973457870616E6465 - 643D747275650E54726967676572496E766572736506104973457870616E6465 - 643D66616C7365000000005450463007544C61796F757400095374796C654E61 - 6D650615657870616E646572636865636B626F787374796C6505416C69676E07 - 0643656E7465720A53697A652E576964746805000000000000008406400B5369 - 7A652E48656967687405000000000000008404401453697A652E506C6174666F - 726D44656661756C74080756697369626C6508085461624F7264657202360007 - 544C61796F75740005416C69676E07044C6566740A53697A652E576964746805 - 00000000000000C003400B53697A652E48656967687405000000000000008404 - 401453697A652E506C6174666F726D44656661756C7408000554506174680005 - 416C69676E0706436C69656E7409446174612E506174680AD801000027000000 - 00000000FEC8BA4402E79244020000002592AD4402E79244020000006D5BA544 - FEB09E44020000006D5BA544FEB09E440200000093A4A4446A0C9F4402000000 - 4A80AC44FC79AA4402000000046EBA44FC79AA44020000004A00C844FC79AA44 - 020000000080CF44FEB09E44020000000080CF44FEB09E44020000000080CF44 - FEB09E44020000004C5BC84402E7924402000000FEC8BA4402E7924400000000 - FE88BA44FE30974402000000B876BF44FE309744020000000277C344EEA09A44 - 020000000277C34404DE9E44020000000277C344121BA34402000000B876BF44 - 008CA64402000000FE88BA44008CA644020000004C9BB544008CA64402000000 - 009CB144121BA34402000000009CB14404DE9E4402000000009CB144EEA09A44 - 020000004C9BB544FE30974402000000FE88BA44FE309744000000000080BA44 - 045E9B4402000000146EB844045E9B440200000000C0B64454F79C4402000000 - 00C0B64400F09E440200000000C0B644ACE8A04402000000146EB844FC81A244 - 020000000080BA44FC81A24402000000EC91BC44FC81A244020000000040BE44 - ACE8A044020000000040BE4400F09E44020000000040BE4454F79C4402000000 - EC91BC44045E9B44020000000080BA44045E9B440A46696C6C2E436F6C6F7207 - 097836303030303030300748697454657374080C4D617267696E732E4C656674 - 05000000000000008000400B4D617267696E732E546F70050000000000000080 - 00400D4D617267696E732E526967687405000000000000008000400E4D617267 - 696E732E426F74746F6D05000000000000008000400A53697A652E5769647468 - 0500000000000000A003400B53697A652E4865696768740500000000000000E8 + 00000000000000A001400E4D617267696E732E426F74746F6D05000000000000 + 008000400A53697A652E57696474680500000000000000FC04400B53697A652E + 4865696768740500000000000000B003401453697A652E506C6174666F726D44 + 656661756C7408165465787453657474696E67732E466F6E74436F6C6F720708 + 636C6157686974650000005450463007544C61796F757400095374796C654E61 + 6D65060E696D61676563656C6C7374796C6505416C69676E070643656E746572 + 0756697369626C6508085461624F726465720209000654496D61676500095374 + 796C654E616D650605696D6167650E4D756C74695265734269746D61700E0100 + 0005416C69676E0706436C69656E74064C6F636B656409074869745465737408 + 0C4D617267696E732E4C656674050000000000000080FF3F0B4D617267696E73 + 2E546F70050000000000000080FF3F0D4D617267696E732E5269676874050000 + 000000000080FF3F0E4D617267696E732E426F74746F6D050000000000000080 + FF3F0A53697A652E57696474680500000000000000C004400B53697A652E4865 + 696768740500000000000000C004401453697A652E506C6174666F726D446566 + 61756C74080000005450463007544C61796F757400095374796C654E616D6506 + 0A6C6162656C7374796C6505416C69676E070643656E7465720A53697A652E57 + 696474680500000000000000C805400B53697A652E4865696768740500000000 + 000000C803401453697A652E506C6174666F726D44656661756C740807566973 + 69626C6508085461624F72646572020A0005545465787400095374796C654E61 + 6D6506047465787405416C69676E0708436F6E74656E74730748697454657374 + 080A53697A652E57696474680500000000000000C805400B53697A652E486569 + 6768740500000000000000C803401453697A652E506C6174666F726D44656661 + 756C7408165465787453657474696E67732E466F6E74436F6C6F720708636C61 + 57686974650000005450463007544C61796F757400095374796C654E616D6506 + 0D6C697374626F78666F6F74657205416C69676E070643656E7465720A53697A + 652E576964746805000000000000009205400B53697A652E4865696768740500 + 000000000000D003401453697A652E506C6174666F726D44656661756C740807 + 56697369626C6508085461624F72646572020B0005545465787400095374796C + 654E616D6506047465787405416C69676E0706436C69656E74064C6F636B6564 + 090748697454657374080C4D617267696E732E4C6566740500000000000000A0 + 01400B4D617267696E732E546F7005000000000000008000400D4D617267696E + 732E52696768740500000000000000A001400E4D617267696E732E426F74746F + 6D05000000000000008000400A53697A652E57696474680500000000000000FC + 04400B53697A652E4865696768740500000000000000B003401453697A652E50 + 6C6174666F726D44656661756C7408165465787453657474696E67732E466F6E + 74436F6C6F720708636C6157686974650000005450463007544C61796F757400 + 095374796C654E616D6506106C697374626F786974656D7374796C6505416C69 + 676E070643656E7465720A53697A652E57696474680500000000000000D60540 + 0B53697A652E4865696768740500000000000000C003401453697A652E506C61 + 74666F726D44656661756C74080756697369626C6508085461624F7264657202 + 0C000654476C79706800095374796C654E616D65060A676C7970687374796C65 + 0C4D617267696E732E4C65667405000000000000008000400B4D617267696E73 + 2E546F70050000000000000080FF3F0D4D617267696E732E5269676874050000 + 00000000008000400E4D617267696E732E426F74746F6D050000000000000080 + FF3F05416C69676E07044C6566740A506F736974696F6E2E5805000000000000 + 008000400A506F736974696F6E2E59050000000000000080FF3F0A53697A652E + 576964746805000000000000008003400B53697A652E48656967687405000000 + 00000000B003401453697A652E506C6174666F726D44656661756C7408000005 + 545465787400095374796C654E616D6506047465787405416C69676E0706436C + 69656E740748697454657374080C4D617267696E732E4C656674050000000000 + 0000C000400B4D617267696E732E546F70050000000000000080FF3F0D4D6172 + 67696E732E52696768740500000000000000C000400E4D617267696E732E426F + 74746F6D050000000000000080FF3F0A53697A652E5769647468050000000000 + 0000CA05400B53697A652E4865696768740500000000000000B003401453697A + 652E506C6174666F726D44656661756C7408165465787453657474696E67732E + 466F6E74436F6C6F720708636C615768697465155465787453657474696E6773 + 2E576F72645772617008165465787453657474696E67732E486F727A416C6967 + 6E07074C656164696E6700000954436865636B426F7800095374796C654E616D + 650605636865636B05416C69676E07084D6F73744C6566740843616E466F6375 + 73081244697361626C65466F637573456666656374090A53697A652E57696474 + 680500000000000000A003400B53697A652E4865696768740500000000000000 + C003401453697A652E506C6174666F726D44656661756C74080756697369626C + 65080000005450463007544C61796F757400095374796C654E616D6506126C69 + 7374626F78706C61696E68656164657205416C69676E070643656E7465720A53 + 697A652E576964746805000000000000009205400B53697A652E486569676874 + 0500000000000000D003401453697A652E506C6174666F726D44656661756C74 + 080756697369626C6508085461624F72646572020D000A5452656374616E676C + 6500095374796C654E616D65060A6261636B67726F756E6405416C69676E0708 + 436F6E74656E74730A46696C6C2E436F6C6F720709784646324432443244064C + 6F636B6564090748697454657374080A53697A652E5769647468050000000000 + 00009205400B53697A652E4865696768740500000000000000D003401453697A + 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 + 0978464631353135313507585261646975730500000000000000C00040075952 + 61646975730500000000000000C00040000005545465787400095374796C654E + 616D6506047465787405416C69676E0706436C69656E74064C6F636B65640907 + 48697454657374080C4D617267696E732E4C6566740500000000000000A00140 + 0B4D617267696E732E546F7005000000000000008000400D4D617267696E732E + 52696768740500000000000000A001400E4D617267696E732E426F74746F6D05 + 000000000000008000400A53697A652E57696474680500000000000000FC0440 + 0B53697A652E4865696768740500000000000000B003401453697A652E506C61 + 74666F726D44656661756C7408165465787453657474696E67732E466F6E7443 + 6F6C6F720708636C6157686974650000005450463007544C61796F7574000953 + 74796C654E616D65060C6C697374626F787374796C6505416C69676E07064365 + 6E7465720A53697A652E5769647468050000000000FFFFE905400B53697A652E + 48656967687405000000000000008306401453697A652E506C6174666F726D44 + 656661756C74080756697369626C6508085461624F72646572020E000C544272 + 7573684F626A65637400095374796C654E616D650618416C7465726E6174696E + 67526F774261636B67726F756E640B42727573682E436F6C6F72070978464632 + 433243324300000A5452656374616E676C6500095374796C654E616D65060A62 + 61636B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E43 + 6F6C6F720709784646323032303230064C6F636B656409074869745465737408 + 0C50616464696E672E4C65667405000000000000008000400B50616464696E67 + 2E546F7005000000000000008000400D50616464696E672E5269676874050000 + 00000000008000400E50616464696E672E426F74746F6D050000000000000080 + 00400A53697A652E5769647468050000000000FFFFE905400B53697A652E4865 + 6967687405000000000000008306401453697A652E506C6174666F726D446566 + 61756C74080C5374726F6B652E436F6C6F720709784646313531353135075852 + 61646975730500000000000000C0004007595261646975730500000000000000 + C000400007544C61796F757400095374796C654E616D650607636F6E74656E74 + 05416C69676E0706436C69656E740C436C69704368696C6472656E090A53697A + 652E5769647468050000000000FFFFC105400B53697A652E4865696768740500 + 000000000000DE05401453697A652E506C6174666F726D44656661756C740800 + 0A5452656374616E676C6500095374796C654E616D65060973656C656374696F + 6E0A46696C6C2E436F6C6F720709784646324138324532074869745465737408 + 0A53697A652E57696474680500000000000000C804400B53697A652E48656967 + 68740500000000000000C804401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E650758526164697573050000 + 0000000000C0004007595261646975730500000000000000C0004000000A5452 + 656374616E676C6500095374796C654E616D650610666F637573656473656C65 + 6374696F6E0A46696C6C2E436F6C6F7207097846463241383245320748697454 + 657374080A53697A652E57696474680500000000000000C804400B53697A652E + 4865696768740500000000000000C804401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E650B5374726F6B65 + 2E446173680703446F7407585261646975730500000000000000C00040075952 + 61646975730500000000000000C000400000000A545363726F6C6C4261720009 + 5374796C654E616D65060A767363726F6C6C62617205416C69676E0705526967 + 68740B536D616C6C4368616E676505000000000000000000000B4F7269656E74 + 6174696F6E0708566572746963616C0A506F736974696F6E2E58050000000000 + FFFFC505400A506F736974696F6E2E5905000000000000008000400A53697A65 + 2E576964746805000000000000008003400B53697A652E486569676874050000 + 0000000000DE05401453697A652E506C6174666F726D44656661756C74080000 + 0A545363726F6C6C42617200095374796C654E616D65060A687363726F6C6C62 + 617205416C69676E0706426F74746F6D0B536D616C6C4368616E676505000000 + 000000000000000B4F7269656E746174696F6E070A486F72697A6F6E74616C0A + 506F736974696F6E2E5805000000000000008000400A506F736974696F6E2E59 + 0500000000000000E205400A53697A652E5769647468050000000000FFFFE105 + 400B53697A652E48656967687405000000000000008003401453697A652E506C + 6174666F726D44656661756C740800000F54536D616C6C5363726F6C6C426172 + 00095374796C654E616D65060F76736D616C6C7363726F6C6C62617205416C69 + 676E070552696768740B536D616C6C4368616E67650500000000000000000000 + 0B4F7269656E746174696F6E0708566572746963616C0C4D617267696E732E4C + 65667405000000000000008000400A506F736974696F6E2E5805000000000000 + 00C605400A506F736974696F6E2E5905000000000000008000400A53697A652E + 576964746805000000000000008002400B53697A652E48656967687405000000 + 000000008002401453697A652E506C6174666F726D44656661756C7408075669 + 7369626C650800000F54536D616C6C5363726F6C6C42617200095374796C654E + 616D65060F68736D616C6C7363726F6C6C62617205416C69676E0706426F7474 + 6F6D0B536D616C6C4368616E676505000000000000000000000B4F7269656E74 + 6174696F6E070A486F72697A6F6E74616C0B4D617267696E732E546F70050000 + 00000000008000400A506F736974696F6E2E5805000000000000008000400A50 + 6F736974696F6E2E590500000000000000E205400A53697A652E576964746805 + 000000000000009606400B53697A652E48656967687405000000000000008002 + 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 + 000000005450463007544C61796F757400095374796C654E616D65060E706F70 + 757063656C6C7374796C6505416C69676E070643656E7465720756697369626C + 6508085461624F72646572020F0007544C61796F75740005416C69676E070552 + 696768740A506F736974696F6E2E5805000000000000008C04400A53697A652E + 57696474680500000000000000F002400B53697A652E48656967687405000000 + 00000000C804401453697A652E506C6174666F726D44656661756C7408000554 + 506174680005416C69676E070643656E74657209446174612E506174680A4000 + 00000500000000000000000000000000803F010000000000803F0000803F0100 + 00000000003F0000000001000000000000000000803F03000000000000000000 + 00000A46696C6C2E436F6C6F720708636C615768697465074869745465737408 + 0B4D617267696E732E546F700500000000000000E001C00A53697A652E576964 + 746805000000000000008002400B53697A652E48656967687405000000000000 + 008001401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E6500000554506174680005416C69676E070643656E + 74657209446174612E506174680A340000000400000000000000000000000000 + 0000010000000000803F00000000010000000000003F0000803F030000000000 + 0000000000000A46696C6C2E436F6C6F720708636C6157686974650748697454 + 657374080B4D617267696E732E546F700500000000000000C001400A53697A65 + 2E576964746805000000000000008002400B53697A652E486569676874050000 + 00000000008001401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E6500000005545465787400095374796C65 + 4E616D6506047465787405416C69676E0706436C69656E74064C6F636B656409 + 0748697454657374080C4D617267696E732E4C6566740500000000000000A001 + 400B4D617267696E732E546F7005000000000000008000400D4D617267696E73 + 2E52696768740500000000000000A001400E4D617267696E732E426F74746F6D + 05000000000000008000400A53697A652E57696474680500000000000000C803 + 400B53697A652E4865696768740500000000000000B804401453697A652E506C + 6174666F726D44656661756C7408165465787453657474696E67732E466F6E74 + 436F6C6F720708636C6157686974650000005450463007544C61796F75740009 + 5374796C654E616D65061070726F67726573736261727374796C6505416C6967 + 6E070643656E7465720A53697A652E576964746805000000000033338505400B + 53697A652E4865696768740500000000009999E104401453697A652E506C6174 + 666F726D44656661756C74080756697369626C6508085461624F726465720210 + 000A5452656374616E676C6500095374796C654E616D65060668747261636B05 + 416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978464632 + 3032303230064C6F636B6564090748697454657374080A53697A652E57696474 + 6805000000000033338505400B53697A652E4865696768740500000000009999 + E104401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 + 2E436F6C6F720709784646313531353135075852616469757305000000000000 + 00C0004007595261646975730500000000000000C00040000A5452656374616E + 676C6500095374796C654E616D65060A68696E64696361746F7205416C69676E + 07044C6566740A46696C6C2E436F6C6F720709784646324138324532064C6F63 + 6B6564090748697454657374080C4D617267696E732E4C656674050000000000 + 000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D6172 + 67696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F + 74746F6D050000000000000080FF3F0A506F736974696F6E2E58050000000000 + 000080FF3F0A506F736974696F6E2E59050000000000000080FF3F0A53697A65 + 2E57696474680500000000000000C804400B53697A652E486569676874050000 + 0000009999D904401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E6507585261646975730500000000000000 + C0004007595261646975730500000000000000C000400000000A545265637461 + 6E676C6500095374796C654E616D65060676747261636B05416C69676E070843 + 6F6E74656E74730A46696C6C2E436F6C6F720709784646323032303230064C6F + 636B6564090748697454657374080A53697A652E576964746805000000000033 + 338505400B53697A652E4865696768740500000000009999E104401453697A65 + 2E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709 + 78464631353135313507585261646975730500000000000000C0004007595261 + 646975730500000000000000C00040000A5452656374616E676C650009537479 + 6C654E616D65060A76696E64696361746F7205416C69676E0706426F74746F6D + 0A46696C6C2E436F6C6F720709784646324138324532064C6F636B6564090748 + 697454657374080C4D617267696E732E4C656674050000000000000080FF3F0B + 4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E52 + 69676874050000000000000080FF3F0E4D617267696E732E426F74746F6D0500 + 00000000000080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A + 506F736974696F6E2E5905000000000099998904400A53697A652E5769647468 + 05000000000033338105400B53697A652E4865696768740500000000000000A8 03401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E - 4B696E6407044E6F6E6508577261704D6F64650703466974000F54436F6C6F72 - 416E696D6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50 - 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C - 756507097836303030303030300953746F7056616C75650708636C61426C6163 - 6B0754726967676572060E4973436865636B65643D7472756500000F54436F6C - 6F72416E696D6174696F6E00084475726174696F6E050000000000CDCCCCFB3F - 0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456 - 616C75650708636C61426C61636B0953746F7056616C75650709783630303030 - 3030300754726967676572060F4973436865636B65643D66616C736500000000 - 05545465787400095374796C654E616D6506047465787405416C69676E070643 - 6C69656E74064C6F636B6564090748697454657374080C4D617267696E732E4C - 65667405000000000000008002400B4D617267696E732E546F70050000000000 - 00008000400D4D617267696E732E5269676874050000000000000080FF3F0A53 - 697A652E57696474680500000000000000C605400B53697A652E486569676874 - 0500000000000000F803401453697A652E506C6174666F726D44656661756C74 - 08165465787453657474696E67732E466F6E74436F6C6F720709784646454545 - 454545165465787453657474696E67732E486F727A416C69676E07074C656164 - 696E670000005450463007544C61796F757400095374796C654E616D65060D65 - 7870616E6465727374796C6505416C69676E070643656E7465720A53697A652E - 576964746805000000000000C08607400B53697A652E48656967687405000000 - 00000000CE05401453697A652E506C6174666F726D44656661756C7408075669 - 7369626C6508085461624F726465720239000A5452656374616E676C65000953 - 74796C654E616D65060B626772656374616E676C6505416C69676E0708436F6E - 74656E74730A46696C6C2E436F6C6F720709784646324432443244064C6F636B - 6564090748697454657374080A53697A652E576964746805000000000000C086 - 07400B53697A652E4865696768740500000000000000CE05401453697A652E50 - 6C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846 - 4631353135313507585261646975730500000000000000C00040075952616469 - 75730500000000000000C000400007544C61796F757400095374796C654E616D - 6506074C61796F75743305416C69676E0703546F700A53697A652E5769647468 - 05000000000000C08607400B53697A652E4865696768740500000000000000C8 - 03401453697A652E506C6174666F726D44656661756C74080007544C61796F75 - 7400095374796C654E616D6506074C61796F75743405416C69676E0708436F6E - 74656E74730A53697A652E576964746805000000000000C08607400B53697A65 - 2E4865696768740500000000000000C803401453697A652E506C6174666F726D - 44656661756C7408000A5452656374616E676C6500095374796C654E616D6506 - 0A52656374616E676C653205416C69676E0708436F6E74656E747307436F726E - 6572730B07546F704C65667408546F705269676874000A46696C6C2E436F6C6F - 720709784646323532353235064C6F636B6564090748697454657374080A5369 - 7A652E576964746805000000000000C08607400B53697A652E48656967687405 - 00000000000000C803401453697A652E506C6174666F726D44656661756C7408 + 4B696E6407044E6F6E6507585261646975730500000000000000C00040075952 + 61646975730500000000000000C00040000000005450463007544C61796F7574 + 00095374796C654E616D65061170726F677265737363656C6C7374796C650541 + 6C69676E070643656E7465720A53697A652E57696474680500000000000000F8 + 05400B53697A652E4865696768740500000000000000FC05401453697A652E50 + 6C6174666F726D44656661756C74080756697369626C6508085461624F726465 + 7202110007544C61796F757400095374796C654E616D65060668747261636B05 + 416C69676E0708436F6E74656E7473064C6F636B6564090C4D617267696E732E + 4C65667405000000000000008000400B4D617267696E732E546F700500000000 + 0000008000400D4D617267696E732E526967687405000000000000008000400E + 4D617267696E732E426F74746F6D05000000000000008000400A53697A652E57 + 696474680500000000000000F005400B53697A652E4865696768740500000000 + 000000F405401453697A652E506C6174666F726D44656661756C7408000A5452 + 656374616E676C6500095374796C654E616D65060A68696E64696361746F7205 + 416C69676E07044C6566740A46696C6C2E436F6C6F7207097846463241383245 + 32064C6F636B6564090748697454657374080C4D617267696E732E4C65667405 + 000000000000008000400B4D617267696E732E546F7005000000000000008000 + 400D4D617267696E732E526967687405000000000000008000400E4D61726769 + 6E732E426F74746F6D05000000000000008000400A506F736974696F6E2E5805 + 000000000000008000400A506F736974696F6E2E590500000000000000800040 + 0A53697A652E57696474680500000000000000C804400B53697A652E48656967 + 68740500000000000000EC05401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E650758526164697573050000 + 0000000000C0004007595261646975730500000000000000C000400000000054 + 5046300A5452656374616E676C6500095374796C654E616D6506147363726F6C + 6C62617268747261636B7374796C6505416C69676E070643656E7465720A4669 + 6C6C2E436F6C6F7207097846463135313531350748697454657374080A53697A + 652E57696474680500000000000000C804400B53697A652E4865696768740500 + 000000000000C804401453697A652E506C6174666F726D44656661756C74080B + 5374726F6B652E4B696E6407044E6F6E650756697369626C6508000654546875 + 6D6200095374796C654E616D6506057468756D62064C6F636B6564090A53697A + 652E576964746805000000000000008003400B53697A652E4865696768740500 + 000000000000C804401453697A652E506C6174666F726D44656661756C74080B + 5374796C654C6F6F6B7570060A7468756D627374796C65000000545046300754 + 4C61796F757400095374796C654E616D65060E7363726F6C6C6261727374796C + 6505416C69676E070643656E7465720756697369626C6508085461624F726465 + 720212000754427574746F6E00095374796C654E616D65060A6C656674627574 + 746F6E05416C69676E07044C656674064C6F636B6564090A506F736974696F6E + 2E5905000000000000008003400A53697A652E57696474680500000000000000 + 8003400B53697A652E48656967687405000000000000009003401453697A652E + 506C6174666F726D44656661756C74080B5374796C654C6F6F6B757006137363 + 726F6C6C6261726C656674627574746F6E00000754427574746F6E0009537479 + 6C654E616D65060B7269676874627574746F6E05416C69676E07055269676874 + 064C6F636B6564090A506F736974696F6E2E5805000000000000008804400A50 + 6F736974696F6E2E5905000000000000008003400A53697A652E576964746805 + 000000000000008003400B53697A652E48656967687405000000000000009003 + 401453697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F + 6B757006147363726F6C6C6261727269676874627574746F6E00000754427574 + 746F6E00095374796C654E616D65060C626F74746F6D627574746F6E05416C69 + 676E0706426F74746F6D064C6F636B6564090A506F736974696F6E2E59050000 + 00000000008804400A53697A652E57696474680500000000000000C804400B53 + 697A652E48656967687405000000000000008003401453697A652E506C617466 + 6F726D44656661756C74080B5374796C654C6F6F6B757006157363726F6C6C62 + 6172626F74746F6D627574746F6E00000654547261636B00095374796C654E61 + 6D65060668747261636B05416C69676E0706436C69656E74064C6F636B656409 + 0B4F7269656E746174696F6E070A486F72697A6F6E74616C0A53697A652E5769 + 64746805000000000000009003400B53697A652E486569676874050000000000 + 00009003401453697A652E506C6174666F726D44656661756C74080B5374796C + 654C6F6F6B757006147363726F6C6C62617268747261636B7374796C65000006 + 54547261636B00095374796C654E616D65060676747261636B05416C69676E07 + 06436C69656E74064C6F636B6564090B4F7269656E746174696F6E070A486F72 + 697A6F6E74616C0A53697A652E576964746805000000000000009003400B5369 + 7A652E48656967687405000000000000009003401453697A652E506C6174666F + 726D44656661756C74080B5374796C654C6F6F6B757006147363726F6C6C6261 + 7276747261636B7374796C6500000754427574746F6E00095374796C654E616D + 650609746F70627574746F6E05416C69676E0703546F700A53697A652E576964 + 74680500000000000000C804400B53697A652E48656967687405000000000000 + 008003401453697A652E506C6174666F726D44656661756C74080B5374796C65 + 4C6F6F6B757006127363726F6C6C626172746F70627574746F6E000000545046 + 300A5452656374616E676C6500095374796C654E616D6506147363726F6C6C62 + 617276747261636B7374796C6505416C69676E070643656E7465720A46696C6C + 2E436F6C6F7207097846463135313531350748697454657374080A53697A652E + 57696474680500000000000000C804400B53697A652E48656967687405000000 + 00000000C804401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E650756697369626C65080006545468756D62 + 00095374796C654E616D6506057468756D62064C6F636B6564090A53697A652E + 57696474680500000000000000C804400B53697A652E48656967687405000000 + 000000008003401453697A652E506C6174666F726D44656661756C74080B5374 + 796C654C6F6F6B7570060A7468756D627374796C650000005450463007544C61 + 796F757400095374796C654E616D65060C7370696E626F787374796C6505416C + 69676E070643656E7465720A53697A652E57696474680500000000006666E005 + 400B53697A652E4865696768740500000000000000C003401453697A652E506C + 6174666F726D44656661756C74080756697369626C6508085461624F72646572 + 0213000A5452656374616E676C6500095374796C654E616D65060A6261636B67 + 726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72 + 07097846463230323032300A53697A652E57696474680500000000006666E005 + 400B53697A652E4865696768740500000000000000C003401453697A652E506C + 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 + 31353135313507585261646975730500000000000000C0004007595261646975 + 730500000000000000C00040000F54436F6C6F72416E696D6174696F6E000953 + 74796C654E616D650614436F6C6F72416E696D6174696F6E315374796C650844 + 75726174696F6E050000000000000000000007496E7665727365090C50726F70 + 657274794E616D65060C5374726F6B652E436F6C6F720A537461727456616C75 + 6507097846463135313531350953746F7056616C756507097846463430343034 + 300754726967676572061049734D6F7573654F7665723D747275650E54726967 + 676572496E7665727365061149734D6F7573654F7665723D66616C7365000000 + 0C5442727573684F626A65637400095374796C654E616D65060A666F72656772 + 6F756E640B42727573682E436F6C6F72070978464645414541454100000C5442 + 727573684F626A65637400095374796C654E616D65060973656C656374696F6E + 0B42727573682E436F6C6F720709783936324138324532000007544C61796F75 + 7400095374796C654E616D650607636F6E74656E7405416C69676E0706436C69 + 656E74064C6F636B6564090C4D617267696E732E4C6566740500000000000000 + 8000400B4D617267696E732E546F7005000000000000008000400D4D61726769 + 6E732E526967687405000000000000008000400E4D617267696E732E426F7474 + 6F6D05000000000000008000400A53697A652E5769647468050000000000E1CC + F004400B53697A652E4865696768740500000000000000A003401453697A652E + 506C6174666F726D44656661756C740800000754427574746F6E00095374796C + 654E616D65060B6D696E7573627574746F6E05416C69676E07044C6566740843 + 616E466F6375730806437572736F72070763724172726F770C4D617267696E73 + 2E4C65667405000000000000008000400B4D617267696E732E546F7005000000 + 000000008000400D4D617267696E732E52696768740500000000000000800040 + 0E4D617267696E732E426F74746F6D05000000000000008000400A506F736974 + 696F6E2E5805000000000000008000400A506F736974696F6E2E590500000000 + 0000008000400A53697A652E5769647468050000000000E6FF9F03400B53697A + 652E4865696768740500000000000000A003401453697A652E506C6174666F72 + 6D44656661756C74080B5374796C654C6F6F6B7570060B627574746F6E737479 + 6C65000554506174680005416C69676E070643656E74657209446174612E5061 + 74680A4000000005000000000000000000803F00000000010000000000803F00 + 00803F01000000000000000000003F010000000000803F000000000300000000 + 00803F000000000A46696C6C2E436F6C6F720708636C61576869746507486974 + 54657374080A53697A652E576964746805000000000098FFFF01400B53697A65 + 2E48656967687405000000000000008002401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000075442 + 7574746F6E00095374796C654E616D65060A706C7573627574746F6E05416C69 + 676E070552696768740843616E466F6375730806437572736F72070763724172 + 726F770C4D617267696E732E4C65667405000000000000008000400B4D617267 + 696E732E546F7005000000000000008000400D4D617267696E732E5269676874 + 05000000000000008000400E4D617267696E732E426F74746F6D050000000000 + 00008000400A506F736974696F6E2E580500000000006A66B405400A506F7369 + 74696F6E2E5905000000000000008000400A53697A652E576964746805000000 + 0000F0FF9F03400B53697A652E4865696768740500000000000000A003401453 + 697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570 + 060B627574746F6E7374796C65000554506174680005416C69676E070643656E + 74657209446174612E506174680A340000000400000000000000000000000000 + 000001000000000000000000803F010000000000803F0000003F030000000000 + 0000000000000A46696C6C2E436F6C6F720708636C6157686974650748697454 + 657374080A53697A652E5769647468050000000000C0FFFF01400B53697A652E + 48656967687405000000000000008002401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000000545046 + 300D545377697463684F626A65637400095374796C654E616D65060B73776974 + 63687374796C6505416C69676E070643656E746572044B696E64070C46616469 + 6E67547261636B730A53697A652E57696474680500000000000000C805400B53 + 697A652E4865696768740500000000000000C803401453697A652E506C617466 + 6F726D44656661756C7408085461624F72646572021412547261636B696E6754 + 68756D625363616C65050000000000000080FF3F0756697369626C65080A4669 + 6C6C2E436F6C6F7207097846463230323032300C46696C6C4F6E2E436F6C6F72 + 07097846463137353739430B46696C6C4F6E2E4B696E640705536F6C69640B53 + 74726F6B652E4B696E6407044E6F6E650B5468756D622E436F6C6F7207097846 + 463430343034300D5468756D624F6E2E436F6C6F720709784646324138324532 + 0C5468756D624F6E2E4B696E640705536F6C6964105468756D625374726F6B65 + 2E4B696E6407044E6F6E650F5468756D625374726F6B652E4361700705526F75 + 6E64105468756D625374726F6B652E446173680706437573746F6D105468756D + 625374726F6B652E4A6F696E0705526F756E64165468756D625374726F6B652E + 437573746F6D446173680A080000000000000000000000055368617065070952 + 6F756E645265637400005450463007544C61796F757400095374796C654E616D + 65060F746162636F6E74726F6C7374796C6505416C69676E070643656E746572 + 0A53697A652E576964746805000000000000008E06400B53697A652E48656967 + 6874050000000000FFFFC905401453697A652E506C6174666F726D4465666175 + 6C74080756697369626C6508085461624F726465720215000A5452656374616E + 676C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E + 0708436F6E74656E747307436F726E6572730B08546F7052696768740A426F74 + 746F6D4C6566740B426F74746F6D5269676874000A46696C6C2E436F6C6F7207 + 09784646333033303330064C6F636B6564090748697454657374080C50616464 + 696E672E4C65667405000000000000008000400B50616464696E672E546F7005 + 000000000000008000400D50616464696E672E52696768740500000000000000 + 8000400E50616464696E672E426F74746F6D05000000000000008000400A5369 + 7A652E576964746805000000000000008E06400B53697A652E48656967687405 + 0000000000FFFFC905401453697A652E506C6174666F726D44656661756C7408 0C5374726F6B652E436F6C6F7207097846463135313531350758526164697573 0500000000000000C0004007595261646975730500000000000000C000400000 - 0A5452656374616E676C6500095374796C654E616D65060A52656374616E676C - 653105416C69676E0708436F6E74656E747307436F726E6572730B07546F704C - 65667408546F705269676874000A46696C6C2E436F6C6F720709784646313531 - 353135064C6F636B6564090748697454657374080A53697A652E576964746805 - 000000000000C08607400B53697A652E4865696768740500000000000000C803 - 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B - 696E6407044E6F6E6507585261646975730500000000000000C0004007595261 - 646975730500000000000000C00040000F54466C6F6174416E696D6174696F6E - 00095374796C654E616D650614466C6F6174416E696D6174696F6E315374796C - 65084475726174696F6E050000000000CDCCCCFB3F0D496E746572706F6C6174 - 696F6E070843697263756C61720C50726F70657274794E616D6506075363616C - 652E580A537461727456616C7565050000000000000080FF3F0953746F705661 - 6C756505000000000000000000000754726967676572060F4973457870616E64 - 65643D747275650E54726967676572496E766572736506104973457870616E64 - 65643D66616C73650000000007544C61796F757400095374796C654E616D6506 - 074C61796F75743305416C69676E0708436F6E74656E74730A53697A652E5769 - 64746805000000000000C08607400B53697A652E486569676874050000000000 - 0000C803401453697A652E506C6174666F726D44656661756C74080005545465 - 787400095374796C654E616D6506047465787405416C69676E07044C65667408 - 4175746F53697A65090A436C6970506172656E7409064C6F636B656409074869 - 7454657374080C4D617267696E732E4C6566740500000000000000A002400A50 - 6F736974696F6E2E580500000000000000A002400A53697A652E576964746805 - 00000000000018D103400B53697A652E4865696768740500000000000060FF02 - 401453697A652E506C6174666F726D44656661756C7408045465787406045465 - 7874165465787453657474696E67732E466F6E74436F6C6F720708636C615768 - 697465165465787453657474696E67732E486F727A416C69676E07074C656164 - 696E670000000F54457870616E646572427574746F6E00095374796C654E616D - 650606627574746F6E05416C69676E07055269676874064C6F636B6564090A50 - 6F736974696F6E2E580500000000000080F906400A53697A652E576964746805 - 00000000000000A003400B53697A652E4865696768740500000000000000C803 - 401453697A652E506C6174666F726D44656661756C7408000000000054504630 - 07544C61796F757400095374796C654E616D650615616E69696E64696361746F - 72686F727A7374796C6505416C69676E070643656E7465720A53697A652E5769 - 6474680500000000000040C006400B53697A652E486569676874050000000000 - 00008000401453697A652E506C6174666F726D44656661756C74080756697369 - 626C6508000A5452656374616E676C6500095374796C654E616D65060A526563 - 74616E676C653105416C69676E0706436C69656E740C436C69704368696C6472 - 656E090A46696C6C2E436F6C6F7207097846463430343034300A53697A652E57 - 696474680500000000000040C006400B53697A652E4865696768740500000000 - 0000008000401453697A652E506C6174666F726D44656661756C74080B537472 - 6F6B652E4B696E6407044E6F6E650758526164697573050000000000000080FF - 3F0759526164697573050000000000000080FF3F0005544C696E650009537479 - 6C654E616D6506054C696E6531084C696E65547970650706426F74746F6D0A53 - 697A652E57696474680500000000000000A00B400B53697A652E486569676874 - 05000000000000008000401453697A652E506C6174666F726D44656661756C74 - 080C5374726F6B652E436F6C6F720709784646324138324532105374726F6B65 - 2E546869636B6E65737305000000000000008002400A5374726F6B652E436170 - 0705526F756E640B5374726F6B652E446173680704446173680B5374726F6B65 - 2E4A6F696E0705526F756E64000F54466C6F6174416E696D6174696F6E000953 - 74796C654E616D650603616E6907456E61626C656409084475726174696F6E05 - 00000000000000800340044C6F6F70090C50726F70657274794E616D65060A50 - 6F736974696F6E2E580A537461727456616C75650500000000000000C808C009 - 53746F7056616C756505000000000000000000000754726967676572060E4973 - 56697369626C653D7472756500000000005450463007544C61796F7574000953 - 74796C654E616D650611616E69696E64696361746F727374796C6505416C6967 - 6E070643656E7465720756697369626C650800045441726300095374796C654E - 616D65060341726305416C69676E0708436F6E74656E74730748697454657374 - 080D526F746174696F6E416E676C650500000000000000B407400A53697A652E - 57696474680500000000000000C804400B53697A652E48656967687405000000 - 00000000C804401453697A652E506C6174666F726D44656661756C74080C5374 - 726F6B652E436F6C6F720708636C615768697465105374726F6B652E54686963 - 6B6E657373050000000000000080004008456E64416E676C6505000000000000 - 00B405C0000F54466C6F6174416E696D6174696F6E00095374796C654E616D65 - 0603616E6907456E61626C656409084475726174696F6E050000000000000080 - FF3F044C6F6F70090C50726F70657274794E616D65060D526F746174696F6E41 - 6E676C650A537461727456616C756505000000000000000000000953746F7056 - 616C75650500000000000000B407400754726967676572060E49735669736962 - 6C653D74727565000000005450463007544C61796F757400095374796C654E61 - 6D65060A70616E656C7374796C6505416C69676E070643656E7465720A53697A - 652E57696474680500000000000000C006400B53697A652E4865696768740500 - 000000000000A406401453697A652E506C6174666F726D44656661756C740807 - 56697369626C6508000A5452656374616E676C6500095374796C654E616D6506 - 0A6261636B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C - 2E436F6C6F7207097846463230323032300A53697A652E576964746805000000 - 00000000C006400B53697A652E4865696768740500000000000000A406401453 - 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 - 07044E6F6E6507585261646975730500000000000000C0004007595261646975 - 730500000000000000C000400000005450463007544C61796F75740009537479 - 6C654E616D65061970726F67726573736261726D696E696572726F727374796C - 6505416C69676E070643656E7465720A53697A652E5769647468050000000000 - 33338505400B53697A652E4865696768740500000000009999E104401453697A - 652E506C6174666F726D44656661756C7408000A5452656374616E676C650009 - 5374796C654E616D65060668747261636B05416C69676E0708436F6E74656E74 - 730A46696C6C2E436F6C6F720709784646343034303430064C6F636B65640907 - 48697454657374080A53697A652E576964746805000000000033338505400B53 - 697A652E4865696768740500000000009999E104401453697A652E506C617466 + 00545046300A5452656374616E676C6500095374796C654E616D65060B746162 + 646F747374796C6505416C69676E070643656E7465720A46696C6C2E436F6C6F + 7207097846463135313531350748697454657374080A53697A652E5769647468 + 0500000000000000C804400B53697A652E4865696768740500000000000000C8 + 04401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E650756697369626C650807585261646975730500000000 + 000000C8034007595261646975730500000000000000C80340000F54436F6C6F + 72416E696D6174696F6E00084475726174696F6E05000000000018B7D1F23F0C + 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 + 6C756507097846463135313531350953746F7056616C75650709784646324138 + 3245320754726967676572060F497353656C65637465643D747275650E547269 + 67676572496E76657273650610497353656C65637465643D66616C7365000000 + 5450463007544C61796F757400095374796C654E616D65060C7461626974656D + 7374796C6505416C69676E070643656E7465720A53697A652E57696474680500 + 000000000000C804400B53697A652E4865696768740500000000000000C80340 + 1453697A652E506C6174666F726D44656661756C74080756697369626C650808 + 5461624F726465720216000A5452656374616E676C6500095374796C654E616D + 650603746F7005416C69676E0708436F6E74656E74730C436C69704368696C64 + 72656E0907436F726E6572730B07546F704C65667408546F705269676874000A + 46696C6C2E436F6C6F720709784646323032303230064C6F636B656409074869 + 7454657374080553696465730B03546F70044C656674055269676874000A5369 + 7A652E57696474680500000000000000C804400B53697A652E48656967687405 + 00000000000000C803401453697A652E506C6174666F726D44656661756C7408 + 0C5374726F6B652E436F6C6F7207097846463135313531350758526164697573 + 0500000000000000C0004007595261646975730500000000000000C000400006 + 54476C79706800095374796C654E616D65060A676C7970687374796C650C4D61 + 7267696E732E4C65667405000000000000008001400D4D617267696E732E5269 + 67687405000000000000008001C005416C69676E07044C6566740A506F736974 + 696F6E2E5805000000000000008001400A53697A652E57696474680500000000 + 0000008003400B53697A652E4865696768740500000000000000C80340145369 + 7A652E506C6174666F726D44656661756C740800000554546578740009537479 + 6C654E616D6506047465787405416C69676E0706436C69656E74064C6F636B65 + 64090748697454657374080C4D617267696E732E4C6566740500000000000000 + C000400B4D617267696E732E546F700500000000000000C000400D4D61726769 + 6E732E52696768740500000000000000C000400E4D617267696E732E426F7474 + 6F6D0500000000000000C000400A53697A652E57696474680500000000000000 + B004400B53697A652E48656967687405000000000000009803401453697A652E + 506C6174666F726D44656661756C7408165465787453657474696E67732E466F + 6E74436F6C6F720708636C615768697465155465787453657474696E67732E57 + 6F7264577261700800000F54436F6C6F72416E696D6174696F6E00095374796C + 654E616D650612746162436F6C6F72416E696D6174696F6E310D416E696D6174 + 696F6E547970650705496E4F7574084475726174696F6E050000000000000000 + 00000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 + 7456616C756507097846463230323032300953746F7056616C75650709784646 + 3430343034300754726967676572062149734D6F7573654F7665723D74727565 + 3B497353656C65637465643D66616C73650E54726967676572496E7665727365 + 062249734D6F7573654F7665723D66616C73653B497353656C65637465643D66 + 616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650612746162436F6C6F72416E696D6174696F6E32084475726174696F6E0500 + 0000000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C + 6F720A537461727456616C756507097846463230323032300953746F7056616C + 756507097846463241383245320754726967676572060F497353656C65637465 + 643D747275650E54726967676572496E76657273650610497353656C65637465 + 643D66616C7365000000005450463007544C61796F757400095374796C654E61 + 6D65060D7465787463656C6C7374796C6505416C69676E070643656E74657207 + 56697369626C6508085461624F7264657202170007544C61796F757400095374 + 796C654E616D650607636F6E74656E7405416C69676E0708436F6E74656E7473 + 064C6F636B6564090C4D617267696E732E4C6566740500000000000000800140 + 0B4D617267696E732E546F7005000000000000008001400D4D617267696E732E + 526967687405000000000000008001400E4D617267696E732E426F74746F6D05 + 000000000000008001400A53697A652E57696474680500000000000000A80440 + 0B53697A652E4865696768740500000000000000A804401453697A652E506C61 + 74666F726D44656661756C740800000C5442727573684F626A65637400095374 + 796C654E616D65060A666F726567726F756E6400000C5442727573684F626A65 + 637400095374796C654E616D65060973656C656374696F6E0B42727573682E43 + 6F6C6F72070978393632413832453200000B54466F6E744F626A656374000953 + 74796C654E616D650604666F6E74000000545046300754436972636C65000953 + 74796C654E616D65060D7468756D626261727374796C6505416C69676E070643 + 656E7465720A46696C6C2E436F6C6F7207097846463241383245320748697454 + 657374080A53697A652E57696474680500000000000000A003400B53697A652E + 4865696768740500000000000000A003401453697A652E506C6174666F726D44 + 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313507 + 56697369626C6508000F54436F6C6F72416E696D6174696F6E00095374796C65 + 4E616D6506147468756D62436F6C6F72416E696D6174696F6E31084475726174 + 696F6E05000000000000000000000C50726F70657274794E616D65060A46696C + 6C2E436F6C6F720A537461727456616C75650709784646324138324532095374 + 6F7056616C756507097846463137353739430754726967676572061F49735072 + 65737365643D747275653B49734D6F7573654F7665723D747275650E54726967 + 676572496E766572736506104973507265737365643D66616C73653B00000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D6506147468756D62 + 436F6C6F72416E696D6174696F6E32084475726174696F6E0500000000000000 + 0000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461 + 727456616C756507097846463241383245320953746F7056616C756507097846 + 463430394246460754726967676572062049734D6F7573654F7665723D747275 + 653B4973507265737365643D66616C73650E54726967676572496E7665727365 + 062149734D6F7573654F7665723D66616C73653B4973507265737365643D6661 + 6C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 + 06157468756D625374726F6B65416E696D6174696F6E31084475726174696F6E + 05000000000000000000000C50726F70657274794E616D65060C5374726F6B65 + 2E436F6C6F720A537461727456616C756507097846463135313531350953746F + 7056616C756507097846463137353739430754726967676572061F4973507265 + 737365643D747275653B49734D6F7573654F7665723D747275650E5472696767 + 6572496E7665727365060F4973507265737365643D66616C7365000000545046 + 300A5452656374616E676C6500095374796C654E616D65060A7468756D627374 + 796C6505416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846 + 463444344434440748697454657374080A53697A652E57696474680500000000 + 000000C804400B53697A652E4865696768740500000000000000C80440145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E650756697369626C6508000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D6506147468756D62436F6C6F72416E696D6174696F6E31 + 084475726174696F6E05000000000000000000000C50726F70657274794E616D + 65060A46696C6C2E436F6C6F720A537461727456616C75650709784646344434 + 4434440953746F7056616C756507097846463137353739430754726967676572 + 060E4973507265737365643D747275650E54726967676572496E766572736506 + 0F4973507265737365643D66616C736500000F54436F6C6F72416E696D617469 + 6F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E315374 + 796C65084475726174696F6E05000000000000000000000C50726F7065727479 + 4E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709784646 + 3444344434440953746F7056616C75650707636C614772617907547269676765 + 72061049734D6F7573654F7665723D747275650E54726967676572496E766572 + 7365061149734D6F7573654F7665723D66616C73650000005450463007544C61 + 796F757400095374796C654E616D65060D747261636B6261727374796C650541 + 6C69676E070643656E7465720A53697A652E57696474680500000000000000C8 + 05400B53697A652E4865696768740500000000000000C805401453697A652E50 + 6C6174666F726D44656661756C74080756697369626C6508085461624F726465 + 7202180B46697865644865696768740211000A5452656374616E676C65000953 + 74796C654E616D65060668747261636B05416C69676E070A5665727443656E74 + 65720A46696C6C2E436F6C6F7207097846463135313531350748697454657374 + 080A506F736974696F6E2E590500000000000000BC04400A53697A652E576964 + 74680500000000000000C805400B53697A652E48656967687405000000000000 + 00A001401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E6507585261646975730500000000000000A0004007 + 595261646975730500000000000000A00040000A5452656374616E676C650009 + 5374796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E + 74656E74730946696C6C2E4B696E6407044E6F6E65064C6F636B656409074869 + 7454657374080C4D617267696E732E4C6566740500000000000000C001400B4D + 617267696E732E546F70050000000000000080FF3F0D4D617267696E732E5269 + 6768740500000000000000C001400E4D617267696E732E426F74746F6D050000 + 000000000080FF3F0A53697A652E57696474680500000000000000B005400B53 + 697A652E4865696768740500000000000000C000401453697A652E506C617466 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65075852 - 6164697573050000000000000080004007595261646975730500000000000000 - 800040000A5452656374616E676C6500095374796C654E616D65060A68696E64 - 696361746F7205416C69676E07044C6566740A46696C6C2E436F6C6F72070978 - 4646453232413241064C6F636B6564090748697454657374080A53697A652E57 - 696474680500000000000000C804400B53697A652E4865696768740500000000 - 009999E104401453697A652E506C6174666F726D44656661756C74080B537472 - 6F6B652E4B696E6407044E6F6E65075852616469757305000000000000008000 - 40075952616469757305000000000000008000400000000A5452656374616E67 - 6C6500095374796C654E616D65060676747261636B05416C69676E0708436F6E - 74656E74730A46696C6C2E436F6C6F720709784646343034303430064C6F636B - 6564090748697454657374080A53697A652E5769647468050000000000333385 - 05400B53697A652E4865696768740500000000009999E104401453697A652E50 - 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E - 6507585261646975730500000000000000800040075952616469757305000000 - 00000000800040000A5452656374616E676C6500095374796C654E616D65060A - 76696E64696361746F7205416C69676E0706426F74746F6D0A46696C6C2E436F - 6C6F720709784646453232413241064C6F636B6564090748697454657374080A - 506F736974696F6E2E5905000000000099998D04400A53697A652E5769647468 - 05000000000033338505400B53697A652E4865696768740500000000000000A8 - 03401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E - 4B696E6407044E6F6E6507585261646975730500000000000000800040075952 - 61646975730500000000000000800040000000005450463007544C61796F7574 - 00095374796C654E616D65060E6C6F67627574746F6E7374796C6505416C6967 - 6E070643656E7465720A53697A652E57696474680500000000000000C005400B - 53697A652E4865696768740500000000000000C005401453697A652E506C6174 - 666F726D44656661756C74080756697369626C6508085461624F726465720201 - 000A5452656374616E676C6500095374796C654E616D65060A6261636B67726F - 756E6405416C69676E0706436C69656E740C436C69704368696C6472656E090A - 436C6970506172656E740907436F726E6572730B08546F7052696768740B426F - 74746F6D5269676874000A46696C6C2E436F6C6F720709784646323032303230 - 0748697454657374080A53697A652E57696474680500000000000000C005400B - 53697A652E4865696768740500000000000000C005401453697A652E506C6174 + 61646975730500000000000000C0FF3F07595261646975730500000000000000 + C0FF3F00000A5452656374616E676C6500095374796C654E616D650609686967 + 686C6967687405416C69676E07044C6566740A46696C6C2E436F6C6F72070978 + 46463241383245320748697454657374080C50616464696E672E4C6566740500 + 000000000000A002400A53697A652E57696474680500000000000000F003400B + 53697A652E4865696768740500000000000000A001401453697A652E506C6174 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650758 - 5261646975730500000000000000C00040075952616469757305000000000000 - 00C00040000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 - 0615627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E - 05000000000000000000000C50726F70657274794E616D65060A46696C6C2E43 - 6F6C6F720A537461727456616C756507097846463230323032300953746F7056 - 616C756507097846463430343034300754726967676572063049734D6F757365 - 4F7665723D747275653B4973507265737365643D66616C73653B4973466F6375 - 7365643D66616C73650E54726967676572496E7665727365063149734D6F7573 - 654F7665723D66616C73653B4973507265737365643D66616C73653B4973466F - 63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E000953 - 74796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E3208 - 4475726174696F6E05000000000000000000000C50726F70657274794E616D65 - 060A46696C6C2E436F6C6F720A537461727456616C7565070978464634303430 - 34300953746F7056616C75650709784646313735373943075472696767657206 - 2F4973507265737365643D747275653B49734D6F7573654F7665723D74727565 - 3B4973466F63757365643D66616C736500000F54436F6C6F72416E696D617469 - 6F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174 - 696F6E33084475726174696F6E05000000000000000000000C50726F70657274 - 794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507097846 - 463241383245320953746F7056616C7565070978464631373537394307547269 - 67676572062E4973507265737365643D747275653B49734D6F7573654F766572 - 3D747275653B4973466F63757365643D747275650E54726967676572496E7665 - 727365062F4973507265737365643D66616C73653B49734D6F7573654F766572 - 3D747275653B4973466F63757365643D74727565000005545061746800095374 - 796C654E616D650605506174683105416C69676E0706436C69656E7409446174 - 612E506174680A5C02000032000000000000000000A841CDCCCC400100000000 - 00A8410000C041010000000000C03F0000C041010000000000C03F0000000001 - 0000009A99694100000000010000000000A841CDCCCC40030000000000A841CD - CCCC400000000000009C410000F04001000000000058410000F0400100000000 - 0058410000C03F01000000000040400000C03F01000000000040400000B44101 - 00000000009C410000B4410100000000009C410000F0400300000000009C4100 - 00F04000000000000040410000F04001000000000090400000F0400100000000 - 0090400000C04001000000000040410000C04001000000000040410000F04003 - 000000000040410000F040000000000000904000001041010000000000904100 - 0010410100000000009041000028410100000000009040000028410100000000 - 0090400000104103000000000090400000104100000000000090400000404101 - 0000000000904100004041010000000000904100005841010000000000904000 - 0058410100000000009040000040410300000000009040000040410000000000 - 0090400000704101000000000090410000704101000000000090410000844101 - 0000000000904000008441010000000000904000007041030000000000904000 - 0070410000000000009040000090410100000000009041000090410100000000 - 00904100009C41010000000000904000009C4101000000000090400000904103 - 000000000090400000904100000000000070410000C040010000003333934100 - 00C04001000000000070416666264001000000000070410000C0400300000000 - 0070410000C0400A46696C6C2E436F6C6F720708636C61576869746507486974 - 54657374080C4D617267696E732E4C6566740500000000000000A002400B4D61 - 7267696E732E546F700500000000000000A002400D4D617267696E732E526967 - 68740500000000000000A002400E4D617267696E732E426F74746F6D05000000 - 00000000A002400A53697A652E576964746805000000000000009805400B5369 - 7A652E48656967687405000000000000009805401453697A652E506C6174666F - 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6508577261 - 704D6F6465070346697400000000} - end> - Left = 8 - Top = 408 - end - object AERModernAnimatedStyle: TStyleBook - StyleName = 'AER Modern Smooth Style' - Styles = < - item - ResourcesBin = { - 464D585F5354594C4520322E3501060F6261636B67726F756E647374796C6503 - AF00060B627574746F6E7374796C6503C5040609656469747374796C6503AC05 - 060A6C6162656C7374796C65032001060D67726F7570626F787374796C65038E - 02060D747261636B6261727374796C65038C07060D636865636B626F78737479 - 6C65039E0506147363726F6C6C62617268747261636B7374796C65033B010614 - 7363726F6C6C62617276747261636B7374796C65033B0106157363726F6C6C62 - 6172626F74746F6D627574746F6E032D0406137363726F6C6C6261726C656674 - 627574746F6E03440406147363726F6C6C6261727269676874627574746F6E03 - 450406127363726F6C6C626172746F70627574746F6E034304060E7363726F6C - 6C6261727374796C65036304060A7468756D627374796C65034402060B737769 - 7463687374796C6503DC01060C7370696E626F787374796C65032908060F7461 - 62636F6E74726F6C7374796C6503A701060B746162646F747374796C65035901 - 060C7461626974656D7374796C6503EF04060D7468756D626261727374796C65 - 034F03060C6C697374626F787374796C6503AD07060D6C697374626F78666F6F - 746572038B0106106C697374626F786974656D7374796C6503260306126C6973 - 74626F78706C61696E6865616465720346020609677269647374796C65038708 - 060F6865616465726974656D7374796C6503CE03061070726F67726573736261 - 727374796C65036A04061170726F677265737363656C6C7374796C6503A50206 - 106D656E756261726974656D7374796C6503300B060C6D656E75626172737479 - 6C65036C02060D6D656E756974656D7374796C65035D0B06126D656E75736570 - 617261746F727374796C6503E501060D6D656E75766965777374796C65039102 - 060E696D61676563656C6C7374796C65033D01060E706F70757063656C6C7374 - 796C65038E03060D7465787463656C6C7374796C6503A60106096D656D6F7374 - 796C6503DE07060E6C696E6B6C6162656C7374796C65035B03060D73697A6567 - 7269707374796C6503FB04060E7374617475736261727374796C6503DB01060C - 746F6F6C6261727374796C6503CA00061570726F67726573736261726572726F - 727374796C65036F040613736D616C6C7363726F6C6C6261727374796C6503AE - 01060D636F6D626F626F787374796C65030108060D73706C6974746572737479 - 6C6503C0030610636C6F7365627574746F6E7374796C65038604060E6D617862 - 7574746F6E7374796C65030104060E6D696E627574746F6E7374796C65031904 - 060E726573627574746F6E7374796C65031A04061177696E646F77626F726465 - 727374796C65035510060F746F6F6C77696E646F777374796C6503BD0D061072 - 6164696F627574746F6E7374796C6503C4050618756C63656E74657272616469 - 6F627574746F6E7374796C650368050616756C6C656674726164696F62757474 - 6F6E7374796C65035B050617756C7269676874726164696F627574746F6E7374 - 796C65036005060E636F6D626F656469747374796C65038D090611616E69696E - 64696361746F727374796C6503BA010613657870616E646572627574746F6E73 - 74796C650381020615657870616E646572636865636B626F787374796C6503DB - 05060A70616E656C7374796C65031E01061970726F67726573736261726D696E - 696572726F727374796C65036103061470726F67726573736261726D696E6973 - 74796C65035C03060D657870616E6465727374796C65037C060615616E69696E - 64696361746F72686F727A7374796C65038A02060E6C6F67627574746F6E7374 - 796C65038A0700545046300A5452656374616E676C6500095374796C654E616D - 65060F6261636B67726F756E647374796C6505416C69676E070643656E746572 - 0A46696C6C2E436F6C6F7207097846463244324432440A53697A652E57696474 - 6805000000000000009407400B53697A652E4865696768740500000000000080 - D206401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 - 2E4B696E6407044E6F6E650756697369626C650800005450463007544C61796F - 757400095374796C654E616D65060B627574746F6E7374796C6505416C69676E - 070643656E7465720A53697A652E57696474680500000000000000C805400B53 - 697A652E4865696768740500000000000000C803401453697A652E506C617466 - 6F726D44656661756C74080756697369626C6508085461624F72646572020100 - 0A5452656374616E676C6500095374796C654E616D65060A6261636B67726F75 - 6E6405416C69676E0706436C69656E740C436C69704368696C6472656E090A43 - 6C6970506172656E74090A46696C6C2E436F6C6F720709784646323032303230 - 0748697454657374080A53697A652E57696474680500000000000000C805400B - 53697A652E4865696768740500000000000000C803401453697A652E506C6174 - 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F - 54436F6C6F72416E696D6174696F6E00095374796C654E616D65061562757474 - 6F6E436F6C6F72416E696D6174696F6E31084475726174696F6E050000000000 - CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53 - 7461727456616C756507097846463230323032300953746F7056616C75650709 - 7846463430343034300754726967676572063049734D6F7573654F7665723D74 - 7275653B4973507265737365643D66616C73653B4973466F63757365643D6661 - 6C73650E54726967676572496E7665727365063149734D6F7573654F7665723D - 66616C73653B4973507265737365643D66616C73653B4973466F63757365643D - 66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E61 - 6D650615627574746F6E436F6C6F72416E696D6174696F6E3208447572617469 - 6F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C - 2E436F6C6F720A537461727456616C756507097846463430343034300953746F - 7056616C756507097846463137353739430754726967676572062F4973507265 - 737365643D747275653B49734D6F7573654F7665723D747275653B4973466F63 - 757365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 - 796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E330844 - 75726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D6506 - 0A46696C6C2E436F6C6F720A537461727456616C756507097846463241383245 - 320953746F7056616C756507097846463137353739430754726967676572062E - 4973507265737365643D747275653B49734D6F7573654F7665723D747275653B - 4973466F63757365643D747275650E54726967676572496E7665727365062F49 - 73507265737365643D66616C73653B49734D6F7573654F7665723D747275653B - 4973466F63757365643D7472756500000005545465787400095374796C654E61 - 6D6506047465787405416C69676E0706436C69656E7413456E61626C65447261 - 67486967686C69676874080748697454657374080A53697A652E576964746805 - 00000000000000C805400B53697A652E4865696768740500000000000000C803 - 401453697A652E506C6174666F726D44656661756C7408165465787453657474 - 696E67732E466F6E74436F6C6F720708636C6157686974650000005450463007 - 544C61796F757400095374796C654E616D650609656469747374796C6505416C - 69676E070643656E7465720A53697A652E57696474680500000000000000C805 - 400B53697A652E4865696768740500000000000000C803401453697A652E506C + 5261646975730500000000000000A00040075952616469757305000000000000 + 00A0004000000B54476C6F774566666563740008536F66746E65737305000000 + 0000CDCCCCFC3F09476C6F77436F6C6F720709784646324138324532074F7061 + 63697479050000000000000080FF3F07456E61626C6564080000000A54526563 + 74616E676C6500095374796C654E616D65060676747261636B05416C69676E07 + 0A486F727A43656E7465720A46696C6C2E436F6C6F7207097846463135313531 + 350748697454657374080A506F736974696F6E2E580500000000000000BC0440 + 0A53697A652E57696474680500000000000000A001400B53697A652E48656967 + 68740500000000000000C805401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E650758526164697573050000 + 0000000000A0004007595261646975730500000000000000A00040000A545265 + 6374616E676C6500095374796C654E616D65060A6261636B67726F756E640541 + 6C69676E0708436F6E74656E74730946696C6C2E4B696E6407044E6F6E65064C + 6F636B6564090748697454657374080C4D617267696E732E4C65667405000000 + 00000000C001400B4D617267696E732E546F70050000000000000080FF3F0D4D + 617267696E732E52696768740500000000000000C001400E4D617267696E732E + 426F74746F6D050000000000000080FF3F0A53697A652E576964746805000000 + 000000000000000B53697A652E4865696768740500000000000000C405401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E6500000A5452656374616E676C6500095374796C654E616D650609 + 686967686C6967687405416C69676E0703546F700A46696C6C2E436F6C6F7207 + 097846463241383245320748697454657374080A53697A652E57696474680500 + 000000000000A001400B53697A652E4865696768740500000000000000F00340 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E6507585261646975730500000000000000A000400759526164 + 6975730500000000000000A0004000000B54476C6F774566666563740008536F + 66746E657373050000000000CDCCCCFC3F09476C6F77436F6C6F720709784646 + 324138324532074F706163697479050000000000000080FF3F07456E61626C65 + 640800000006545468756D6200095374796C654E616D650606687468756D6206 + 4C6F636B6564090A506F736974696F6E2E580500000000003033AB03400A506F + 736974696F6E2E59050000000000FFFFA304400A53697A652E57696474680500 + 000000000000F002400B53697A652E4865696768740500000000000000F00240 + 1453697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B + 7570060D7468756D626261727374796C65000006545468756D6200095374796C + 654E616D650606767468756D62064C6F636B6564090A506F736974696F6E2E58 + 050000000000CBCCA804400A506F736974696F6E2E590500000000009899B103 + 400A53697A652E57696474680500000000000000F002400B53697A652E486569 + 6768740500000000000000F002401453697A652E506C6174666F726D44656661 + 756C74080B5374796C654C6F6F6B7570060D7468756D626261727374796C6500 + 00005450463007544C61796F757400095374796C654E616D6506096D656D6F73 + 74796C6505416C69676E070643656E7465720A53697A652E5769647468050000 + 000000CCCC8806400B53697A652E4865696768740500000000006666F4054014 + 53697A652E506C6174666F726D44656661756C74080756697369626C65080854 + 61624F726465720219000C5442727573684F626A65637400095374796C654E61 + 6D65060A666F726567726F756E6400000C5442727573684F626A656374000953 + 74796C654E616D65060973656C656374696F6E0B42727573682E436F6C6F7207 + 0978374634343735394400000B54466F6E744F626A65637400095374796C654E + 616D650604666F6E7400000A5452656374616E676C6500095374796C654E616D + 65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A4669 + 6C6C2E436F6C6F7207097846463230323032300748697454657374080A53697A + 652E5769647468050000000000CCCC8806400B53697A652E4865696768740500 + 000000006666F405401453697A652E506C6174666F726D44656661756C74080C + 5374726F6B652E436F6C6F720709784646313531353135075852616469757305 + 00000000000000C0004007595261646975730500000000000000C00040000754 + 4C61796F757400095374796C654E616D650607636F6E74656E7405416C69676E + 0706436C69656E740C4D617267696E732E4C6566740500000000000000800040 + 0B4D617267696E732E546F7005000000000000008000400D4D617267696E732E + 526967687405000000000000008000400E4D617267696E732E426F74746F6D05 + 000000000000008000400A53697A652E57696474680500000000009899E90540 + 0B53697A652E4865696768740500000000006666CC05401453697A652E506C61 + 74666F726D44656661756C740800000A545363726F6C6C42617200095374796C + 654E616D65060A687363726F6C6C62617205416C69676E0706426F74746F6D06 + 437572736F72070763724172726F770B536D616C6C4368616E67650500000000 + 0000000000000B4F7269656E746174696F6E070A486F72697A6F6E74616C0A50 + 6F736974696F6E2E590500000000006666D405400A53697A652E576964746805 + 0000000000CCCC8806400B53697A652E48656967687405000000000000008003 + 401453697A652E506C6174666F726D44656661756C740800000A545363726F6C + 6C42617200095374796C654E616D65060A767363726F6C6C62617205416C6967 + 6E0705526967687406437572736F72070763724172726F770B536D616C6C4368 + 616E676505000000000000000000000B4F7269656E746174696F6E0708566572 + 746963616C0A506F736974696F6E2E580500000000009899F105400A53697A65 + 2E576964746805000000000000008003400B53697A652E486569676874050000 + 0000006666D405401453697A652E506C6174666F726D44656661756C74080000 + 07544C61796F75740005416C69676E0706436C69656E740A53697A652E576964 + 74680500000000009899F105400B53697A652E48656967687405000000000066 + 66D405401453697A652E506C6174666F726D44656661756C7408000F54536D61 + 6C6C5363726F6C6C42617200095374796C654E616D65060F76736D616C6C7363 + 726F6C6C62617205416C69676E0705526967687406437572736F720707637241 + 72726F770B536D616C6C4368616E676505000000000000000000000B4F726965 + 6E746174696F6E0708566572746963616C0C4D617267696E732E4C6566740500 + 0000000000008000400A53697A652E576964746805000000000000008002400B + 53697A652E48656967687405000000000000008002401453697A652E506C6174 + 666F726D44656661756C74080756697369626C650800000F54536D616C6C5363 + 726F6C6C42617200095374796C654E616D65060F68736D616C6C7363726F6C6C + 62617205416C69676E0706426F74746F6D06437572736F72070763724172726F + 770B536D616C6C4368616E676505000000000000000000000B4F7269656E7461 + 74696F6E070A486F72697A6F6E74616C0B4D617267696E732E546F7005000000 + 000000008000400A53697A652E576964746805000000000000009606400B5369 + 7A652E48656967687405000000000000008002401453697A652E506C6174666F + 726D44656661756C74080756697369626C65080000000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D6506146D656D6F5374726F6B65416E69 + 6D6174696F6E31084475726174696F6E050000000000000000000007496E7665 + 727365090C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A + 537461727456616C756507097846463135313531350953746F7056616C756507 + 097846463430343034300754726967676572062049734D6F7573654F7665723D + 747275653B4973466F63757365643D66616C73650E54726967676572496E7665 + 727365062149734D6F7573654F7665723D66616C73653B4973466F6375736564 + 3D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E + 616D6506146D656D6F5374726F6B65416E696D6174696F6E3208447572617469 + 6F6E05000000000000000000000C50726F70657274794E616D65060C5374726F + 6B652E436F6C6F720A537461727456616C756507097846463430343034300953 + 746F7056616C756507097846463241383245320754726967676572060E497346 + 6F63757365643D747275650E54726967676572496E7665727365060F4973466F + 63757365643D66616C7365000000005450463007544C61796F75740009537479 + 6C654E616D65060D73697A65677269707374796C6505416C69676E070643656E + 7465720A53697A652E57696474680500000000000000C803400B53697A652E48 + 65696768740500000000000000C803401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C6508085461624F72646572021A000A54526563 + 74616E676C6500095374796C654E616D65060A52656374616E676C653105416C + 69676E070643656E7465720A46696C6C2E436F6C6F7207097846463630363036 + 300A53697A652E57696474680500000000000000A000400B53697A652E486569 + 6768740500000000000000A000401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E + 676C6500095374796C654E616D65060A52656374616E676C653205416C69676E + 070643656E7465720A46696C6C2E436F6C6F7207097846463630363036300C4D + 617267696E732E4C6566740500000000000000A002400A53697A652E57696474 + 680500000000000000A000400B53697A652E4865696768740500000000000000 + A000401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E6500000A5452656374616E676C6500095374796C654E + 616D65060A52656374616E676C653305416C69676E070643656E7465720A4669 + 6C6C2E436F6C6F7207097846463630363036300C4D617267696E732E4C656674 + 0500000000000000A002400B4D617267696E732E546F700500000000000000A0 + 02400A53697A652E57696474680500000000000000A000400B53697A652E4865 + 696768740500000000000000A000401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E6500000A545265637461 + 6E676C6500095374796C654E616D65060A52656374616E676C653405416C6967 + 6E070643656E7465720A46696C6C2E436F6C6F7207097846463630363036300B + 4D617267696E732E546F700500000000000000A002400A53697A652E57696474 + 680500000000000000A000400B53697A652E4865696768740500000000000000 + A000401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E6500000A5452656374616E676C6500095374796C654E + 616D65060A52656374616E676C653505416C69676E070643656E7465720A4669 + 6C6C2E436F6C6F7207097846463630363036300B4D617267696E732E546F7005 + 00000000000000A002400D4D617267696E732E52696768740500000000000000 + A002400A53697A652E57696474680500000000000000A000400B53697A652E48 + 65696768740500000000000000A000401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374 + 616E676C6500095374796C654E616D65060A52656374616E676C653605416C69 + 676E070643656E7465720A46696C6C2E436F6C6F720709784646363036303630 + 0C4D617267696E732E4C6566740500000000000000A002400E4D617267696E73 + 2E426F74746F6D0500000000000000A002400A53697A652E5769647468050000 + 0000000000A000400B53697A652E4865696768740500000000000000A0004014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E65000000545046300A5452656374616E676C6500095374796C65 + 4E616D65060E7374617475736261727374796C6505416C69676E070643656E74 + 65720C436C69704368696C6472656E090A46696C6C2E436F6C6F720709784646 + 3235323532350553696465730B03546F70000A53697A652E5769647468050000 + 0000000000F004400B53697A652E4865696768740500000000000000C8044014 + 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C + 6F7207097846463135313531350756697369626C65080007544C61796F757400 + 095374796C654E616D6506074C61796F75743105416C69676E07055269676874 + 0A506F736974696F6E2E5805000000000000008C04400A53697A652E57696474 + 680500000000000000C803400B53697A652E4865696768740500000000000000 + C804401453697A652E506C6174666F726D44656661756C740800095453697A65 + 4772697000095374796C654E616D65060973697A65677267697005416C69676E + 0706426F74746F6D0A506F736974696F6E2E590500000000000000C803400A53 + 697A652E57696474680500000000000000C803400B53697A652E486569676874 + 0500000000000000C803401453697A652E506C6174666F726D44656661756C74 + 0800000000545046300A5452656374616E676C6500095374796C654E616D6506 + 0C746F6F6C6261727374796C6505416C69676E070643656E7465720A46696C6C + 2E436F6C6F720709784646323532353235074869745465737408055369646573 + 0B06426F74746F6D000A53697A652E57696474680500000000000000C804400B + 53697A652E4865696768740500000000000000C804401453697A652E506C6174 + 666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846463135 + 313531350756697369626C650800005450463007544C61796F75740009537479 + 6C654E616D65061570726F67726573736261726572726F727374796C6505416C + 69676E070643656E7465720A53697A652E576964746805000000000033338505 + 400B53697A652E4865696768740500000000009999E104401453697A652E506C 6174666F726D44656661756C74080756697369626C6508085461624F72646572 - 0202000C5442727573684F626A65637400095374796C654E616D65060A666F72 - 6567726F756E6400000C5442727573684F626A65637400095374796C654E616D - 65060973656C656374696F6E0B42727573682E436F6C6F720709783936324138 - 32453200000B54466F6E744F626A65637400095374796C654E616D650604666F - 6E7409466F6E742E53697A650500000000000000D0024000000A545265637461 - 6E676C6500095374796C654E616D65060A6261636B67726F756E6405416C6967 - 6E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846463230323032 - 300748697454657374080A53697A652E57696474680500000000000000C80540 - 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 - 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 - 3531353135000F54436F6C6F72416E696D6174696F6E00095374796C654E616D - 650614436F6C6F72416E696D6174696F6E315374796C65084475726174696F6E - 050000000000CDCCCCFB3F07496E7665727365090C50726F70657274794E616D - 65060C5374726F6B652E436F6C6F720A537461727456616C7565070978464631 - 35313531350953746F7056616C75650709784646343034303430075472696767 - 6572062049734D6F7573654F7665723D747275653B4973466F63757365643D66 + 021B000A5452656374616E676C6500095374796C654E616D6506066874726163 + 6B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846 + 46323032303230064C6F636B6564090748697454657374080A53697A652E5769 + 64746805000000000033338505400B53697A652E486569676874050000000000 + 9999E104401453697A652E506C6174666F726D44656661756C74080C5374726F + 6B652E436F6C6F72070978464631353135313507585261646975730500000000 + 000000C0004007595261646975730500000000000000C00040000A5452656374 + 616E676C6500095374796C654E616D65060A68696E64696361746F7205416C69 + 676E07044C6566740A46696C6C2E436F6C6F720709784646453232413241064C + 6F636B6564090748697454657374080C4D617267696E732E4C65667405000000 + 0000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D + 617267696E732E5269676874050000000000000080FF3F0E4D617267696E732E + 426F74746F6D050000000000000080FF3F0A506F736974696F6E2E5805000000 + 0000000080FF3F0A506F736974696F6E2E59050000000000000080FF3F0A5369 + 7A652E57696474680500000000000000C804400B53697A652E48656967687405 + 00000000009999D904401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E650758526164697573050000000000 + 0000C0004007595261646975730500000000000000C000400000000A54526563 + 74616E676C6500095374796C654E616D65060676747261636B05416C69676E07 + 08436F6E74656E74730A46696C6C2E436F6C6F72070978464632303230323006 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 0033338505400B53697A652E4865696768740500000000009999E10440145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 070978464631353135313507585261646975730500000000000000C000400759 + 5261646975730500000000000000C00040000A5452656374616E676C65000953 + 74796C654E616D65060A76696E64696361746F7205416C69676E0706426F7474 + 6F6D0A46696C6C2E436F6C6F720709784646453232413241064C6F636B656409 + 0748697454657374080C4D617267696E732E4C656674050000000000000080FF + 3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E73 + 2E5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D + 050000000000000080FF3F0A506F736974696F6E2E58050000000000000080FF + 3F0A506F736974696F6E2E5905000000000099998904400A53697A652E576964 + 746805000000000033338105400B53697A652E48656967687405000000000000 + 00A803401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E6507585261646975730500000000000000C0004007 + 595261646975730500000000000000C00040000000005450463007544C61796F + 757400095374796C654E616D65060E6C696E6B6C6162656C7374796C6505416C + 69676E070643656E7465720A53697A652E5769647468050000000000CCCC8006 + 400B53697A652E4865696768740500000000009A998104401453697A652E506C + 6174666F726D44656661756C74080756697369626C6508085461624F72646572 + 021C0005545465787400095374796C654E616D6506047465787405416C69676E + 0708436F6E74656E74730748697454657374080A53697A652E57696474680500 + 00000000CCCC8006400B53697A652E4865696768740500000000009A99810440 + 1453697A652E506C6174666F726D44656661756C74081A546578745365747469 + 6E67732E466F6E742E5374796C654578740A0D00000004040000000000000004 + 000000165465787453657474696E67732E466F6E74436F6C6F72070D636C6144 + 6F64676572626C7565000F54436F6C6F72416E696D6174696F6E00095374796C + 654E616D650614436F6C6F72416E696D6174696F6E315374796C650844757261 + 74696F6E050000000000000000000007496E7665727365090C50726F70657274 + 794E616D6506165465787453657474696E67732E466F6E74436F6C6F720A5374 + 61727456616C7565070D636C61446F64676572626C75650953746F7056616C75 + 65070E636C6144656570736B79626C75650754726967676572063049734D6F75 + 73654F7665723D747275653B4973507265737365643D66616C73653B4973466F + 63757365643D66616C73650E54726967676572496E7665727365063149734D6F + 7573654F7665723D66616C73653B4973507265737365643D66616C73653B4973 + 466F63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D650614436F6C6F72416E696D6174696F6E325374796C65 + 084475726174696F6E05000000000000000000000C50726F70657274794E616D + 6506165465787453657474696E67732E466F6E74436F6C6F720A537461727456 + 616C7565070E636C6144656570736B79626C75650953746F7056616C75650709 + 7846463137353739430754726967676572062F4973507265737365643D747275 + 653B49734D6F7573654F7665723D747275653B4973466F63757365643D66616C + 7365000000005450463007544C61796F757400095374796C654E616D65060C70 + 6F706F7665727374796C6505416C69676E070643656E7465720756697369626C + 6508085461624F72646572021D000A5452656374616E676C6500095374796C65 + 4E616D650602626705416C69676E0706436C69656E740A46696C6C2E436F6C6F + 7207097846463230323032300748697454657374080A53697A652E5769647468 + 0500000000000000C804400B53697A652E4865696768740500000000000000C8 + 04401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E + 436F6C6F72070978464631353135313507585261646975730500000000000000 + C0004007595261646975730500000000000000C000400007544C61796F757400 + 095374796C654E616D650607636F6E74656E7405416C69676E0706436C69656E + 740C4D617267696E732E4C656674050000000000000080FF3F0B4D617267696E + 732E546F70050000000000000080FF3F0D4D617267696E732E52696768740500 + 00000000000080FF3F0E4D617267696E732E426F74746F6D0500000000000000 + 80FF3F0A53697A652E57696474680500000000000000C004400B53697A652E48 + 65696768740500000000000000C004401453697A652E506C6174666F726D4465 + 6661756C740800000D54536861646F77456666656374000844697374616E6365 + 0500000000000000C0004009446972656374696F6E0500000000000000B40540 + 08536F66746E657373050000000000000080FE3F074F70616369747905000000 + 0000000080FE3F0B536861646F77436F6C6F720708636C61426C61636B000000 + 005450463007544C61796F757400095374796C654E616D65060D706F70757062 + 6F787374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 0500000000000000C805400B53697A652E4865696768740500000000000000C8 + 03401453697A652E506C6174666F726D44656661756C7408085461624F726465 + 72021E000A5452656374616E676C6500095374796C654E616D65060A6261636B + 67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F + 7207097846463230323032300748697454657374080A53697A652E5769647468 + 0500000000000000C805400B53697A652E4865696768740500000000000000C8 + 03401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E6507585261646975730500000000000000C00040075952 + 61646975730500000000000000C00040000F54436F6C6F72416E696D6174696F + 6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E31537479 + 6C65084475726174696F6E05000000000000000000000C50726F70657274794E + 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464632 + 30323032300953746F7056616C75650709784646343034303430075472696767 + 6572062049734D6F7573654F7665723D747275653B4973507265737365643D66 616C73650E54726967676572496E7665727365062149734D6F7573654F766572 - 3D66616C73653B4973466F63757365643D66616C736500000F54436F6C6F7241 + 3D66616C73653B4973507265737365643D66616C736500000F54436F6C6F7241 6E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174 - 696F6E325374796C65084475726174696F6E050000000000CDCCCCFB3F0C5072 - 6F70657274794E616D65060C5374726F6B652E436F6C6F720A53746172745661 - 6C756507097846463135313531350953746F7056616C75650709784646324138 - 3245320754726967676572060E4973466F63757365643D747275650E54726967 - 676572496E7665727365060F4973466F63757365643D66616C73650000000754 - 4C61796F757400095374796C654E616D650607627574746F6E7305416C69676E - 07055269676874064C6F636B6564090B4D617267696E732E546F700500000000 - 0000008000400D4D617267696E732E526967687405000000000000008000400E - 4D617267696E732E426F74746F6D05000000000000008000400A506F73697469 - 6F6E2E580500000000000000C004400A506F736974696F6E2E59050000000000 - 00008000400A53697A652E57696474680500000000000000C804400B53697A65 - 2E4865696768740500000000000000A803401453697A652E506C6174666F726D - 44656661756C7408000007544C61796F757400095374796C654E616D65060763 - 6F6E74656E7405416C69676E0706436C69656E74064C6F636B6564090C4D6172 - 67696E732E4C65667405000000000000008001400B4D617267696E732E546F70 - 05000000000000008000400D4D617267696E732E526967687405000000000000 - 008000400E4D617267696E732E426F74746F6D05000000000000008000400A53 - 697A652E57696474680500000000000000A804400B53697A652E486569676874 - 0500000000000000A803401453697A652E506C6174666F726D44656661756C74 - 08000006544C6162656C00095374796C654E616D65060670726F6D7074064C6F - 636B656409074F706163697479050000000000000080FE3F1654657874536574 - 74696E67732E466F6E74436F6C6F720708636C61576869746504546578740604 - 546578740000005450463007544C61796F757400095374796C654E616D65060A - 6C6162656C7374796C6505416C69676E070643656E7465720A53697A652E5769 - 6474680500000000000000C805400B53697A652E486569676874050000000000 - 0000C803401453697A652E506C6174666F726D44656661756C74080756697369 - 626C6508085461624F7264657202030005545465787400095374796C654E616D - 6506047465787405416C69676E0708436F6E74656E7473074869745465737408 - 0A53697A652E57696474680500000000000000C805400B53697A652E48656967 - 68740500000000000000C803401453697A652E506C6174666F726D4465666175 - 6C7408165465787453657474696E67732E466F6E74436F6C6F720708636C6157 - 686974650000005450463007544C61796F757400095374796C654E616D65060D - 67726F7570626F787374796C6505416C69676E070643656E7465720A53697A65 - 2E57696474680500000000000000F004400B53697A652E486569676874050000 - 0000000000C804401453697A652E506C6174666F726D44656661756C74080756 - 697369626C6508085461624F726465720204000A5452656374616E676C650009 - 5374796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E - 74656E74730946696C6C2E4B696E6407044E6F6E650748697454657374080C4D - 617267696E732E4C6566740500000000000000C000400B4D617267696E732E54 - 6F7005000000000000009002400D4D617267696E732E52696768740500000000 - 000000C000400E4D617267696E732E426F74746F6D0500000000000000C00040 - 0A53697A652E57696474680500000000000000D804400B53697A652E48656967 - 687405000000000000009804401453697A652E506C6174666F726D4465666175 - 6C74080C5374726F6B652E436F6C6F7207097846463135313531350005545465 - 787400095374796C654E616D65060474657874084175746F53697A65090A436C - 6970506172656E74090748697454657374080C4D617267696E732E4C65667405 - 00000000000000A002400A506F736974696F6E2E580500000000006055950240 - 0A506F736974696F6E2E590500000000004055D501C00A53697A652E57696474 - 6805000000000000B8C703400B53697A652E4865696768740500000000000060 - FF02401453697A652E506C6174666F726D44656661756C740816546578745365 - 7474696E67732E466F6E74436F6C6F720708636C615768697465155465787453 - 657474696E67732E576F72645772617008000000005450463007544C61796F75 - 7400095374796C654E616D65060D747261636B6261727374796C6505416C6967 - 6E070643656E7465720A53697A652E57696474680500000000000000C805400B - 53697A652E4865696768740500000000000000C805401453697A652E506C6174 - 666F726D44656661756C74080756697369626C6508085461624F726465720205 - 0B46697865644865696768740211000A5452656374616E676C6500095374796C - 654E616D65060668747261636B05416C69676E070A5665727443656E7465720A - 46696C6C2E436F6C6F7207097846463135313531350748697454657374080A50 - 6F736974696F6E2E590500000000000000BC04400A53697A652E576964746805 - 00000000000000C805400B53697A652E4865696768740500000000000000A001 - 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B - 696E6407044E6F6E65000A5452656374616E676C6500095374796C654E616D65 - 060A6261636B67726F756E6405416C69676E0708436F6E74656E74730946696C - 6C2E4B696E6407044E6F6E65064C6F636B6564090748697454657374080C4D61 - 7267696E732E4C6566740500000000000000C001400B4D617267696E732E546F - 70050000000000000080FF3F0D4D617267696E732E5269676874050000000000 - 0000C001400E4D617267696E732E426F74746F6D050000000000000080FF3F0A - 53697A652E57696474680500000000000000B005400B53697A652E4865696768 - 740500000000000000C000401453697A652E506C6174666F726D44656661756C - 74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E676C - 6500095374796C654E616D650609686967686C6967687405416C69676E07044C - 6566740A46696C6C2E436F6C6F72070978464632413832453207486974546573 - 74080C50616464696E672E4C6566740500000000000000A002400A53697A652E - 57696474680500000000000000F003400B53697A652E48656967687405000000 - 00000000A001401453697A652E506C6174666F726D44656661756C74080B5374 - 726F6B652E4B696E6407044E6F6E6500000B54476C6F77456666656374000853 - 6F66746E657373050000000000CDCCCCFC3F09476C6F77436F6C6F7207097846 - 46324138324532074F706163697479050000000000000080FF3F07456E61626C - 6564080000000A5452656374616E676C6500095374796C654E616D6506067674 - 7261636B05416C69676E070A486F727A43656E7465720A46696C6C2E436F6C6F - 7207097846463135313531350748697454657374080A506F736974696F6E2E58 - 0500000000000000BC04400A53697A652E57696474680500000000000000A001 - 400B53697A652E4865696768740500000000000000C805401453697A652E506C + 696F6E325374796C65084475726174696F6E05000000000000000000000C5072 + 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 + 6507097846463430343034300953746F7056616C756507097846463241383245 + 320754726967676572062049734D6F7573654F7665723D747275653B49735072 + 65737365643D747275653B0E54726967676572496E7665727365062049734D6F + 7573654F7665723D747275653B4973507265737365643D66616C736500000007 + 544C61796F75740005416C69676E070846697452696768740A506F736974696F + 6E2E5805000000000000009605400A53697A652E576964746805000000000000 + 00C803400B53697A652E4865696768740500000000000000C803401453697A65 + 2E506C6174666F726D44656661756C7408000554506174680005416C69676E07 + 0643656E74657209446174612E506174680A4000000005000000000000000000 + 00000000803F010000000000803F0000803F010000000000003F000000000100 + 0000000000000000803F0300000000000000000000000A46696C6C2E436F6C6F + 720708636C6157686974650748697454657374080B4D617267696E732E546F70 + 0500000000000000E001C00A53697A652E576964746805000000000000008002 + 400B53697A652E48656967687405000000000000008001401453697A652E506C 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 - 000A5452656374616E676C6500095374796C654E616D65060A6261636B67726F - 756E6405416C69676E0708436F6E74656E74730946696C6C2E4B696E6407044E - 6F6E65064C6F636B6564090748697454657374080C4D617267696E732E4C6566 - 740500000000000000C001400B4D617267696E732E546F700500000000000000 - 80FF3F0D4D617267696E732E52696768740500000000000000C001400E4D6172 - 67696E732E426F74746F6D050000000000000080FF3F0A53697A652E57696474 - 6805000000000000000000000B53697A652E4865696768740500000000000000 - C405401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 - 2E4B696E6407044E6F6E6500000A5452656374616E676C6500095374796C654E - 616D650609686967686C6967687405416C69676E0703546F700A46696C6C2E43 - 6F6C6F7207097846463241383245320748697454657374080A53697A652E5769 - 6474680500000000000000A001400B53697A652E486569676874050000000000 - 0000F003401453697A652E506C6174666F726D44656661756C74080B5374726F - 6B652E4B696E6407044E6F6E6500000B54476C6F774566666563740008536F66 - 746E657373050000000000CDCCCCFC3F09476C6F77436F6C6F72070978464632 - 4138324532074F706163697479050000000000000080FF3F07456E61626C6564 - 0800000006545468756D6200095374796C654E616D650606687468756D62064C - 6F636B6564090A506F736974696F6E2E580500000000003033AB03400A506F73 - 6974696F6E2E59050000000000FFFFA304400A53697A652E5769647468050000 - 0000000000F002400B53697A652E4865696768740500000000000000F0024014 - 53697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B75 - 70060D7468756D626261727374796C65000006545468756D6200095374796C65 - 4E616D650606767468756D62064C6F636B6564090A506F736974696F6E2E5805 - 0000000000CBCCA804400A506F736974696F6E2E590500000000009899B10340 - 0A53697A652E57696474680500000000000000F002400B53697A652E48656967 - 68740500000000000000F002401453697A652E506C6174666F726D4465666175 - 6C74080B5374796C654C6F6F6B7570060D7468756D626261727374796C650000 - 005450463007544C61796F757400095374796C654E616D65060D636865636B62 - 6F787374796C6505416C69676E070643656E7465720A53697A652E5769647468 - 050000000000ACAA8006400B53697A652E486569676874050000000000585599 - 04401453697A652E506C6174666F726D44656661756C74080756697369626C65 - 08085461624F7264657202060007544C61796F75740005416C69676E07044C65 - 66740A53697A652E576964746805000000000000009003400B53697A652E4865 - 6967687405000000000058559904401453697A652E506C6174666F726D446566 - 61756C7408000A5452656374616E676C6500095374796C654E616D65060A6261 - 636B67726F756E6405416C69676E070643656E7465720A46696C6C2E436F6C6F - 7207097846463230323032300748697454657374080A53697A652E5769647468 - 0500000000000000F002400B53697A652E4865696768740500000000000000F0 - 02401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E - 436F6C6F720709784646313531353135000A5452656374616E676C6500095374 - 796C654E616D65060A52656374616E676C653105416C69676E0706436C69656E - 740A46696C6C2E436F6C6F720709784646324138324532074869745465737408 - 074F70616369747905000000000000000000000C4D617267696E732E4C656674 - 05000000000000008000400B4D617267696E732E546F70050000000000000080 - 00400D4D617267696E732E526967687405000000000000008000400E4D617267 - 696E732E426F74746F6D05000000000000008000400A53697A652E5769647468 - 0500000000000000B002400B53697A652E4865696768740500000000000000B0 - 02401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E - 4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E0009537479 - 6C654E616D65061B6368656368626F7856697362696C697479416E696D617469 - 6F6E31084475726174696F6E050000000000CDCCCCFB3F0C50726F7065727479 - 4E616D6506074F7061636974790A537461727456616C75650500000000000000 - 0000000953746F7056616C75650500000000000000C805400754726967676572 - 060E4973436865636B65643D747275650E54726967676572496E766572736506 - 0F4973436865636B65643D66616C73650000000F54436F6C6F72416E696D6174 - 696F6E00095374796C654E616D650618636865636B626F785374726F6B65416E - 696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F0C50726F - 70657274794E616D65060C5374726F6B652E436F6C6F720A537461727456616C - 756507097846463135313531350953746F7056616C7565070978464632413832 - 45320754726967676572060E4973436865636B65643D747275650E5472696767 - 6572496E7665727365060F4973436865636B65643D66616C736500000F54436F - 6C6F72416E696D6174696F6E00095374796C654E616D650617636865636B626F - 78436F6C6F72416E696D6174696F6E31084475726174696F6E050000000000CD - CCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 - 61727456616C756507097846463230323032300953746F7056616C7565070978 - 46463430343034300754726967676572061049734D6F7573654F7665723D7472 - 75650E54726967676572496E7665727365061149734D6F7573654F7665723D66 - 616C73650000000005545465787400095374796C654E616D6506047465787405 - 416C69676E0706436C69656E740A53697A652E57696474680500000000005855 - DD05400B53697A652E48656967687405000000000058559904401453697A652E - 506C6174666F726D44656661756C740804546578740604546578741654657874 - 53657474696E67732E466F6E74436F6C6F720708636C61576869746500000054 - 5046300A5452656374616E676C6500095374796C654E616D6506147363726F6C - 6C62617268747261636B7374796C6505416C69676E070643656E7465720A4669 - 6C6C2E436F6C6F7207097846463135313531350748697454657374080A53697A - 652E57696474680500000000000000C804400B53697A652E4865696768740500 - 000000000000C804401453697A652E506C6174666F726D44656661756C74080B - 5374726F6B652E4B696E6407044E6F6E650756697369626C6508000654546875 - 6D6200095374796C654E616D6506057468756D62064C6F636B6564090A53697A - 652E576964746805000000000000008003400B53697A652E4865696768740500 - 000000000000C804401453697A652E506C6174666F726D44656661756C74080B - 5374796C654C6F6F6B7570060A7468756D627374796C65000000545046300A54 - 52656374616E676C6500095374796C654E616D6506147363726F6C6C62617276 - 747261636B7374796C6505416C69676E070643656E7465720A46696C6C2E436F - 6C6F7207097846463135313531350748697454657374080A53697A652E576964 - 74680500000000000000C804400B53697A652E48656967687405000000000000 - 00C804401453697A652E506C6174666F726D44656661756C74080B5374726F6B - 652E4B696E6407044E6F6E650756697369626C65080006545468756D62000953 - 74796C654E616D6506057468756D62064C6F636B6564090A53697A652E576964 - 74680500000000000000C804400B53697A652E48656967687405000000000000 - 008003401453697A652E506C6174666F726D44656661756C74080B5374796C65 - 4C6F6F6B7570060A7468756D627374796C650000005450463007544C61796F75 - 7400095374796C654E616D6506157363726F6C6C626172626F74746F6D627574 - 746F6E05416C69676E070643656E7465720756697369626C6508085461624F72 - 6465720207000A5452656374616E676C6500095374796C654E616D65060A6261 - 636B67726F756E6405416C69676E0706436C69656E740C436C69704368696C64 - 72656E090A436C6970506172656E74090A46696C6C2E436F6C6F720709784646 - 3230323032300748697454657374080A53697A652E5769647468050000000000 - 0000C804400B53697A652E4865696768740500000000000000C804401453697A + 00000554506174680005416C69676E070643656E74657209446174612E506174 + 680A3400000004000000000000000000000000000000010000000000803F0000 + 0000010000000000003F0000803F0300000000000000000000000A46696C6C2E + 436F6C6F720708636C6157686974650748697454657374080B4D617267696E73 + 2E546F700500000000000000C001400A53697A652E5769647468050000000000 + 00008002400B53697A652E48656967687405000000000000008001401453697A 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 - 4E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 - 0615627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E - 050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E43 - 6F6C6F720A537461727456616C756507097846463230323032300953746F7056 - 616C756507097846463430343034300754726967676572062049734D6F757365 - 4F7665723D747275653B4973507265737365643D66616C73650E547269676765 - 72496E7665727365062149734D6F7573654F7665723D66616C73653B49735072 - 65737365643D66616C736500000F54436F6C6F72416E696D6174696F6E000953 - 74796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E3208 - 4475726174696F6E05000000000000000000000C50726F70657274794E616D65 - 060A46696C6C2E436F6C6F720A537461727456616C7565070978464634303430 - 34300953746F7056616C75650709784646313735373943075472696767657206 - 1F4973507265737365643D747275653B49734D6F7573654F7665723D74727565 - 0E54726967676572496E766572736506204973507265737365643D66616C7365 - 3B49734D6F7573654F7665723D7472756500000007544C61796F757400095374 - 796C654E616D6506074C61796F75743105416C69676E070643656E7465720A53 + 4E6F6E6500000005545465787400095374796C654E616D650604746578740541 + 6C69676E0706436C69656E740748697454657374080C4D617267696E732E4C65 + 6674050000000000000080FF3F0B4D617267696E732E546F7005000000000000 + 0080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D61 + 7267696E732E426F74746F6D050000000000000080FF3F0A53697A652E576964 + 746805000000000000009205400B53697A652E48656967687405000000000000 + 00B803401453697A652E506C6174666F726D44656661756C7408045465787406 + 0454657874165465787453657474696E67732E466F6E74436F6C6F720708636C + 6157686974650000005450463007544C61796F757400095374796C654E616D65 + 06157363726F6C6C626172626F74746F6D627574746F6E05416C69676E070643 + 656E7465720756697369626C6508085461624F72646572021F000A5452656374 + 616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C69 + 676E0706436C69656E740C436C69704368696C6472656E090A436C6970506172 + 656E740907436F726E6572730B07546F704C65667408546F705269676874000A + 46696C6C2E436F6C6F7207097846463230323032300748697454657374080A53 + 697A652E57696474680500000000000000C804400B53697A652E486569676874 + 0500000000000000C804401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E6507585261646975730500000000 + 000000C0004007595261646975730500000000000000C00040000F54436F6C6F + 72416E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C + 6F72416E696D6174696F6E31084475726174696F6E0500000000000000000000 + 0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456 + 616C756507097846463230323032300953746F7056616C756507097846463430 + 343034300754726967676572062049734D6F7573654F7665723D747275653B49 + 73507265737365643D66616C73650E54726967676572496E7665727365062149 + 734D6F7573654F7665723D66616C73653B4973507265737365643D66616C7365 + 00000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65061562 + 7574746F6E436F6C6F72416E696D6174696F6E32084475726174696F6E050000 + 00000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F + 720A537461727456616C756507097846463430343034300953746F7056616C75 + 6507097846463137353739430754726967676572061F4973507265737365643D + 747275653B49734D6F7573654F7665723D747275650E54726967676572496E76 + 6572736506204973507265737365643D66616C73653B49734D6F7573654F7665 + 723D7472756500000007544C61796F757400095374796C654E616D6506074C61 + 796F75743105416C69676E070643656E7465720A53697A652E57696474680500 + 000000000000A002400B53697A652E4865696768740500000000000000C00140 + 1453697A652E506C6174666F726D44656661756C740800055450617468000953 + 74796C654E616D650605506174683105416C69676E0706436C69656E74094461 + 74612E506174680A3400000004000000000000000000C8420000C84201000000 + 000096430000C842010000000000484300009643030000000000C8420000C842 + 0A46696C6C2E436F6C6F720708636C6157686974650748697454657374080A53 697A652E57696474680500000000000000A002400B53697A652E486569676874 0500000000000000C001401453697A652E506C6174666F726D44656661756C74 - 080005545061746800095374796C654E616D650605506174683105416C69676E - 0706436C69656E7409446174612E506174680A34000000040000000000000000 - 00C8420000C84201000000000096430000C84201000000000048430000964303 - 0000000000C8420000C8420A46696C6C2E436F6C6F720708636C615768697465 - 0748697454657374080A53697A652E57696474680500000000000000A002400B - 53697A652E4865696768740500000000000000C001401453697A652E506C6174 - 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000 - 00005450463007544C61796F757400095374796C654E616D6506137363726F6C - 6C6261726C656674627574746F6E05416C69676E070643656E74657207566973 - 69626C6508085461624F726465720208000A5452656374616E676C6500095374 - 796C654E616D65060A6261636B67726F756E6405416C69676E0706436C69656E - 740C436C69704368696C6472656E090A436C6970506172656E74090A46696C6C + 080B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C6179 + 6F757400095374796C654E616D6506137363726F6C6C6261726C656674627574 + 746F6E05416C69676E070643656E7465720756697369626C6508085461624F72 + 6465720220000A5452656374616E676C6500095374796C654E616D65060A6261 + 636B67726F756E6405416C69676E0706436C69656E740C436C69704368696C64 + 72656E090A436C6970506172656E740907436F726E6572730B07546F704C6566 + 740A426F74746F6D4C656674000A46696C6C2E436F6C6F720709784646323032 + 3032300748697454657374080A53697A652E57696474680500000000000000C8 + 04400B53697A652E4865696768740500000000000000C804401453697A652E50 + 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E + 6507585261646975730500000000000000C00040075952616469757305000000 + 00000000C00040000F54436F6C6F72416E696D6174696F6E00095374796C654E + 616D650615627574746F6E436F6C6F72416E696D6174696F6E31084475726174 + 696F6E05000000000000000000000C50726F70657274794E616D65060A46696C + 6C2E436F6C6F720A537461727456616C75650709784646323032303230095374 + 6F7056616C756507097846463430343034300754726967676572062049734D6F + 7573654F7665723D747275653B4973507265737365643D66616C73650E547269 + 67676572496E7665727365062149734D6F7573654F7665723D66616C73653B49 + 73507265737365643D66616C736500000F54436F6C6F72416E696D6174696F6E + 00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F + 6E32084475726174696F6E05000000000000000000000C50726F70657274794E + 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464634 + 30343034300953746F7056616C75650709784646313735373943075472696767 + 6572061F4973507265737365643D747275653B49734D6F7573654F7665723D74 + 7275650E54726967676572496E766572736506204973507265737365643D6661 + 6C73653B49734D6F7573654F7665723D7472756500000007544C61796F757400 + 095374796C654E616D6506074C61796F75743105416C69676E070643656E7465 + 720A53697A652E57696474680500000000000000A002400B53697A652E486569 + 6768740500000000000000C001401453697A652E506C6174666F726D44656661 + 756C74080005545061746800095374796C654E616D650605506174683105416C + 69676E0706436C69656E7409446174612E506174680A34000000040000000000 + 00000000C8420000C84201000000000096430000C84201000000000048430000 + 9643030000000000C8420000C8420A46696C6C2E436F6C6F720708636C615768 + 6974650748697454657374080D526F746174696F6E416E676C65050000000000 + 0000B405400A53697A652E57696474680500000000000000A002400B53697A65 + 2E4865696768740500000000000000C001401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000005450 + 463007544C61796F757400095374796C654E616D6506147363726F6C6C626172 + 7269676874627574746F6E05416C69676E070643656E7465720756697369626C + 6508085461624F726465720221000A5452656374616E676C6500095374796C65 + 4E616D65060A6261636B67726F756E6405416C69676E0706436C69656E740C43 + 6C69704368696C6472656E090A436C6970506172656E740907436F726E657273 + 0B08546F7052696768740B426F74746F6D5269676874000A46696C6C2E436F6C + 6F7207097846463230323032300748697454657374080A53697A652E57696474 + 680500000000000000C804400B53697A652E4865696768740500000000000000 + C804401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E6507585261646975730500000000000000C000400759 + 5261646975730500000000000000C00040000F54436F6C6F72416E696D617469 + 6F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174 + 696F6E31084475726174696F6E05000000000000000000000C50726F70657274 + 794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507097846 + 463230323032300953746F7056616C7565070978464634303430343007547269 + 67676572062049734D6F7573654F7665723D747275653B497350726573736564 + 3D66616C73650E54726967676572496E7665727365062149734D6F7573654F76 + 65723D66616C73653B4973507265737365643D66616C736500000F54436F6C6F + 72416E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C + 6F72416E696D6174696F6E32084475726174696F6E0500000000000000000000 + 0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456 + 616C756507097846463430343034300953746F7056616C756507097846463137 + 353739430754726967676572061F4973507265737365643D747275653B49734D + 6F7573654F7665723D747275650E54726967676572496E766572736506204973 + 507265737365643D66616C73653B49734D6F7573654F7665723D747275650000 + 0007544C61796F757400095374796C654E616D6506074C61796F75743105416C + 69676E070643656E7465720A53697A652E57696474680500000000000000A002 + 400B53697A652E4865696768740500000000000000C001401453697A652E506C + 6174666F726D44656661756C74080005545061746800095374796C654E616D65 + 0605506174683105416C69676E0706436C69656E7409446174612E506174680A + 3400000004000000000000000000C8420000C84201000000000096430000C842 + 010000000000484300009643030000000000C8420000C8420A46696C6C2E436F + 6C6F720708636C6157686974650748697454657374080D526F746174696F6E41 + 6E676C650500000000000000B405C00A53697A652E5769647468050000000000 + 0000A002400B53697A652E4865696768740500000000000000C001401453697A + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E65000000005450463007544C61796F757400095374796C654E616D6506 + 127363726F6C6C626172746F70627574746F6E05416C69676E070643656E7465 + 720756697369626C6508085461624F726465720222000A5452656374616E676C + 6500095374796C654E616D65060A6261636B67726F756E6405416C69676E0706 + 436C69656E740C436C69704368696C6472656E090A436C6970506172656E7409 + 07436F726E6572730B07546F704C65667408546F705269676874000A46696C6C 2E436F6C6F7207097846463230323032300748697454657374080A53697A652E 57696474680500000000000000C804400B53697A652E48656967687405000000 00000000C804401453697A652E506C6174666F726D44656661756C74080B5374 - 726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E - 00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F - 6E31084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E - 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464632 - 30323032300953746F7056616C75650709784646343034303430075472696767 - 6572062049734D6F7573654F7665723D747275653B4973507265737365643D66 - 616C73650E54726967676572496E7665727365062149734D6F7573654F766572 - 3D66616C73653B4973507265737365643D66616C736500000F54436F6C6F7241 - 6E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72 - 416E696D6174696F6E32084475726174696F6E05000000000000000000000C50 - 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C - 756507097846463430343034300953746F7056616C7565070978464631373537 - 39430754726967676572061F4973507265737365643D747275653B49734D6F75 - 73654F7665723D747275650E54726967676572496E7665727365062049735072 - 65737365643D66616C73653B49734D6F7573654F7665723D7472756500000007 - 544C61796F757400095374796C654E616D6506074C61796F75743105416C6967 - 6E070643656E7465720A53697A652E57696474680500000000000000A002400B - 53697A652E4865696768740500000000000000C001401453697A652E506C6174 - 666F726D44656661756C74080005545061746800095374796C654E616D650605 - 506174683105416C69676E0706436C69656E7409446174612E506174680A3400 - 000004000000000000000000C8420000C84201000000000096430000C8420100 - 00000000484300009643030000000000C8420000C8420A46696C6C2E436F6C6F - 720708636C6157686974650748697454657374080D526F746174696F6E416E67 - 6C650500000000000000B405400A53697A652E57696474680500000000000000 + 726F6B652E4B696E6407044E6F6E6507585261646975730500000000000000C0 + 004007595261646975730500000000000000C00040000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E + 696D6174696F6E31084475726174696F6E05000000000000000000000C50726F + 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 + 07097846463230323032300953746F7056616C75650709784646343034303430 + 0754726967676572062049734D6F7573654F7665723D747275653B4973507265 + 737365643D66616C73650E54726967676572496E7665727365062149734D6F75 + 73654F7665723D66616C73653B4973507265737365643D66616C736500000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F + 6E436F6C6F72416E696D6174696F6E32084475726174696F6E05000000000000 + 000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 + 61727456616C756507097846463430343034300953746F7056616C7565070978 + 46463137353739430754726967676572061F4973507265737365643D74727565 + 3B49734D6F7573654F7665723D747275650E54726967676572496E7665727365 + 06204973507265737365643D66616C73653B49734D6F7573654F7665723D7472 + 756500000007544C61796F757400095374796C654E616D6506074C61796F7574 + 3105416C69676E070643656E7465720A53697A652E5769647468050000000000 + 0000A002400B53697A652E4865696768740500000000000000C001401453697A + 652E506C6174666F726D44656661756C74080005545061746800095374796C65 + 4E616D650605506174683105416C69676E0706436C69656E7409446174612E50 + 6174680A3400000004000000000000000000C8420000C8420100000000009643 + 0000C842010000000000484300009643030000000000C8420000C8420A46696C + 6C2E436F6C6F720708636C6157686974650748697454657374080D526F746174 + 696F6E416E676C650500000000000000B406400A53697A652E57696474680500 + 000000000000A002400B53697A652E4865696768740500000000000000C00140 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E65000000005450463007544C61796F757400095374796C654E + 616D65060D636F6D626F626F787374796C6505416C69676E070643656E746572 + 0A53697A652E57696474680500000000000000C805400B53697A652E48656967 + 68740500000000000000C803401453697A652E506C6174666F726D4465666175 + 6C74080756697369626C6508085461624F726465720223000C5442727573684F + 626A65637400095374796C654E616D65060A666F726567726F756E6400000B54 + 466F6E744F626A65637400095374796C654E616D650604666F6E7409466F6E74 + 2E53697A650500000000000000D00240000007544C61796F757400095374796C + 654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74 + 730A53697A652E57696474680500000000000000C805400B53697A652E486569 + 6768740500000000000000C803401453697A652E506C6174666F726D44656661 + 756C7408000A5452656374616E676C6500095374796C654E616D65060A526563 + 74616E676C653105416C69676E0706436C69656E740A46696C6C2E436F6C6F72 + 07097846463230323032300748697454657374080A53697A652E576964746805 + 00000000000000C805400B53697A652E4865696768740500000000000000C803 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E6507585261646975730500000000000000C0004007595261 + 646975730500000000000000C000400007544C61796F757400095374796C654E + 616D650611427574746F6E5374796C654F626A65637405416C69676E07084669 + 7452696768740B4D617267696E732E546F70050000000000000080FF3F0D4D61 + 7267696E732E5269676874050000000000000080FF3F0E4D617267696E732E42 + 6F74746F6D050000000000000080FF3F0A506F736974696F6E2E580500000000 + 005ED99705400A506F736974696F6E2E59050000000000000080FF3F0A53697A + 652E5769647468050000000000889AB803400B53697A652E4865696768740500 + 000000000000B803401453697A652E506C6174666F726D44656661756C740800 + 07544C61796F757400095374796C654E616D6506074C61796F75743105416C69 + 676E070643656E7465720C4D617267696E732E4C656674050000000000000080 + FF3F0A53697A652E57696474680500000000000000A002400B53697A652E4865 + 696768740500000000000000C001401453697A652E506C6174666F726D446566 + 61756C74080005545061746800095374796C654E616D65060550617468310541 + 6C69676E0706436C69656E7409446174612E506174680A340000000400000000 + 0000000000C8420000C84201000000000096430000C842010000000000484300 + 009643030000000000C8420000C8420A46696C6C2E436F6C6F720708636C6157 + 686974650748697454657374080A53697A652E57696474680500000000000000 A002400B53697A652E4865696768740500000000000000C001401453697A652E 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F - 6E65000000005450463007544C61796F757400095374796C654E616D65061473 - 63726F6C6C6261727269676874627574746F6E05416C69676E070643656E7465 - 720756697369626C6508085461624F726465720209000A5452656374616E676C - 6500095374796C654E616D65060A6261636B67726F756E6405416C69676E0706 - 436C69656E740C436C69704368696C6472656E090A436C6970506172656E7409 - 0A46696C6C2E436F6C6F7207097846463230323032300748697454657374080A - 53697A652E57696474680500000000000000C804400B53697A652E4865696768 - 740500000000000000C804401453697A652E506C6174666F726D44656661756C - 74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D - 6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E69 - 6D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F0C50726F70 - 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 - 097846463230323032300953746F7056616C7565070978464634303430343007 - 54726967676572062049734D6F7573654F7665723D747275653B497350726573 - 7365643D66616C73650E54726967676572496E7665727365062149734D6F7573 - 654F7665723D66616C73653B4973507265737365643D66616C736500000F5443 - 6F6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E - 436F6C6F72416E696D6174696F6E32084475726174696F6E0500000000000000 - 0000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461 - 727456616C756507097846463430343034300953746F7056616C756507097846 - 463137353739430754726967676572061F4973507265737365643D747275653B - 49734D6F7573654F7665723D747275650E54726967676572496E766572736506 - 204973507265737365643D66616C73653B49734D6F7573654F7665723D747275 - 6500000007544C61796F757400095374796C654E616D6506074C61796F757431 - 05416C69676E070643656E7465720A53697A652E576964746805000000000000 - 00A002400B53697A652E4865696768740500000000000000C001401453697A65 - 2E506C6174666F726D44656661756C74080005545061746800095374796C654E - 616D650605506174683105416C69676E0706436C69656E7409446174612E5061 - 74680A3400000004000000000000000000C8420000C842010000000000964300 - 00C842010000000000484300009643030000000000C8420000C8420A46696C6C - 2E436F6C6F720708636C6157686974650748697454657374080D526F74617469 - 6F6E416E676C650500000000000000B405C00A53697A652E5769647468050000 - 0000000000A002400B53697A652E4865696768740500000000000000C0014014 - 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E - 6407044E6F6E65000000005450463007544C61796F757400095374796C654E61 - 6D6506127363726F6C6C626172746F70627574746F6E05416C69676E07064365 - 6E7465720756697369626C6508085461624F72646572020A000A545265637461 - 6E676C6500095374796C654E616D65060A6261636B67726F756E6405416C6967 - 6E0706436C69656E740C436C69704368696C6472656E090A436C697050617265 - 6E74090A46696C6C2E436F6C6F72070978464632303230323007486974546573 - 74080A53697A652E57696474680500000000000000C804400B53697A652E4865 - 696768740500000000000000C804401453697A652E506C6174666F726D446566 - 61756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F7241 - 6E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72 - 416E696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F0C50 - 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C - 756507097846463230323032300953746F7056616C7565070978464634303430 - 34300754726967676572062049734D6F7573654F7665723D747275653B497350 - 7265737365643D66616C73650E54726967676572496E7665727365062149734D - 6F7573654F7665723D66616C73653B4973507265737365643D66616C73650000 - 0F54436F6C6F72416E696D6174696F6E00095374796C654E616D650615627574 - 746F6E436F6C6F72416E696D6174696F6E32084475726174696F6E0500000000 - 0000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A - 537461727456616C756507097846463430343034300953746F7056616C756507 - 097846463137353739430754726967676572061F4973507265737365643D7472 - 75653B49734D6F7573654F7665723D747275650E54726967676572496E766572 - 736506204973507265737365643D66616C73653B49734D6F7573654F7665723D - 7472756500000007544C61796F757400095374796C654E616D6506074C61796F - 75743105416C69676E070643656E7465720A53697A652E576964746805000000 - 00000000A002400B53697A652E4865696768740500000000000000C001401453 - 697A652E506C6174666F726D44656661756C7408000554506174680009537479 - 6C654E616D650605506174683105416C69676E0706436C69656E740944617461 - 2E506174680A3400000004000000000000000000C8420000C842010000000000 - 96430000C842010000000000484300009643030000000000C8420000C8420A46 - 696C6C2E436F6C6F720708636C6157686974650748697454657374080D526F74 - 6174696F6E416E676C650500000000000000B406400A53697A652E5769647468 - 0500000000000000A002400B53697A652E4865696768740500000000000000C0 - 01401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E - 4B696E6407044E6F6E65000000005450463007544C61796F757400095374796C - 654E616D65060E7363726F6C6C6261727374796C6505416C69676E070643656E - 7465720756697369626C6508085461624F72646572020B000754427574746F6E - 00095374796C654E616D65060A6C656674627574746F6E05416C69676E07044C - 656674064C6F636B6564090A506F736974696F6E2E5905000000000000008003 - 400A53697A652E576964746805000000000000008003400B53697A652E486569 - 67687405000000000000009003401453697A652E506C6174666F726D44656661 - 756C74080B5374796C654C6F6F6B757006137363726F6C6C6261726C65667462 - 7574746F6E00000754427574746F6E00095374796C654E616D65060B72696768 - 74627574746F6E05416C69676E07055269676874064C6F636B6564090A506F73 - 6974696F6E2E5805000000000000008804400A506F736974696F6E2E59050000 - 00000000008003400A53697A652E576964746805000000000000008003400B53 - 697A652E48656967687405000000000000009003401453697A652E506C617466 - 6F726D44656661756C74080B5374796C654C6F6F6B757006147363726F6C6C62 - 61727269676874627574746F6E00000754427574746F6E00095374796C654E61 - 6D65060C626F74746F6D627574746F6E05416C69676E0706426F74746F6D064C - 6F636B6564090A506F736974696F6E2E5905000000000000008804400A53697A - 652E57696474680500000000000000C804400B53697A652E4865696768740500 - 0000000000008003401453697A652E506C6174666F726D44656661756C74080B - 5374796C654C6F6F6B757006157363726F6C6C626172626F74746F6D62757474 - 6F6E00000654547261636B00095374796C654E616D65060668747261636B0541 + 6E65000000000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650614436F6C6F72416E696D6174696F6E315374796C65084475726174696F6E + 05000000000000000000000C50726F70657274794E616D65060A46696C6C2E43 + 6F6C6F720A537461727456616C756507097846463230323032300953746F7056 + 616C756507097846463430343034300754726967676572062149734D6F757365 + 4F7665723D747275653B4973507265737365643D66616C73653B0E5472696767 + 6572496E7665727365062249734D6F7573654F7665723D66616C73653B497350 + 7265737365643D66616C73653B00000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D650614436F6C6F72416E696D6174696F6E325374796C65 + 084475726174696F6E05000000000000000000000C50726F70657274794E616D + 65060A46696C6C2E436F6C6F720A537461727456616C75650709784646343034 + 3034300953746F7056616C756507097846463241383245320754726967676572 + 062049734D6F7573654F7665723D747275653B4973466F63757365643D747275 + 653B0E54726967676572496E7665727365062149734D6F7573654F7665723D74 + 7275653B4973466F63757365643D66616C73653B0000000007544C61796F7574 + 00095374796C654E616D650607636F6E74656E7405416C69676E0706436C6965 + 6E74064C6F636B6564090C4D617267696E732E4C656674050000000000000080 + 00400B4D617267696E732E546F7005000000000000008000400D4D617267696E + 732E52696768740500000000000000D803400E4D617267696E732E426F74746F + 6D05000000000000008000400A53697A652E576964746805000000000000008E + 05400B53697A652E4865696768740500000000000000A803401453697A652E50 + 6C6174666F726D44656661756C7408000000545046300A5452656374616E676C + 6500095374796C654E616D6506147374617475736261726E6F67726970737479 + 6C6505416C69676E070643656E7465720C436C69704368696C6472656E090A46 + 696C6C2E436F6C6F7207097846463235323532350553696465730B03546F7000 + 0A53697A652E57696474680500000000000000F004400B53697A652E48656967 + 68740500000000000000C804401453697A652E506C6174666F726D4465666175 + 6C74080C5374726F6B652E436F6C6F7207097846463135313531350756697369 + 626C650800005450463007544C61796F757400095374796C654E616D65061373 + 6D616C6C7363726F6C6C6261727374796C6505416C69676E070643656E746572 + 0756697369626C6508085461624F726465720224000654547261636B00095374 + 796C654E616D65060668747261636B05416C69676E0706436C69656E74064C6F + 636B6564090B4F7269656E746174696F6E070A486F72697A6F6E74616C0A5369 + 7A652E57696474680500000000000000C804400B53697A652E48656967687405 + 00000000000000C804401453697A652E506C6174666F726D44656661756C7408 + 0B5374796C654C6F6F6B757006147363726F6C6C62617268747261636B737479 + 6C6500000654547261636B00095374796C654E616D65060676747261636B0541 6C69676E0706436C69656E74064C6F636B6564090B4F7269656E746174696F6E - 070A486F72697A6F6E74616C0A53697A652E5769647468050000000000000090 - 03400B53697A652E48656967687405000000000000009003401453697A652E50 + 070A486F72697A6F6E74616C0A53697A652E57696474680500000000000000C8 + 04400B53697A652E4865696768740500000000000000C804401453697A652E50 6C6174666F726D44656661756C74080B5374796C654C6F6F6B75700614736372 - 6F6C6C62617268747261636B7374796C6500000654547261636B00095374796C - 654E616D65060676747261636B05416C69676E0706436C69656E74064C6F636B - 6564090B4F7269656E746174696F6E070A486F72697A6F6E74616C0A53697A65 - 2E576964746805000000000000009003400B53697A652E486569676874050000 - 00000000009003401453697A652E506C6174666F726D44656661756C74080B53 - 74796C654C6F6F6B757006147363726F6C6C62617276747261636B7374796C65 - 00000754427574746F6E00095374796C654E616D650609746F70627574746F6E - 05416C69676E0703546F700A53697A652E57696474680500000000000000C804 - 400B53697A652E48656967687405000000000000008003401453697A652E506C - 6174666F726D44656661756C74080B5374796C654C6F6F6B757006127363726F - 6C6C626172746F70627574746F6E000000545046300A5452656374616E676C65 - 00095374796C654E616D65060A7468756D627374796C6505416C69676E070643 - 656E7465720A46696C6C2E436F6C6F7207097846463444344434440748697454 - 657374080A53697A652E57696474680500000000000000C804400B53697A652E - 4865696768740500000000000000C804401453697A652E506C6174666F726D44 - 656661756C74080B5374726F6B652E4B696E6407044E6F6E650756697369626C - 6508000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614 - 7468756D62436F6C6F72416E696D6174696F6E31084475726174696F6E050000 - 000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F - 720A537461727456616C756507097846463444344434440953746F7056616C75 - 6507097846463137353739430754726967676572060E4973507265737365643D - 747275650E54726967676572496E7665727365060F4973507265737365643D66 - 616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D - 650614436F6C6F72416E696D6174696F6E315374796C65084475726174696F6E - 050000000000CDCCCCFB3F07496E7665727365090C50726F70657274794E616D - 65060A46696C6C2E436F6C6F720A537461727456616C75650709784646344434 - 4434440953746F7056616C75650707636C614772617907547269676765720610 - 49734D6F7573654F7665723D747275650E54726967676572496E766572736506 - 1149734D6F7573654F7665723D66616C7365000000545046300D545377697463 - 684F626A65637400095374796C654E616D65060B7377697463687374796C6505 - 416C69676E070643656E746572044B696E64070C466164696E67547261636B73 - 0A53697A652E57696474680500000000000000C805400B53697A652E48656967 - 68740500000000000000C803401453697A652E506C6174666F726D4465666175 - 6C7408085461624F72646572020C12547261636B696E675468756D625363616C - 65050000000000000080FF3F0756697369626C65080A46696C6C2E436F6C6F72 - 07097846463230323032300C46696C6C4F6E2E436F6C6F720709784646313735 - 3739430B46696C6C4F6E2E4B696E640705536F6C69640B5374726F6B652E4B69 - 6E6407044E6F6E650B5468756D622E436F6C6F7207097846463430343034300D - 5468756D624F6E2E436F6C6F7207097846463241383245320C5468756D624F6E - 2E4B696E640705536F6C6964105468756D625374726F6B652E4B696E6407044E - 6F6E650F5468756D625374726F6B652E4361700705526F756E64105468756D62 - 5374726F6B652E446173680706437573746F6D105468756D625374726F6B652E - 4A6F696E0705526F756E64165468756D625374726F6B652E437573746F6D4461 - 73680A08000000000000000000000000005450463007544C61796F7574000953 - 74796C654E616D65060C7370696E626F787374796C6505416C69676E07064365 - 6E7465720A53697A652E57696474680500000000006666E005400B53697A652E - 4865696768740500000000000000A803401453697A652E506C6174666F726D44 - 656661756C74080756697369626C6508085461624F72646572020D000A545265 - 6374616E676C6500095374796C654E616D65060A6261636B67726F756E640541 - 6C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846463230 - 323032300A53697A652E57696474680500000000006666E005400B53697A652E - 4865696768740500000000000000A803401453697A652E506C6174666F726D44 - 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313500 - 0F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C - 6F72416E696D6174696F6E315374796C65084475726174696F6E050000000000 - CDCCCCFB3F07496E7665727365090C50726F70657274794E616D65060C537472 - 6F6B652E436F6C6F720A537461727456616C7565070978464631353135313509 - 53746F7056616C75650709784646343034303430075472696767657206104973 - 4D6F7573654F7665723D747275650E54726967676572496E7665727365061149 - 734D6F7573654F7665723D66616C73650000000C5442727573684F626A656374 - 00095374796C654E616D65060A666F726567726F756E640B42727573682E436F - 6C6F72070978464645414541454100000C5442727573684F626A656374000953 - 74796C654E616D65060973656C656374696F6E0B42727573682E436F6C6F7207 - 09783936324138324532000007544C61796F757400095374796C654E616D6506 - 07636F6E74656E7405416C69676E0706436C69656E74064C6F636B6564090C4D - 617267696E732E4C65667405000000000000008000400B4D617267696E732E54 - 6F7005000000000000008000400D4D617267696E732E52696768740500000000 - 0000008000400E4D617267696E732E426F74746F6D0500000000000000800040 - 0A53697A652E576964746805000000000070668405400B53697A652E48656967 - 687405000000000000008803401453697A652E506C6174666F726D4465666175 - 6C740800000754427574746F6E00095374796C654E616D65060B6D696E757362 - 7574746F6E05416C69676E07074669744C6566740843616E466F637573080643 - 7572736F72070763724172726F770C4D617267696E732E4C6566740500000000 - 0000008000400B4D617267696E732E546F7005000000000000008000400D4D61 - 7267696E732E526967687405000000000000008000400E4D617267696E732E42 - 6F74746F6D05000000000000008000400A506F736974696F6E2E580500000000 - 0000008000400A506F736974696F6E2E5905000000000000008000400A53697A - 652E5769647468050000000000E8FF8703400B53697A652E4865696768740500 - 0000000000008803401453697A652E506C6174666F726D44656661756C74080B - 5374796C654C6F6F6B7570060B627574746F6E7374796C650005545061746800 - 05416C69676E0706436C69656E7409446174612E506174680A40000000050000 - 00000000000000803F00000000010000000000803F0000803F01000000000000 - 000000003F010000000000803F00000000030000000000803F000000000A4669 - 6C6C2E436F6C6F720708636C6157686974650748697454657374080C4D617267 - 696E732E4C6566740500000000000000C001400B4D617267696E732E546F7005 - 00000000000000C001400D4D617267696E732E52696768740500000000000000 - C001400E4D617267696E732E426F74746F6D0500000000000000C001400A5369 - 7A652E5769647468050000000000A0FF9F01400B53697A652E48656967687405 - 00000000000000A001401453697A652E506C6174666F726D44656661756C7408 - 0B5374726F6B652E4B696E6407044E6F6E650000000754427574746F6E000953 - 74796C654E616D65060A706C7573627574746F6E05416C69676E070846697452 - 696768740843616E466F6375730806437572736F72070763724172726F770C4D - 617267696E732E4C65667405000000000000008000400B4D617267696E732E54 - 6F7005000000000000008000400D4D617267696E732E52696768740500000000 - 0000008000400E4D617267696E732E426F74746F6D0500000000000000800040 - 0A506F736974696F6E2E580500000000006A66BA05400A506F736974696F6E2E - 5905000000000000008000400A53697A652E5769647468050000000000F0FF87 - 03400B53697A652E48656967687405000000000000008803401453697A652E50 - 6C6174666F726D44656661756C74080B5374796C654C6F6F6B7570060B627574 - 746F6E7374796C65000554506174680005416C69676E0706436C69656E740944 - 6174612E506174680A3400000004000000000000000000000000000000010000 - 00000000000000803F010000000000803F0000003F0300000000000000000000 - 000A46696C6C2E436F6C6F720708636C6157686974650748697454657374080C - 4D617267696E732E4C6566740500000000000000C001400B4D617267696E732E - 546F700500000000000000C001400D4D617267696E732E526967687405000000 - 00000000C001400E4D617267696E732E426F74746F6D0500000000000000C001 - 400A53697A652E5769647468050000000000C0FF9F01400B53697A652E486569 - 6768740500000000000000A001401453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E6500000000545046300754 - 4C61796F757400095374796C654E616D65060F746162636F6E74726F6C737479 - 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 - 0000008E06400B53697A652E486569676874050000000000FFFFC90540145369 - 7A652E506C6174666F726D44656661756C74080756697369626C650808546162 - 4F72646572020E000A5452656374616E676C6500095374796C654E616D65060A - 6261636B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E - 436F6C6F720709784646333033303330064C6F636B6564090748697454657374 - 080C50616464696E672E4C65667405000000000000008000400B50616464696E - 672E546F7005000000000000008000400D50616464696E672E52696768740500 - 0000000000008000400E50616464696E672E426F74746F6D0500000000000000 - 8000400A53697A652E576964746805000000000000008E06400B53697A652E48 - 6569676874050000000000FFFFC905401453697A652E506C6174666F726D4465 - 6661756C74080C5374726F6B652E436F6C6F7207097846463135313531350000 - 00545046300A5452656374616E676C6500095374796C654E616D65060B746162 - 646F747374796C6505416C69676E070643656E7465720A46696C6C2E436F6C6F - 7207097846463135313531350748697454657374080A53697A652E5769647468 - 0500000000000000C804400B53697A652E4865696768740500000000000000C8 - 04401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E - 4B696E6407044E6F6E650756697369626C6508000F54436F6C6F72416E696D61 - 74696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F706572 - 74794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978 - 46463135313531350953746F7056616C75650709784646324138324532075472 - 6967676572060F497353656C65637465643D747275650E54726967676572496E - 76657273650610497353656C65637465643D66616C7365000000545046300754 - 4C61796F757400095374796C654E616D65060C7461626974656D7374796C6505 - 416C69676E070643656E7465720A53697A652E57696474680500000000000000 - C804400B53697A652E4865696768740500000000000000C803401453697A652E - 506C6174666F726D44656661756C74080756697369626C6508085461624F7264 - 6572020F000A5452656374616E676C6500095374796C654E616D650603746F70 - 05416C69676E0708436F6E74656E74730C436C69704368696C6472656E090743 - 6F726E6572730B07546F704C65667408546F705269676874000A46696C6C2E43 - 6F6C6F720709784646323032303230064C6F636B656409074869745465737408 - 0553696465730B03546F70044C656674055269676874000A53697A652E576964 - 74680500000000000000C804400B53697A652E48656967687405000000000000 - 00C803401453697A652E506C6174666F726D44656661756C74080C5374726F6B - 652E436F6C6F720709784646313531353135000654476C79706800095374796C - 654E616D65060A676C7970687374796C650C4D617267696E732E4C6566740500 - 0000000000008001400D4D617267696E732E5269676874050000000000000080 - 01C005416C69676E07044C6566740A53697A652E576964746805000000000000 - 008003400B53697A652E48656967687405000000000000008003401453697A65 - 2E506C6174666F726D44656661756C7408000005545465787400095374796C65 - 4E616D6506047465787405416C69676E0706436C69656E74064C6F636B656409 - 0748697454657374080C4D617267696E732E4C6566740500000000000000C000 - 400B4D617267696E732E546F700500000000000000C000400D4D617267696E73 - 2E52696768740500000000000000C000400E4D617267696E732E426F74746F6D - 0500000000000000C000400A53697A652E57696474680500000000000000B004 - 400B53697A652E48656967687405000000000000009803401453697A652E506C - 6174666F726D44656661756C7408165465787453657474696E67732E466F6E74 - 436F6C6F720708636C615768697465155465787453657474696E67732E576F72 - 64577261700800000F54436F6C6F72416E696D6174696F6E00095374796C654E - 616D650612746162436F6C6F72416E696D6174696F6E310D416E696D6174696F - 6E547970650705496E4F7574084475726174696F6E050000000000CDCCCCFB3F - 0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456 - 616C756507097846463230323032300953746F7056616C756507097846463430 - 343034300754726967676572062149734D6F7573654F7665723D747275653B49 - 7353656C65637465643D66616C73650E54726967676572496E76657273650622 - 49734D6F7573654F7665723D66616C73653B497353656C65637465643D66616C - 736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 - 12746162436F6C6F72416E696D6174696F6E32084475726174696F6E05000000 - 0000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F72 - 0A537461727456616C756507097846463230323032300953746F7056616C7565 - 07097846463241383245320754726967676572060F497353656C65637465643D - 747275650E54726967676572496E76657273650610497353656C65637465643D - 66616C736500000000545046300A5452656374616E676C6500095374796C654E - 616D65060D7468756D626261727374796C6505416C69676E070643656E746572 - 0A46696C6C2E436F6C6F7207097846463241383245320748697454657374080A - 53697A652E57696474680500000000000000A003400B53697A652E4865696768 - 740500000000000000A003401453697A652E506C6174666F726D44656661756C - 74080C5374726F6B652E436F6C6F720709784646313531353135075669736962 - 6C6508000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 - 147468756D62436F6C6F72416E696D6174696F6E31084475726174696F6E0500 - 00000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C - 6F720A537461727456616C756507097846463241383245320953746F7056616C - 756507097846463137353739430754726967676572061F497350726573736564 - 3D747275653B49734D6F7573654F7665723D747275650E54726967676572496E - 766572736506104973507265737365643D66616C73653B00000F54436F6C6F72 - 416E696D6174696F6E00095374796C654E616D6506147468756D62436F6C6F72 - 416E696D6174696F6E32084475726174696F6E050000000000CDCCCCFB3F0C50 - 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C - 756507097846463241383245320953746F7056616C7565070978464634303942 - 46460754726967676572062049734D6F7573654F7665723D747275653B497350 - 7265737365643D66616C73650E54726967676572496E7665727365062149734D - 6F7573654F7665723D66616C73653B4973507265737365643D66616C73650000 - 0F54436F6C6F72416E696D6174696F6E00095374796C654E616D650615746875 - 6D625374726F6B65416E696D6174696F6E31084475726174696F6E0500000000 - 00CDCCCCFB3F0C50726F70657274794E616D65060C5374726F6B652E436F6C6F - 720A537461727456616C756507097846463135313531350953746F7056616C75 - 6507097846463137353739430754726967676572061F4973507265737365643D - 747275653B49734D6F7573654F7665723D747275650E54726967676572496E76 - 65727365060F4973507265737365643D66616C73650000005450463007544C61 - 796F757400095374796C654E616D65060C6C697374626F787374796C6505416C - 69676E070643656E7465720A53697A652E5769647468050000000000FFFFE905 - 400B53697A652E48656967687405000000000000008306401453697A652E506C - 6174666F726D44656661756C74080756697369626C6508085461624F72646572 - 0210000C5442727573684F626A65637400095374796C654E616D650618416C74 - 65726E6174696E67526F774261636B67726F756E640B42727573682E436F6C6F - 72070978464632433243324300000A5452656374616E676C6500095374796C65 - 4E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E7473 - 0A46696C6C2E436F6C6F720709784646323032303230064C6F636B6564090748 - 697454657374080C50616464696E672E4C65667405000000000000008000400B - 50616464696E672E546F7005000000000000008000400D50616464696E672E52 - 6967687405000000000000008000400E50616464696E672E426F74746F6D0500 - 0000000000008000400A53697A652E5769647468050000000000FFFFE905400B - 53697A652E48656967687405000000000000008306401453697A652E506C6174 - 666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846463135 - 313531350007544C61796F757400095374796C654E616D650607636F6E74656E - 7405416C69676E0706436C69656E740C436C69704368696C6472656E090A5369 - 7A652E5769647468050000000000FFFFC105400B53697A652E48656967687405 - 00000000000000DE05401453697A652E506C6174666F726D44656661756C7408 - 000A5452656374616E676C6500095374796C654E616D65060973656C65637469 - 6F6E0A46696C6C2E436F6C6F7207097846463241383245320748697454657374 - 080A53697A652E57696474680500000000000000C804400B53697A652E486569 - 6768740500000000000000C804401453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E - 676C6500095374796C654E616D650610666F637573656473656C656374696F6E - 0A46696C6C2E436F6C6F7207097846463241383245320748697454657374080A - 53697A652E57696474680500000000000000C804400B53697A652E4865696768 - 740500000000000000C804401453697A652E506C6174666F726D44656661756C - 74080B5374726F6B652E4B696E6407044E6F6E650B5374726F6B652E44617368 - 0703446F740000000A545363726F6C6C42617200095374796C654E616D65060A - 767363726F6C6C62617205416C69676E070552696768740B536D616C6C436861 - 6E676505000000000000000000000B4F7269656E746174696F6E070856657274 - 6963616C0A506F736974696F6E2E58050000000000FFFFC505400A506F736974 - 696F6E2E5905000000000000008000400A53697A652E57696474680500000000 - 0000008003400B53697A652E4865696768740500000000000000DE0540145369 - 7A652E506C6174666F726D44656661756C740800000A545363726F6C6C426172 - 00095374796C654E616D65060A687363726F6C6C62617205416C69676E070642 - 6F74746F6D0B536D616C6C4368616E676505000000000000000000000B4F7269 - 656E746174696F6E070A486F72697A6F6E74616C0A506F736974696F6E2E5805 - 000000000000008000400A506F736974696F6E2E590500000000000000E20540 - 0A53697A652E5769647468050000000000FFFFE105400B53697A652E48656967 - 687405000000000000008003401453697A652E506C6174666F726D4465666175 - 6C740800000F54536D616C6C5363726F6C6C42617200095374796C654E616D65 - 060F76736D616C6C7363726F6C6C62617205416C69676E070552696768740B53 - 6D616C6C4368616E676505000000000000000000000B4F7269656E746174696F - 6E0708566572746963616C0C4D617267696E732E4C6566740500000000000000 - 8000400A506F736974696F6E2E580500000000000000C605400A506F73697469 - 6F6E2E5905000000000000008000400A53697A652E5769647468050000000000 - 00008002400B53697A652E48656967687405000000000000008002401453697A - 652E506C6174666F726D44656661756C74080756697369626C650800000F5453 - 6D616C6C5363726F6C6C42617200095374796C654E616D65060F68736D616C6C - 7363726F6C6C62617205416C69676E0706426F74746F6D0B536D616C6C436861 - 6E676505000000000000000000000B4F7269656E746174696F6E070A486F7269 - 7A6F6E74616C0B4D617267696E732E546F7005000000000000008000400A506F - 736974696F6E2E5805000000000000008000400A506F736974696F6E2E590500 - 000000000000E205400A53697A652E576964746805000000000000009606400B - 53697A652E48656967687405000000000000008002401453697A652E506C6174 - 666F726D44656661756C74080756697369626C65080000000B54476C6F774566 - 666563740008536F66746E657373050000000000CDCCCCFC3F09476C6F77436F - 6C6F720709784646463639453244074F7061636974790500000000006666E6FE - 3F0754726967676572060E4973466F63757365643D7472756507456E61626C65 - 64080000005450463007544C61796F757400095374796C654E616D65060D6C69 - 7374626F78666F6F74657205416C69676E070643656E7465720A53697A652E57 - 6964746805000000000000009205400B53697A652E4865696768740500000000 - 000000D003401453697A652E506C6174666F726D44656661756C740807566973 - 69626C6508085461624F7264657202110005545465787400095374796C654E61 - 6D6506047465787405416C69676E0706436C69656E74064C6F636B6564090748 - 697454657374080C4D617267696E732E4C6566740500000000000000A001400B - 4D617267696E732E546F7005000000000000008000400D4D617267696E732E52 - 696768740500000000000000A001400E4D617267696E732E426F74746F6D0500 - 0000000000008000400A53697A652E57696474680500000000000000FC04400B - 53697A652E4865696768740500000000000000B003401453697A652E506C6174 - 666F726D44656661756C7408165465787453657474696E67732E466F6E74436F - 6C6F720708636C6157686974650000005450463007544C61796F757400095374 - 796C654E616D6506106C697374626F786974656D7374796C6505416C69676E07 - 0643656E7465720A53697A652E57696474680500000000000000D605400B5369 - 7A652E4865696768740500000000000000C003401453697A652E506C6174666F - 726D44656661756C74080756697369626C6508085461624F7264657202120006 - 54476C79706800095374796C654E616D65060A676C7970687374796C650C4D61 - 7267696E732E4C65667405000000000000008000400B4D617267696E732E546F - 70050000000000000080FF3F0D4D617267696E732E5269676874050000000000 - 00008000400E4D617267696E732E426F74746F6D050000000000000080FF3F05 - 416C69676E07044C6566740A53697A652E576964746805000000000000008003 - 400B53697A652E48656967687405000000000000008003401453697A652E506C - 6174666F726D44656661756C7408000005545465787400095374796C654E616D - 6506047465787405416C69676E0706436C69656E740748697454657374080C4D - 617267696E732E4C6566740500000000000000C000400B4D617267696E732E54 - 6F70050000000000000080FF3F0D4D617267696E732E52696768740500000000 - 000000C000400E4D617267696E732E426F74746F6D050000000000000080FF3F - 0A53697A652E57696474680500000000000000CA05400B53697A652E48656967 - 68740500000000000000B003401453697A652E506C6174666F726D4465666175 - 6C7408165465787453657474696E67732E466F6E74436F6C6F720708636C6157 - 68697465155465787453657474696E67732E576F726457726170081654657874 - 53657474696E67732E486F727A416C69676E07074C656164696E670000095443 - 6865636B426F7800095374796C654E616D650605636865636B05416C69676E07 - 084D6F73744C6566740843616E466F637573081244697361626C65466F637573 - 456666656374090A53697A652E57696474680500000000000000A003400B5369 - 7A652E4865696768740500000000000000C003401453697A652E506C6174666F - 726D44656661756C74080756697369626C65080000005450463007544C61796F - 757400095374796C654E616D6506126C697374626F78706C61696E6865616465 - 7205416C69676E070643656E7465720A53697A652E5769647468050000000000 - 00009205400B53697A652E4865696768740500000000000000D003401453697A - 652E506C6174666F726D44656661756C74080756697369626C6508085461624F - 726465720213000A5452656374616E676C6500095374796C654E616D65060A62 - 61636B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E43 - 6F6C6F720709784646324432443244064C6F636B656409074869745465737408 - 0A53697A652E576964746805000000000000009205400B53697A652E48656967 - 68740500000000000000D003401453697A652E506C6174666F726D4465666175 - 6C74080C5374726F6B652E436F6C6F7207097846463135313531350000055454 - 65787400095374796C654E616D6506047465787405416C69676E0706436C6965 - 6E74064C6F636B6564090748697454657374080C4D617267696E732E4C656674 - 0500000000000000A001400B4D617267696E732E546F70050000000000000080 - 00400D4D617267696E732E52696768740500000000000000A001400E4D617267 - 696E732E426F74746F6D05000000000000008000400A53697A652E5769647468 - 0500000000000000FC04400B53697A652E4865696768740500000000000000B0 - 03401453697A652E506C6174666F726D44656661756C74081654657874536574 - 74696E67732E466F6E74436F6C6F720708636C61576869746500000054504630 - 07544C61796F757400095374796C654E616D650609677269647374796C650541 - 6C69676E070643656E7465720A53697A652E5769647468050000000000FFFFE9 - 05400B53697A652E48656967687405000000000000008306401453697A652E50 - 6C6174666F726D44656661756C74080756697369626C6508085461624F726465 - 720214000C5442727573684F626A65637400095374796C654E616D650618416C - 7465726E6174696E67526F774261636B67726F756E640B42727573682E436F6C - 6F72070978333237383738373800000C5442727573684F626A65637400095374 - 796C654E616D6506086C696E6566696C6C0B42727573682E436F6C6F72070978 - 464631353135313500000A5452656374616E676C6500095374796C654E616D65 - 060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A46696C - 6C2E436F6C6F720709784646323032303230064C6F636B656409074869745465 - 7374080C50616464696E672E4C65667405000000000000008000400B50616464 - 696E672E546F7005000000000000008000400D50616464696E672E5269676874 - 05000000000000008000400E50616464696E672E426F74746F6D050000000000 - 00008000400A53697A652E5769647468050000000000FFFFE905400B53697A65 - 2E48656967687405000000000000008306401453697A652E506C6174666F726D - 44656661756C74080C5374726F6B652E436F6C6F720709784646313531353135 - 00075448656164657200095374796C654E616D65060668656164657205536964 - 65730B03546F70044C65667406426F74746F6D0552696768740005416C69676E - 0703546F700A506F736974696F6E2E5805000000000000008000400A506F7369 - 74696F6E2E5905000000000000008000400A53697A652E576964746805000000 - 0000FFFFE105400B53697A652E4865696768740500000000000000A803401453 - 697A652E506C6174666F726D44656661756C7408000007544C61796F75740009 - 5374796C654E616D650607636F6E74656E7405416C69676E0706436C69656E74 - 0C436C69704368696C6472656E090A53697A652E5769647468050000000000FF - FFC105400B53697A652E4865696768740500000000000000B405401453697A65 - 2E506C6174666F726D44656661756C7408000A5452656374616E676C65000953 - 74796C654E616D65060973656C656374696F6E0A46696C6C2E436F6C6F720709 - 7846463241383245320748697454657374080A53697A652E5769647468050000 - 0000000000C804400B53697A652E4865696768740500000000000000C8044014 - 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E - 6407044E6F6E6500000A5452656374616E676C6500095374796C654E616D6506 - 05666F6375730A46696C6C2E436F6C6F72070978414632413832453207486974 - 54657374080C4D617267696E732E4C656674050000000000000080FF3F0B4D61 - 7267696E732E546F70050000000000000080FF3F0D4D617267696E732E526967 - 6874050000000000000080FF3F0E4D617267696E732E426F74746F6D05000000 - 0000000080FF3F0A53697A652E57696474680500000000000000C804400B5369 - 7A652E4865696768740500000000000000C804401453697A652E506C6174666F - 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6507595261 - 646975730500000000000000C000400000000A545363726F6C6C426172000953 - 74796C654E616D65060A767363726F6C6C62617205416C69676E070552696768 - 740B536D616C6C4368616E676505000000000000000000000B4F7269656E7461 - 74696F6E0708566572746963616C0A506F736974696F6E2E58050000000000FF - FFC505400A506F736974696F6E2E590500000000000000B803400A53697A652E - 576964746805000000000000008003400B53697A652E48656967687405000000 - 00000000B405401453697A652E506C6174666F726D44656661756C740800000A - 545363726F6C6C42617200095374796C654E616D65060A687363726F6C6C6261 - 7205416C69676E0706426F74746F6D0B536D616C6C4368616E67650500000000 - 0000000000000B4F7269656E746174696F6E070A486F72697A6F6E74616C0A50 - 6F736974696F6E2E5805000000000000008000400A506F736974696F6E2E5905 - 00000000000000E205400A53697A652E5769647468050000000000FFFFE10540 - 0B53697A652E48656967687405000000000000008003401453697A652E506C61 - 74666F726D44656661756C740800000F54536D616C6C5363726F6C6C42617200 - 095374796C654E616D65060F76736D616C6C7363726F6C6C62617205416C6967 - 6E070552696768740B536D616C6C4368616E676505000000000000000000000B - 4F7269656E746174696F6E0708566572746963616C0C4D617267696E732E4C65 - 667405000000000000008000400A506F736974696F6E2E580500000000000000 - C605400A506F736974696F6E2E5905000000000000008000400A53697A652E57 - 6964746805000000000000008002400B53697A652E4865696768740500000000 - 0000008002401453697A652E506C6174666F726D44656661756C740807566973 - 69626C650800000F54536D616C6C5363726F6C6C42617200095374796C654E61 - 6D65060F68736D616C6C7363726F6C6C62617205416C69676E0706426F74746F - 6D0B536D616C6C4368616E676505000000000000000000000B4F7269656E7461 - 74696F6E070A486F72697A6F6E74616C0B4D617267696E732E546F7005000000 - 000000008000400A506F736974696F6E2E5805000000000000008000400A506F - 736974696F6E2E590500000000000000E205400A53697A652E57696474680500 - 0000000000009606400B53697A652E4865696768740500000000000000800240 - 1453697A652E506C6174666F726D44656661756C74080756697369626C650800 - 0000005450463007544C61796F757400095374796C654E616D65060F68656164 - 65726974656D7374796C6505416C69676E070643656E7465720A53697A652E57 - 6964746805000000000000009205400B53697A652E4865696768740500000000 - 000000D003401453697A652E506C6174666F726D44656661756C740807566973 - 69626C6508085461624F726465720215000A5452656374616E676C6500095374 - 796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E7465 - 6E74730A46696C6C2E436F6C6F720709784646344334433443064C6F636B6564 - 090748697454657374080A53697A652E57696474680500000000000000920540 - 0B53697A652E4865696768740500000000000000D003401453697A652E506C61 - 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 - 3531353135000F54436F6C6F72416E696D6174696F6E00095374796C654E616D - 650615686561646572436F6C6F72416E696D6174696F6E31084475726174696F - 6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E - 436F6C6F720A537461727456616C756507097846463443344334430953746F70 - 56616C756507097846463241383245320754726967676572060E497350726573 - 7365643D747275650E54726967676572496E7665727365060F49735072657373 - 65643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C - 654E616D6506166865616465725374726F6B65416E696D6174696F6E31084475 - 726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060C - 5374726F6B652E436F6C6F720A537461727456616C7565070978464631353135 - 31350953746F7056616C75650709784646324138324532075472696767657206 - 0E4973507265737365643D747275650E54726967676572496E7665727365060F - 4973507265737365643D66616C736500000005545465787400095374796C654E - 616D6506047465787405416C69676E0706436C69656E74064C6F636B65640907 - 48697454657374080C4D617267696E732E4C6566740500000000000000A00140 + 6F6C6C62617276747261636B7374796C650000005450463007544C61796F7574 + 00095374796C654E616D65060D73706C69747465727374796C6505416C69676E + 070643656E7465720A53697A652E57696474680500000000000000A904400B53 + 697A652E4865696768740500000000000080C105401453697A652E506C617466 + 6F726D44656661756C74080756697369626C6508085461624F72646572022500 + 07544C61796F757400095374796C654E616D6506046772697005416C69676E07 + 06436C69656E740A53697A652E57696474680500000000000000A904400B5369 + 7A652E4865696768740500000000000080C105401453697A652E506C6174666F + 726D44656661756C7408000754436972636C6500095374796C654E616D650607 + 436972636C653105416C69676E070643656E7465720A46696C6C2E436F6C6F72 + 07097846463430343034300A53697A652E57696474680500000000000000E001 + 400B53697A652E4865696768740500000000000000E001401453697A652E506C + 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 + 31353135313500000754436972636C6500095374796C654E616D650607436972 + 636C653205416C69676E070643656E7465720A46696C6C2E436F6C6F72070978 + 46463430343034300B4D617267696E732E546F700500000000000000A003400A + 53697A652E57696474680500000000000000E001400B53697A652E4865696768 + 740500000000000000E001401453697A652E506C6174666F726D44656661756C + 74080C5374726F6B652E436F6C6F720709784646313531353135000007544369 + 72636C6500095374796C654E616D650607436972636C653305416C69676E0706 + 43656E7465720A46696C6C2E436F6C6F7207097846463430343034300E4D6172 + 67696E732E426F74746F6D0500000000000000A003400A53697A652E57696474 + 680500000000000000E001400B53697A652E4865696768740500000000000000 + E001401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 + 2E436F6C6F720709784646313531353135000000005450463007544C61796F75 + 7400095374796C654E616D6506106D656E756261726974656D7374796C650541 + 6C69676E070643656E7465720C4D617267696E732E4C65667405000000000000 + 0080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267 + 696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F74 + 746F6D050000000000000080FF3F0A53697A652E576964746805000000000000 + 009205400B53697A652E4865696768740500000000000000D003401453697A65 + 2E506C6174666F726D44656661756C74080756697369626C6508085461624F72 + 6465720226000A5452656374616E676C650005416C69676E0708436F6E74656E + 74730A46696C6C2E436F6C6F7207097846463241383245320748697454657374 + 08074F70616369747905000000000017B7D1F13F0A53697A652E576964746805 + 000000000000009205400B53697A652E4865696768740500000000000000D003 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E000844757261 + 74696F6E05000000000018B7D1F23F0C50726F70657274794E616D6506074F70 + 61636974790A537461727456616C756505000000000000000000000953746F70 + 56616C7565050000000000000080FF3F0754726967676572060F497353656C65 + 637465643D747275650E54726967676572496E76657273650610497353656C65 + 637465643D66616C73650000000A5452656374616E676C6500095374796C654E + 616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A + 46696C6C2E436F6C6F720709784646324138324532074869745465737408074F + 70616369747905000000000017B7D1F13F0A53697A652E576964746805000000 + 000000009205400B53697A652E4865696768740500000000000000D003401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E65000F54466C6F6174416E696D6174696F6E00084475726174696F + 6E05000000000018B7D1F23F0C50726F70657274794E616D6506074F70616369 + 74790A537461727456616C756505000000000000000000000953746F7056616C + 7565050000000000000080FF3F0754726967676572061049734D6F7573654F76 + 65723D747275650E54726967676572496E7665727365061149734D6F7573654F + 7665723D66616C736500000007544C61796F757400095374796C654E616D6506 + 05676C79706805416C69676E07044C6566740A53697A652E5769647468050000 + 0000000000C803400B53697A652E4865696768740500000000000000D0034014 + 53697A652E506C6174666F726D44656661756C74080007544C61796F75740009 + 5374796C654E616D650609636865636B6D61726B05416C69676E0708436F6E74 + 656E7473074F7061636974790500000000006F1283F53F0A53697A652E576964 + 74680500000000000000C803400B53697A652E48656967687405000000000000 + 00D003401453697A652E506C6174666F726D44656661756C7408000554506174 + 680005416C69676E070643656E74657209446174612E506174680A5800000007 + 0000000000000056D9524391AE2C43010000009276664365021643010000009F + 3983432B7C3C43010000009E9AA64382D2B442010000006F1CB04375A4D14201 + 00000026DF8243263F67430300000056D9524391AE2C430A46696C6C2E436F6C + 6F720708636C6157686974650748697454657374080A53697A652E5769647468 + 0500000000000000B002400B53697A652E4865696768740500000000000000B0 + 02401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E6500000F54466C6F6174416E696D6174696F6E00084475 + 726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D650607 + 4F7061636974790A537461727456616C75650500000000000000000000095374 + 6F7056616C7565050000000000000080FF3F0754726967676572060E49734368 + 65636B65643D747275650E54726967676572496E7665727365060F4973436865 + 636B65643D66616C73650000000654476C79706800095374796C654E616D6506 + 0A676C7970687374796C650C4D617267696E732E4C6566740500000000000000 + 80FF3F0B4D617267696E732E546F7005000000000000008000400D4D61726769 + 6E732E52696768740500000000000000C000400E4D617267696E732E426F7474 + 6F6D050000000000000080FF3F05416C69676E070552696768740A506F736974 + 696F6E2E580500000000000000C001400A506F736974696F6E2E590500000000 + 0000008000400A53697A652E576964746805000000000000008003400B53697A + 652E4865696768740500000000000000B803401453697A652E506C6174666F72 + 6D44656661756C740800000654496D61676500095374796C654E616D65060662 + 69746D61700E4D756C74695265734269746D61700E01000005416C69676E0708 + 436F6E74656E74730C4D617267696E732E4C6566740500000000000000800040 0B4D617267696E732E546F7005000000000000008000400D4D617267696E732E - 52696768740500000000000000A001400E4D617267696E732E426F74746F6D05 - 000000000000008000400A53697A652E57696474680500000000000000FC0440 + 526967687405000000000000008000400E4D617267696E732E426F74746F6D05 + 000000000000008000400A53697A652E57696474680500000000000000A80340 0B53697A652E4865696768740500000000000000B003401453697A652E506C61 - 74666F726D44656661756C7408165465787453657474696E67732E466F6E7443 - 6F6C6F720708636C6157686974650000005450463007544C61796F7574000953 - 74796C654E616D65061070726F67726573736261727374796C6505416C69676E - 070643656E7465720A53697A652E576964746805000000000033338505400B53 - 697A652E4865696768740500000000009999E104401453697A652E506C617466 - 6F726D44656661756C74080756697369626C6508085461624F72646572021600 - 0A5452656374616E676C6500095374796C654E616D65060668747261636B0541 - 6C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846463230 - 32303230064C6F636B6564090748697454657374080A53697A652E5769647468 - 05000000000033338505400B53697A652E4865696768740500000000009999E1 - 04401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E - 436F6C6F720709784646313531353135000A5452656374616E676C6500095374 - 796C654E616D65060A68696E64696361746F7205416C69676E07044C6566740A - 46696C6C2E436F6C6F720709784646324138324532064C6F636B656409074869 - 7454657374080C4D617267696E732E4C656674050000000000000080FF3F0B4D - 617267696E732E546F70050000000000000080FF3F0D4D617267696E732E5269 - 676874050000000000000080FF3F0E4D617267696E732E426F74746F6D050000 - 000000000080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A50 - 6F736974696F6E2E59050000000000000080FF3F0A53697A652E576964746805 - 00000000000000C804400B53697A652E4865696768740500000000009999D904 - 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B - 696E6407044E6F6E650000000A5452656374616E676C6500095374796C654E61 - 6D65060676747261636B05416C69676E0708436F6E74656E74730A46696C6C2E - 436F6C6F720709784646323032303230064C6F636B6564090748697454657374 - 080A53697A652E576964746805000000000033338505400B53697A652E486569 - 6768740500000000009999E104401453697A652E506C6174666F726D44656661 - 756C74080C5374726F6B652E436F6C6F720709784646313531353135000A5452 - 656374616E676C6500095374796C654E616D65060A76696E64696361746F7205 - 416C69676E0706426F74746F6D0A46696C6C2E436F6C6F720709784646324138 - 324532064C6F636B6564090748697454657374080C4D617267696E732E4C6566 - 74050000000000000080FF3F0B4D617267696E732E546F700500000000000000 - 80FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D6172 - 67696E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E - 58050000000000000080FF3F0A506F736974696F6E2E59050000000000999989 - 04400A53697A652E576964746805000000000033338105400B53697A652E4865 - 696768740500000000000000A803401453697A652E506C6174666F726D446566 - 61756C74080B5374726F6B652E4B696E6407044E6F6E65000000005450463007 - 544C61796F757400095374796C654E616D65061170726F677265737363656C6C - 7374796C6505416C69676E070643656E7465720A53697A652E57696474680500 - 000000000000F805400B53697A652E4865696768740500000000000000FC0540 - 1453697A652E506C6174666F726D44656661756C74080756697369626C650808 - 5461624F7264657202170007544C61796F757400095374796C654E616D650606 - 68747261636B05416C69676E0708436F6E74656E7473064C6F636B6564090C4D - 617267696E732E4C65667405000000000000008000400B4D617267696E732E54 - 6F7005000000000000008000400D4D617267696E732E52696768740500000000 - 0000008000400E4D617267696E732E426F74746F6D0500000000000000800040 - 0A53697A652E57696474680500000000000000F005400B53697A652E48656967 - 68740500000000000000F405401453697A652E506C6174666F726D4465666175 - 6C7408000A5452656374616E676C6500095374796C654E616D65060A68696E64 - 696361746F7205416C69676E07044C6566740A46696C6C2E436F6C6F72070978 - 4646324138324532064C6F636B6564090748697454657374080C4D617267696E - 732E4C65667405000000000000008000400B4D617267696E732E546F70050000 - 00000000008000400D4D617267696E732E526967687405000000000000008000 - 400E4D617267696E732E426F74746F6D05000000000000008000400A506F7369 - 74696F6E2E5805000000000000008000400A506F736974696F6E2E5905000000 - 000000008000400A53697A652E57696474680500000000000000C804400B5369 - 7A652E4865696768740500000000000000EC05401453697A652E506C6174666F - 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000000 - 5450463007544C61796F757400095374796C654E616D6506106D656E75626172 - 6974656D7374796C6505416C69676E070643656E7465720C4D617267696E732E - 4C656674050000000000000080FF3F0B4D617267696E732E546F700500000000 - 00000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E - 4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E57 - 6964746805000000000000009205400B53697A652E4865696768740500000000 - 000000D003401453697A652E506C6174666F726D44656661756C740807566973 - 69626C6508085461624F726465720218000A5452656374616E676C650005416C - 69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646324138 - 324532074869745465737408074F70616369747905000000000017B7D1F13F0A + 74666F726D44656661756C740800000005545465787400095374796C654E616D + 6506047465787405416C69676E07044C656674064C6F636B6564090748697454 + 657374080C4D617267696E732E4C65667405000000000000008002400D4D6172 + 67696E732E526967687405000000000000008002400A506F736974696F6E2E58 + 05000000000000008404400A53697A652E57696474680500000000000000C804 + 400B53697A652E4865696768740500000000000000D003401453697A652E506C + 6174666F726D44656661756C7408165465787453657474696E67732E466F6E74 + 436F6C6F720708636C615768697465165465787453657474696E67732E486F72 + 7A416C69676E07074C656164696E67000005545465787400095374796C654E61 + 6D65060873686F727463757405416C69676E07055269676874064C6F636B6564 + 090748697454657374080C4D617267696E732E4C6566740500000000000000C0 + 02400D4D617267696E732E52696768740500000000000000C001400A506F7369 + 74696F6E2E580500000000000000C000C00A53697A652E576964746805000000 + 00000000C804400B53697A652E4865696768740500000000000000D003401453 + 697A652E506C6174666F726D44656661756C7408165465787453657474696E67 + 732E466F6E74436F6C6F720708636C615768697465165465787453657474696E + 67732E486F727A416C69676E07074C656164696E67000007544C61796F757400 + 095374796C654E616D6506077375626D61726B05416C69676E07055269676874 + 0A506F736974696F6E2E580500000000000000D404400A53697A652E57696474 + 680500000000000000A003400B53697A652E4865696768740500000000000000 + D003401453697A652E506C6174666F726D44656661756C740800055450617468 + 0005416C69676E070643656E74657209446174612E506174680A340000000400 + 000000000000000000000000000001000000000000000000803F010000000000 + 803F0000003F0300000000000000000000000A46696C6C2E436F6C6F72070863 + 6C615768697465064C6F636B6564090748697454657374080A53697A652E5769 + 6474680500000000000000E001400B53697A652E486569676874050000000000 + 00008002401453697A652E506C6174666F726D44656661756C74080B5374726F + 6B652E4B696E6407044E6F6E6500000000545046300A5452656374616E676C65 + 00095374796C654E616D65060C6D656E756261727374796C6505416C69676E07 + 0643656E7465720C436C69704368696C6472656E090946696C6C2E4B696E6407 + 044E6F6E650748697454657374080A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000000000C804401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E650756697369626C650807585261646975730500000000000000C0004007 + 595261646975730500000000000000C00040000A5452656374616E676C650005 + 416C69676E0706436C69656E740A46696C6C2E436F6C6F720709784646323032 + 3032300748697454657374080C4D617267696E732E4C65667405000000000000 + 0080FFBF0B4D617267696E732E546F70050000000000000080FFBF0D4D617267 + 696E732E5269676874050000000000000080FFBF0A53697A652E576964746805 + 00000000000000D004400B53697A652E4865696768740500000000000000CC04 + 401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E43 + 6F6C6F72070978464631353135313507585261646975730500000000000000C0 + 004007595261646975730500000000000000C00040000007544C61796F757400 + 095374796C654E616D650607636F6E74656E7405416C69676E0706436C69656E + 740C4D617267696E732E4C656674050000000000000080FF3F0B4D617267696E + 732E546F70050000000000000080FF3F0D4D617267696E732E52696768740500 + 00000000000080FF3F0E4D617267696E732E426F74746F6D0500000000000000 + 80FF3F0A53697A652E57696474680500000000000000C004400B53697A652E48 + 65696768740500000000000000C004401453697A652E506C6174666F726D4465 + 6661756C74080000005450463007544C61796F757400095374796C654E616D65 + 060D6D656E756974656D7374796C6505416C69676E070643656E7465720C4D61 + 7267696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F + 70050000000000000080FF3F0D4D617267696E732E5269676874050000000000 + 000080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A 53697A652E576964746805000000000000009205400B53697A652E4865696768 740500000000000000D003401453697A652E506C6174666F726D44656661756C - 74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D - 6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F7065 - 7274794E616D6506074F7061636974790A537461727456616C75650500000000 - 0000000000000953746F7056616C7565050000000000000080FF3F0754726967 - 676572060F497353656C65637465643D747275650E54726967676572496E7665 - 7273650610497353656C65637465643D66616C73650000000A5452656374616E - 676C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E - 0708436F6E74656E74730A46696C6C2E436F6C6F720709784646324138324532 - 074869745465737408074F70616369747905000000000017B7D1F13F0A53697A - 652E576964746805000000000000009205400B53697A652E4865696768740500 - 000000000000D003401453697A652E506C6174666F726D44656661756C74080B - 5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D617469 - 6F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F7065727479 - 4E616D6506074F7061636974790A537461727456616C75650500000000000000 - 0000000953746F7056616C7565050000000000000080FF3F0754726967676572 - 061049734D6F7573654F7665723D747275650E54726967676572496E76657273 - 65061149734D6F7573654F7665723D66616C736500000007544C61796F757400 - 095374796C654E616D650605676C79706805416C69676E07044C6566740A5369 - 7A652E57696474680500000000000000C803400B53697A652E48656967687405 - 00000000000000D003401453697A652E506C6174666F726D44656661756C7408 - 0007544C61796F757400095374796C654E616D650609636865636B6D61726B05 - 416C69676E0708436F6E74656E7473074F7061636974790500000000006F1283 - F53F0A53697A652E57696474680500000000000000C803400B53697A652E4865 + 74080756697369626C6508085461624F726465720227000A5452656374616E67 + 6C650005416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709 + 784646324138324532074869745465737408074F706163697479050000000000 + 17B7D1F13F0A53697A652E576964746805000000000000009205400B53697A65 + 2E4865696768740500000000000000D003401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F + 6174416E696D6174696F6E00084475726174696F6E05000000000018B7D1F23F + 0C50726F70657274794E616D6506074F7061636974790A537461727456616C75 + 6505000000000000000000000953746F7056616C7565050000000000000080FF + 3F0754726967676572060F497353656C65637465643D747275650E5472696767 + 6572496E76657273650610497353656C65637465643D66616C73650000000A54 + 52656374616E676C6500095374796C654E616D65060A6261636B67726F756E64 + 05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646 + 324138324532074869745465737408074F706163697479050000000000000000 + 00000A53697A652E576964746805000000000000009205400B53697A652E4865 696768740500000000000000D003401453697A652E506C6174666F726D446566 - 61756C7408000554506174680005416C69676E070643656E7465720944617461 - 2E506174680A58000000070000000000000056D9524391AE2C43010000009276 - 664365021643010000009F3983432B7C3C43010000009E9AA64382D2B4420100 - 00006F1CB04375A4D1420100000026DF8243263F67430300000056D9524391AE - 2C430A46696C6C2E436F6C6F720708636C615768697465074869745465737408 - 0A53697A652E57696474680500000000000000B002400B53697A652E48656967 - 68740500000000000000B002401453697A652E506C6174666F726D4465666175 - 6C74080B5374726F6B652E4B696E6407044E6F6E6500000F54466C6F6174416E - 696D6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F - 70657274794E616D6506074F7061636974790A537461727456616C7565050000 - 00000000000000000953746F7056616C7565050000000000000080FF3F075472 - 6967676572060E4973436865636B65643D747275650E54726967676572496E76 - 65727365060F4973436865636B65643D66616C73650000000654476C79706800 - 095374796C654E616D65060A676C7970687374796C650C4D617267696E732E4C - 656674050000000000000080FF3F0B4D617267696E732E546F70050000000000 - 00008000400D4D617267696E732E52696768740500000000000000C000400E4D - 617267696E732E426F74746F6D050000000000000080FF3F05416C69676E0705 - 52696768740A53697A652E576964746805000000000000008003400B53697A65 - 2E48656967687405000000000000008003401453697A652E506C6174666F726D - 44656661756C740800000654496D61676500095374796C654E616D6506066269 - 746D61700E4D756C74695265734269746D61700E01000005416C69676E070843 - 6F6E74656E74730C4D617267696E732E4C65667405000000000000008000400B - 4D617267696E732E546F7005000000000000008000400D4D617267696E732E52 - 6967687405000000000000008000400E4D617267696E732E426F74746F6D0500 - 0000000000008000400A53697A652E57696474680500000000000000A803400B - 53697A652E4865696768740500000000000000B003401453697A652E506C6174 - 666F726D44656661756C740800000005545465787400095374796C654E616D65 - 06047465787405416C69676E07044C656674064C6F636B656409074869745465 - 7374080C4D617267696E732E4C65667405000000000000008002400D4D617267 - 696E732E526967687405000000000000008002400A506F736974696F6E2E5805 - 000000000000008404400A53697A652E57696474680500000000000000C80440 - 0B53697A652E4865696768740500000000000000D003401453697A652E506C61 - 74666F726D44656661756C7408165465787453657474696E67732E466F6E7443 - 6F6C6F720708636C615768697465165465787453657474696E67732E486F727A - 416C69676E07074C656164696E67000005545465787400095374796C654E616D - 65060873686F727463757405416C69676E07055269676874064C6F636B656409 - 0748697454657374080C4D617267696E732E4C6566740500000000000000C002 - 400D4D617267696E732E52696768740500000000000000C001400A506F736974 - 696F6E2E580500000000000000C000C00A53697A652E57696474680500000000 - 000000C804400B53697A652E4865696768740500000000000000D00340145369 - 7A652E506C6174666F726D44656661756C7408165465787453657474696E6773 - 2E466F6E74436F6C6F720708636C615768697465165465787453657474696E67 - 732E486F727A416C69676E07074C656164696E67000007544C61796F75740009 - 5374796C654E616D6506077375626D61726B05416C69676E070552696768740A - 506F736974696F6E2E580500000000000000D404400A53697A652E5769647468 - 0500000000000000A003400B53697A652E4865696768740500000000000000D0 - 03401453697A652E506C6174666F726D44656661756C74080005545061746800 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F617441 + 6E696D6174696F6E00084475726174696F6E05000000000018B7D1F23F07496E + 7665727365090C50726F70657274794E616D6506074F7061636974790A537461 + 727456616C756505000000000000000000000953746F7056616C756505000000 + 0000000080FF3F0754726967676572061049734D6F7573654F7665723D747275 + 650E54726967676572496E7665727365061149734D6F7573654F7665723D6661 + 6C736500000007544C61796F757400095374796C654E616D650605676C797068 + 05416C69676E07044C6566740A53697A652E57696474680500000000000000C8 + 03400B53697A652E4865696768740500000000000000D003401453697A652E50 + 6C6174666F726D44656661756C74080007544C61796F757400095374796C654E + 616D650609636865636B6D61726B05416C69676E0708436F6E74656E7473074F + 7061636974790500000000006F1283F53F0A53697A652E576964746805000000 + 00000000C803400B53697A652E4865696768740500000000000000D003401453 + 697A652E506C6174666F726D44656661756C7408000554506174680005416C69 + 676E070643656E74657209446174612E506174680A5800000007000000000000 + 0056D9524391AE2C43010000009276664365021643010000009F3983432B7C3C + 43010000009E9AA64382D2B442010000006F1CB04375A4D1420100000026DF82 + 43263F67430300000056D9524391AE2C430A46696C6C2E436F6C6F720708636C + 6157686974650748697454657374080A53697A652E5769647468050000000000 + 0000B002400B53697A652E4865696768740500000000000000B002401453697A + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E6500000F54466C6F6174416E696D6174696F6E00084475726174696F6E + 050000000000CDCCCCFB3F0C50726F70657274794E616D6506074F7061636974 + 790A537461727456616C756505000000000000000000000953746F7056616C75 + 65050000000000000080FF3F0754726967676572060E4973436865636B65643D + 747275650E54726967676572496E7665727365060F4973436865636B65643D66 + 616C73650000000654476C79706800095374796C654E616D65060A676C797068 + 7374796C650C4D617267696E732E4C656674050000000000000080FF3F0B4D61 + 7267696E732E546F7005000000000000008000400D4D617267696E732E526967 + 68740500000000000000C000400E4D617267696E732E426F74746F6D05000000 + 0000000080FF3F05416C69676E07044C6566740A506F736974696F6E2E580500 + 00000000000080FF3F0A506F736974696F6E2E5905000000000000008000400A + 53697A652E576964746805000000000000008003400B53697A652E4865696768 + 740500000000000000B803401453697A652E506C6174666F726D44656661756C + 740800000654496D61676500095374796C654E616D6506066269746D61700E4D + 756C74695265734269746D61700E01000005416C69676E07044C6566740C4D61 + 7267696E732E4C65667405000000000000008000400B4D617267696E732E546F + 7005000000000000008000400D4D617267696E732E5269676874050000000000 + 00008000400E4D617267696E732E426F74746F6D05000000000000008000400A + 506F736974696F6E2E5805000000000000008000400A506F736974696F6E2E59 + 05000000000000008000400A53697A652E57696474680500000000000000A803 + 400B53697A652E4865696768740500000000000000B003401453697A652E506C + 6174666F726D44656661756C740800000005545465787400095374796C654E61 + 6D6506047465787405416C69676E07044C656674064C6F636B65640907486974 + 54657374080C4D617267696E732E4C65667405000000000000008002400D4D61 + 7267696E732E526967687405000000000000008002400A506F736974696F6E2E + 5805000000000000008404400A53697A652E57696474680500000000000000C8 + 04400B53697A652E4865696768740500000000000000D003401453697A652E50 + 6C6174666F726D44656661756C7408165465787453657474696E67732E466F6E + 74436F6C6F720708636C615768697465165465787453657474696E67732E486F + 727A416C69676E07074C656164696E67000005545465787400095374796C654E + 616D65060873686F727463757405416C69676E07055269676874064C6F636B65 + 64090748697454657374080C4D617267696E732E4C6566740500000000000000 + C002400D4D617267696E732E52696768740500000000000000C001400A506F73 + 6974696F6E2E580500000000000000C000C00A53697A652E5769647468050000 + 0000000000C804400B53697A652E4865696768740500000000000000D0034014 + 53697A652E506C6174666F726D44656661756C7408165465787453657474696E + 67732E466F6E74436F6C6F720708636C61576869746516546578745365747469 + 6E67732E486F727A416C69676E07074C656164696E67000007544C61796F7574 + 00095374796C654E616D6506077375626D61726B05416C69676E070552696768 + 740A506F736974696F6E2E580500000000000000D404400A53697A652E576964 + 74680500000000000000A003400B53697A652E48656967687405000000000000 + 00D003401453697A652E506C6174666F726D44656661756C7408000554506174 + 680005416C69676E070643656E74657209446174612E506174680A3400000004 + 00000000000000000000000000000001000000000000000000803F0100000000 + 00803F0000003F0300000000000000000000000A46696C6C2E436F6C6F720708 + 636C615768697465064C6F636B6564090748697454657374080A53697A652E57 + 696474680500000000000000E001400B53697A652E4865696768740500000000 + 0000008002401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E65000000005450463007544C61796F75740009 + 5374796C654E616D6506126D656E75736570617261746F727374796C6505416C + 69676E070643656E7465720C4D617267696E732E4C6566740500000000000000 + 80FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D61726769 + 6E732E5269676874050000000000000080FF3F0E4D617267696E732E426F7474 + 6F6D050000000000000080FF3F0A53697A652E57696474680500000000000000 + C804400B53697A652E4865696768740500000000000000C804401453697A652E + 506C6174666F726D44656661756C74080756697369626C6508085461624F7264 + 657202280005544C696E650005416C69676E0703546F70084C696E6554797065 + 0703546F700C4D617267696E732E4C656674050000000000000080FFBF0B4D61 + 7267696E732E546F7005000000000000008000400D4D617267696E732E526967 + 6874050000000000000080FFBF0A506F736974696F6E2E580500000000000000 + 80FFBF0A506F736974696F6E2E5905000000000000008000400A53697A652E57 + 696474680500000000000000D004400B53697A652E4865696768740500000000 + 00000080FF3F1453697A652E506C6174666F726D44656661756C74080C537472 + 6F6B652E436F6C6F720709784646313531353135000000545046300A54526563 + 74616E676C6500095374796C654E616D65060D6D656E75766965777374796C65 + 05416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846463230 + 323032300A53697A652E57696474680500000000000000C804400B53697A652E + 4865696768740500000000000000C804401453697A652E506C6174666F726D44 + 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313507 + 56697369626C650807585261646975730500000000000000C000400759526164 + 6975730500000000000000C000400007544C61796F757400095374796C654E61 + 6D650607636F6E74656E7405416C69676E0706436C69656E740C4D617267696E + 732E4C656674050000000000000080FF3F0B4D617267696E732E546F70050000 + 000000000080FF3F0D4D617267696E732E5269676874050000000000000080FF + 3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A65 + 2E57696474680500000000000000C004400B53697A652E486569676874050000 + 0000000000C004401453697A652E506C6174666F726D44656661756C74080000 + 0A5452656374616E676C650005416C69676E0706436C69656E740A46696C6C2E + 436F6C6F7207097846463230323032300748697454657374080A53697A652E57 + 696474680500000000000000C804400B53697A652E4865696768740500000000 + 000000C804401453697A652E506C6174666F726D44656661756C74080C537472 + 6F6B652E436F6C6F720709784646313531353135000D54536861646F77456666 + 656374000844697374616E636505000000000000008001400944697265637469 + 6F6E0500000000000000B4044008536F66746E657373050000000000000080FE + 3F074F706163697479050000000000000080FE3F0B536861646F77436F6C6F72 + 0708636C61426C61636B000000005450463007544C61796F757400095374796C + 654E616D650610726164696F627574746F6E7374796C6505416C69676E070643 + 656E7465720A53697A652E57696474680500000000000000F205400B53697A65 + 2E4865696768740500000000000000A803401453697A652E506C6174666F726D + 44656661756C74080756697369626C6508085461624F7264657202290007544C + 61796F75740005416C69676E07044C6566740A53697A652E5769647468050000 + 0000000000A803400B53697A652E4865696768740500000000000000A8034014 + 53697A652E506C6174666F726D44656661756C7408000854456C6C6970736500 + 095374796C654E616D65060A6261636B67726F756E6405416C69676E07064365 + 6E7465720A46696C6C2E436F6C6F720709784646323032303230064C6F636B65 + 64090748697454657374080A53697A652E57696474680500000000000000F002 + 400B53697A652E4865696768740500000000000000F002401453697A652E506C + 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 + 313531353135000854456C6C6970736500095374796C654E616D650609636865 + 636B6D61726B05416C69676E0706436C69656E740A46696C6C2E436F6C6F7207 + 09784646324138324532064C6F636B656409074869745465737408074F706163 + 69747905000000000000000000000C4D617267696E732E4C6566740500000000 + 0000008000400B4D617267696E732E546F7005000000000000008000400D4D61 + 7267696E732E526967687405000000000000008000400E4D617267696E732E42 + 6F74746F6D05000000000000008000400A53697A652E57696474680500000000 + 000000B002400B53697A652E4865696768740500000000000000B00240145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E65000F54466C6F6174416E696D6174696F6E00095374796C654E616D + 65061A6F706163697479436865636B6D61726B416E696D6174696F6E31084475 + 726174696F6E05000000000000000000000C50726F70657274794E616D650607 + 4F7061636974790A537461727456616C75650500000000000000000000095374 + 6F7056616C7565050000000000000080FF3F0754726967676572060E49734368 + 65636B65643D747275650E54726967676572496E7665727365060F4973436865 + 636B65643D66616C73650000000F54436F6C6F72416E696D6174696F6E000953 + 74796C654E616D65061A726164696F627574746F6E436F6C6F72416E696D6174 + 696F6E31084475726174696F6E050000000000000000000007496E7665727365 + 090C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374617274 + 56616C756507097846463230323032300953746F7056616C7565070978464634 + 30343034300754726967676572061049734D6F7573654F7665723D747275650E + 54726967676572496E7665727365061149734D6F7573654F7665723D66616C73 + 6500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614 + 436F6C6F72416E696D6174696F6E315374796C65084475726174696F6E050000 + 00000000000000000C50726F70657274794E616D65060C5374726F6B652E436F + 6C6F720A537461727456616C756507097846463135313531350953746F705661 + 6C756507097846463241383245320754726967676572060E4973436865636B65 + 643D747275650E54726967676572496E7665727365060F4973436865636B6564 + 3D66616C73650000000005545465787400095374796C654E616D650604746578 + 7405416C69676E0706436C69656E74064C6F636B656409074869745465737408 + 0A53697A652E57696474680500000000000000C805400B53697A652E48656967 + 68740500000000000000A803401453697A652E506C6174666F726D4465666175 + 6C74080454657874060454657874165465787453657474696E67732E466F6E74 + 436F6C6F720708636C6157686974650000005450463007544C61796F75740009 + 5374796C654E616D650618756C63656E746572726164696F627574746F6E7374 + 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 + 00005655FB05400B53697A652E4865696768740500000000000000A004401453 + 697A652E506C6174666F726D44656661756C74080756697369626C6508085461 + 624F72646572022A0007544C61796F75740005416C69676E0706426F74746F6D + 0A506F736974696F6E2E5905000000000000008804400A53697A652E57696474 + 680500000000005655FB05400B53697A652E4865696768740500000000000000 + C001401453697A652E506C6174666F726D44656661756C7408000A5452656374 + 616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C69 + 676E0708436F6E74656E747307436F726E6572730B07546F704C6566740A426F + 74746F6D4C656674000A46696C6C2E436F6C6F72070978464632303230323006 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 005655FB05400B53697A652E4865696768740500000000000000C00140145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 0709784646313531353135000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D6506216261636B67726F756E64556C427574746F6E436F6C6F72 + 416E696D6174696F6E31084475726174696F6E05000000000000000000000749 + 6E7665727365090C50726F70657274794E616D65060A46696C6C2E436F6C6F72 + 0A537461727456616C756507097846463230323032300953746F7056616C7565 + 07097846463430343034300754726967676572061049734D6F7573654F766572 + 3D747275650E54726967676572496E7665727365061149734D6F7573654F7665 + 723D66616C736500000A5452656374616E676C6500095374796C654E616D6506 + 09636865636B6D61726B05416C69676E0708436F6E74656E747307436F726E65 + 72730B07546F704C6566740A426F74746F6D4C656674000A46696C6C2E436F6C + 6F720709784646324138324532064C6F636B656409074869745465737408074F + 70616369747905000000000000000000000C4D617267696E732E4C6566740500 + 00000000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F + 0D4D617267696E732E5269676874050000000000000080FF3F0E4D617267696E + 732E426F74746F6D050000000000000080FF3F0A53697A652E57696474680500 + 000000005655F705400B53697A652E4865696768740500000000000000800140 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E65000F54466C6F6174416E696D6174696F6E00095374796C65 + 4E616D65061A636865636B6D61726B4F706163697479416E696D6174696F6E31 + 084475726174696F6E05000000000000000000000C50726F70657274794E616D + 6506074F7061636974790A537461727456616C75650500000000000000000000 + 0953746F7056616C7565050000000000000080FF3F0754726967676572060E49 + 73436865636B65643D747275650E54726967676572496E7665727365060F4973 + 436865636B65643D66616C7365000000000005545465787400095374796C654E + 616D6506047465787405416C69676E0706436C69656E74064C6F636B65640907 + 48697454657374080A53697A652E57696474680500000000005655FB05400B53 + 697A652E48656967687405000000000000008804401453697A652E506C617466 + 6F726D44656661756C7408165465787453657474696E67732E466F6E74436F6C + 6F720708636C6157686974650000005450463007544C61796F75740009537479 + 6C654E616D650616756C6C656674726164696F627574746F6E7374796C650541 + 6C69676E070643656E7465720A53697A652E57696474680500000000005655FB + 05400B53697A652E4865696768740500000000000000A004401453697A652E50 + 6C6174666F726D44656661756C74080756697369626C6508085461624F726465 + 72022B0007544C61796F75740005416C69676E0706426F74746F6D0A506F7369 + 74696F6E2E5905000000000000008804400A53697A652E576964746805000000 + 00005655FB05400B53697A652E4865696768740500000000000000C001401453 + 697A652E506C6174666F726D44656661756C7408000A5452656374616E676C65 + 00095374796C654E616D65060A6261636B67726F756E6405416C69676E070843 + 6F6E74656E747307436F726E6572730B07546F704C6566740A426F74746F6D4C + 656674000A46696C6C2E436F6C6F720709784646323032303230064C6F636B65 + 64090748697454657374080A53697A652E57696474680500000000005655FB05 + 400B53697A652E4865696768740500000000000000C001401453697A652E506C + 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 + 31353135313507585261646975730500000000000000C0004007595261646975 + 730500000000000000C00040000F54436F6C6F72416E696D6174696F6E000953 + 74796C654E616D6506216261636B67726F756E64556C427574746F6E436F6C6F + 72416E696D6174696F6E31084475726174696F6E050000000000000000000007 + 496E7665727365090C50726F70657274794E616D65060A46696C6C2E436F6C6F + 720A537461727456616C756507097846463230323032300953746F7056616C75 + 6507097846463430343034300754726967676572061049734D6F7573654F7665 + 723D747275650E54726967676572496E7665727365061149734D6F7573654F76 + 65723D66616C736500000A5452656374616E676C6500095374796C654E616D65 + 0609636865636B6D61726B05416C69676E0708436F6E74656E747307436F726E + 6572730B07546F704C6566740A426F74746F6D4C656674000A46696C6C2E436F + 6C6F720709784646324138324532064C6F636B65640907486974546573740807 + 4F70616369747905000000000000000000000C4D617267696E732E4C65667405 + 0000000000000080FF3F0B4D617267696E732E546F70050000000000000080FF + 3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D61726769 + 6E732E426F74746F6D050000000000000080FF3F0A53697A652E576964746805 + 00000000005655F705400B53697A652E48656967687405000000000000008001 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E650758526164697573050000000000000080004007595261 + 646975730500000000000000800040000F54466C6F6174416E696D6174696F6E + 00095374796C654E616D65061A636865636B6D61726B4F706163697479416E69 + 6D6174696F6E31084475726174696F6E05000000000000000000000C50726F70 + 657274794E616D6506074F7061636974790A537461727456616C756505000000 + 000000000000000953746F7056616C7565050000000000000080FF3F07547269 + 67676572060E4973436865636B65643D747275650E54726967676572496E7665 + 727365060F4973436865636B65643D66616C7365000000000005545465787400 + 095374796C654E616D6506047465787405416C69676E0706436C69656E74064C + 6F636B6564090748697454657374080A53697A652E5769647468050000000000 + 5655FB05400B53697A652E48656967687405000000000000008804401453697A + 652E506C6174666F726D44656661756C7408165465787453657474696E67732E + 466F6E74436F6C6F720708636C6157686974650000005450463007544C61796F + 757400095374796C654E616D650617756C7269676874726164696F627574746F + 6E7374796C6505416C69676E070643656E7465720A53697A652E576964746805 + 00000000005655FB05400B53697A652E4865696768740500000000000000A004 + 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 + 085461624F72646572022C0007544C61796F75740005416C69676E0706426F74 + 746F6D0A506F736974696F6E2E5905000000000000008804400A53697A652E57 + 696474680500000000005655FB05400B53697A652E4865696768740500000000 + 000000C001401453697A652E506C6174666F726D44656661756C7408000A5452 + 656374616E676C6500095374796C654E616D65060A6261636B67726F756E6405 + 416C69676E0708436F6E74656E747307436F726E6572730B08546F7052696768 + 740B426F74746F6D5269676874000A46696C6C2E436F6C6F7207097846463230 + 32303230064C6F636B6564090748697454657374080A53697A652E5769647468 + 0500000000005655FB05400B53697A652E4865696768740500000000000000C0 + 01401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E + 436F6C6F72070978464631353135313507585261646975730500000000000000 + C0004007595261646975730500000000000000C00040000F54436F6C6F72416E + 696D6174696F6E00095374796C654E616D6506216261636B67726F756E64556C + 427574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E0500 + 00000000000000000007496E7665727365090C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C756507097846463230323032 + 300953746F7056616C7565070978464634303430343007547269676765720610 + 49734D6F7573654F7665723D747275650E54726967676572496E766572736506 + 1149734D6F7573654F7665723D66616C736500000A5452656374616E676C6500 + 095374796C654E616D650609636865636B6D61726B05416C69676E0708436F6E + 74656E747307436F726E6572730B08546F7052696768740B426F74746F6D5269 + 676874000A46696C6C2E436F6C6F720709784646324138324532064C6F636B65 + 6409074869745465737408074F70616369747905000000000000000000000C4D + 617267696E732E4C656674050000000000000080FF3F0B4D617267696E732E54 + 6F70050000000000000080FF3F0D4D617267696E732E52696768740500000000 + 00000080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F + 0A53697A652E57696474680500000000005655F705400B53697A652E48656967 + 687405000000000000008001401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E650758526164697573050000 + 000000000080004007595261646975730500000000000000800040000F54466C + 6F6174416E696D6174696F6E00095374796C654E616D65061A636865636B6D61 + 726B4F706163697479416E696D6174696F6E31084475726174696F6E05000000 + 000000000000000C50726F70657274794E616D6506074F7061636974790A5374 + 61727456616C756505000000000000000000000953746F7056616C7565050000 + 000000000080FF3F0754726967676572060E4973436865636B65643D74727565 + 0E54726967676572496E7665727365060F4973436865636B65643D66616C7365 + 000000000005545465787400095374796C654E616D6506047465787405416C69 + 676E0706436C69656E74064C6F636B6564090748697454657374080A53697A65 + 2E57696474680500000000005655FB05400B53697A652E486569676874050000 + 00000000008804401453697A652E506C6174666F726D44656661756C74080454 + 657874060454657874165465787453657474696E67732E466F6E74436F6C6F72 + 0708636C6157686974650000005450463007544C61796F757400095374796C65 + 4E616D65061470726F67726573736261726D696E697374796C6505416C69676E + 070643656E7465720A53697A652E576964746805000000000033338505400B53 + 697A652E4865696768740500000000009999E104401453697A652E506C617466 + 6F726D44656661756C74080756697369626C6508085461624F72646572022E00 + 0A5452656374616E676C6500095374796C654E616D65060668747261636B0541 + 6C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846463430 + 34303430064C6F636B6564090748697454657374080A53697A652E5769647468 + 05000000000033338505400B53697A652E4865696768740500000000009999E1 + 04401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E6507585261646975730500000000000000800040075952 + 61646975730500000000000000800040000A5452656374616E676C6500095374 + 796C654E616D65060A68696E64696361746F7205416C69676E07044C6566740A + 46696C6C2E436F6C6F720709784646324138324532064C6F636B656409074869 + 7454657374080A53697A652E57696474680500000000000000C804400B53697A + 652E4865696768740500000000009999E104401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650758526164 + 6975730500000000000000800040075952616469757305000000000000008000 + 400000000A5452656374616E676C6500095374796C654E616D65060676747261 + 636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978 + 4646343034303430064C6F636B6564090748697454657374080A53697A652E57 + 6964746805000000000033338505400B53697A652E4865696768740500000000 + 009999E104401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E65075852616469757305000000000000008000 + 4007595261646975730500000000000000800040000A5452656374616E676C65 + 00095374796C654E616D65060A76696E64696361746F7205416C69676E070642 + 6F74746F6D0A46696C6C2E436F6C6F720709784646324138324532064C6F636B + 6564090748697454657374080A506F736974696F6E2E5905000000000099998D + 04400A53697A652E576964746805000000000033338505400B53697A652E4865 + 696768740500000000000000A803401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65075852616469757305 + 0000000000000080004007595261646975730500000000000000800040000000 + 005450463007544C61796F757400095374796C654E616D65060E636F6D626F65 + 6469747374796C6505416C69676E070643656E7465720A53697A652E57696474 + 680500000000000000C805400B53697A652E4865696768740500000000000000 + C803401453697A652E506C6174666F726D44656661756C74080756697369626C + 6508085461624F726465720230000C5442727573684F626A6563740009537479 + 6C654E616D65060A666F726567726F756E6400000B54466F6E744F626A656374 + 00095374796C654E616D650604666F6E7409466F6E742E53697A650500000000 + 000000D00240000007544C61796F757400095374796C654E616D65060A626163 + 6B67726F756E6405416C69676E0708436F6E74656E74730A53697A652E576964 + 74680500000000000000C805400B53697A652E48656967687405000000000000 + 00C803401453697A652E506C6174666F726D44656661756C7408000A54526563 + 74616E676C6500095374796C654E616D65060A52656374616E676C653105416C + 69676E0706436C69656E740A46696C6C2E436F6C6F7207097846463230323032 + 300748697454657374080A53697A652E57696474680500000000000000C80540 + 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 + 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464632 + 303230323007585261646975730500000000000000C000400759526164697573 + 0500000000000000C00040000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650614436F6C6F72416E696D6174696F6E315374796C65084475 + 726174696F6E050000000000000000000007496E7665727365090C50726F7065 + 7274794E616D65060C5374726F6B652E436F6C6F720A537461727456616C7565 + 07097846463230323032300953746F7056616C75650709784646343034303430 + 0754726967676572062049734D6F7573654F7665723D747275653B4973466F63 + 757365643D66616C73650E54726967676572496E7665727365062149734D6F75 + 73654F7665723D66616C73653B4973466F63757365643D66616C736500000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72 + 416E696D6174696F6E325374796C65084475726174696F6E0500000000000000 + 00000007496E7665727365090C50726F70657274794E616D65060C5374726F6B + 652E436F6C6F720A537461727456616C75650709784646343034303430095374 + 6F7056616C756507097846463241383245320754726967676572061F49734D6F + 7573654F7665723D747275653B4973466F63757365643D747275650E54726967 + 676572496E7665727365062049734D6F7573654F7665723D747275653B497346 + 6F63757365643D66616C7365000007544C61796F757400095374796C654E616D + 6506056172726F7705416C69676E070846697452696768740B4D617267696E73 + 2E546F70050000000000000080FF3F0D4D617267696E732E5269676874050000 + 000000000080FF3F0E4D617267696E732E426F74746F6D050000000000000080 + FF3F0A506F736974696F6E2E580500000000005ED99705400A506F736974696F + 6E2E59050000000000000080FF3F0A53697A652E576964746805000000000088 + 9AB803400B53697A652E4865696768740500000000000000B803401453697A65 + 2E506C6174666F726D44656661756C7408000A5452656374616E676C65000953 + 74796C654E616D65060A52656374616E676C653105416C69676E0708436F6E74 + 656E747307436F726E6572730B08546F7052696768740B426F74746F6D526967 + 6874000A46696C6C2E436F6C6F72070978464633303330333007486974546573 + 74080A53697A652E5769647468050000000000889AB803400B53697A652E4865 + 696768740500000000000000B803401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65075852616469757305 + 00000000000000C0004007595261646975730500000000000000C00040000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72 + 416E696D6174696F6E315374796C65084475726174696F6E0500000000000000 + 00000007496E7665727365090C50726F70657274794E616D65060A46696C6C2E + 436F6C6F720A537461727456616C756507097846463330333033300953746F70 + 56616C756507097846463430343034300754726967676572062049734D6F7573 + 654F7665723D747275653B4973466F63757365643D66616C73650E5472696767 + 6572496E7665727365062149734D6F7573654F7665723D66616C73653B497346 + 6F63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009 + 5374796C654E616D650614436F6C6F72416E696D6174696F6E325374796C6508 + 4475726174696F6E05000000000000000000000C50726F70657274794E616D65 + 060A46696C6C2E436F6C6F720A537461727456616C7565070978464634303430 + 34300953746F7056616C75650709784646313735373943075472696767657206 + 1F4973466F63757365643D747275653B49734D6F7573654F7665723D74727565 + 00000007544C61796F757400095374796C654E616D6506074C61796F75743105 + 416C69676E070643656E7465720C4D617267696E732E4C656674050000000000 + 000080FF3F0A53697A652E57696474680500000000000000A002400B53697A65 + 2E4865696768740500000000000000C001401453697A652E506C6174666F726D + 44656661756C74080005545061746800095374796C654E616D65060550617468 + 3105416C69676E0706436C69656E7409446174612E506174680A340000000400 + 0000000000000000C8420000C84201000000000096430000C842010000000000 + 484300009643030000000000C8420000C8420A46696C6C2E436F6C6F72070863 + 6C6157686974650748697454657374080A53697A652E57696474680500000000 + 000000A002400B53697A652E4865696768740500000000000000C00140145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E650000000000000C5442727573684F626A65637400095374796C654E + 616D65060973656C656374696F6E0B42727573682E436F6C6F72070978393632 + 4138324532000007544C61796F757400095374796C654E616D650607636F6E74 + 656E7405416C69676E0706436C69656E740C4D617267696E732E4C6566740500 + 0000000000008000400B4D617267696E732E546F700500000000000000800040 + 0D4D617267696E732E52696768740500000000000000F003400E4D617267696E + 732E426F74746F6D05000000000000008000400A53697A652E57696474680500 + 0000000000008805400B53697A652E4865696768740500000000000000A80340 + 1453697A652E506C6174666F726D44656661756C74080000005450463007544C + 61796F757400095374796C654E616D650613657870616E646572627574746F6E + 7374796C6505416C69676E070643656E7465720B4D617267696E732E546F7005 + 0000000000000080FF3F0A53697A652E57696474680500000000000000B00340 + 0B53697A652E4865696768740500000000000000B003401453697A652E506C61 + 74666F726D44656661756C74080756697369626C6508085461624F7264657202 + 330005545061746800095374796C654E616D650605506174683105416C69676E + 070643656E74657209446174612E506174680A34000000040000000000000000 + 00C8420000C84201000000000096430000C84201000000000048430000964303 + 0000000000C8420000C8420A46696C6C2E436F6C6F720708636C615768697465 + 0748697454657374080D526F746174696F6E416E676C650500000000000000B4 + 05400A53697A652E57696474680500000000000000A002400B53697A652E4865 + 696768740500000000000000C001401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F617441 + 6E696D6174696F6E00095374796C654E616D650614466C6F6174416E696D6174 + 696F6E315374796C65084475726174696F6E050000000000CDCCCCFB3F0D496E + 746572706F6C6174696F6E070843697263756C61720C50726F70657274794E61 + 6D65060D526F746174696F6E416E676C650A537461727456616C756505000000 + 00000000B405400953746F7056616C7565050000000000000000000007547269 + 67676572060F4973457870616E6465643D747275650E54726967676572496E76 + 6572736506104973457870616E6465643D66616C736500000000545046300754 + 4C61796F757400095374796C654E616D650615657870616E646572636865636B + 626F787374796C6505416C69676E070643656E7465720A53697A652E57696474 + 6805000000000000008406400B53697A652E4865696768740500000000000000 + 8404401453697A652E506C6174666F726D44656661756C74080756697369626C + 6508085461624F7264657202360007544C61796F75740005416C69676E07044C + 6566740A53697A652E57696474680500000000000000C003400B53697A652E48 + 656967687405000000000000008404401453697A652E506C6174666F726D4465 + 6661756C7408000554506174680005416C69676E0706436C69656E7409446174 + 612E506174680AD80100002700000000000000FEC8BA4402E792440200000025 + 92AD4402E79244020000006D5BA544FEB09E44020000006D5BA544FEB09E4402 + 00000093A4A4446A0C9F44020000004A80AC44FC79AA4402000000046EBA44FC + 79AA44020000004A00C844FC79AA44020000000080CF44FEB09E440200000000 + 80CF44FEB09E44020000000080CF44FEB09E44020000004C5BC84402E7924402 + 000000FEC8BA4402E7924400000000FE88BA44FE30974402000000B876BF44FE + 309744020000000277C344EEA09A44020000000277C34404DE9E440200000002 + 77C344121BA34402000000B876BF44008CA64402000000FE88BA44008CA64402 + 0000004C9BB544008CA64402000000009CB144121BA34402000000009CB14404 + DE9E4402000000009CB144EEA09A44020000004C9BB544FE30974402000000FE + 88BA44FE309744000000000080BA44045E9B4402000000146EB844045E9B4402 + 00000000C0B64454F79C440200000000C0B64400F09E440200000000C0B644AC + E8A04402000000146EB844FC81A244020000000080BA44FC81A24402000000EC + 91BC44FC81A244020000000040BE44ACE8A044020000000040BE4400F09E4402 + 0000000040BE4454F79C4402000000EC91BC44045E9B44020000000080BA4404 + 5E9B440A46696C6C2E436F6C6F72070978363030303030303007486974546573 + 74080C4D617267696E732E4C65667405000000000000008000400B4D61726769 + 6E732E546F7005000000000000008000400D4D617267696E732E526967687405 + 000000000000008000400E4D617267696E732E426F74746F6D05000000000000 + 008000400A53697A652E57696474680500000000000000A003400B53697A652E + 4865696768740500000000000000E803401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F + 64650703466974000F54436F6C6F72416E696D6174696F6E0008447572617469 + 6F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C + 2E436F6C6F720A537461727456616C756507097836303030303030300953746F + 7056616C75650708636C61426C61636B0754726967676572060E497343686563 + 6B65643D7472756500000F54436F6C6F72416E696D6174696F6E000844757261 + 74696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A4669 + 6C6C2E436F6C6F720A537461727456616C75650708636C61426C61636B095374 + 6F7056616C756507097836303030303030300754726967676572060F49734368 + 65636B65643D66616C73650000000005545465787400095374796C654E616D65 + 06047465787405416C69676E0706436C69656E74064C6F636B65640907486974 + 54657374080C4D617267696E732E4C65667405000000000000008002400B4D61 + 7267696E732E546F7005000000000000008000400D4D617267696E732E526967 + 6874050000000000000080FF3F0A53697A652E57696474680500000000000000 + C605400B53697A652E4865696768740500000000000000F803401453697A652E + 506C6174666F726D44656661756C7408165465787453657474696E67732E466F + 6E74436F6C6F720709784646454545454545165465787453657474696E67732E + 486F727A416C69676E07074C656164696E670000005450463007544C61796F75 + 7400095374796C654E616D65060D657870616E6465727374796C6505416C6967 + 6E070643656E7465720A53697A652E576964746805000000000000C08607400B + 53697A652E4865696768740500000000000000CE05401453697A652E506C6174 + 666F726D44656661756C74080756697369626C6508085461624F726465720239 + 000A5452656374616E676C6500095374796C654E616D65060B62677265637461 + 6E676C6505416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207 + 09784646324432443244064C6F636B6564090748697454657374080A53697A65 + 2E576964746805000000000000C08607400B53697A652E486569676874050000 + 0000000000CE05401453697A652E506C6174666F726D44656661756C74080C53 + 74726F6B652E436F6C6F72070978464631353135313507585261646975730500 + 000000000000C0004007595261646975730500000000000000C000400007544C + 61796F757400095374796C654E616D6506074C61796F75743305416C69676E07 + 03546F700A53697A652E576964746805000000000000C08607400B53697A652E + 4865696768740500000000000000C803401453697A652E506C6174666F726D44 + 656661756C74080007544C61796F757400095374796C654E616D6506074C6179 + 6F75743405416C69676E0708436F6E74656E74730A53697A652E576964746805 + 000000000000C08607400B53697A652E4865696768740500000000000000C803 + 401453697A652E506C6174666F726D44656661756C7408000A5452656374616E + 676C6500095374796C654E616D65060A52656374616E676C653205416C69676E + 0708436F6E74656E747307436F726E6572730B07546F704C65667408546F7052 + 69676874000A46696C6C2E436F6C6F720709784646323532353235064C6F636B + 6564090748697454657374080A53697A652E576964746805000000000000C086 + 07400B53697A652E4865696768740500000000000000C803401453697A652E50 + 6C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846 + 4631353135313507585261646975730500000000000000C00040075952616469 + 75730500000000000000C0004000000A5452656374616E676C6500095374796C + 654E616D65060A52656374616E676C653105416C69676E0708436F6E74656E74 + 7307436F726E6572730B07546F704C65667408546F705269676874000A46696C + 6C2E436F6C6F720709784646313531353135064C6F636B656409074869745465 + 7374080A53697A652E576964746805000000000000C08607400B53697A652E48 + 65696768740500000000000000C803401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E650758526164697573 + 0500000000000000C0004007595261646975730500000000000000C00040000F + 54466C6F6174416E696D6174696F6E00095374796C654E616D650614466C6F61 + 74416E696D6174696F6E315374796C65084475726174696F6E050000000000CD + CCCCFB3F0D496E746572706F6C6174696F6E070843697263756C61720C50726F + 70657274794E616D6506075363616C652E580A537461727456616C7565050000 + 000000000080FF3F0953746F7056616C75650500000000000000000000075472 + 6967676572060F4973457870616E6465643D747275650E54726967676572496E + 766572736506104973457870616E6465643D66616C73650000000007544C6179 + 6F757400095374796C654E616D6506074C61796F75743305416C69676E070843 + 6F6E74656E74730A53697A652E576964746805000000000000C08607400B5369 + 7A652E4865696768740500000000000000C803401453697A652E506C6174666F + 726D44656661756C74080005545465787400095374796C654E616D6506047465 + 787405416C69676E07044C656674084175746F53697A65090A436C6970506172 + 656E7409064C6F636B6564090748697454657374080C4D617267696E732E4C65 + 66740500000000000000A002400A506F736974696F6E2E580500000000000000 + A002400A53697A652E576964746805000000000000B8C703400B53697A652E48 + 65696768740500000000000060FF02401453697A652E506C6174666F726D4465 + 6661756C74080454657874060454657874165465787453657474696E67732E46 + 6F6E74436F6C6F720708636C615768697465165465787453657474696E67732E + 486F727A416C69676E07074C656164696E670000000F54457870616E64657242 + 7574746F6E00095374796C654E616D650606627574746F6E05416C69676E0705 + 5269676874064C6F636B6564090A506F736974696F6E2E580500000000000080 + F906400A53697A652E57696474680500000000000000A003400B53697A652E48 + 65696768740500000000000000C803401453697A652E506C6174666F726D4465 + 6661756C740800000000005450463007544C61796F757400095374796C654E61 + 6D650615616E69696E64696361746F72686F727A7374796C6505416C69676E07 + 0643656E7465720A53697A652E57696474680500000000000040C006400B5369 + 7A652E48656967687405000000000000008000401453697A652E506C6174666F + 726D44656661756C74080756697369626C6508085461624F72646572023B000A + 5452656374616E676C6500095374796C654E616D65060A52656374616E676C65 + 3105416C69676E0706436C69656E740C436C69704368696C6472656E090A4669 + 6C6C2E436F6C6F7207097846463430343034300A53697A652E57696474680500 + 000000000040C006400B53697A652E4865696768740500000000000000800040 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E650758526164697573050000000000000080FF3F0759526164 + 697573050000000000000080FF3F0005544C696E6500095374796C654E616D65 + 06054C696E6531084C696E65547970650706426F74746F6D0A53697A652E5769 + 6474680500000000000000A00B400B53697A652E486569676874050000000000 + 00008000401453697A652E506C6174666F726D44656661756C74080C5374726F + 6B652E436F6C6F720709784646324138324532105374726F6B652E546869636B + 6E65737305000000000000008002400A5374726F6B652E4361700705526F756E + 640B5374726F6B652E446173680704446173680B5374726F6B652E4A6F696E07 + 05526F756E64000F54466C6F6174416E696D6174696F6E00095374796C654E61 + 6D650603616E6907456E61626C656409084475726174696F6E05000000000000 + 00800340044C6F6F70090C50726F70657274794E616D65060A506F736974696F + 6E2E580A537461727456616C75650500000000000000C808C00953746F705661 + 6C756505000000000000000000000754726967676572060E497356697369626C + 653D7472756500000000005450463007544C61796F757400095374796C654E61 + 6D650611616E69696E64696361746F727374796C6505416C69676E070643656E + 7465720756697369626C6508085461624F72646572023C000454417263000953 + 74796C654E616D65060341726305416C69676E0708436F6E74656E7473074869 + 7454657374080D526F746174696F6E416E676C650500000000000000B407400A + 53697A652E57696474680500000000000000C804400B53697A652E4865696768 + 740500000000000000C804401453697A652E506C6174666F726D44656661756C + 74080C5374726F6B652E436F6C6F720708636C615768697465105374726F6B65 + 2E546869636B6E65737305000000000000008001400A5374726F6B652E436170 + 0705526F756E6408456E64416E676C650500000000000000B405C0000F54466C + 6F6174416E696D6174696F6E00095374796C654E616D650603616E6907456E61 + 626C656409084475726174696F6E050000000000000080FF3F044C6F6F70090C + 50726F70657274794E616D65060D526F746174696F6E416E676C650A53746172 + 7456616C756505000000000000000000000953746F7056616C75650500000000 + 000000B407400754726967676572060E497356697369626C653D747275650000 + 00005450463007544C61796F757400095374796C654E616D65060A70616E656C + 7374796C6505416C69676E070643656E7465720A53697A652E57696474680500 + 000000000000C006400B53697A652E4865696768740500000000000000A40640 + 1453697A652E506C6174666F726D44656661756C74080756697369626C650808 + 5461624F72646572023D000A5452656374616E676C6500095374796C654E616D + 65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A4669 + 6C6C2E436F6C6F7207097846463230323032300A53697A652E57696474680500 + 000000000000C006400B53697A652E4865696768740500000000000000A40640 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E6507585261646975730500000000000000C000400759526164 + 6975730500000000000000C000400000005450463007544C61796F7574000953 + 74796C654E616D65061970726F67726573736261726D696E696572726F727374 + 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 + 000033338505400B53697A652E4865696768740500000000009999E104401453 + 697A652E506C6174666F726D44656661756C74080756697369626C6508085461 + 624F72646572023E000A5452656374616E676C6500095374796C654E616D6506 + 0668747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C + 6F720709784646343034303430064C6F636B6564090748697454657374080A53 + 697A652E576964746805000000000033338505400B53697A652E486569676874 + 0500000000009999E104401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E6507585261646975730500000000 + 00000080004007595261646975730500000000000000800040000A5452656374 + 616E676C6500095374796C654E616D65060A68696E64696361746F7205416C69 + 676E07044C6566740A46696C6C2E436F6C6F720709784646453232413241064C + 6F636B6564090748697454657374080A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000009999E104401453697A + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E6507585261646975730500000000000000800040075952616469757305 + 000000000000008000400000000A5452656374616E676C6500095374796C654E + 616D65060676747261636B05416C69676E0708436F6E74656E74730A46696C6C + 2E436F6C6F720709784646343034303430064C6F636B65640907486974546573 + 74080A53697A652E576964746805000000000033338505400B53697A652E4865 + 696768740500000000009999E104401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65075852616469757305 + 0000000000000080004007595261646975730500000000000000800040000A54 + 52656374616E676C6500095374796C654E616D65060A76696E64696361746F72 + 05416C69676E0706426F74746F6D0A46696C6C2E436F6C6F7207097846464532 + 32413241064C6F636B6564090748697454657374080A506F736974696F6E2E59 + 05000000000099998D04400A53697A652E576964746805000000000033338505 + 400B53697A652E4865696768740500000000000000A803401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 0758526164697573050000000000000080004007595261646975730500000000 + 000000800040000000005450463007544C61796F757400095374796C654E616D + 65060E6C6F67627574746F6E7374796C6505416C69676E070643656E7465720A + 53697A652E57696474680500000000000000C005400B53697A652E4865696768 + 740500000000000000C005401453697A652E506C6174666F726D44656661756C + 74080756697369626C6508085461624F726465720202000A5452656374616E67 + 6C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E07 + 06436C69656E740C436C69704368696C6472656E090A436C6970506172656E74 + 0907436F726E6572730B08546F7052696768740B426F74746F6D526967687400 + 0A46696C6C2E436F6C6F7207097846463230323032300748697454657374080A + 53697A652E57696474680500000000000000C005400B53697A652E4865696768 + 740500000000000000C005401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E65075852616469757305000000 + 00000000C0004007595261646975730500000000000000C00040000F54436F6C + 6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E436F + 6C6F72416E696D6174696F6E31084475726174696F6E05000000000000000000 + 000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374617274 + 56616C756507097846463230323032300953746F7056616C7565070978464634 + 30343034300754726967676572063049734D6F7573654F7665723D747275653B + 4973507265737365643D66616C73653B4973466F63757365643D66616C73650E + 54726967676572496E7665727365063149734D6F7573654F7665723D66616C73 + 653B4973507265737365643D66616C73653B4973466F63757365643D66616C73 + 6500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650615 + 627574746F6E436F6C6F72416E696D6174696F6E32084475726174696F6E0500 + 0000000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C + 6F720A537461727456616C756507097846463430343034300953746F7056616C + 756507097846463137353739430754726967676572062F497350726573736564 + 3D747275653B49734D6F7573654F7665723D747275653B4973466F6375736564 + 3D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E + 616D650615627574746F6E436F6C6F72416E696D6174696F6E33084475726174 + 696F6E05000000000000000000000C50726F70657274794E616D65060A46696C + 6C2E436F6C6F720A537461727456616C75650709784646324138324532095374 + 6F7056616C756507097846463137353739430754726967676572062E49735072 + 65737365643D747275653B49734D6F7573654F7665723D747275653B4973466F + 63757365643D747275650E54726967676572496E7665727365062F4973507265 + 737365643D66616C73653B49734D6F7573654F7665723D747275653B4973466F + 63757365643D74727565000005545061746800095374796C654E616D65060550 + 6174683105416C69676E0706436C69656E7409446174612E506174680A5C0200 + 0032000000000000000000A841CDCCCC40010000000000A8410000C041010000 + 000000C03F0000C041010000000000C03F00000000010000009A996941000000 + 00010000000000A841CDCCCC40030000000000A841CDCCCC400000000000009C + 410000F04001000000000058410000F04001000000000058410000C03F010000 + 00000040400000C03F01000000000040400000B4410100000000009C410000B4 + 410100000000009C410000F0400300000000009C410000F04000000000000040 + 410000F04001000000000090400000F04001000000000090400000C040010000 + 00000040410000C04001000000000040410000F04003000000000040410000F0 + 4000000000000090400000104101000000000090410000104101000000000090 + 4100002841010000000000904000002841010000000000904000001041030000 + 0000009040000010410000000000009040000040410100000000009041000040 + 4101000000000090410000584101000000000090400000584101000000000090 + 4000004041030000000000904000004041000000000000904000007041010000 + 0000009041000070410100000000009041000084410100000000009040000084 + 4101000000000090400000704103000000000090400000704100000000000090 + 4000009041010000000000904100009041010000000000904100009C41010000 + 000000904000009C410100000000009040000090410300000000009040000090 + 4100000000000070410000C04001000000333393410000C04001000000000070 + 416666264001000000000070410000C04003000000000070410000C0400A4669 + 6C6C2E436F6C6F720708636C6157686974650748697454657374080C4D617267 + 696E732E4C6566740500000000000000A002400B4D617267696E732E546F7005 + 00000000000000A002400D4D617267696E732E52696768740500000000000000 + A002400E4D617267696E732E426F74746F6D0500000000000000A002400A5369 + 7A652E576964746805000000000000009805400B53697A652E48656967687405 + 000000000000009805401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E6508577261704D6F64650703466974 + 000000005450463007544C61796F757400095374796C654E616D65061B747265 + 6576696577657870616E646572627574746F6E7374796C6505416C69676E0706 + 43656E7465720B4D617267696E732E546F70050000000000000080FF3F0A5369 + 7A652E57696474680500000000000000B003400B53697A652E48656967687405 + 00000000000000B003401453697A652E506C6174666F726D44656661756C7408 + 0756697369626C6508085461624F726465720241000554506174680009537479 + 6C654E616D650605506174683105416C69676E070643656E7465720944617461 + 2E506174680A3400000004000000000000000000C8420000C842010000000000 + 96430000C842010000000000484300009643030000000000C8420000C8420A46 + 696C6C2E436F6C6F720708636C6157686974650748697454657374080D526F74 + 6174696F6E416E676C650500000000000000B405C00A53697A652E5769647468 + 0500000000000000A002400B53697A652E4865696768740500000000000000C0 + 01401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E0009537479 + 6C654E616D650614466C6F6174416E696D6174696F6E315374796C6508447572 + 6174696F6E05000000000000000000000D496E746572706F6C6174696F6E0708 + 43697263756C61720C50726F70657274794E616D65060D526F746174696F6E41 + 6E676C650A537461727456616C75650500000000000000B405C00953746F7056 + 616C756505000000000000000000000754726967676572060F4973457870616E + 6465643D747275650E54726967676572496E766572736506104973457870616E + 6465643D66616C7365000000005450463007544C61796F757400095374796C65 + 4E616D65060D74726565766965777374796C6505416C69676E070643656E7465 + 720A53697A652E57696474680500000000000000E106400B53697A652E486569 + 67687405000000000000808107401453697A652E506C6174666F726D44656661 + 756C74080756697369626C6508085461624F726465720242000C544272757368 + 4F626A65637400095374796C654E616D650618416C7465726E6174696E67526F + 774261636B67726F756E640B42727573682E436F6C6F72070978304646464646 + 464600000A5452656374616E676C6500095374796C654E616D65060A6261636B + 67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F + 720709784646323032303230064C6F636B6564090748697454657374080C5061 + 6464696E672E4C656674050000000000000080FF3F0D50616464696E672E5269 + 676874050000000000000080FF3F0A53697A652E576964746805000000000000 + 00E106400B53697A652E48656967687405000000000000808107401453697A65 + 2E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709 + 7846463135313531350007544C61796F757400095374796C654E616D65060763 + 6F6E74656E7405416C69676E0706436C69656E740C436C69704368696C647265 + 6E090B4D617267696E732E546F70050000000000000080FF3F0A53697A652E57 + 696474680500000000000000CD06400B53697A652E4865696768740500000000 + 000000F006401453697A652E506C6174666F726D44656661756C7408000A5452 + 656374616E676C6500095374796C654E616D65060973656C656374696F6E0A46 + 696C6C2E436F6C6F7207097846463241383245320748697454657374080A5369 + 7A652E57696474680500000000000000C804400B53697A652E48656967687405 + 00000000000000C804401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E650758526164697573050000000000 + 0000C0004007595261646975730500000000000000C0004000000A5452656374 + 616E676C6500095374796C654E616D650610666F637573656473656C65637469 + 6F6E0A46696C6C2E436F6C6F7207097846463241383245320748697454657374 + 080A53697A652E57696474680500000000000000C804400B53697A652E486569 + 6768740500000000000000C804401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E650B5374726F6B652E4461 + 73680703446F7407585261646975730500000000000000C00040075952616469 + 75730500000000000000C000400000000A545363726F6C6C4261720009537479 + 6C654E616D65060A767363726F6C6C62617205416C69676E070552696768740B + 536D616C6C4368616E676505000000000000000000000B4F7269656E74617469 + 6F6E0708566572746963616C0C4D617267696E732E4C65667405000000000000 + 008000400A506F736974696F6E2E580500000000000000D006400A53697A652E + 576964746805000000000000008003400B53697A652E48656967687405000000 + 00000000F106401453697A652E506C6174666F726D44656661756C740800000A + 545363726F6C6C42617200095374796C654E616D65060A687363726F6C6C6261 + 7205416C69676E0706426F74746F6D0B536D616C6C4368616E67650500000000 + 0000000000000B4F7269656E746174696F6E070A486F72697A6F6E74616C0B4D + 617267696E732E546F7005000000000000008000400A506F736974696F6E2E58 + 050000000000000080FF3F0A506F736974696F6E2E590500000000000000F306 + 400A53697A652E57696474680500000000000000DF06400B53697A652E486569 + 67687405000000000000008003401453697A652E506C6174666F726D44656661 + 756C740800000F54536D616C6C5363726F6C6C42617200095374796C654E616D + 65060F76736D616C6C7363726F6C6C62617205416C69676E070552696768740B + 536D616C6C4368616E676505000000000000000000000B4F7269656E74617469 + 6F6E0708566572746963616C0C4D617267696E732E4C65667405000000000000 + 008000400A506F736974696F6E2E580500000000000000C605400A506F736974 + 696F6E2E5905000000000000008000400A53697A652E57696474680500000000 + 0000008002400B53697A652E4865696768740500000000000000800240145369 + 7A652E506C6174666F726D44656661756C74080756697369626C650800000F54 + 536D616C6C5363726F6C6C42617200095374796C654E616D65060F68736D616C + 6C7363726F6C6C62617205416C69676E0706426F74746F6D0B536D616C6C4368 + 616E676505000000000000000000000B4F7269656E746174696F6E070A486F72 + 697A6F6E74616C0B4D617267696E732E546F7005000000000000008000400A50 + 6F736974696F6E2E5805000000000000008000400A506F736974696F6E2E5905 + 00000000000000E205400A53697A652E57696474680500000000000000960640 + 0B53697A652E48656967687405000000000000008002401453697A652E506C61 + 74666F726D44656661756C74080756697369626C650800000000545046300A54 + 52656374616E676C6500095374796C654E616D65061174726565766965776974 + 656D7374796C6505416C69676E070643656E7465720946696C6C2E4B696E6407 + 044E6F6E650748697454657374080553696465730B06426F74746F6D000A5369 + 7A652E57696474680500000000000000AE05400B53697A652E48656967687405 + 00000000000000A004401453697A652E506C6174666F726D44656661756C7408 + 0C5374726F6B652E436F6C6F7207097846463135313531350B5374726F6B652E + 4A6F696E0705526F756E640756697369626C6508000C54537065656442757474 + 6F6E00095374796C654E616D650606627574746F6E05416C69676E07044C6566 + 740A53697A652E57696474680500000000000000A003400B53697A652E486569 + 6768740500000000000000A004401453697A652E506C6174666F726D44656661 + 756C74080B5374796C654C6F6F6B7570061B7472656576696577657870616E64 + 6572627574746F6E7374796C65000007544C61796F75740005416C69676E0708 + 436F6E74656E74730C4D617267696E732E4C6566740500000000000000A00340 + 0A53697A652E576964746805000000000000008605400B53697A652E48656967 + 68740500000000000000A004401453697A652E506C6174666F726D4465666175 + 6C7408000954436865636B426F7800095374796C654E616D650605636865636B + 05416C69676E07044C6566740843616E466F637573081244697361626C65466F + 637573456666656374090A53697A652E57696474680500000000000000A00340 + 0B53697A652E4865696768740500000000000000A004401453697A652E506C61 + 74666F726D44656661756C740800000654476C79706800095374796C654E616D + 65060A676C7970687374796C650C4D617267696E732E4C656674050000000000 + 00008000400B4D617267696E732E546F70050000000000000080FF3F0D4D6172 + 67696E732E526967687405000000000000008000400E4D617267696E732E426F + 74746F6D050000000000000080FF3F05416C69676E07044C6566740A506F7369 + 74696F6E2E580500000000000000B003400A506F736974696F6E2E5905000000 + 0000000080FF3F0A53697A652E576964746805000000000000008003400B5369 + 7A652E48656967687405000000000000009804401453697A652E506C6174666F + 726D44656661756C7408000005545465787400095374796C654E616D65060474 + 65787405416C69676E0706436C69656E74064C6F636B65640907486974546573 + 74080A53697A652E57696474680500000000000000BC04400B53697A652E4865 + 696768740500000000000000A004401453697A652E506C6174666F726D446566 + 61756C74080454657874060454657874165465787453657474696E67732E466F + 6E74436F6C6F720708636C615768697465155465787453657474696E67732E57 + 6F72645772617008165465787453657474696E67732E486F727A416C69676E07 + 074C656164696E670000000A5452656374616E676C650005416C69676E070843 + 6F6E74656E74730946696C6C2E4B696E6407044E6F6E65074869745465737408 + 0E4D617267696E732E426F74746F6D050000000000000080FF3F055369646573 + 0B044C656674000A53697A652E57696474680500000000000000AE05400B5369 + 7A652E48656967687405000000000000009C04401453697A652E506C6174666F + 726D44656661756C74080C5374726F6B652E436F6C6F72070978464632413832 + 4532105374726F6B652E546869636B6E65737305000000000000008000400000 + 005450463007544C61796F757400095374796C654E616D65061670726F677265 + 737362617266696E6973687374796C6505416C69676E070643656E7465720A53 + 697A652E576964746805000000000033338505400B53697A652E486569676874 + 0500000000009999E104401453697A652E506C6174666F726D44656661756C74 + 080756697369626C6508085461624F72646572023F000A5452656374616E676C + 6500095374796C654E616D65060668747261636B05416C69676E0708436F6E74 + 656E74730A46696C6C2E436F6C6F720709784646323032303230064C6F636B65 + 64090748697454657374080A53697A652E576964746805000000000033338505 + 400B53697A652E4865696768740500000000009999E104401453697A652E506C + 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 + 31353135313507585261646975730500000000000000C0004007595261646975 + 730500000000000000C00040000A5452656374616E676C6500095374796C654E + 616D65060A68696E64696361746F7205416C69676E07044C6566740A46696C6C + 2E436F6C6F720709784646324345323434064C6F636B65640907486974546573 + 74080C4D617267696E732E4C656674050000000000000080FF3F0B4D61726769 + 6E732E546F70050000000000000080FF3F0D4D617267696E732E526967687405 + 0000000000000080FF3F0E4D617267696E732E426F74746F6D05000000000000 + 0080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F736974 + 696F6E2E59050000000000000080FF3F0A53697A652E57696474680500000000 + 000000C804400B53697A652E4865696768740500000000009999D90440145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E6507585261646975730500000000000000C000400759526164697573 + 0500000000000000C000400000000A5452656374616E676C6500095374796C65 + 4E616D65060676747261636B05416C69676E0708436F6E74656E74730A46696C + 6C2E436F6C6F720709784646323032303230064C6F636B656409074869745465 + 7374080A53697A652E576964746805000000000033338505400B53697A652E48 + 65696768740500000000009999E104401453697A652E506C6174666F726D4465 + 6661756C74080C5374726F6B652E436F6C6F7207097846463135313531350758 + 5261646975730500000000000000C00040075952616469757305000000000000 + 00C00040000A5452656374616E676C6500095374796C654E616D65060A76696E + 64696361746F7205416C69676E0706426F74746F6D0A46696C6C2E436F6C6F72 + 0709784646324345323434064C6F636B6564090748697454657374080C4D6172 + 67696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F70 + 050000000000000080FF3F0D4D617267696E732E526967687405000000000000 + 0080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A50 + 6F736974696F6E2E58050000000000000080FF3F0A506F736974696F6E2E5905 + 000000000099998904400A53697A652E57696474680500000000003333810540 + 0B53697A652E4865696768740500000000000000A803401453697A652E506C61 + 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6507 + 585261646975730500000000000000C000400759526164697573050000000000 + 0000C00040000000005450463007544C61796F757400095374796C654E616D65 + 061A70726F67726573736261726D696E6966696E6973687374796C6505416C69 + 676E070643656E7465720A53697A652E57696474680500000000003333850540 + 0B53697A652E4865696768740500000000009999E104401453697A652E506C61 + 74666F726D44656661756C74080756697369626C6508085461624F7264657202 + 4A000A5452656374616E676C6500095374796C654E616D65060668747261636B + 05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646 + 343034303430064C6F636B6564090748697454657374080A53697A652E576964 + 746805000000000033338505400B53697A652E48656967687405000000000099 + 99E104401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E650758526164697573050000000000000080004007 + 595261646975730500000000000000800040000A5452656374616E676C650009 + 5374796C654E616D65060A68696E64696361746F7205416C69676E07044C6566 + 740A46696C6C2E436F6C6F720709784646324345323434064C6F636B65640907 + 48697454657374080A53697A652E57696474680500000000000000C804400B53 + 697A652E4865696768740500000000009999E104401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65075852 + 6164697573050000000000000080004007595261646975730500000000000000 + 8000400000000A5452656374616E676C6500095374796C654E616D6506067674 + 7261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207 + 09784646343034303430064C6F636B6564090748697454657374080A53697A65 + 2E576964746805000000000033338505400B53697A652E486569676874050000 + 0000009999E104401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E6507585261646975730500000000000000 + 80004007595261646975730500000000000000800040000A5452656374616E67 + 6C6500095374796C654E616D65060A76696E64696361746F7205416C69676E07 + 06426F74746F6D0A46696C6C2E436F6C6F720709784646324345323434064C6F + 636B6564090748697454657374080A506F736974696F6E2E5905000000000099 + 998D04400A53697A652E576964746805000000000033338505400B53697A652E + 4865696768740500000000000000A803401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6507585261646975 + 7305000000000000008000400759526164697573050000000000000080004000 + 0000005450463007544C61796F757400095374796C654E616D6506136172726F + 77646F776E746F6F6C627574746F6E05416C69676E070643656E7465720A5369 + 7A652E57696474680500000000000000C805400B53697A652E48656967687405 + 00000000000000C803401453697A652E506C6174666F726D44656661756C7408 + 0756697369626C6508085461624F726465720201000A5452656374616E676C65 + 00095374796C654E616D65060A6261636B67726F756E6405416C69676E070643 + 6C69656E740C436C69704368696C6472656E090A436C6970506172656E740907 + 436F726E6572730B07546F704C6566740A426F74746F6D4C656674000A46696C + 6C2E436F6C6F7207097830303230323032300748697454657374080A53697A65 + 2E57696474680500000000000000C805400B53697A652E486569676874050000 + 0000000000C803401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E6507585261646975730500000000000000 + C0004007595261646975730500000000000000C00040000F54436F6C6F72416E + 696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F7241 + 6E696D6174696F6E31084475726174696F6E05000000000000000000000C5072 + 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 + 6507097830303230323032300953746F7056616C756507097846463430343034 + 300754726967676572063049734D6F7573654F7665723D747275653B49735072 + 65737365643D66616C73653B4973466F63757365643D66616C73650E54726967 + 676572496E7665727365063149734D6F7573654F7665723D66616C73653B4973 + 507265737365643D66616C73653B4973466F63757365643D66616C736500000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D65061562757474 + 6F6E436F6C6F72416E696D6174696F6E32084475726174696F6E050000000000 + 00000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53 + 7461727456616C756507097846463430343034300953746F7056616C75650709 + 7846463137353739430754726967676572062F4973507265737365643D747275 + 653B49734D6F7573654F7665723D747275653B4973466F63757365643D66616C + 736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 15627574746F6E436F6C6F72416E696D6174696F6E33084475726174696F6E05 + 000000000000000000000C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463241383245320953746F705661 + 6C756507097846463137353739430754726967676572062E4973507265737365 + 643D747275653B49734D6F7573654F7665723D747275653B4973466F63757365 + 643D747275650E54726967676572496E7665727365062F497350726573736564 + 3D66616C73653B49734D6F7573654F7665723D747275653B4973466F63757365 + 643D7472756500000005545061746800095374796C654E616D65060470617468 05416C69676E070643656E74657209446174612E506174680A34000000040000 - 0000000000000000000000000001000000000000000000803F01000000000080 - 3F0000003F0300000000000000000000000A46696C6C2E436F6C6F720708636C - 615768697465064C6F636B6564090748697454657374080A53697A652E576964 - 74680500000000000000E001400B53697A652E48656967687405000000000000 - 008002401453697A652E506C6174666F726D44656661756C74080B5374726F6B - 652E4B696E6407044E6F6E6500000000545046300A5452656374616E676C6500 - 095374796C654E616D65060C6D656E756261727374796C6505416C69676E0706 - 43656E7465720C436C69704368696C6472656E090946696C6C2E4B696E640704 - 4E6F6E650748697454657374080A53697A652E57696474680500000000000000 - C804400B53697A652E4865696768740500000000000000C804401453697A652E - 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F - 6E650756697369626C6508000A5452656374616E676C650005416C69676E0706 - 436C69656E740A46696C6C2E436F6C6F72070978464632303230323007486974 - 54657374080C4D617267696E732E4C656674050000000000000080FFBF0B4D61 - 7267696E732E546F70050000000000000080FFBF0D4D617267696E732E526967 - 6874050000000000000080FFBF0A53697A652E57696474680500000000000000 - D004400B53697A652E4865696768740500000000000000CC04401453697A652E - 506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72070978 - 4646313531353135000007544C61796F757400095374796C654E616D65060763 - 6F6E74656E7405416C69676E0706436C69656E740C4D617267696E732E4C6566 - 74050000000000000080FF3F0B4D617267696E732E546F700500000000000000 - 80FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D6172 - 67696E732E426F74746F6D050000000000000080FF3F0A53697A652E57696474 - 680500000000000000C004400B53697A652E4865696768740500000000000000 - C004401453697A652E506C6174666F726D44656661756C740800000054504630 - 07544C61796F757400095374796C654E616D65060D6D656E756974656D737479 - 6C6505416C69676E070643656E7465720C4D617267696E732E4C656674050000 - 000000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D - 4D617267696E732E5269676874050000000000000080FF3F0E4D617267696E73 - 2E426F74746F6D050000000000000080FF3F0A53697A652E5769647468050000 - 00000000009205400B53697A652E4865696768740500000000000000D0034014 + 00000000000000C8420000C84201000000000096430000C84201000000000048 + 4300009643030000000000C8420000C8420A46696C6C2E436F6C6F720708636C + 6157686974650748697454657374080A53697A652E5769647468050000000000 + 0000A002400B53697A652E4865696768740500000000000000C001401453697A + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E65000005545465787400095374796C654E616D6506047465787405416C + 69676E0706436C69656E740748697454657374080A53697A652E576964746805 + 00000000000000C805400B53697A652E4865696768740500000000000000C803 + 401453697A652E506C6174666F726D44656661756C7408045465787406045465 + 7874165465787453657474696E67732E466F6E74436F6C6F720708636C615768 + 6974650756697369626C6508000000} + end> + Left = 64 + Top = 144 + end + object AERModernAnimatedStyle: TStyleBook + StyleName = 'AER Modern Smooth Style' + Styles = < + item + ResourcesBin = { + 464D585F5354594C4520322E3501060F6261636B67726F756E647374796C6503 + AF00060B627574746F6E7374796C6503C5040609656469747374796C6503AC05 + 060A6C6162656C7374796C65032001060D67726F7570626F787374796C65038E + 02060D747261636B6261727374796C65038C07060D636865636B626F78737479 + 6C65039E0506147363726F6C6C62617268747261636B7374796C65033B010614 + 7363726F6C6C62617276747261636B7374796C65033B0106157363726F6C6C62 + 6172626F74746F6D627574746F6E032D0406137363726F6C6C6261726C656674 + 627574746F6E03440406147363726F6C6C6261727269676874627574746F6E03 + 450406127363726F6C6C626172746F70627574746F6E034304060E7363726F6C + 6C6261727374796C65036304060A7468756D627374796C65034402060B737769 + 7463687374796C6503DC01060C7370696E626F787374796C65035F07060F7461 + 62636F6E74726F6C7374796C6503A701060B746162646F747374796C65035901 + 060C7461626974656D7374796C6503EF04060D7468756D626261727374796C65 + 034F03060C6C697374626F787374796C6503AD07060D6C697374626F78666F6F + 746572038B0106106C697374626F786974656D7374796C6503260306126C6973 + 74626F78706C61696E6865616465720346020609677269647374796C65038708 + 060F6865616465726974656D7374796C6503CE03061070726F67726573736261 + 727374796C65036A04061170726F677265737363656C6C7374796C6503A50206 + 106D656E756261726974656D7374796C6503300B060C6D656E75626172737479 + 6C65036C02060D6D656E756974656D7374796C65035D0B06126D656E75736570 + 617261746F727374796C6503E501060D6D656E75766965777374796C65039102 + 060E696D61676563656C6C7374796C65033D01060E706F70757063656C6C7374 + 796C65038E03060D7465787463656C6C7374796C6503A60106096D656D6F7374 + 796C6503DE07060E6C696E6B6C6162656C7374796C65035B03060D73697A6567 + 7269707374796C6503FB04060E7374617475736261727374796C6503DB01060C + 746F6F6C6261727374796C6503CA00061570726F67726573736261726572726F + 727374796C65036F040613736D616C6C7363726F6C6C6261727374796C6503AE + 01060D636F6D626F626F787374796C65030108060D73706C6974746572737479 + 6C6503C0030610636C6F7365627574746F6E7374796C65038604060E6D617862 + 7574746F6E7374796C65030104060E6D696E627574746F6E7374796C65031904 + 060E726573627574746F6E7374796C65031A04060F746F6F6C77696E646F7773 + 74796C6503BD0D0610726164696F627574746F6E7374796C6503C4050618756C + 63656E746572726164696F627574746F6E7374796C650368050616756C6C6566 + 74726164696F627574746F6E7374796C65035B050617756C7269676874726164 + 696F627574746F6E7374796C65036005060E636F6D626F656469747374796C65 + 038D090611616E69696E64696361746F727374796C6503D7010613657870616E + 646572627574746F6E7374796C650381020615657870616E646572636865636B + 626F787374796C6503DB05060A70616E656C7374796C65032901061970726F67 + 726573736261726D696E696572726F727374796C65036103061470726F677265 + 73736261726D696E697374796C65035C03060D657870616E6465727374796C65 + 037C060615616E69696E64696361746F72686F727A7374796C65039502060E6C + 6F67627574746F6E7374796C65039507061B7472656576696577657870616E64 + 6572627574746F6E7374796C65038002061174726565766965776974656D7374 + 796C65030905060D74726565766965777374796C65034107061670726F677265 + 737362617266696E6973687374796C65037004061A70726F6772657373626172 + 6D696E6966696E6973687374796C65036203061177696E646F77626F72646572 + 7374796C65039D1006136172726F77646F776E746F6F6C627574746F6E03A905 + 060D706F707570626F787374796C65034B0600545046300A5452656374616E67 + 6C6500095374796C654E616D65060F6261636B67726F756E647374796C650541 + 6C69676E070643656E7465720A46696C6C2E436F6C6F72070978464632443244 + 32440A53697A652E576964746805000000000000009407400B53697A652E4865 + 696768740500000000000080D206401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E650756697369626C6508 + 00005450463007544C61796F757400095374796C654E616D65060B627574746F + 6E7374796C6505416C69676E070643656E7465720A53697A652E576964746805 + 00000000000000C805400B53697A652E4865696768740500000000000000C803 + 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 + 085461624F726465720202000A5452656374616E676C6500095374796C654E61 + 6D65060A6261636B67726F756E6405416C69676E0706436C69656E740C436C69 + 704368696C6472656E090A436C6970506172656E74090A46696C6C2E436F6C6F + 7207097846463230323032300748697454657374080A53697A652E5769647468 + 0500000000000000C805400B53697A652E4865696768740500000000000000C8 + 03401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E0009537479 + 6C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E31084475 + 726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A + 46696C6C2E436F6C6F720A537461727456616C75650709784646323032303230 + 0953746F7056616C756507097846463430343034300754726967676572063049 + 734D6F7573654F7665723D747275653B4973507265737365643D66616C73653B + 4973466F63757365643D66616C73650E54726967676572496E76657273650631 + 49734D6F7573654F7665723D66616C73653B4973507265737365643D66616C73 + 653B4973466F63757365643D66616C736500000F54436F6C6F72416E696D6174 + 696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D61 + 74696F6E32084475726174696F6E050000000000CDCCCCFB3F0C50726F706572 + 74794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978 + 46463430343034300953746F7056616C75650709784646313735373943075472 + 6967676572062F4973507265737365643D747275653B49734D6F7573654F7665 + 723D747275653B4973466F63757365643D66616C736500000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72 + 416E696D6174696F6E33084475726174696F6E050000000000CDCCCCFB3F0C50 + 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C + 756507097846463241383245320953746F7056616C7565070978464631373537 + 39430754726967676572062E4973507265737365643D747275653B49734D6F75 + 73654F7665723D747275653B4973466F63757365643D747275650E5472696767 + 6572496E7665727365062F4973507265737365643D66616C73653B49734D6F75 + 73654F7665723D747275653B4973466F63757365643D74727565000000055454 + 65787400095374796C654E616D6506047465787405416C69676E0706436C6965 + 6E7413456E61626C6544726167486967686C6967687408074869745465737408 + 0A53697A652E57696474680500000000000000C805400B53697A652E48656967 + 68740500000000000000C803401453697A652E506C6174666F726D4465666175 + 6C7408165465787453657474696E67732E466F6E74436F6C6F720708636C6157 + 686974650000005450463007544C61796F757400095374796C654E616D650609 + 656469747374796C6505416C69676E070643656E7465720A53697A652E576964 + 74680500000000000000C805400B53697A652E48656967687405000000000000 + 00C803401453697A652E506C6174666F726D44656661756C7408075669736962 + 6C6508085461624F726465720203000C5442727573684F626A65637400095374 + 796C654E616D65060A666F726567726F756E6400000C5442727573684F626A65 + 637400095374796C654E616D65060973656C656374696F6E0B42727573682E43 + 6F6C6F72070978393632413832453200000B54466F6E744F626A656374000953 + 74796C654E616D650604666F6E7409466F6E742E53697A650500000000000000 + D0024000000A5452656374616E676C6500095374796C654E616D65060A626163 + 6B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C + 6F7207097846463230323032300748697454657374080A53697A652E57696474 + 680500000000000000C805400B53697A652E4865696768740500000000000000 + C803401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 + 2E436F6C6F720709784646313531353135000F54436F6C6F72416E696D617469 + 6F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E315374 + 796C65084475726174696F6E050000000000CDCCCCFB3F07496E766572736509 + 0C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A53746172 + 7456616C756507097846463135313531350953746F7056616C75650709784646 + 3430343034300754726967676572062049734D6F7573654F7665723D74727565 + 3B4973466F63757365643D66616C73650E54726967676572496E766572736506 + 2149734D6F7573654F7665723D66616C73653B4973466F63757365643D66616C + 736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 14436F6C6F72416E696D6174696F6E325374796C65084475726174696F6E0500 + 00000000CDCCCCFB3F0C50726F70657274794E616D65060C5374726F6B652E43 + 6F6C6F720A537461727456616C756507097846463135313531350953746F7056 + 616C756507097846463241383245320754726967676572060E4973466F637573 + 65643D747275650E54726967676572496E7665727365060F4973466F63757365 + 643D66616C736500000007544C61796F757400095374796C654E616D65060762 + 7574746F6E7305416C69676E07055269676874064C6F636B6564090B4D617267 + 696E732E546F7005000000000000008000400D4D617267696E732E5269676874 + 05000000000000008000400E4D617267696E732E426F74746F6D050000000000 + 00008000400A506F736974696F6E2E580500000000000000C004400A506F7369 + 74696F6E2E5905000000000000008000400A53697A652E576964746805000000 + 00000000C804400B53697A652E4865696768740500000000000000A803401453 + 697A652E506C6174666F726D44656661756C7408000007544C61796F75740009 + 5374796C654E616D650607636F6E74656E7405416C69676E0706436C69656E74 + 064C6F636B6564090C4D617267696E732E4C6566740500000000000000800140 + 0B4D617267696E732E546F7005000000000000008000400D4D617267696E732E + 526967687405000000000000008000400E4D617267696E732E426F74746F6D05 + 000000000000008000400A53697A652E57696474680500000000000000A80440 + 0B53697A652E4865696768740500000000000000A803401453697A652E506C61 + 74666F726D44656661756C7408000006544C6162656C00095374796C654E616D + 65060670726F6D7074064C6F636B656409074F70616369747905000000000000 + 0080FE3F165465787453657474696E67732E466F6E74436F6C6F720708636C61 + 576869746504546578740604546578740000005450463007544C61796F757400 + 095374796C654E616D65060A6C6162656C7374796C6505416C69676E07064365 + 6E7465720A53697A652E57696474680500000000000000C805400B53697A652E + 4865696768740500000000000000C803401453697A652E506C6174666F726D44 + 656661756C74080756697369626C6508085461624F7264657202040005545465 + 787400095374796C654E616D6506047465787405416C69676E0708436F6E7465 + 6E74730748697454657374080A53697A652E57696474680500000000000000C8 + 05400B53697A652E4865696768740500000000000000C803401453697A652E50 + 6C6174666F726D44656661756C7408165465787453657474696E67732E466F6E + 74436F6C6F720708636C6157686974650000005450463007544C61796F757400 + 095374796C654E616D65060D67726F7570626F787374796C6505416C69676E07 + 0643656E7465720A53697A652E57696474680500000000000000F004400B5369 + 7A652E4865696768740500000000000000C804401453697A652E506C6174666F + 726D44656661756C74080756697369626C6508085461624F726465720205000A + 5452656374616E676C6500095374796C654E616D65060A6261636B67726F756E + 6405416C69676E0708436F6E74656E74730946696C6C2E4B696E6407044E6F6E + 650748697454657374080C4D617267696E732E4C6566740500000000000000C0 + 00400B4D617267696E732E546F7005000000000000009002400D4D617267696E + 732E52696768740500000000000000C000400E4D617267696E732E426F74746F + 6D0500000000000000C000400A53697A652E57696474680500000000000000D8 + 04400B53697A652E48656967687405000000000000009804401453697A652E50 + 6C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846 + 463135313531350005545465787400095374796C654E616D6506047465787408 + 4175746F53697A65090A436C6970506172656E74090748697454657374080C4D + 617267696E732E4C6566740500000000000000A002400A506F736974696F6E2E + 5805000000000060559502400A506F736974696F6E2E590500000000004055D5 + 01C00A53697A652E576964746805000000000000B8C703400B53697A652E4865 + 696768740500000000000060FF02401453697A652E506C6174666F726D446566 + 61756C7408165465787453657474696E67732E466F6E74436F6C6F720708636C + 615768697465155465787453657474696E67732E576F72645772617008000000 + 005450463007544C61796F757400095374796C654E616D65060D747261636B62 + 61727374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 0500000000000000C805400B53697A652E4865696768740500000000000000C8 + 05401453697A652E506C6174666F726D44656661756C74080756697369626C65 + 08085461624F7264657202060B46697865644865696768740211000A54526563 + 74616E676C6500095374796C654E616D65060668747261636B05416C69676E07 + 0A5665727443656E7465720A46696C6C2E436F6C6F7207097846463135313531 + 350748697454657374080A506F736974696F6E2E590500000000000000BC0440 + 0A53697A652E57696474680500000000000000C805400B53697A652E48656967 + 68740500000000000000A001401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E65000A5452656374616E676C + 6500095374796C654E616D65060A6261636B67726F756E6405416C69676E0708 + 436F6E74656E74730946696C6C2E4B696E6407044E6F6E65064C6F636B656409 + 0748697454657374080C4D617267696E732E4C6566740500000000000000C001 + 400B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E73 + 2E52696768740500000000000000C001400E4D617267696E732E426F74746F6D + 050000000000000080FF3F0A53697A652E57696474680500000000000000B005 + 400B53697A652E4865696768740500000000000000C000401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 00000A5452656374616E676C6500095374796C654E616D650609686967686C69 + 67687405416C69676E07044C6566740A46696C6C2E436F6C6F72070978464632 + 41383245320748697454657374080C50616464696E672E4C6566740500000000 + 000000A002400A53697A652E57696474680500000000000000F003400B53697A + 652E4865696768740500000000000000A001401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000B5447 + 6C6F774566666563740008536F66746E657373050000000000CDCCCCFC3F0947 + 6C6F77436F6C6F720709784646324138324532074F7061636974790500000000 + 00000080FF3F07456E61626C6564080000000A5452656374616E676C65000953 + 74796C654E616D65060676747261636B05416C69676E070A486F727A43656E74 + 65720A46696C6C2E436F6C6F7207097846463135313531350748697454657374 + 080A506F736974696F6E2E580500000000000000BC04400A53697A652E576964 + 74680500000000000000A001400B53697A652E48656967687405000000000000 + 00C805401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E65000A5452656374616E676C6500095374796C654E + 616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E747309 + 46696C6C2E4B696E6407044E6F6E65064C6F636B656409074869745465737408 + 0C4D617267696E732E4C6566740500000000000000C001400B4D617267696E73 + 2E546F70050000000000000080FF3F0D4D617267696E732E5269676874050000 + 0000000000C001400E4D617267696E732E426F74746F6D050000000000000080 + FF3F0A53697A652E576964746805000000000000000000000B53697A652E4865 + 696768740500000000000000C405401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E6500000A545265637461 + 6E676C6500095374796C654E616D650609686967686C6967687405416C69676E + 0703546F700A46696C6C2E436F6C6F7207097846463241383245320748697454 + 657374080A53697A652E57696474680500000000000000A001400B53697A652E + 4865696768740500000000000000F003401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000B54476C6F + 774566666563740008536F66746E657373050000000000CDCCCCFC3F09476C6F + 77436F6C6F720709784646324138324532074F70616369747905000000000000 + 0080FF3F07456E61626C65640800000006545468756D6200095374796C654E61 + 6D650606687468756D62064C6F636B6564090A506F736974696F6E2E58050000 + 0000003033AB03400A506F736974696F6E2E59050000000000FFFFA304400A53 + 697A652E57696474680500000000000000F002400B53697A652E486569676874 + 0500000000000000F002401453697A652E506C6174666F726D44656661756C74 + 080B5374796C654C6F6F6B7570060D7468756D626261727374796C6500000654 + 5468756D6200095374796C654E616D650606767468756D62064C6F636B656409 + 0A506F736974696F6E2E58050000000000CBCCA804400A506F736974696F6E2E + 590500000000009899B103400A53697A652E57696474680500000000000000F0 + 02400B53697A652E4865696768740500000000000000F002401453697A652E50 + 6C6174666F726D44656661756C74080B5374796C654C6F6F6B7570060D746875 + 6D626261727374796C650000005450463007544C61796F757400095374796C65 + 4E616D65060D636865636B626F787374796C6505416C69676E070643656E7465 + 720A53697A652E5769647468050000000000ACAA8006400B53697A652E486569 + 67687405000000000058559904401453697A652E506C6174666F726D44656661 + 756C74080756697369626C6508085461624F7264657202070007544C61796F75 + 740005416C69676E07044C6566740A53697A652E576964746805000000000000 + 009003400B53697A652E48656967687405000000000058559904401453697A65 + 2E506C6174666F726D44656661756C7408000A5452656374616E676C65000953 + 74796C654E616D65060A6261636B67726F756E6405416C69676E070643656E74 + 65720A46696C6C2E436F6C6F7207097846463230323032300748697454657374 + 080A53697A652E57696474680500000000000000F002400B53697A652E486569 + 6768740500000000000000F002401453697A652E506C6174666F726D44656661 + 756C74080C5374726F6B652E436F6C6F720709784646313531353135000A5452 + 656374616E676C6500095374796C654E616D65060A52656374616E676C653105 + 416C69676E0706436C69656E740A46696C6C2E436F6C6F720709784646324138 + 324532074869745465737408074F70616369747905000000000000000000000C + 4D617267696E732E4C65667405000000000000008000400B4D617267696E732E + 546F7005000000000000008000400D4D617267696E732E526967687405000000 + 000000008000400E4D617267696E732E426F74746F6D05000000000000008000 + 400A53697A652E57696474680500000000000000B002400B53697A652E486569 + 6768740500000000000000B002401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E + 696D6174696F6E00095374796C654E616D65061B6368656368626F7856697362 + 696C697479416E696D6174696F6E31084475726174696F6E050000000000CDCC + CCFB3F0C50726F70657274794E616D6506074F7061636974790A537461727456 + 616C756505000000000000000000000953746F7056616C756505000000000000 + 00C805400754726967676572060E4973436865636B65643D747275650E547269 + 67676572496E7665727365060F4973436865636B65643D66616C73650000000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D65061863686563 + 6B626F785374726F6B65416E696D6174696F6E31084475726174696F6E050000 + 000000CDCCCCFB3F0C50726F70657274794E616D65060C5374726F6B652E436F + 6C6F720A537461727456616C756507097846463135313531350953746F705661 + 6C756507097846463241383245320754726967676572060E4973436865636B65 + 643D747275650E54726967676572496E7665727365060F4973436865636B6564 + 3D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E + 616D650617636865636B626F78436F6C6F72416E696D6174696F6E3108447572 + 6174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46 + 696C6C2E436F6C6F720A537461727456616C7565070978464632303230323009 + 53746F7056616C75650709784646343034303430075472696767657206104973 + 4D6F7573654F7665723D747275650E54726967676572496E7665727365061149 + 734D6F7573654F7665723D66616C73650000000005545465787400095374796C + 654E616D6506047465787405416C69676E0706436C69656E740A53697A652E57 + 696474680500000000005855DD05400B53697A652E4865696768740500000000 + 0058559904401453697A652E506C6174666F726D44656661756C740804546578 + 74060454657874165465787453657474696E67732E466F6E74436F6C6F720708 + 636C615768697465000000545046300A5452656374616E676C6500095374796C + 654E616D6506147363726F6C6C62617268747261636B7374796C6505416C6967 + 6E070643656E7465720A46696C6C2E436F6C6F72070978464631353135313507 + 48697454657374080A53697A652E57696474680500000000000000C804400B53 + 697A652E4865696768740500000000000000C804401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65075669 + 7369626C65080006545468756D6200095374796C654E616D6506057468756D62 + 064C6F636B6564090A53697A652E576964746805000000000000008003400B53 + 697A652E4865696768740500000000000000C804401453697A652E506C617466 + 6F726D44656661756C74080B5374796C654C6F6F6B7570060A7468756D627374 + 796C65000000545046300A5452656374616E676C6500095374796C654E616D65 + 06147363726F6C6C62617276747261636B7374796C6505416C69676E07064365 + 6E7465720A46696C6C2E436F6C6F720709784646313531353135074869745465 + 7374080A53697A652E57696474680500000000000000C804400B53697A652E48 + 65696768740500000000000000C804401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E650756697369626C65 + 080006545468756D6200095374796C654E616D6506057468756D62064C6F636B + 6564090A53697A652E57696474680500000000000000C804400B53697A652E48 + 656967687405000000000000008003401453697A652E506C6174666F726D4465 + 6661756C74080B5374796C654C6F6F6B7570060A7468756D627374796C650000 + 005450463007544C61796F757400095374796C654E616D6506157363726F6C6C + 626172626F74746F6D627574746F6E05416C69676E070643656E746572075669 + 7369626C6508085461624F726465720208000A5452656374616E676C65000953 + 74796C654E616D65060A6261636B67726F756E6405416C69676E0706436C6965 + 6E740C436C69704368696C6472656E090A436C6970506172656E74090A46696C + 6C2E436F6C6F7207097846463230323032300748697454657374080A53697A65 + 2E57696474680500000000000000C804400B53697A652E486569676874050000 + 0000000000C804401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F + 6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D617469 + 6F6E31084475726174696F6E050000000000CDCCCCFB3F0C50726F7065727479 + 4E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709784646 + 3230323032300953746F7056616C756507097846463430343034300754726967 + 676572062049734D6F7573654F7665723D747275653B4973507265737365643D + 66616C73650E54726967676572496E7665727365062149734D6F7573654F7665 + 723D66616C73653B4973507265737365643D66616C736500000F54436F6C6F72 + 416E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F + 72416E696D6174696F6E32084475726174696F6E05000000000000000000000C + 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 + 6C756507097846463430343034300953746F7056616C75650709784646313735 + 3739430754726967676572061F4973507265737365643D747275653B49734D6F + 7573654F7665723D747275650E54726967676572496E76657273650620497350 + 7265737365643D66616C73653B49734D6F7573654F7665723D74727565000000 + 07544C61796F757400095374796C654E616D6506074C61796F75743105416C69 + 676E070643656E7465720A53697A652E57696474680500000000000000A00240 + 0B53697A652E4865696768740500000000000000C001401453697A652E506C61 + 74666F726D44656661756C74080005545061746800095374796C654E616D6506 + 05506174683105416C69676E0706436C69656E7409446174612E506174680A34 + 00000004000000000000000000C8420000C84201000000000096430000C84201 + 0000000000484300009643030000000000C8420000C8420A46696C6C2E436F6C + 6F720708636C6157686974650748697454657374080A53697A652E5769647468 + 0500000000000000A002400B53697A652E4865696768740500000000000000C0 + 01401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E65000000005450463007544C61796F757400095374796C + 654E616D6506137363726F6C6C6261726C656674627574746F6E05416C69676E + 070643656E7465720756697369626C6508085461624F726465720209000A5452 + 656374616E676C6500095374796C654E616D65060A6261636B67726F756E6405 + 416C69676E0706436C69656E740C436C69704368696C6472656E090A436C6970 + 506172656E74090A46696C6C2E436F6C6F720709784646323032303230074869 + 7454657374080A53697A652E57696474680500000000000000C804400B53697A + 652E4865696768740500000000000000C804401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E43 + 6F6C6F72416E696D6174696F6E31084475726174696F6E050000000000CDCCCC + FB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 + 7456616C756507097846463230323032300953746F7056616C75650709784646 + 3430343034300754726967676572062049734D6F7573654F7665723D74727565 + 3B4973507265737365643D66616C73650E54726967676572496E766572736506 + 2149734D6F7573654F7665723D66616C73653B4973507265737365643D66616C + 736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 15627574746F6E436F6C6F72416E696D6174696F6E32084475726174696F6E05 + 000000000000000000000C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463430343034300953746F705661 + 6C756507097846463137353739430754726967676572061F4973507265737365 + 643D747275653B49734D6F7573654F7665723D747275650E5472696767657249 + 6E766572736506204973507265737365643D66616C73653B49734D6F7573654F + 7665723D7472756500000007544C61796F757400095374796C654E616D650607 + 4C61796F75743105416C69676E070643656E7465720A53697A652E5769647468 + 0500000000000000A002400B53697A652E4865696768740500000000000000C0 + 01401453697A652E506C6174666F726D44656661756C74080005545061746800 + 095374796C654E616D650605506174683105416C69676E0706436C69656E7409 + 446174612E506174680A3400000004000000000000000000C8420000C8420100 + 0000000096430000C842010000000000484300009643030000000000C8420000 + C8420A46696C6C2E436F6C6F720708636C615768697465074869745465737408 + 0D526F746174696F6E416E676C650500000000000000B405400A53697A652E57 + 696474680500000000000000A002400B53697A652E4865696768740500000000 + 000000C001401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E65000000005450463007544C61796F75740009 + 5374796C654E616D6506147363726F6C6C6261727269676874627574746F6E05 + 416C69676E070643656E7465720756697369626C6508085461624F7264657202 + 0A000A5452656374616E676C6500095374796C654E616D65060A6261636B6772 + 6F756E6405416C69676E0706436C69656E740C436C69704368696C6472656E09 + 0A436C6970506172656E74090A46696C6C2E436F6C6F72070978464632303230 + 32300748697454657374080A53697A652E57696474680500000000000000C804 + 400B53697A652E4865696768740500000000000000C804401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506156275 + 74746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E05000000 + 0000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F72 + 0A537461727456616C756507097846463230323032300953746F7056616C7565 + 07097846463430343034300754726967676572062049734D6F7573654F766572 + 3D747275653B4973507265737365643D66616C73650E54726967676572496E76 + 65727365062149734D6F7573654F7665723D66616C73653B4973507265737365 + 643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C65 + 4E616D650615627574746F6E436F6C6F72416E696D6174696F6E320844757261 + 74696F6E05000000000000000000000C50726F70657274794E616D65060A4669 + 6C6C2E436F6C6F720A537461727456616C756507097846463430343034300953 + 746F7056616C756507097846463137353739430754726967676572061F497350 + 7265737365643D747275653B49734D6F7573654F7665723D747275650E547269 + 67676572496E766572736506204973507265737365643D66616C73653B49734D + 6F7573654F7665723D7472756500000007544C61796F757400095374796C654E + 616D6506074C61796F75743105416C69676E070643656E7465720A53697A652E + 57696474680500000000000000A002400B53697A652E48656967687405000000 + 00000000C001401453697A652E506C6174666F726D44656661756C7408000554 + 5061746800095374796C654E616D650605506174683105416C69676E0706436C + 69656E7409446174612E506174680A3400000004000000000000000000C84200 + 00C84201000000000096430000C8420100000000004843000096430300000000 + 00C8420000C8420A46696C6C2E436F6C6F720708636C61576869746507486974 + 54657374080D526F746174696F6E416E676C650500000000000000B405C00A53 + 697A652E57696474680500000000000000A002400B53697A652E486569676874 + 0500000000000000C001401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C6179 + 6F757400095374796C654E616D6506127363726F6C6C626172746F7062757474 + 6F6E05416C69676E070643656E7465720756697369626C6508085461624F7264 + 6572020B000A5452656374616E676C6500095374796C654E616D65060A626163 + 6B67726F756E6405416C69676E0706436C69656E740C436C69704368696C6472 + 656E090A436C6970506172656E74090A46696C6C2E436F6C6F72070978464632 + 30323032300748697454657374080A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000000000C804401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 15627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E05 + 0000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463230323032300953746F705661 + 6C756507097846463430343034300754726967676572062049734D6F7573654F + 7665723D747275653B4973507265737365643D66616C73650E54726967676572 + 496E7665727365062149734D6F7573654F7665723D66616C73653B4973507265 + 737365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E320844 + 75726174696F6E05000000000000000000000C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C756507097846463430343034 + 300953746F7056616C756507097846463137353739430754726967676572061F + 4973507265737365643D747275653B49734D6F7573654F7665723D747275650E + 54726967676572496E766572736506204973507265737365643D66616C73653B + 49734D6F7573654F7665723D7472756500000007544C61796F75740009537479 + 6C654E616D6506074C61796F75743105416C69676E070643656E7465720A5369 + 7A652E57696474680500000000000000A002400B53697A652E48656967687405 + 00000000000000C001401453697A652E506C6174666F726D44656661756C7408 + 0005545061746800095374796C654E616D650605506174683105416C69676E07 + 06436C69656E7409446174612E506174680A3400000004000000000000000000 + C8420000C84201000000000096430000C8420100000000004843000096430300 + 00000000C8420000C8420A46696C6C2E436F6C6F720708636C61576869746507 + 48697454657374080D526F746174696F6E416E676C650500000000000000B406 + 400A53697A652E57696474680500000000000000A002400B53697A652E486569 + 6768740500000000000000C001401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E6500000000545046300754 + 4C61796F757400095374796C654E616D65060E7363726F6C6C6261727374796C + 6505416C69676E070643656E7465720756697369626C6508085461624F726465 + 72020C000754427574746F6E00095374796C654E616D65060A6C656674627574 + 746F6E05416C69676E07044C656674064C6F636B6564090A506F736974696F6E + 2E5905000000000000008003400A53697A652E57696474680500000000000000 + 8003400B53697A652E48656967687405000000000000009003401453697A652E + 506C6174666F726D44656661756C74080B5374796C654C6F6F6B757006137363 + 726F6C6C6261726C656674627574746F6E00000754427574746F6E0009537479 + 6C654E616D65060B7269676874627574746F6E05416C69676E07055269676874 + 064C6F636B6564090A506F736974696F6E2E5805000000000000008804400A50 + 6F736974696F6E2E5905000000000000008003400A53697A652E576964746805 + 000000000000008003400B53697A652E48656967687405000000000000009003 + 401453697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F + 6B757006147363726F6C6C6261727269676874627574746F6E00000754427574 + 746F6E00095374796C654E616D65060C626F74746F6D627574746F6E05416C69 + 676E0706426F74746F6D064C6F636B6564090A506F736974696F6E2E59050000 + 00000000008804400A53697A652E57696474680500000000000000C804400B53 + 697A652E48656967687405000000000000008003401453697A652E506C617466 + 6F726D44656661756C74080B5374796C654C6F6F6B757006157363726F6C6C62 + 6172626F74746F6D627574746F6E00000654547261636B00095374796C654E61 + 6D65060668747261636B05416C69676E0706436C69656E74064C6F636B656409 + 0B4F7269656E746174696F6E070A486F72697A6F6E74616C0A53697A652E5769 + 64746805000000000000009003400B53697A652E486569676874050000000000 + 00009003401453697A652E506C6174666F726D44656661756C74080B5374796C + 654C6F6F6B757006147363726F6C6C62617268747261636B7374796C65000006 + 54547261636B00095374796C654E616D65060676747261636B05416C69676E07 + 06436C69656E74064C6F636B6564090B4F7269656E746174696F6E070A486F72 + 697A6F6E74616C0A53697A652E576964746805000000000000009003400B5369 + 7A652E48656967687405000000000000009003401453697A652E506C6174666F + 726D44656661756C74080B5374796C654C6F6F6B757006147363726F6C6C6261 + 7276747261636B7374796C6500000754427574746F6E00095374796C654E616D + 650609746F70627574746F6E05416C69676E0703546F700A53697A652E576964 + 74680500000000000000C804400B53697A652E48656967687405000000000000 + 008003401453697A652E506C6174666F726D44656661756C74080B5374796C65 + 4C6F6F6B757006127363726F6C6C626172746F70627574746F6E000000545046 + 300A5452656374616E676C6500095374796C654E616D65060A7468756D627374 + 796C6505416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846 + 463444344434440748697454657374080A53697A652E57696474680500000000 + 000000C804400B53697A652E4865696768740500000000000000C80440145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E650756697369626C6508000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D6506147468756D62436F6C6F72416E696D6174696F6E31 + 084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D + 65060A46696C6C2E436F6C6F720A537461727456616C75650709784646344434 + 4434440953746F7056616C756507097846463137353739430754726967676572 + 060E4973507265737365643D747275650E54726967676572496E766572736506 + 0F4973507265737365643D66616C736500000F54436F6C6F72416E696D617469 + 6F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E315374 + 796C65084475726174696F6E050000000000CDCCCCFB3F07496E766572736509 + 0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456 + 616C756507097846463444344434440953746F7056616C75650707636C614772 + 61790754726967676572061049734D6F7573654F7665723D747275650E547269 + 67676572496E7665727365061149734D6F7573654F7665723D66616C73650000 + 00545046300D545377697463684F626A65637400095374796C654E616D65060B + 7377697463687374796C6505416C69676E070643656E746572044B696E64070C + 466164696E67547261636B730A53697A652E57696474680500000000000000C8 + 05400B53697A652E4865696768740500000000000000C803401453697A652E50 + 6C6174666F726D44656661756C7408085461624F72646572020D12547261636B + 696E675468756D625363616C65050000000000000080FF3F0756697369626C65 + 080A46696C6C2E436F6C6F7207097846463230323032300C46696C6C4F6E2E43 + 6F6C6F7207097846463137353739430B46696C6C4F6E2E4B696E640705536F6C + 69640B5374726F6B652E4B696E6407044E6F6E650B5468756D622E436F6C6F72 + 07097846463430343034300D5468756D624F6E2E436F6C6F7207097846463241 + 383245320C5468756D624F6E2E4B696E640705536F6C6964105468756D625374 + 726F6B652E4B696E6407044E6F6E650F5468756D625374726F6B652E43617007 + 05526F756E64105468756D625374726F6B652E446173680706437573746F6D10 + 5468756D625374726F6B652E4A6F696E0705526F756E64165468756D62537472 + 6F6B652E437573746F6D446173680A0800000000000000000000000000545046 + 3007544C61796F757400095374796C654E616D65060C7370696E626F78737479 + 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 + 0000008A06400B53697A652E4865696768740500000000000000C00340145369 + 7A652E506C6174666F726D44656661756C74080756697369626C650808546162 + 4F72646572020E000A5452656374616E676C6500095374796C654E616D65060A + 6261636B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E + 436F6C6F7207097846463230323032300A53697A652E57696474680500000000 + 0000008A06400B53697A652E4865696768740500000000000000C00340145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 0709784646313531353135000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650614436F6C6F72416E696D6174696F6E315374796C65084475 + 726174696F6E050000000000CDCCCCFB3F07496E7665727365090C50726F7065 + 7274794E616D65060C5374726F6B652E436F6C6F720A537461727456616C7565 + 07097846463135313531350953746F7056616C75650709784646343034303430 + 0754726967676572061049734D6F7573654F7665723D747275650E5472696767 + 6572496E7665727365061149734D6F7573654F7665723D66616C73650000000C + 5442727573684F626A65637400095374796C654E616D65060A666F726567726F + 756E640B42727573682E436F6C6F72070978464645414541454100000C544272 + 7573684F626A65637400095374796C654E616D65060973656C656374696F6E0B + 42727573682E436F6C6F720709783936324138324532000007544C61796F7574 + 00095374796C654E616D650607636F6E74656E7405416C69676E0706436C6965 + 6E74064C6F636B6564090C4D617267696E732E4C656674050000000000000080 + 00400B4D617267696E732E546F7005000000000000008000400D4D617267696E + 732E526967687405000000000000008000400E4D617267696E732E426F74746F + 6D05000000000000008000400A53697A652E57696474680500000000000000AC + 05400B53697A652E4865696768740500000000000000A003401453697A652E50 + 6C6174666F726D44656661756C740800000754427574746F6E00095374796C65 + 4E616D65060B6D696E7573627574746F6E05416C69676E07044C656674084361 + 6E466F6375730806437572736F72070763724172726F770C4D617267696E732E + 4C65667405000000000000008000400B4D617267696E732E546F700500000000 + 0000008000400D4D617267696E732E526967687405000000000000008000400E + 4D617267696E732E426F74746F6D05000000000000008000400A506F73697469 + 6F6E2E5805000000000000008000400A506F736974696F6E2E59050000000000 + 00008000400A53697A652E57696474680500000000000000A003400B53697A65 + 2E4865696768740500000000000000A003401453697A652E506C6174666F726D + 44656661756C74080B5374796C654C6F6F6B7570060B627574746F6E7374796C + 65000554506174680005416C69676E070643656E74657209446174612E506174 + 680A4000000005000000000000000000803F00000000010000000000803F0000 + 803F01000000000000000000003F010000000000803F00000000030000000000 + 803F000000000A46696C6C2E436F6C6F720708636C6157686974650748697454 + 657374080A53697A652E576964746805000000000000008002400B53697A652E + 48656967687405000000000000008002401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000007544275 + 74746F6E00095374796C654E616D65060A706C7573627574746F6E05416C6967 + 6E070552696768740843616E466F6375730806437572736F7207076372417272 + 6F770C4D617267696E732E4C65667405000000000000008000400B4D61726769 + 6E732E546F7005000000000000008000400D4D617267696E732E526967687405 + 000000000000008000400E4D617267696E732E426F74746F6D05000000000000 + 008000400A506F736974696F6E2E580500000000000000E805400A506F736974 + 696F6E2E5905000000000000008000400A53697A652E57696474680500000000 + 000000A003400B53697A652E4865696768740500000000000000A00340145369 + 7A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B757006 + 0B627574746F6E7374796C65000554506174680005416C69676E070643656E74 + 657209446174612E506174680A34000000040000000000000000000000000000 + 0001000000000000000000803F010000000000803F0000003F03000000000000 + 00000000000A46696C6C2E436F6C6F720708636C615768697465074869745465 + 7374080A53697A652E576964746805000000000000008002400B53697A652E48 + 656967687405000000000000008002401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E650000000054504630 + 07544C61796F757400095374796C654E616D65060F746162636F6E74726F6C73 + 74796C6505416C69676E070643656E7465720A53697A652E5769647468050000 + 00000000008E06400B53697A652E486569676874050000000000FFFFC9054014 53697A652E506C6174666F726D44656661756C74080756697369626C65080854 - 61624F72646572021A000A5452656374616E676C650005416C69676E0708436F - 6E74656E74730A46696C6C2E436F6C6F72070978464632413832453207486974 - 5465737408074F70616369747905000000000017B7D1F13F0A53697A652E5769 - 64746805000000000000009205400B53697A652E486569676874050000000000 - 0000D003401453697A652E506C6174666F726D44656661756C74080B5374726F - 6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E0008 + 61624F72646572020F000A5452656374616E676C6500095374796C654E616D65 + 060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A46696C + 6C2E436F6C6F720709784646333033303330064C6F636B656409074869745465 + 7374080C50616464696E672E4C65667405000000000000008000400B50616464 + 696E672E546F7005000000000000008000400D50616464696E672E5269676874 + 05000000000000008000400E50616464696E672E426F74746F6D050000000000 + 00008000400A53697A652E576964746805000000000000008E06400B53697A65 + 2E486569676874050000000000FFFFC905401453697A652E506C6174666F726D + 44656661756C74080C5374726F6B652E436F6C6F720709784646313531353135 + 000000545046300A5452656374616E676C6500095374796C654E616D65060B74 + 6162646F747374796C6505416C69676E070643656E7465720A46696C6C2E436F + 6C6F7207097846463135313531350748697454657374080A53697A652E576964 + 74680500000000000000C804400B53697A652E48656967687405000000000000 + 00C804401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E650756697369626C6508000F54436F6C6F72416E69 + 6D6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F70 + 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 + 097846463135313531350953746F7056616C7565070978464632413832453207 + 54726967676572060F497353656C65637465643D747275650E54726967676572 + 496E76657273650610497353656C65637465643D66616C736500000054504630 + 07544C61796F757400095374796C654E616D65060C7461626974656D7374796C + 6505416C69676E070643656E7465720A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000000000C803401453697A + 652E506C6174666F726D44656661756C74080756697369626C6508085461624F + 726465720210000A5452656374616E676C6500095374796C654E616D65060374 + 6F7005416C69676E0708436F6E74656E74730C436C69704368696C6472656E09 + 07436F726E6572730B07546F704C65667408546F705269676874000A46696C6C + 2E436F6C6F720709784646323032303230064C6F636B65640907486974546573 + 74080553696465730B03546F70044C656674055269676874000A53697A652E57 + 696474680500000000000000C804400B53697A652E4865696768740500000000 + 000000C803401453697A652E506C6174666F726D44656661756C74080C537472 + 6F6B652E436F6C6F720709784646313531353135000654476C79706800095374 + 796C654E616D65060A676C7970687374796C650C4D617267696E732E4C656674 + 05000000000000008001400D4D617267696E732E526967687405000000000000 + 008001C005416C69676E07044C6566740A53697A652E57696474680500000000 + 0000008003400B53697A652E4865696768740500000000000000800340145369 + 7A652E506C6174666F726D44656661756C740800000554546578740009537479 + 6C654E616D6506047465787405416C69676E0706436C69656E74064C6F636B65 + 64090748697454657374080C4D617267696E732E4C6566740500000000000000 + C000400B4D617267696E732E546F700500000000000000C000400D4D61726769 + 6E732E52696768740500000000000000C000400E4D617267696E732E426F7474 + 6F6D0500000000000000C000400A53697A652E57696474680500000000000000 + B004400B53697A652E48656967687405000000000000009803401453697A652E + 506C6174666F726D44656661756C7408165465787453657474696E67732E466F + 6E74436F6C6F720708636C615768697465155465787453657474696E67732E57 + 6F7264577261700800000F54436F6C6F72416E696D6174696F6E00095374796C + 654E616D650612746162436F6C6F72416E696D6174696F6E310D416E696D6174 + 696F6E547970650705496E4F7574084475726174696F6E050000000000CDCCCC + FB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 + 7456616C756507097846463230323032300953746F7056616C75650709784646 + 3430343034300754726967676572062149734D6F7573654F7665723D74727565 + 3B497353656C65637465643D66616C73650E54726967676572496E7665727365 + 062249734D6F7573654F7665723D66616C73653B497353656C65637465643D66 + 616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650612746162436F6C6F72416E696D6174696F6E32084475726174696F6E0500 + 00000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C + 6F720A537461727456616C756507097846463230323032300953746F7056616C + 756507097846463241383245320754726967676572060F497353656C65637465 + 643D747275650E54726967676572496E76657273650610497353656C65637465 + 643D66616C736500000000545046300A5452656374616E676C6500095374796C + 654E616D65060D7468756D626261727374796C6505416C69676E070643656E74 + 65720A46696C6C2E436F6C6F7207097846463241383245320748697454657374 + 080A53697A652E57696474680500000000000000A003400B53697A652E486569 + 6768740500000000000000A003401453697A652E506C6174666F726D44656661 + 756C74080C5374726F6B652E436F6C6F72070978464631353135313507566973 + 69626C6508000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 6506147468756D62436F6C6F72416E696D6174696F6E31084475726174696F6E + 050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E43 + 6F6C6F720A537461727456616C756507097846463241383245320953746F7056 + 616C756507097846463137353739430754726967676572061F49735072657373 + 65643D747275653B49734D6F7573654F7665723D747275650E54726967676572 + 496E766572736506104973507265737365643D66616C73653B00000F54436F6C + 6F72416E696D6174696F6E00095374796C654E616D6506147468756D62436F6C + 6F72416E696D6174696F6E32084475726174696F6E050000000000CDCCCCFB3F + 0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456 + 616C756507097846463241383245320953746F7056616C756507097846463430 + 394246460754726967676572062049734D6F7573654F7665723D747275653B49 + 73507265737365643D66616C73650E54726967676572496E7665727365062149 + 734D6F7573654F7665723D66616C73653B4973507265737365643D66616C7365 + 00000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65061574 + 68756D625374726F6B65416E696D6174696F6E31084475726174696F6E050000 + 000000CDCCCCFB3F0C50726F70657274794E616D65060C5374726F6B652E436F + 6C6F720A537461727456616C756507097846463135313531350953746F705661 + 6C756507097846463137353739430754726967676572061F4973507265737365 + 643D747275653B49734D6F7573654F7665723D747275650E5472696767657249 + 6E7665727365060F4973507265737365643D66616C7365000000545046300754 + 4C61796F757400095374796C654E616D65060C6C697374626F787374796C6505 + 416C69676E070643656E7465720A53697A652E5769647468050000000000FFFF + E905400B53697A652E48656967687405000000000000008306401453697A652E + 506C6174666F726D44656661756C74080756697369626C6508085461624F7264 + 65720211000C5442727573684F626A65637400095374796C654E616D65061841 + 6C7465726E6174696E67526F774261636B67726F756E640B42727573682E436F + 6C6F72070978464632433243324300000A5452656374616E676C650009537479 + 6C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E + 74730A46696C6C2E436F6C6F720709784646323032303230064C6F636B656409 + 0748697454657374080C50616464696E672E4C65667405000000000000008000 + 400B50616464696E672E546F7005000000000000008000400D50616464696E67 + 2E526967687405000000000000008000400E50616464696E672E426F74746F6D + 05000000000000008000400A53697A652E5769647468050000000000FFFFE905 + 400B53697A652E48656967687405000000000000008306401453697A652E506C + 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 + 3135313531350007544C61796F757400095374796C654E616D650607636F6E74 + 656E7405416C69676E0706436C69656E740C436C69704368696C6472656E090A + 53697A652E5769647468050000000000FFFFC105400B53697A652E4865696768 + 740500000000000000DE05401453697A652E506C6174666F726D44656661756C + 7408000A5452656374616E676C6500095374796C654E616D65060973656C6563 + 74696F6E0A46696C6C2E436F6C6F720709784646324138324532074869745465 + 7374080A53697A652E57696474680500000000000000C804400B53697A652E48 + 65696768740500000000000000C804401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374 + 616E676C6500095374796C654E616D650610666F637573656473656C65637469 + 6F6E0A46696C6C2E436F6C6F7207097846463241383245320748697454657374 + 080A53697A652E57696474680500000000000000C804400B53697A652E486569 + 6768740500000000000000C804401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E650B5374726F6B652E4461 + 73680703446F740000000A545363726F6C6C42617200095374796C654E616D65 + 060A767363726F6C6C62617205416C69676E070552696768740B536D616C6C43 + 68616E676505000000000000000000000B4F7269656E746174696F6E07085665 + 72746963616C0A506F736974696F6E2E58050000000000FFFFC505400A506F73 + 6974696F6E2E5905000000000000008000400A53697A652E5769647468050000 + 00000000008003400B53697A652E4865696768740500000000000000DE054014 + 53697A652E506C6174666F726D44656661756C740800000A545363726F6C6C42 + 617200095374796C654E616D65060A687363726F6C6C62617205416C69676E07 + 06426F74746F6D0B536D616C6C4368616E676505000000000000000000000B4F + 7269656E746174696F6E070A486F72697A6F6E74616C0A506F736974696F6E2E + 5805000000000000008000400A506F736974696F6E2E590500000000000000E2 + 05400A53697A652E5769647468050000000000FFFFE105400B53697A652E4865 + 6967687405000000000000008003401453697A652E506C6174666F726D446566 + 61756C740800000F54536D616C6C5363726F6C6C42617200095374796C654E61 + 6D65060F76736D616C6C7363726F6C6C62617205416C69676E07055269676874 + 0B536D616C6C4368616E676505000000000000000000000B4F7269656E746174 + 696F6E0708566572746963616C0C4D617267696E732E4C656674050000000000 + 00008000400A506F736974696F6E2E580500000000000000C605400A506F7369 + 74696F6E2E5905000000000000008000400A53697A652E576964746805000000 + 000000008002400B53697A652E48656967687405000000000000008002401453 + 697A652E506C6174666F726D44656661756C74080756697369626C650800000F + 54536D616C6C5363726F6C6C42617200095374796C654E616D65060F68736D61 + 6C6C7363726F6C6C62617205416C69676E0706426F74746F6D0B536D616C6C43 + 68616E676505000000000000000000000B4F7269656E746174696F6E070A486F + 72697A6F6E74616C0B4D617267696E732E546F7005000000000000008000400A + 506F736974696F6E2E5805000000000000008000400A506F736974696F6E2E59 + 0500000000000000E205400A53697A652E576964746805000000000000009606 + 400B53697A652E48656967687405000000000000008002401453697A652E506C + 6174666F726D44656661756C74080756697369626C65080000000B54476C6F77 + 4566666563740008536F66746E657373050000000000CDCCCCFC3F09476C6F77 + 436F6C6F720709784646463639453244074F7061636974790500000000006666 + E6FE3F0754726967676572060E4973466F63757365643D7472756507456E6162 + 6C6564080000005450463007544C61796F757400095374796C654E616D65060D + 6C697374626F78666F6F74657205416C69676E070643656E7465720A53697A65 + 2E576964746805000000000000009205400B53697A652E486569676874050000 + 0000000000D003401453697A652E506C6174666F726D44656661756C74080756 + 697369626C6508085461624F7264657202120005545465787400095374796C65 + 4E616D6506047465787405416C69676E0706436C69656E74064C6F636B656409 + 0748697454657374080C4D617267696E732E4C6566740500000000000000A001 + 400B4D617267696E732E546F7005000000000000008000400D4D617267696E73 + 2E52696768740500000000000000A001400E4D617267696E732E426F74746F6D + 05000000000000008000400A53697A652E57696474680500000000000000FC04 + 400B53697A652E4865696768740500000000000000B003401453697A652E506C + 6174666F726D44656661756C7408165465787453657474696E67732E466F6E74 + 436F6C6F720708636C6157686974650000005450463007544C61796F75740009 + 5374796C654E616D6506106C697374626F786974656D7374796C6505416C6967 + 6E070643656E7465720A53697A652E57696474680500000000000000D605400B + 53697A652E4865696768740500000000000000C003401453697A652E506C6174 + 666F726D44656661756C74080756697369626C6508085461624F726465720213 + 000654476C79706800095374796C654E616D65060A676C7970687374796C650C + 4D617267696E732E4C65667405000000000000008000400B4D617267696E732E + 546F70050000000000000080FF3F0D4D617267696E732E526967687405000000 + 000000008000400E4D617267696E732E426F74746F6D050000000000000080FF + 3F05416C69676E07044C6566740A53697A652E57696474680500000000000000 + 8003400B53697A652E48656967687405000000000000008003401453697A652E + 506C6174666F726D44656661756C7408000005545465787400095374796C654E + 616D6506047465787405416C69676E0706436C69656E74074869745465737408 + 0C4D617267696E732E4C6566740500000000000000C000400B4D617267696E73 + 2E546F70050000000000000080FF3F0D4D617267696E732E5269676874050000 + 0000000000C000400E4D617267696E732E426F74746F6D050000000000000080 + FF3F0A53697A652E57696474680500000000000000CA05400B53697A652E4865 + 696768740500000000000000B003401453697A652E506C6174666F726D446566 + 61756C7408165465787453657474696E67732E466F6E74436F6C6F720708636C + 615768697465155465787453657474696E67732E576F72645772617008165465 + 787453657474696E67732E486F727A416C69676E07074C656164696E67000009 + 54436865636B426F7800095374796C654E616D650605636865636B05416C6967 + 6E07084D6F73744C6566740843616E466F637573081244697361626C65466F63 + 7573456666656374090A53697A652E57696474680500000000000000A003400B + 53697A652E4865696768740500000000000000C003401453697A652E506C6174 + 666F726D44656661756C74080756697369626C65080000005450463007544C61 + 796F757400095374796C654E616D6506126C697374626F78706C61696E686561 + 64657205416C69676E070643656E7465720A53697A652E576964746805000000 + 000000009205400B53697A652E4865696768740500000000000000D003401453 + 697A652E506C6174666F726D44656661756C74080756697369626C6508085461 + 624F726465720214000A5452656374616E676C6500095374796C654E616D6506 + 0A6261636B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C + 2E436F6C6F720709784646324432443244064C6F636B65640907486974546573 + 74080A53697A652E576964746805000000000000009205400B53697A652E4865 + 696768740500000000000000D003401453697A652E506C6174666F726D446566 + 61756C74080C5374726F6B652E436F6C6F720709784646313531353135000005 + 545465787400095374796C654E616D6506047465787405416C69676E0706436C + 69656E74064C6F636B6564090748697454657374080C4D617267696E732E4C65 + 66740500000000000000A001400B4D617267696E732E546F7005000000000000 + 008000400D4D617267696E732E52696768740500000000000000A001400E4D61 + 7267696E732E426F74746F6D05000000000000008000400A53697A652E576964 + 74680500000000000000FC04400B53697A652E48656967687405000000000000 + 00B003401453697A652E506C6174666F726D44656661756C7408165465787453 + 657474696E67732E466F6E74436F6C6F720708636C6157686974650000005450 + 463007544C61796F757400095374796C654E616D650609677269647374796C65 + 05416C69676E070643656E7465720A53697A652E5769647468050000000000FF + FFE905400B53697A652E48656967687405000000000000008306401453697A65 + 2E506C6174666F726D44656661756C74080756697369626C6508085461624F72 + 6465720215000C5442727573684F626A65637400095374796C654E616D650618 + 416C7465726E6174696E67526F774261636B67726F756E640B42727573682E43 + 6F6C6F72070978333237383738373800000C5442727573684F626A6563740009 + 5374796C654E616D6506086C696E6566696C6C0B42727573682E436F6C6F7207 + 0978464631353135313500000A5452656374616E676C6500095374796C654E61 + 6D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A46 + 696C6C2E436F6C6F720709784646323032303230064C6F636B65640907486974 + 54657374080C50616464696E672E4C65667405000000000000008000400B5061 + 6464696E672E546F7005000000000000008000400D50616464696E672E526967 + 687405000000000000008000400E50616464696E672E426F74746F6D05000000 + 000000008000400A53697A652E5769647468050000000000FFFFE905400B5369 + 7A652E48656967687405000000000000008306401453697A652E506C6174666F + 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 + 313500075448656164657200095374796C654E616D6506066865616465720553 + 696465730B03546F70044C65667406426F74746F6D0552696768740005416C69 + 676E0703546F700A506F736974696F6E2E5805000000000000008000400A506F + 736974696F6E2E5905000000000000008000400A53697A652E57696474680500 + 00000000FFFFE105400B53697A652E4865696768740500000000000000A80340 + 1453697A652E506C6174666F726D44656661756C7408000007544C61796F7574 + 00095374796C654E616D650607636F6E74656E7405416C69676E0706436C6965 + 6E740C436C69704368696C6472656E090A53697A652E57696474680500000000 + 00FFFFC105400B53697A652E4865696768740500000000000000B40540145369 + 7A652E506C6174666F726D44656661756C7408000A5452656374616E676C6500 + 095374796C654E616D65060973656C656374696F6E0A46696C6C2E436F6C6F72 + 07097846463241383245320748697454657374080A53697A652E576964746805 + 00000000000000C804400B53697A652E4865696768740500000000000000C804 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E6500000A5452656374616E676C6500095374796C654E616D + 650605666F6375730A46696C6C2E436F6C6F7207097841463241383245320748 + 697454657374080C4D617267696E732E4C656674050000000000000080FF3F0B + 4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E52 + 69676874050000000000000080FF3F0E4D617267696E732E426F74746F6D0500 + 00000000000080FF3F0A53697A652E57696474680500000000000000C804400B + 53697A652E4865696768740500000000000000C804401453697A652E506C6174 + 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650759 + 5261646975730500000000000000C000400000000A545363726F6C6C42617200 + 095374796C654E616D65060A767363726F6C6C62617205416C69676E07055269 + 6768740B536D616C6C4368616E676505000000000000000000000B4F7269656E + 746174696F6E0708566572746963616C0A506F736974696F6E2E580500000000 + 00FFFFC505400A506F736974696F6E2E590500000000000000B803400A53697A + 652E576964746805000000000000008003400B53697A652E4865696768740500 + 000000000000B405401453697A652E506C6174666F726D44656661756C740800 + 000A545363726F6C6C42617200095374796C654E616D65060A687363726F6C6C + 62617205416C69676E0706426F74746F6D0B536D616C6C4368616E6765050000 + 00000000000000000B4F7269656E746174696F6E070A486F72697A6F6E74616C + 0A506F736974696F6E2E5805000000000000008000400A506F736974696F6E2E + 590500000000000000E205400A53697A652E5769647468050000000000FFFFE1 + 05400B53697A652E48656967687405000000000000008003401453697A652E50 + 6C6174666F726D44656661756C740800000F54536D616C6C5363726F6C6C4261 + 7200095374796C654E616D65060F76736D616C6C7363726F6C6C62617205416C + 69676E070552696768740B536D616C6C4368616E676505000000000000000000 + 000B4F7269656E746174696F6E0708566572746963616C0C4D617267696E732E + 4C65667405000000000000008000400A506F736974696F6E2E58050000000000 + 0000C605400A506F736974696F6E2E5905000000000000008000400A53697A65 + 2E576964746805000000000000008002400B53697A652E486569676874050000 + 00000000008002401453697A652E506C6174666F726D44656661756C74080756 + 697369626C650800000F54536D616C6C5363726F6C6C42617200095374796C65 + 4E616D65060F68736D616C6C7363726F6C6C62617205416C69676E0706426F74 + 746F6D0B536D616C6C4368616E676505000000000000000000000B4F7269656E + 746174696F6E070A486F72697A6F6E74616C0B4D617267696E732E546F700500 + 0000000000008000400A506F736974696F6E2E5805000000000000008000400A + 506F736974696F6E2E590500000000000000E205400A53697A652E5769647468 + 05000000000000009606400B53697A652E486569676874050000000000000080 + 02401453697A652E506C6174666F726D44656661756C74080756697369626C65 + 08000000005450463007544C61796F757400095374796C654E616D65060F6865 + 616465726974656D7374796C6505416C69676E070643656E7465720A53697A65 + 2E576964746805000000000000009205400B53697A652E486569676874050000 + 0000000000D003401453697A652E506C6174666F726D44656661756C74080756 + 697369626C6508085461624F726465720216000A5452656374616E676C650009 + 5374796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E + 74656E74730A46696C6C2E436F6C6F720709784646344334433443064C6F636B + 6564090748697454657374080A53697A652E5769647468050000000000000092 + 05400B53697A652E4865696768740500000000000000D003401453697A652E50 + 6C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846 + 46313531353135000F54436F6C6F72416E696D6174696F6E00095374796C654E + 616D650615686561646572436F6C6F72416E696D6174696F6E31084475726174 + 696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C + 6C2E436F6C6F720A537461727456616C75650709784646344334433443095374 + 6F7056616C756507097846463241383245320754726967676572060E49735072 + 65737365643D747275650E54726967676572496E7665727365060F4973507265 + 737365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D6506166865616465725374726F6B65416E696D6174696F6E3108 4475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65 - 06074F7061636974790A537461727456616C7565050000000000000000000009 - 53746F7056616C7565050000000000000080FF3F0754726967676572060F4973 - 53656C65637465643D747275650E54726967676572496E766572736506104973 - 53656C65637465643D66616C73650000000A5452656374616E676C6500095374 - 796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E7465 - 6E74730A46696C6C2E436F6C6F72070978464632413832453207486974546573 - 7408074F70616369747905000000000000000000000A53697A652E5769647468 - 05000000000000009205400B53697A652E4865696768740500000000000000D0 - 03401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E - 4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E0008447572 - 6174696F6E050000000000CDCCCCFB3F07496E7665727365090C50726F706572 + 060C5374726F6B652E436F6C6F720A537461727456616C756507097846463135 + 313531350953746F7056616C7565070978464632413832453207547269676765 + 72060E4973507265737365643D747275650E54726967676572496E7665727365 + 060F4973507265737365643D66616C736500000005545465787400095374796C + 654E616D6506047465787405416C69676E0706436C69656E74064C6F636B6564 + 090748697454657374080C4D617267696E732E4C6566740500000000000000A0 + 01400B4D617267696E732E546F7005000000000000008000400D4D617267696E + 732E52696768740500000000000000A001400E4D617267696E732E426F74746F + 6D05000000000000008000400A53697A652E57696474680500000000000000FC + 04400B53697A652E4865696768740500000000000000B003401453697A652E50 + 6C6174666F726D44656661756C7408165465787453657474696E67732E466F6E + 74436F6C6F720708636C6157686974650000005450463007544C61796F757400 + 095374796C654E616D65061070726F67726573736261727374796C6505416C69 + 676E070643656E7465720A53697A652E57696474680500000000003333850540 + 0B53697A652E4865696768740500000000009999E104401453697A652E506C61 + 74666F726D44656661756C74080756697369626C6508085461624F7264657202 + 17000A5452656374616E676C6500095374796C654E616D65060668747261636B + 05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646 + 323032303230064C6F636B6564090748697454657374080A53697A652E576964 + 746805000000000033338505400B53697A652E48656967687405000000000099 + 99E104401453697A652E506C6174666F726D44656661756C74080C5374726F6B + 652E436F6C6F720709784646313531353135000A5452656374616E676C650009 + 5374796C654E616D65060A68696E64696361746F7205416C69676E07044C6566 + 740A46696C6C2E436F6C6F720709784646324138324532064C6F636B65640907 + 48697454657374080C4D617267696E732E4C656674050000000000000080FF3F + 0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E + 5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D05 + 0000000000000080FF3F0A506F736974696F6E2E58050000000000000080FF3F + 0A506F736974696F6E2E59050000000000000080FF3F0A53697A652E57696474 + 680500000000000000C804400B53697A652E4865696768740500000000009999 + D904401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E650000000A5452656374616E676C6500095374796C65 + 4E616D65060676747261636B05416C69676E0708436F6E74656E74730A46696C + 6C2E436F6C6F720709784646323032303230064C6F636B656409074869745465 + 7374080A53697A652E576964746805000000000033338505400B53697A652E48 + 65696768740500000000009999E104401453697A652E506C6174666F726D4465 + 6661756C74080C5374726F6B652E436F6C6F720709784646313531353135000A + 5452656374616E676C6500095374796C654E616D65060A76696E64696361746F + 7205416C69676E0706426F74746F6D0A46696C6C2E436F6C6F72070978464632 + 4138324532064C6F636B6564090748697454657374080C4D617267696E732E4C + 656674050000000000000080FF3F0B4D617267696E732E546F70050000000000 + 000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D + 617267696E732E426F74746F6D050000000000000080FF3F0A506F736974696F + 6E2E58050000000000000080FF3F0A506F736974696F6E2E5905000000000099 + 998904400A53697A652E576964746805000000000033338105400B53697A652E + 4865696768740500000000000000A803401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000000545046 + 3007544C61796F757400095374796C654E616D65061170726F67726573736365 + 6C6C7374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 0500000000000000F805400B53697A652E4865696768740500000000000000FC + 05401453697A652E506C6174666F726D44656661756C74080756697369626C65 + 08085461624F7264657202180007544C61796F757400095374796C654E616D65 + 060668747261636B05416C69676E0708436F6E74656E7473064C6F636B656409 + 0C4D617267696E732E4C65667405000000000000008000400B4D617267696E73 + 2E546F7005000000000000008000400D4D617267696E732E5269676874050000 + 00000000008000400E4D617267696E732E426F74746F6D050000000000000080 + 00400A53697A652E57696474680500000000000000F005400B53697A652E4865 + 696768740500000000000000F405401453697A652E506C6174666F726D446566 + 61756C7408000A5452656374616E676C6500095374796C654E616D65060A6869 + 6E64696361746F7205416C69676E07044C6566740A46696C6C2E436F6C6F7207 + 09784646324138324532064C6F636B6564090748697454657374080C4D617267 + 696E732E4C65667405000000000000008000400B4D617267696E732E546F7005 + 000000000000008000400D4D617267696E732E52696768740500000000000000 + 8000400E4D617267696E732E426F74746F6D05000000000000008000400A506F + 736974696F6E2E5805000000000000008000400A506F736974696F6E2E590500 + 0000000000008000400A53697A652E57696474680500000000000000C804400B + 53697A652E4865696768740500000000000000EC05401453697A652E506C6174 + 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000 + 00005450463007544C61796F757400095374796C654E616D6506106D656E7562 + 61726974656D7374796C6505416C69676E070643656E7465720C4D617267696E + 732E4C656674050000000000000080FF3F0B4D617267696E732E546F70050000 + 000000000080FF3F0D4D617267696E732E5269676874050000000000000080FF + 3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A65 + 2E576964746805000000000000009205400B53697A652E486569676874050000 + 0000000000D003401453697A652E506C6174666F726D44656661756C74080756 + 697369626C6508085461624F726465720219000A5452656374616E676C650005 + 416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978464632 + 4138324532074869745465737408074F70616369747905000000000017B7D1F1 + 3F0A53697A652E576964746805000000000000009205400B53697A652E486569 + 6768740500000000000000D003401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E + 696D6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F + 70657274794E616D6506074F7061636974790A537461727456616C7565050000 + 00000000000000000953746F7056616C7565050000000000000080FF3F075472 + 6967676572060F497353656C65637465643D747275650E54726967676572496E + 76657273650610497353656C65637465643D66616C73650000000A5452656374 + 616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C69 + 676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978464632413832 + 4532074869745465737408074F70616369747905000000000017B7D1F13F0A53 + 697A652E576964746805000000000000009205400B53697A652E486569676874 + 0500000000000000D003401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D61 + 74696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F706572 74794E616D6506074F7061636974790A537461727456616C7565050000000000 00000000000953746F7056616C7565050000000000000080FF3F075472696767 6572061049734D6F7573654F7665723D747275650E54726967676572496E7665 @@ -13519,563 +14382,672 @@ object MainForm: TMainForm 2E4C656674050000000000000080FF3F0B4D617267696E732E546F7005000000 000000008000400D4D617267696E732E52696768740500000000000000C00040 0E4D617267696E732E426F74746F6D050000000000000080FF3F05416C69676E - 07044C6566740A53697A652E576964746805000000000000008003400B53697A - 652E48656967687405000000000000008003401453697A652E506C6174666F72 - 6D44656661756C740800000654496D61676500095374796C654E616D65060662 - 69746D61700E4D756C74695265734269746D61700E01000005416C69676E0704 - 4C6566740C4D617267696E732E4C65667405000000000000008000400B4D6172 - 67696E732E546F7005000000000000008000400D4D617267696E732E52696768 - 7405000000000000008000400E4D617267696E732E426F74746F6D0500000000 - 0000008000400A506F736974696F6E2E5805000000000000008000400A506F73 - 6974696F6E2E5905000000000000008000400A53697A652E5769647468050000 - 0000000000A803400B53697A652E4865696768740500000000000000B0034014 - 53697A652E506C6174666F726D44656661756C74080000000554546578740009 - 5374796C654E616D6506047465787405416C69676E07044C656674064C6F636B - 6564090748697454657374080C4D617267696E732E4C65667405000000000000 - 008002400D4D617267696E732E526967687405000000000000008002400A506F - 736974696F6E2E5805000000000000008404400A53697A652E57696474680500 - 000000000000C804400B53697A652E4865696768740500000000000000D00340 - 1453697A652E506C6174666F726D44656661756C740816546578745365747469 - 6E67732E466F6E74436F6C6F720708636C615768697465165465787453657474 - 696E67732E486F727A416C69676E07074C656164696E67000005545465787400 - 095374796C654E616D65060873686F727463757405416C69676E070552696768 - 74064C6F636B6564090748697454657374080C4D617267696E732E4C65667405 - 00000000000000C002400D4D617267696E732E52696768740500000000000000 - C001400A506F736974696F6E2E580500000000000000C000C00A53697A652E57 - 696474680500000000000000C804400B53697A652E4865696768740500000000 - 000000D003401453697A652E506C6174666F726D44656661756C740816546578 - 7453657474696E67732E466F6E74436F6C6F720708636C615768697465165465 - 787453657474696E67732E486F727A416C69676E07074C656164696E67000007 - 544C61796F757400095374796C654E616D6506077375626D61726B05416C6967 - 6E070552696768740A506F736974696F6E2E580500000000000000D404400A53 - 697A652E57696474680500000000000000A003400B53697A652E486569676874 - 0500000000000000D003401453697A652E506C6174666F726D44656661756C74 - 08000554506174680005416C69676E070643656E74657209446174612E506174 - 680A340000000400000000000000000000000000000001000000000000000000 - 803F010000000000803F0000003F0300000000000000000000000A46696C6C2E - 436F6C6F720708636C615768697465064C6F636B656409074869745465737408 - 0A53697A652E57696474680500000000000000E001400B53697A652E48656967 - 687405000000000000008002401453697A652E506C6174666F726D4465666175 - 6C74080B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C - 61796F757400095374796C654E616D6506126D656E75736570617261746F7273 + 070552696768740A53697A652E576964746805000000000000008003400B5369 + 7A652E48656967687405000000000000008003401453697A652E506C6174666F + 726D44656661756C740800000654496D61676500095374796C654E616D650606 + 6269746D61700E4D756C74695265734269746D61700E01000005416C69676E07 + 08436F6E74656E74730C4D617267696E732E4C65667405000000000000008000 + 400B4D617267696E732E546F7005000000000000008000400D4D617267696E73 + 2E526967687405000000000000008000400E4D617267696E732E426F74746F6D + 05000000000000008000400A53697A652E57696474680500000000000000A803 + 400B53697A652E4865696768740500000000000000B003401453697A652E506C + 6174666F726D44656661756C740800000005545465787400095374796C654E61 + 6D6506047465787405416C69676E07044C656674064C6F636B65640907486974 + 54657374080C4D617267696E732E4C65667405000000000000008002400D4D61 + 7267696E732E526967687405000000000000008002400A506F736974696F6E2E + 5805000000000000008404400A53697A652E57696474680500000000000000C8 + 04400B53697A652E4865696768740500000000000000D003401453697A652E50 + 6C6174666F726D44656661756C7408165465787453657474696E67732E466F6E + 74436F6C6F720708636C615768697465165465787453657474696E67732E486F + 727A416C69676E07074C656164696E67000005545465787400095374796C654E + 616D65060873686F727463757405416C69676E07055269676874064C6F636B65 + 64090748697454657374080C4D617267696E732E4C6566740500000000000000 + C002400D4D617267696E732E52696768740500000000000000C001400A506F73 + 6974696F6E2E580500000000000000C000C00A53697A652E5769647468050000 + 0000000000C804400B53697A652E4865696768740500000000000000D0034014 + 53697A652E506C6174666F726D44656661756C7408165465787453657474696E + 67732E466F6E74436F6C6F720708636C61576869746516546578745365747469 + 6E67732E486F727A416C69676E07074C656164696E67000007544C61796F7574 + 00095374796C654E616D6506077375626D61726B05416C69676E070552696768 + 740A506F736974696F6E2E580500000000000000D404400A53697A652E576964 + 74680500000000000000A003400B53697A652E48656967687405000000000000 + 00D003401453697A652E506C6174666F726D44656661756C7408000554506174 + 680005416C69676E070643656E74657209446174612E506174680A3400000004 + 00000000000000000000000000000001000000000000000000803F0100000000 + 00803F0000003F0300000000000000000000000A46696C6C2E436F6C6F720708 + 636C615768697465064C6F636B6564090748697454657374080A53697A652E57 + 696474680500000000000000E001400B53697A652E4865696768740500000000 + 0000008002401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E6500000000545046300A5452656374616E676C + 6500095374796C654E616D65060C6D656E756261727374796C6505416C69676E + 070643656E7465720C436C69704368696C6472656E090946696C6C2E4B696E64 + 07044E6F6E650748697454657374080A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000000000C804401453697A + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E650756697369626C6508000A5452656374616E676C650005416C69676E + 0706436C69656E740A46696C6C2E436F6C6F7207097846463230323032300748 + 697454657374080C4D617267696E732E4C656674050000000000000080FFBF0B + 4D617267696E732E546F70050000000000000080FFBF0D4D617267696E732E52 + 69676874050000000000000080FFBF0A53697A652E5769647468050000000000 + 0000D004400B53697A652E4865696768740500000000000000CC04401453697A + 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 + 09784646313531353135000007544C61796F757400095374796C654E616D6506 + 07636F6E74656E7405416C69676E0706436C69656E740C4D617267696E732E4C + 656674050000000000000080FF3F0B4D617267696E732E546F70050000000000 + 000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D + 617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E5769 + 6474680500000000000000C004400B53697A652E486569676874050000000000 + 0000C004401453697A652E506C6174666F726D44656661756C74080000005450 + 463007544C61796F757400095374796C654E616D65060D6D656E756974656D73 74796C6505416C69676E070643656E7465720C4D617267696E732E4C65667405 0000000000000080FF3F0B4D617267696E732E546F70050000000000000080FF 3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D61726769 6E732E426F74746F6D050000000000000080FF3F0A53697A652E576964746805 - 00000000000000C804400B53697A652E4865696768740500000000000000C804 + 000000000000009205400B53697A652E4865696768740500000000000000D003 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 - 085461624F72646572021C0005544C696E650005416C69676E0703546F70084C - 696E65547970650703546F700C4D617267696E732E4C65667405000000000000 - 00C000400B4D617267696E732E546F7005000000000000008000400D4D617267 - 696E732E52696768740500000000000000C000400A506F736974696F6E2E5805 - 00000000000000C000400A506F736974696F6E2E590500000000000000800040 - 0A53697A652E57696474680500000000000000B004400B53697A652E48656967 - 6874050000000000000080FF3F1453697A652E506C6174666F726D4465666175 - 6C74080C5374726F6B652E436F6C6F7207097846463135313531350000005450 - 46300A5452656374616E676C6500095374796C654E616D65060D6D656E757669 - 65777374796C6505416C69676E070643656E7465720A46696C6C2E436F6C6F72 - 07097846463230323032300A53697A652E57696474680500000000000000C804 + 085461624F726465720228000A5452656374616E676C650005416C69676E0708 + 436F6E74656E74730A46696C6C2E436F6C6F7207097846463241383245320748 + 69745465737408074F70616369747905000000000017B7D1F13F0A53697A652E + 576964746805000000000000009205400B53697A652E48656967687405000000 + 00000000D003401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E + 00084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E61 + 6D6506074F7061636974790A537461727456616C756505000000000000000000 + 000953746F7056616C7565050000000000000080FF3F0754726967676572060F + 497353656C65637465643D747275650E54726967676572496E76657273650610 + 497353656C65637465643D66616C73650000000A5452656374616E676C650009 + 5374796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E + 74656E74730A46696C6C2E436F6C6F7207097846463241383245320748697454 + 65737408074F70616369747905000000000000000000000A53697A652E576964 + 746805000000000000009205400B53697A652E48656967687405000000000000 + 00D003401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E000844 + 75726174696F6E050000000000CDCCCCFB3F07496E7665727365090C50726F70 + 657274794E616D6506074F7061636974790A537461727456616C756505000000 + 000000000000000953746F7056616C7565050000000000000080FF3F07547269 + 67676572061049734D6F7573654F7665723D747275650E54726967676572496E + 7665727365061149734D6F7573654F7665723D66616C736500000007544C6179 + 6F757400095374796C654E616D650605676C79706805416C69676E07044C6566 + 740A53697A652E57696474680500000000000000C803400B53697A652E486569 + 6768740500000000000000D003401453697A652E506C6174666F726D44656661 + 756C74080007544C61796F757400095374796C654E616D650609636865636B6D + 61726B05416C69676E0708436F6E74656E7473074F7061636974790500000000 + 006F1283F53F0A53697A652E57696474680500000000000000C803400B53697A + 652E4865696768740500000000000000D003401453697A652E506C6174666F72 + 6D44656661756C7408000554506174680005416C69676E070643656E74657209 + 446174612E506174680A58000000070000000000000056D9524391AE2C430100 + 00009276664365021643010000009F3983432B7C3C43010000009E9AA64382D2 + B442010000006F1CB04375A4D1420100000026DF8243263F67430300000056D9 + 524391AE2C430A46696C6C2E436F6C6F720708636C6157686974650748697454 + 657374080A53697A652E57696474680500000000000000B002400B53697A652E + 4865696768740500000000000000B002401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000F54466C6F + 6174416E696D6174696F6E00084475726174696F6E050000000000CDCCCCFB3F + 0C50726F70657274794E616D6506074F7061636974790A537461727456616C75 + 6505000000000000000000000953746F7056616C7565050000000000000080FF + 3F0754726967676572060E4973436865636B65643D747275650E547269676765 + 72496E7665727365060F4973436865636B65643D66616C73650000000654476C + 79706800095374796C654E616D65060A676C7970687374796C650C4D61726769 + 6E732E4C656674050000000000000080FF3F0B4D617267696E732E546F700500 + 0000000000008000400D4D617267696E732E52696768740500000000000000C0 + 00400E4D617267696E732E426F74746F6D050000000000000080FF3F05416C69 + 676E07044C6566740A53697A652E576964746805000000000000008003400B53 + 697A652E48656967687405000000000000008003401453697A652E506C617466 + 6F726D44656661756C740800000654496D61676500095374796C654E616D6506 + 066269746D61700E4D756C74695265734269746D61700E01000005416C69676E + 07044C6566740C4D617267696E732E4C65667405000000000000008000400B4D + 617267696E732E546F7005000000000000008000400D4D617267696E732E5269 + 67687405000000000000008000400E4D617267696E732E426F74746F6D050000 + 00000000008000400A506F736974696F6E2E5805000000000000008000400A50 + 6F736974696F6E2E5905000000000000008000400A53697A652E576964746805 + 00000000000000A803400B53697A652E4865696768740500000000000000B003 + 401453697A652E506C6174666F726D44656661756C7408000000055454657874 + 00095374796C654E616D6506047465787405416C69676E07044C656674064C6F + 636B6564090748697454657374080C4D617267696E732E4C6566740500000000 + 0000008002400D4D617267696E732E526967687405000000000000008002400A + 506F736974696F6E2E5805000000000000008404400A53697A652E5769647468 + 0500000000000000C804400B53697A652E4865696768740500000000000000D0 + 03401453697A652E506C6174666F726D44656661756C74081654657874536574 + 74696E67732E466F6E74436F6C6F720708636C61576869746516546578745365 + 7474696E67732E486F727A416C69676E07074C656164696E6700000554546578 + 7400095374796C654E616D65060873686F727463757405416C69676E07055269 + 676874064C6F636B6564090748697454657374080C4D617267696E732E4C6566 + 740500000000000000C002400D4D617267696E732E5269676874050000000000 + 0000C001400A506F736974696F6E2E580500000000000000C000C00A53697A65 + 2E57696474680500000000000000C804400B53697A652E486569676874050000 + 0000000000D003401453697A652E506C6174666F726D44656661756C74081654 + 65787453657474696E67732E466F6E74436F6C6F720708636C61576869746516 + 5465787453657474696E67732E486F727A416C69676E07074C656164696E6700 + 0007544C61796F757400095374796C654E616D6506077375626D61726B05416C + 69676E070552696768740A506F736974696F6E2E580500000000000000D40440 + 0A53697A652E57696474680500000000000000A003400B53697A652E48656967 + 68740500000000000000D003401453697A652E506C6174666F726D4465666175 + 6C7408000554506174680005416C69676E070643656E74657209446174612E50 + 6174680A34000000040000000000000000000000000000000100000000000000 + 0000803F010000000000803F0000003F0300000000000000000000000A46696C + 6C2E436F6C6F720708636C615768697465064C6F636B65640907486974546573 + 74080A53697A652E57696474680500000000000000E001400B53697A652E4865 + 6967687405000000000000008002401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65000000005450463007 + 544C61796F757400095374796C654E616D6506126D656E75736570617261746F + 727374796C6505416C69676E070643656E7465720C4D617267696E732E4C6566 + 74050000000000000080FF3F0B4D617267696E732E546F700500000000000000 + 80FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D6172 + 67696E732E426F74746F6D050000000000000080FF3F0A53697A652E57696474 + 680500000000000000C804400B53697A652E4865696768740500000000000000 + C804401453697A652E506C6174666F726D44656661756C74080756697369626C + 6508085461624F72646572022A0005544C696E650005416C69676E0703546F70 + 084C696E65547970650703546F700C4D617267696E732E4C6566740500000000 + 000000C000400B4D617267696E732E546F7005000000000000008000400D4D61 + 7267696E732E52696768740500000000000000C000400A506F736974696F6E2E + 580500000000000000C000400A506F736974696F6E2E59050000000000000080 + 00400A53697A652E57696474680500000000000000B004400B53697A652E4865 + 69676874050000000000000080FF3F1453697A652E506C6174666F726D446566 + 61756C74080C5374726F6B652E436F6C6F720709784646313531353135000000 + 545046300A5452656374616E676C6500095374796C654E616D65060D6D656E75 + 766965777374796C6505416C69676E070643656E7465720A46696C6C2E436F6C + 6F7207097846463230323032300A53697A652E57696474680500000000000000 + C804400B53697A652E4865696768740500000000000000C804401453697A652E + 506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72070978 + 46463135313531350756697369626C6508000A5452656374616E676C65000541 + 6C69676E0706436C69656E740A46696C6C2E436F6C6F72070978464632303230 + 32300748697454657374080A53697A652E57696474680500000000000000C804 400B53697A652E4865696768740500000000000000C804401453697A652E506C 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 - 3135313531350756697369626C6508000A5452656374616E676C650005416C69 - 676E0706436C69656E740A46696C6C2E436F6C6F720709784646323032303230 - 0748697454657374080A53697A652E57696474680500000000000000C804400B - 53697A652E4865696768740500000000000000C804401453697A652E506C6174 - 666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846463135 - 31353135000D54536861646F77456666656374000844697374616E6365050000 - 0000000000C0004009446972656374696F6E0500000000000000B4044008536F - 66746E657373050000000000000080FE3F074F70616369747905000000000000 - 0080FE3F0B536861646F77436F6C6F720708636C61426C61636B00000007544C - 61796F757400095374796C654E616D650607636F6E74656E7405416C69676E07 - 06436C69656E740C4D617267696E732E4C656674050000000000000080FF3F0B - 4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E52 - 69676874050000000000000080FF3F0E4D617267696E732E426F74746F6D0500 - 00000000000080FF3F0A53697A652E57696474680500000000000000C004400B - 53697A652E4865696768740500000000000000C004401453697A652E506C6174 - 666F726D44656661756C74080000005450463007544C61796F75740009537479 - 6C654E616D65060E696D61676563656C6C7374796C6505416C69676E07064365 - 6E7465720756697369626C6508085461624F72646572021D000654496D616765 - 00095374796C654E616D650605696D6167650E4D756C74695265734269746D61 - 700E01000005416C69676E0706436C69656E74064C6F636B6564090748697454 - 657374080C4D617267696E732E4C656674050000000000000080FF3F0B4D6172 - 67696E732E546F70050000000000000080FF3F0D4D617267696E732E52696768 - 74050000000000000080FF3F0E4D617267696E732E426F74746F6D0500000000 - 00000080FF3F0A53697A652E57696474680500000000000000C004400B53697A - 652E4865696768740500000000000000C004401453697A652E506C6174666F72 - 6D44656661756C74080000005450463007544C61796F757400095374796C654E - 616D65060E706F70757063656C6C7374796C6505416C69676E070643656E7465 - 720756697369626C6508085461624F72646572021E0007544C61796F75740005 - 416C69676E070552696768740A506F736974696F6E2E5805000000000000008C - 04400A53697A652E57696474680500000000000000F002400B53697A652E4865 - 696768740500000000000000C804401453697A652E506C6174666F726D446566 - 61756C7408000554506174680005416C69676E070643656E7465720944617461 - 2E506174680A400000000500000000000000000000000000803F010000000000 - 803F0000803F010000000000003F0000000001000000000000000000803F0300 - 000000000000000000000A46696C6C2E436F6C6F720708636C61576869746507 - 48697454657374080B4D617267696E732E546F700500000000000000E001C00A - 53697A652E576964746805000000000000008002400B53697A652E4865696768 - 7405000000000000008001401453697A652E506C6174666F726D44656661756C - 74080B5374726F6B652E4B696E6407044E6F6E6500000554506174680005416C - 69676E070643656E74657209446174612E506174680A34000000040000000000 - 00000000000000000000010000000000803F00000000010000000000003F0000 - 803F0300000000000000000000000A46696C6C2E436F6C6F720708636C615768 - 6974650748697454657374080B4D617267696E732E546F700500000000000000 - C001400A53697A652E576964746805000000000000008002400B53697A652E48 - 656967687405000000000000008001401453697A652E506C6174666F726D4465 - 6661756C74080B5374726F6B652E4B696E6407044E6F6E650000000554546578 - 7400095374796C654E616D6506047465787405416C69676E0706436C69656E74 - 064C6F636B6564090748697454657374080C4D617267696E732E4C6566740500 - 000000000000A001400B4D617267696E732E546F700500000000000000800040 - 0D4D617267696E732E52696768740500000000000000A001400E4D617267696E - 732E426F74746F6D05000000000000008000400A53697A652E57696474680500 - 000000000000C803400B53697A652E4865696768740500000000000000B80440 - 1453697A652E506C6174666F726D44656661756C740816546578745365747469 - 6E67732E466F6E74436F6C6F720708636C615768697465000000545046300754 - 4C61796F757400095374796C654E616D65060D7465787463656C6C7374796C65 - 05416C69676E070643656E7465720756697369626C6508085461624F72646572 - 021F0007544C61796F757400095374796C654E616D650607636F6E74656E7405 - 416C69676E0708436F6E74656E7473064C6F636B6564090C4D617267696E732E - 4C65667405000000000000008001400B4D617267696E732E546F700500000000 - 0000008001400D4D617267696E732E526967687405000000000000008001400E - 4D617267696E732E426F74746F6D05000000000000008001400A53697A652E57 - 696474680500000000000000A804400B53697A652E4865696768740500000000 - 000000A804401453697A652E506C6174666F726D44656661756C740800000C54 - 42727573684F626A65637400095374796C654E616D65060A666F726567726F75 - 6E6400000C5442727573684F626A65637400095374796C654E616D6506097365 - 6C656374696F6E0B42727573682E436F6C6F7207097839363241383245320000 - 0B54466F6E744F626A65637400095374796C654E616D650604666F6E74000000 - 5450463007544C61796F757400095374796C654E616D6506096D656D6F737479 - 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 - 00CCCC8806400B53697A652E4865696768740500000000006666F40540145369 - 7A652E506C6174666F726D44656661756C74080756697369626C650808546162 - 4F726465720220000C5442727573684F626A65637400095374796C654E616D65 - 060A666F726567726F756E6400000C5442727573684F626A6563740009537479 - 6C654E616D65060973656C656374696F6E0B42727573682E436F6C6F72070978 - 374634343735394400000B54466F6E744F626A65637400095374796C654E616D - 650604666F6E7400000A5452656374616E676C6500095374796C654E616D6506 - 0A6261636B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C - 2E436F6C6F7207097846463230323032300748697454657374080A53697A652E - 5769647468050000000000CCCC8806400B53697A652E48656967687405000000 - 00006666F405401453697A652E506C6174666F726D44656661756C74080C5374 - 726F6B652E436F6C6F7207097846463135313531350007544C61796F75740009 - 5374796C654E616D650607636F6E74656E7405416C69676E0706436C69656E74 - 0C4D617267696E732E4C65667405000000000000008000400B4D617267696E73 - 2E546F7005000000000000008000400D4D617267696E732E5269676874050000 - 00000000008000400E4D617267696E732E426F74746F6D050000000000000080 - 00400A53697A652E57696474680500000000009899E905400B53697A652E4865 - 696768740500000000006666CC05401453697A652E506C6174666F726D446566 - 61756C740800000A545363726F6C6C42617200095374796C654E616D65060A68 - 7363726F6C6C62617205416C69676E0706426F74746F6D06437572736F720707 - 63724172726F770B536D616C6C4368616E676505000000000000000000000B4F - 7269656E746174696F6E070A486F72697A6F6E74616C0A506F736974696F6E2E - 590500000000006666D405400A53697A652E5769647468050000000000CCCC88 - 06400B53697A652E48656967687405000000000000008003401453697A652E50 - 6C6174666F726D44656661756C740800000A545363726F6C6C42617200095374 - 796C654E616D65060A767363726F6C6C62617205416C69676E07055269676874 - 06437572736F72070763724172726F770B536D616C6C4368616E676505000000 - 000000000000000B4F7269656E746174696F6E0708566572746963616C0A506F - 736974696F6E2E580500000000009899F105400A53697A652E57696474680500 - 0000000000008003400B53697A652E4865696768740500000000006666D40540 - 1453697A652E506C6174666F726D44656661756C7408000007544C61796F7574 - 0005416C69676E0706436C69656E740A53697A652E5769647468050000000000 - 9899F105400B53697A652E4865696768740500000000006666D405401453697A - 652E506C6174666F726D44656661756C7408000F54536D616C6C5363726F6C6C - 42617200095374796C654E616D65060F76736D616C6C7363726F6C6C62617205 - 416C69676E0705526967687406437572736F72070763724172726F770B536D61 - 6C6C4368616E676505000000000000000000000B4F7269656E746174696F6E07 - 08566572746963616C0C4D617267696E732E4C65667405000000000000008000 - 400A53697A652E576964746805000000000000008002400B53697A652E486569 + 313531353135000D54536861646F77456666656374000844697374616E636505 + 00000000000000C0004009446972656374696F6E0500000000000000B4044008 + 536F66746E657373050000000000000080FE3F074F7061636974790500000000 + 00000080FE3F0B536861646F77436F6C6F720708636C61426C61636B00000007 + 544C61796F757400095374796C654E616D650607636F6E74656E7405416C6967 + 6E0706436C69656E740C4D617267696E732E4C656674050000000000000080FF + 3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E73 + 2E5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D + 050000000000000080FF3F0A53697A652E57696474680500000000000000C004 + 400B53697A652E4865696768740500000000000000C004401453697A652E506C + 6174666F726D44656661756C74080000005450463007544C61796F7574000953 + 74796C654E616D65060E696D61676563656C6C7374796C6505416C69676E0706 + 43656E7465720756697369626C6508085461624F72646572022B000654496D61 + 676500095374796C654E616D650605696D6167650E4D756C7469526573426974 + 6D61700E01000005416C69676E0706436C69656E74064C6F636B656409074869 + 7454657374080C4D617267696E732E4C656674050000000000000080FF3F0B4D + 617267696E732E546F70050000000000000080FF3F0D4D617267696E732E5269 + 676874050000000000000080FF3F0E4D617267696E732E426F74746F6D050000 + 000000000080FF3F0A53697A652E57696474680500000000000000C004400B53 + 697A652E4865696768740500000000000000C004401453697A652E506C617466 + 6F726D44656661756C74080000005450463007544C61796F757400095374796C + 654E616D65060E706F70757063656C6C7374796C6505416C69676E070643656E + 7465720756697369626C6508085461624F72646572022C0007544C61796F7574 + 0005416C69676E070552696768740A506F736974696F6E2E5805000000000000 + 008C04400A53697A652E57696474680500000000000000F002400B53697A652E + 4865696768740500000000000000C804401453697A652E506C6174666F726D44 + 656661756C7408000554506174680005416C69676E070643656E746572094461 + 74612E506174680A400000000500000000000000000000000000803F01000000 + 0000803F0000803F010000000000003F0000000001000000000000000000803F + 0300000000000000000000000A46696C6C2E436F6C6F720708636C6157686974 + 650748697454657374080B4D617267696E732E546F700500000000000000E001 + C00A53697A652E576964746805000000000000008002400B53697A652E486569 + 67687405000000000000008001401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E6500000554506174680005 + 416C69676E070643656E74657209446174612E506174680A3400000004000000 + 000000000000000000000000010000000000803F00000000010000000000003F + 0000803F0300000000000000000000000A46696C6C2E436F6C6F720708636C61 + 57686974650748697454657374080B4D617267696E732E546F70050000000000 + 0000C001400A53697A652E576964746805000000000000008002400B53697A65 + 2E48656967687405000000000000008001401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000055454 + 65787400095374796C654E616D6506047465787405416C69676E0706436C6965 + 6E74064C6F636B6564090748697454657374080C4D617267696E732E4C656674 + 0500000000000000A001400B4D617267696E732E546F70050000000000000080 + 00400D4D617267696E732E52696768740500000000000000A001400E4D617267 + 696E732E426F74746F6D05000000000000008000400A53697A652E5769647468 + 0500000000000000C803400B53697A652E4865696768740500000000000000B8 + 04401453697A652E506C6174666F726D44656661756C74081654657874536574 + 74696E67732E466F6E74436F6C6F720708636C61576869746500000054504630 + 07544C61796F757400095374796C654E616D65060D7465787463656C6C737479 + 6C6505416C69676E070643656E7465720756697369626C6508085461624F7264 + 6572022D0007544C61796F757400095374796C654E616D650607636F6E74656E + 7405416C69676E0708436F6E74656E7473064C6F636B6564090C4D617267696E + 732E4C65667405000000000000008001400B4D617267696E732E546F70050000 + 00000000008001400D4D617267696E732E526967687405000000000000008001 + 400E4D617267696E732E426F74746F6D05000000000000008001400A53697A65 + 2E57696474680500000000000000A804400B53697A652E486569676874050000 + 0000000000A804401453697A652E506C6174666F726D44656661756C74080000 + 0C5442727573684F626A65637400095374796C654E616D65060A666F72656772 + 6F756E6400000C5442727573684F626A65637400095374796C654E616D650609 + 73656C656374696F6E0B42727573682E436F6C6F720709783936324138324532 + 00000B54466F6E744F626A65637400095374796C654E616D650604666F6E7400 + 00005450463007544C61796F757400095374796C654E616D6506096D656D6F73 + 74796C6505416C69676E070643656E7465720A53697A652E5769647468050000 + 000000CCCC8806400B53697A652E4865696768740500000000006666F4054014 + 53697A652E506C6174666F726D44656661756C74080756697369626C65080854 + 61624F72646572022E000C5442727573684F626A65637400095374796C654E61 + 6D65060A666F726567726F756E6400000C5442727573684F626A656374000953 + 74796C654E616D65060973656C656374696F6E0B42727573682E436F6C6F7207 + 0978374634343735394400000B54466F6E744F626A65637400095374796C654E + 616D650604666F6E7400000A5452656374616E676C6500095374796C654E616D + 65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A4669 + 6C6C2E436F6C6F7207097846463230323032300748697454657374080A53697A + 652E5769647468050000000000CCCC8806400B53697A652E4865696768740500 + 000000006666F405401453697A652E506C6174666F726D44656661756C74080C + 5374726F6B652E436F6C6F7207097846463135313531350007544C61796F7574 + 00095374796C654E616D650607636F6E74656E7405416C69676E0706436C6965 + 6E740C4D617267696E732E4C65667405000000000000008000400B4D61726769 + 6E732E546F7005000000000000008000400D4D617267696E732E526967687405 + 000000000000008000400E4D617267696E732E426F74746F6D05000000000000 + 008000400A53697A652E57696474680500000000009899E905400B53697A652E + 4865696768740500000000006666CC05401453697A652E506C6174666F726D44 + 656661756C740800000A545363726F6C6C42617200095374796C654E616D6506 + 0A687363726F6C6C62617205416C69676E0706426F74746F6D06437572736F72 + 070763724172726F770B536D616C6C4368616E67650500000000000000000000 + 0B4F7269656E746174696F6E070A486F72697A6F6E74616C0A506F736974696F + 6E2E590500000000006666D405400A53697A652E5769647468050000000000CC + CC8806400B53697A652E48656967687405000000000000008003401453697A65 + 2E506C6174666F726D44656661756C740800000A545363726F6C6C4261720009 + 5374796C654E616D65060A767363726F6C6C62617205416C69676E0705526967 + 687406437572736F72070763724172726F770B536D616C6C4368616E67650500 + 0000000000000000000B4F7269656E746174696F6E0708566572746963616C0A + 506F736974696F6E2E580500000000009899F105400A53697A652E5769647468 + 05000000000000008003400B53697A652E4865696768740500000000006666D4 + 05401453697A652E506C6174666F726D44656661756C7408000007544C61796F + 75740005416C69676E0706436C69656E740A53697A652E576964746805000000 + 00009899F105400B53697A652E4865696768740500000000006666D405401453 + 697A652E506C6174666F726D44656661756C7408000F54536D616C6C5363726F + 6C6C42617200095374796C654E616D65060F76736D616C6C7363726F6C6C6261 + 7205416C69676E0705526967687406437572736F72070763724172726F770B53 + 6D616C6C4368616E676505000000000000000000000B4F7269656E746174696F + 6E0708566572746963616C0C4D617267696E732E4C6566740500000000000000 + 8000400A53697A652E576964746805000000000000008002400B53697A652E48 + 656967687405000000000000008002401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C650800000F54536D616C6C5363726F6C6C4261 + 7200095374796C654E616D65060F68736D616C6C7363726F6C6C62617205416C + 69676E0706426F74746F6D06437572736F72070763724172726F770B536D616C + 6C4368616E676505000000000000000000000B4F7269656E746174696F6E070A + 486F72697A6F6E74616C0B4D617267696E732E546F7005000000000000008000 + 400A53697A652E576964746805000000000000009606400B53697A652E486569 67687405000000000000008002401453697A652E506C6174666F726D44656661 - 756C74080756697369626C650800000F54536D616C6C5363726F6C6C42617200 - 095374796C654E616D65060F68736D616C6C7363726F6C6C62617205416C6967 - 6E0706426F74746F6D06437572736F72070763724172726F770B536D616C6C43 - 68616E676505000000000000000000000B4F7269656E746174696F6E070A486F - 72697A6F6E74616C0B4D617267696E732E546F7005000000000000008000400A - 53697A652E576964746805000000000000009606400B53697A652E4865696768 - 7405000000000000008002401453697A652E506C6174666F726D44656661756C - 74080756697369626C65080000000F54436F6C6F72416E696D6174696F6E0009 - 5374796C654E616D6506146D656D6F5374726F6B65416E696D6174696F6E3108 - 4475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65 - 060C5374726F6B652E436F6C6F720A537461727456616C756507097846463135 - 313531350953746F7056616C7565070978464634303430343007547269676765 - 72062049734D6F7573654F7665723D747275653B4973466F63757365643D6661 - 6C73650E54726967676572496E7665727365062149734D6F7573654F7665723D - 66616C73653B4973466F63757365643D66616C736500000F54436F6C6F72416E - 696D6174696F6E00095374796C654E616D6506146D656D6F5374726F6B65416E - 696D6174696F6E32084475726174696F6E050000000000CDCCCCFB3F0C50726F - 70657274794E616D65060C5374726F6B652E436F6C6F720A537461727456616C - 756507097846463430343034300953746F7056616C7565070978464632413832 - 45320754726967676572060E4973466F63757365643D747275650E5472696767 - 6572496E7665727365060F4973466F63757365643D66616C7365000000005450 - 463007544C61796F757400095374796C654E616D65060E6C696E6B6C6162656C - 7374796C6505416C69676E070643656E7465720A53697A652E57696474680500 - 00000000CCCC8006400B53697A652E4865696768740500000000009A99810440 - 1453697A652E506C6174666F726D44656661756C74080756697369626C650808 - 5461624F7264657202210005545465787400095374796C654E616D6506047465 - 787405416C69676E0708436F6E74656E74730748697454657374080A53697A65 - 2E5769647468050000000000CCCC8006400B53697A652E486569676874050000 - 0000009A998104401453697A652E506C6174666F726D44656661756C74080454 - 6578740604546578741A5465787453657474696E67732E466F6E742E5374796C - 654578740A0D0000000404000000000000000400000016546578745365747469 - 6E67732E466F6E74436F6C6F72070D636C61446F64676572626C7565000F5443 - 6F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F7241 - 6E696D6174696F6E315374796C65084475726174696F6E050000000000CDCCCC - FB3F07496E7665727365090C50726F70657274794E616D650616546578745365 - 7474696E67732E466F6E74436F6C6F720A537461727456616C7565070D636C61 - 446F64676572626C75650953746F7056616C7565070E636C6144656570736B79 - 626C75650754726967676572063049734D6F7573654F7665723D747275653B49 - 73507265737365643D66616C73653B4973466F63757365643D66616C73650E54 - 726967676572496E7665727365063149734D6F7573654F7665723D66616C7365 - 3B4973507265737365643D66616C73653B4973466F63757365643D66616C7365 - 00000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65061443 - 6F6C6F72416E696D6174696F6E325374796C65084475726174696F6E05000000 - 0000CDCCCCFB3F0C50726F70657274794E616D6506165465787453657474696E - 67732E466F6E74436F6C6F720A537461727456616C7565070E636C6144656570 - 736B79626C75650953746F7056616C7565070978464631373537394307547269 - 67676572062F4973507265737365643D747275653B49734D6F7573654F766572 - 3D747275653B4973466F63757365643D66616C7365000000005450463007544C - 61796F757400095374796C654E616D65060D73697A65677269707374796C6505 - 416C69676E070643656E7465720A53697A652E57696474680500000000000000 - C803400B53697A652E4865696768740500000000000000C803401453697A652E - 506C6174666F726D44656661756C74080756697369626C6508085461624F7264 - 65720222000A5452656374616E676C6500095374796C654E616D65060A526563 - 74616E676C653105416C69676E070643656E7465720A46696C6C2E436F6C6F72 - 07097846463630363036300A53697A652E57696474680500000000000000A000 - 400B53697A652E4865696768740500000000000000A000401453697A652E506C - 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 - 00000A5452656374616E676C6500095374796C654E616D65060A52656374616E - 676C653205416C69676E070643656E7465720A46696C6C2E436F6C6F72070978 - 46463630363036300C4D617267696E732E4C6566740500000000000000A00240 - 0A53697A652E57696474680500000000000000A000400B53697A652E48656967 - 68740500000000000000A000401453697A652E506C6174666F726D4465666175 - 6C74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E67 - 6C6500095374796C654E616D65060A52656374616E676C653305416C69676E07 - 0643656E7465720A46696C6C2E436F6C6F7207097846463630363036300C4D61 - 7267696E732E4C6566740500000000000000A002400B4D617267696E732E546F - 700500000000000000A002400A53697A652E57696474680500000000000000A0 - 00400B53697A652E4865696768740500000000000000A000401453697A652E50 - 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E - 6500000A5452656374616E676C6500095374796C654E616D65060A5265637461 - 6E676C653405416C69676E070643656E7465720A46696C6C2E436F6C6F720709 - 7846463630363036300B4D617267696E732E546F700500000000000000A00240 - 0A53697A652E57696474680500000000000000A000400B53697A652E48656967 - 68740500000000000000A000401453697A652E506C6174666F726D4465666175 - 6C74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E67 - 6C6500095374796C654E616D65060A52656374616E676C653505416C69676E07 - 0643656E7465720A46696C6C2E436F6C6F7207097846463630363036300B4D61 - 7267696E732E546F700500000000000000A002400D4D617267696E732E526967 - 68740500000000000000A002400A53697A652E57696474680500000000000000 - A000400B53697A652E4865696768740500000000000000A000401453697A652E - 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F - 6E6500000A5452656374616E676C6500095374796C654E616D65060A52656374 - 616E676C653605416C69676E070643656E7465720A46696C6C2E436F6C6F7207 - 097846463630363036300C4D617267696E732E4C6566740500000000000000A0 - 02400E4D617267696E732E426F74746F6D0500000000000000A002400A53697A - 652E57696474680500000000000000A000400B53697A652E4865696768740500 - 000000000000A000401453697A652E506C6174666F726D44656661756C74080B - 5374726F6B652E4B696E6407044E6F6E65000000545046300A5452656374616E - 676C6500095374796C654E616D65060E7374617475736261727374796C650541 - 6C69676E070643656E7465720C436C69704368696C6472656E090A46696C6C2E - 436F6C6F7207097846463235323532350553696465730B03546F70000A53697A - 652E57696474680500000000000000F004400B53697A652E4865696768740500 - 000000000000C804401453697A652E506C6174666F726D44656661756C74080C - 5374726F6B652E436F6C6F7207097846463135313531350756697369626C6508 - 0007544C61796F757400095374796C654E616D6506074C61796F75743105416C - 69676E070552696768740A506F736974696F6E2E5805000000000000008C0440 - 0A53697A652E57696474680500000000000000C803400B53697A652E48656967 - 68740500000000000000C804401453697A652E506C6174666F726D4465666175 - 6C740800095453697A654772697000095374796C654E616D65060973697A6567 - 7267697005416C69676E0706426F74746F6D0A506F736974696F6E2E59050000 - 0000000000C803400A53697A652E57696474680500000000000000C803400B53 - 697A652E4865696768740500000000000000C803401453697A652E506C617466 - 6F726D44656661756C740800000000545046300A5452656374616E676C650009 - 5374796C654E616D65060C746F6F6C6261727374796C6505416C69676E070643 - 656E7465720A46696C6C2E436F6C6F7207097846463235323532350748697454 - 657374080553696465730B06426F74746F6D000A53697A652E57696474680500 - 000000000000C804400B53697A652E4865696768740500000000000000C80440 - 1453697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F - 6C6F7207097846463135313531350756697369626C650800005450463007544C - 61796F757400095374796C654E616D65061570726F6772657373626172657272 - 6F727374796C6505416C69676E070643656E7465720A53697A652E5769647468 - 05000000000033338505400B53697A652E4865696768740500000000009999E1 + 756C74080756697369626C65080000000F54436F6C6F72416E696D6174696F6E + 00095374796C654E616D6506146D656D6F5374726F6B65416E696D6174696F6E + 31084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E61 + 6D65060C5374726F6B652E436F6C6F720A537461727456616C75650709784646 + 3135313531350953746F7056616C756507097846463430343034300754726967 + 676572062049734D6F7573654F7665723D747275653B4973466F63757365643D + 66616C73650E54726967676572496E7665727365062149734D6F7573654F7665 + 723D66616C73653B4973466F63757365643D66616C736500000F54436F6C6F72 + 416E696D6174696F6E00095374796C654E616D6506146D656D6F5374726F6B65 + 416E696D6174696F6E32084475726174696F6E050000000000CDCCCCFB3F0C50 + 726F70657274794E616D65060C5374726F6B652E436F6C6F720A537461727456 + 616C756507097846463430343034300953746F7056616C756507097846463241 + 383245320754726967676572060E4973466F63757365643D747275650E547269 + 67676572496E7665727365060F4973466F63757365643D66616C736500000000 + 5450463007544C61796F757400095374796C654E616D65060E6C696E6B6C6162 + 656C7374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 050000000000CCCC8006400B53697A652E4865696768740500000000009A9981 04401453697A652E506C6174666F726D44656661756C74080756697369626C65 - 08085461624F726465720223000A5452656374616E676C6500095374796C654E - 616D65060668747261636B05416C69676E0708436F6E74656E74730A46696C6C - 2E436F6C6F720709784646323032303230064C6F636B65640907486974546573 - 74080A53697A652E576964746805000000000033338505400B53697A652E4865 - 696768740500000000009999E104401453697A652E506C6174666F726D446566 - 61756C74080C5374726F6B652E436F6C6F720709784646313531353135000A54 - 52656374616E676C6500095374796C654E616D65060A68696E64696361746F72 - 05416C69676E07044C6566740A46696C6C2E436F6C6F72070978464645323241 - 3241064C6F636B6564090748697454657374080C4D617267696E732E4C656674 - 050000000000000080FF3F0B4D617267696E732E546F70050000000000000080 - FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D617267 - 696E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E58 - 050000000000000080FF3F0A506F736974696F6E2E59050000000000000080FF - 3F0A53697A652E57696474680500000000000000C804400B53697A652E486569 - 6768740500000000009999D904401453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E650000000A545265637461 - 6E676C6500095374796C654E616D65060676747261636B05416C69676E070843 - 6F6E74656E74730A46696C6C2E436F6C6F720709784646323032303230064C6F - 636B6564090748697454657374080A53697A652E576964746805000000000033 - 338505400B53697A652E4865696768740500000000009999E104401453697A65 - 2E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709 - 784646313531353135000A5452656374616E676C6500095374796C654E616D65 - 060A76696E64696361746F7205416C69676E0706426F74746F6D0A46696C6C2E - 436F6C6F720709784646453232413241064C6F636B6564090748697454657374 - 080C4D617267696E732E4C656674050000000000000080FF3F0B4D617267696E - 732E546F70050000000000000080FF3F0D4D617267696E732E52696768740500 - 00000000000080FF3F0E4D617267696E732E426F74746F6D0500000000000000 - 80FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F73697469 - 6F6E2E5905000000000099998904400A53697A652E5769647468050000000000 - 33338105400B53697A652E4865696768740500000000000000A803401453697A + 08085461624F72646572022F0005545465787400095374796C654E616D650604 + 7465787405416C69676E0708436F6E74656E74730748697454657374080A5369 + 7A652E5769647468050000000000CCCC8006400B53697A652E48656967687405 + 00000000009A998104401453697A652E506C6174666F726D44656661756C7408 + 04546578740604546578741A5465787453657474696E67732E466F6E742E5374 + 796C654578740A0D000000040400000000000000040000001654657874536574 + 74696E67732E466F6E74436F6C6F72070D636C61446F64676572626C7565000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F + 72416E696D6174696F6E315374796C65084475726174696F6E050000000000CD + CCCCFB3F07496E7665727365090C50726F70657274794E616D65061654657874 + 53657474696E67732E466F6E74436F6C6F720A537461727456616C7565070D63 + 6C61446F64676572626C75650953746F7056616C7565070E636C614465657073 + 6B79626C75650754726967676572063049734D6F7573654F7665723D74727565 + 3B4973507265737365643D66616C73653B4973466F63757365643D66616C7365 + 0E54726967676572496E7665727365063149734D6F7573654F7665723D66616C + 73653B4973507265737365643D66616C73653B4973466F63757365643D66616C + 736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 14436F6C6F72416E696D6174696F6E325374796C65084475726174696F6E0500 + 00000000CDCCCCFB3F0C50726F70657274794E616D6506165465787453657474 + 696E67732E466F6E74436F6C6F720A537461727456616C7565070E636C614465 + 6570736B79626C75650953746F7056616C756507097846463137353739430754 + 726967676572062F4973507265737365643D747275653B49734D6F7573654F76 + 65723D747275653B4973466F63757365643D66616C7365000000005450463007 + 544C61796F757400095374796C654E616D65060D73697A65677269707374796C + 6505416C69676E070643656E7465720A53697A652E5769647468050000000000 + 0000C803400B53697A652E4865696768740500000000000000C803401453697A + 652E506C6174666F726D44656661756C74080756697369626C6508085461624F + 726465720230000A5452656374616E676C6500095374796C654E616D65060A52 + 656374616E676C653105416C69676E070643656E7465720A46696C6C2E436F6C + 6F7207097846463630363036300A53697A652E57696474680500000000000000 + A000400B53697A652E4865696768740500000000000000A000401453697A652E + 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F + 6E6500000A5452656374616E676C6500095374796C654E616D65060A52656374 + 616E676C653205416C69676E070643656E7465720A46696C6C2E436F6C6F7207 + 097846463630363036300C4D617267696E732E4C6566740500000000000000A0 + 02400A53697A652E57696474680500000000000000A000400B53697A652E4865 + 696768740500000000000000A000401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E6500000A545265637461 + 6E676C6500095374796C654E616D65060A52656374616E676C653305416C6967 + 6E070643656E7465720A46696C6C2E436F6C6F7207097846463630363036300C + 4D617267696E732E4C6566740500000000000000A002400B4D617267696E732E + 546F700500000000000000A002400A53697A652E576964746805000000000000 + 00A000400B53697A652E4865696768740500000000000000A000401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E6500000A5452656374616E676C6500095374796C654E616D65060A526563 + 74616E676C653405416C69676E070643656E7465720A46696C6C2E436F6C6F72 + 07097846463630363036300B4D617267696E732E546F700500000000000000A0 + 02400A53697A652E57696474680500000000000000A000400B53697A652E4865 + 696768740500000000000000A000401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E6500000A545265637461 + 6E676C6500095374796C654E616D65060A52656374616E676C653505416C6967 + 6E070643656E7465720A46696C6C2E436F6C6F7207097846463630363036300B + 4D617267696E732E546F700500000000000000A002400D4D617267696E732E52 + 696768740500000000000000A002400A53697A652E5769647468050000000000 + 0000A000400B53697A652E4865696768740500000000000000A000401453697A 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 - 4E6F6E65000000005450463007544C61796F757400095374796C654E616D6506 - 13736D616C6C7363726F6C6C6261727374796C6505416C69676E070643656E74 - 65720756697369626C6508085461624F726465720224000654547261636B0009 - 5374796C654E616D65060668747261636B05416C69676E0706436C69656E7406 - 4C6F636B6564090B4F7269656E746174696F6E070A486F72697A6F6E74616C0A - 53697A652E57696474680500000000000000C804400B53697A652E4865696768 - 740500000000000000C804401453697A652E506C6174666F726D44656661756C - 74080B5374796C654C6F6F6B757006147363726F6C6C62617268747261636B73 - 74796C6500000654547261636B00095374796C654E616D65060676747261636B - 05416C69676E0706436C69656E74064C6F636B6564090B4F7269656E74617469 - 6F6E070A486F72697A6F6E74616C0A53697A652E576964746805000000000000 - 00C804400B53697A652E4865696768740500000000000000C804401453697A65 - 2E506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570061473 - 63726F6C6C62617276747261636B7374796C650000005450463007544C61796F - 757400095374796C654E616D65060D636F6D626F626F787374796C6505416C69 - 676E070643656E7465720A53697A652E57696474680500000000000000C80540 + 4E6F6E6500000A5452656374616E676C6500095374796C654E616D65060A5265 + 6374616E676C653605416C69676E070643656E7465720A46696C6C2E436F6C6F + 7207097846463630363036300C4D617267696E732E4C65667405000000000000 + 00A002400E4D617267696E732E426F74746F6D0500000000000000A002400A53 + 697A652E57696474680500000000000000A000400B53697A652E486569676874 + 0500000000000000A000401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E65000000545046300A5452656374 + 616E676C6500095374796C654E616D65060E7374617475736261727374796C65 + 05416C69676E070643656E7465720C436C69704368696C6472656E090A46696C + 6C2E436F6C6F7207097846463235323532350553696465730B03546F70000A53 + 697A652E57696474680500000000000000F004400B53697A652E486569676874 + 0500000000000000C804401453697A652E506C6174666F726D44656661756C74 + 080C5374726F6B652E436F6C6F7207097846463135313531350756697369626C + 65080007544C61796F757400095374796C654E616D6506074C61796F75743105 + 416C69676E070552696768740A506F736974696F6E2E5805000000000000008C + 04400A53697A652E57696474680500000000000000C803400B53697A652E4865 + 696768740500000000000000C804401453697A652E506C6174666F726D446566 + 61756C740800095453697A654772697000095374796C654E616D65060973697A + 65677267697005416C69676E0706426F74746F6D0A506F736974696F6E2E5905 + 00000000000000C803400A53697A652E57696474680500000000000000C80340 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 - 74666F726D44656661756C74080756697369626C6508085461624F7264657202 - 25000C5442727573684F626A65637400095374796C654E616D65060A666F7265 - 67726F756E6400000B54466F6E744F626A65637400095374796C654E616D6506 - 04666F6E7409466F6E742E53697A650500000000000000D00240000007544C61 - 796F757400095374796C654E616D65060A6261636B67726F756E6405416C6967 - 6E0708436F6E74656E74730A53697A652E57696474680500000000000000C805 - 400B53697A652E4865696768740500000000000000C803401453697A652E506C - 6174666F726D44656661756C7408000A5452656374616E676C6500095374796C - 654E616D65060A52656374616E676C653105416C69676E0706436C69656E740A - 46696C6C2E436F6C6F7207097846463230323032300748697454657374080A53 - 697A652E57696474680500000000000000C805400B53697A652E486569676874 - 0500000000000000C803401453697A652E506C6174666F726D44656661756C74 - 080B5374726F6B652E4B696E6407044E6F6E650007544C61796F757400095374 - 796C654E616D650611427574746F6E5374796C654F626A65637405416C69676E - 070846697452696768740B4D617267696E732E546F70050000000000000080FF - 3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D61726769 - 6E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E5805 - 00000000005ED99705400A506F736974696F6E2E59050000000000000080FF3F - 0A53697A652E5769647468050000000000889AB803400B53697A652E48656967 - 68740500000000000000B803401453697A652E506C6174666F726D4465666175 - 6C74080007544C61796F757400095374796C654E616D6506074C61796F757431 - 05416C69676E070643656E7465720C4D617267696E732E4C6566740500000000 - 00000080FF3F0A53697A652E57696474680500000000000000A002400B53697A - 652E4865696768740500000000000000C001401453697A652E506C6174666F72 - 6D44656661756C74080005545061746800095374796C654E616D650605506174 - 683105416C69676E0706436C69656E7409446174612E506174680A3400000004 - 000000000000000000C8420000C84201000000000096430000C8420100000000 - 00484300009643030000000000C8420000C8420A46696C6C2E436F6C6F720708 - 636C6157686974650748697454657374080A53697A652E576964746805000000 - 00000000A002400B53697A652E4865696768740500000000000000C001401453 + 74666F726D44656661756C740800000000545046300A5452656374616E676C65 + 00095374796C654E616D65060C746F6F6C6261727374796C6505416C69676E07 + 0643656E7465720A46696C6C2E436F6C6F720709784646323532353235074869 + 7454657374080553696465730B06426F74746F6D000A53697A652E5769647468 + 0500000000000000C804400B53697A652E4865696768740500000000000000C8 + 04401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E + 436F6C6F7207097846463135313531350756697369626C650800005450463007 + 544C61796F757400095374796C654E616D65061570726F677265737362617265 + 72726F727374796C6505416C69676E070643656E7465720A53697A652E576964 + 746805000000000033338505400B53697A652E48656967687405000000000099 + 99E104401453697A652E506C6174666F726D44656661756C7408075669736962 + 6C6508085461624F726465720232000A5452656374616E676C6500095374796C + 654E616D65060668747261636B05416C69676E0708436F6E74656E74730A4669 + 6C6C2E436F6C6F720709784646323032303230064C6F636B6564090748697454 + 657374080A53697A652E576964746805000000000033338505400B53697A652E + 4865696768740500000000009999E104401453697A652E506C6174666F726D44 + 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313500 + 0A5452656374616E676C6500095374796C654E616D65060A68696E6469636174 + 6F7205416C69676E07044C6566740A46696C6C2E436F6C6F7207097846464532 + 32413241064C6F636B6564090748697454657374080C4D617267696E732E4C65 + 6674050000000000000080FF3F0B4D617267696E732E546F7005000000000000 + 0080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D61 + 7267696E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E + 2E58050000000000000080FF3F0A506F736974696F6E2E590500000000000000 + 80FF3F0A53697A652E57696474680500000000000000C804400B53697A652E48 + 65696768740500000000009999D904401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E650000000A54526563 + 74616E676C6500095374796C654E616D65060676747261636B05416C69676E07 + 08436F6E74656E74730A46696C6C2E436F6C6F72070978464632303230323006 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 0033338505400B53697A652E4865696768740500000000009999E10440145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 0709784646313531353135000A5452656374616E676C6500095374796C654E61 + 6D65060A76696E64696361746F7205416C69676E0706426F74746F6D0A46696C + 6C2E436F6C6F720709784646453232413241064C6F636B656409074869745465 + 7374080C4D617267696E732E4C656674050000000000000080FF3F0B4D617267 + 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 + 050000000000000080FF3F0E4D617267696E732E426F74746F6D050000000000 + 000080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F7369 + 74696F6E2E5905000000000099998904400A53697A652E576964746805000000 + 000033338105400B53697A652E4865696768740500000000000000A803401453 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 - 07044E6F6E65000000000F54436F6C6F72416E696D6174696F6E00095374796C - 654E616D650615627574746F6E436F6C6F72416E696D6174696F6E3108447572 - 6174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46 - 696C6C2E436F6C6F720A537461727456616C7565070978464632303230323009 - 53746F7056616C75650709784646343034303430075472696767657206304973 - 4D6F7573654F7665723D747275653B4973507265737365643D66616C73653B49 - 73466F63757365643D66616C73650E54726967676572496E7665727365063149 - 734D6F7573654F7665723D66616C73653B4973507265737365643D66616C7365 - 3B4973466F63757365643D66616C736500000F54436F6C6F72416E696D617469 - 6F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174 - 696F6E32084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274 - 794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507097846 - 463430343034300953746F7056616C7565070978464631373537394307547269 - 67676572062F4973507265737365643D747275653B49734D6F7573654F766572 - 3D747275653B4973466F63757365643D66616C736500000F54436F6C6F72416E - 696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F7241 - 6E696D6174696F6E33084475726174696F6E050000000000CDCCCCFB3F0C5072 - 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 - 6507097846463241383245320953746F7056616C756507097846463137353739 - 430754726967676572062E4973507265737365643D747275653B49734D6F7573 - 654F7665723D747275653B4973466F63757365643D747275650E547269676765 - 72496E7665727365062F4973507265737365643D66616C73653B49734D6F7573 - 654F7665723D747275653B4973466F63757365643D747275650000000007544C - 61796F757400095374796C654E616D650607636F6E74656E7405416C69676E07 - 06436C69656E74064C6F636B6564090C4D617267696E732E4C65667405000000 - 000000008000400B4D617267696E732E546F7005000000000000008000400D4D - 617267696E732E52696768740500000000000000D803400E4D617267696E732E - 426F74746F6D05000000000000008000400A53697A652E576964746805000000 - 000000008E05400B53697A652E4865696768740500000000000000A803401453 - 697A652E506C6174666F726D44656661756C74080000005450463007544C6179 - 6F757400095374796C654E616D65060D73706C69747465727374796C6505416C - 69676E070643656E7465720A53697A652E57696474680500000000000000A904 - 400B53697A652E4865696768740500000000000080C105401453697A652E506C - 6174666F726D44656661756C74080756697369626C6508085461624F72646572 - 0226000A5452656374616E676C6500095374796C654E616D65060A5265637461 - 6E676C653105416C69676E0706436C69656E740A46696C6C2E436F6C6F720709 - 7846463330333033300748697454657374080553696465730B044C6566740552 - 69676874000A53697A652E57696474680500000000000000A904400B53697A65 - 2E4865696768740500000000000080C105401453697A652E506C6174666F726D - 44656661756C74080C5374726F6B652E436F6C6F720709784646313531353135 - 000007544C61796F757400095374796C654E616D6506046772697005416C6967 - 6E0706436C69656E740A53697A652E57696474680500000000000000A904400B - 53697A652E4865696768740500000000000080C105401453697A652E506C6174 - 666F726D44656661756C7408000754436972636C6500095374796C654E616D65 - 0607436972636C653105416C69676E070643656E7465720A46696C6C2E436F6C - 6F7207097846463430343034300A53697A652E57696474680500000000000000 - E001400B53697A652E4865696768740500000000000000E001401453697A652E - 506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72070978 - 464631353135313500000754436972636C6500095374796C654E616D65060743 - 6972636C653205416C69676E070643656E7465720A46696C6C2E436F6C6F7207 - 097846463430343034300B4D617267696E732E546F700500000000000000A003 - 400A53697A652E57696474680500000000000000E001400B53697A652E486569 - 6768740500000000000000E001401453697A652E506C6174666F726D44656661 - 756C74080C5374726F6B652E436F6C6F72070978464631353135313500000754 - 436972636C6500095374796C654E616D650607436972636C653305416C69676E - 070643656E7465720A46696C6C2E436F6C6F7207097846463430343034300E4D - 617267696E732E426F74746F6D0500000000000000A003400A53697A652E5769 - 6474680500000000000000E001400B53697A652E486569676874050000000000 - 0000E001401453697A652E506C6174666F726D44656661756C74080C5374726F - 6B652E436F6C6F720709784646313531353135000000005450463007544C6179 - 6F757400095374796C654E616D650610636C6F7365627574746F6E7374796C65 - 05416C69676E070643656E7465720A53697A652E576964746805000000000000 - 00C804400B53697A652E4865696768740500000000000000C803401453697A65 - 2E506C6174666F726D44656661756C74080756697369626C6508085461624F72 - 6465720227000A5452656374616E676C6500095374796C654E616D65060B636C - 6F7365627574746F6E05416C69676E0706436C69656E7413456E61626C654472 - 6167486967686C69676874080A46696C6C2E436F6C6F72070978464632303230 - 32300748697454657374080A53697A652E57696474680500000000000000C804 - 400B53697A652E4865696768740500000000000000C803401453697A652E506C - 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 - 000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F - 6C6F72416E696D6174696F6E315374796C65084475726174696F6E0500000000 - 00CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A - 537461727456616C756507097846463230323032300953746F7056616C756507 - 097846464646363135370754726967676572062049734D6F7573654F7665723D - 747275653B4973507265737365643D66616C73650E54726967676572496E7665 - 727365062149734D6F7573654F7665723D66616C73653B497350726573736564 - 3D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E - 616D650614436F6C6F72416E696D6174696F6E325374796C6508447572617469 - 6F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C - 2E436F6C6F720A537461727456616C756507097846464646363135370953746F - 7056616C756507097846464532344634350754726967676572061F49734D6F75 - 73654F7665723D747275653B4973507265737365643D747275650E5472696767 - 6572496E7665727365062049734D6F7573654F7665723D747275653B49735072 - 65737365643D66616C736500000005545061746800095374796C654E616D6506 - 05506174683105416C69676E070643656E74657209446174612E506174680AC4 - 00000010000000000000000000A0C00000704101000000000070410000A0C001 - 000000000048420000F041010000000000AA420000A0C0010000000000D24200 - 0070410100000000008C4200004842010000000000D2420000B4420100000000 - 00AA420000DC42020000003BDF34429E6F8C4202000000FE547D427FAAB04202 - 000000000048420000964201000000000070410000DC42010000000000A0C000 - 00B442010000000000F04100005C42010000000000A0C0000070410300000000 - 00A0C0000070410A46696C6C2E436F6C6F720708636C61576869746507486974 - 54657374080A53697A652E57696474680500000000000000A002400B53697A65 - 2E4865696768740500000000000000A002401453697A652E506C6174666F726D - 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000545046 - 3007544C61796F757400095374796C654E616D65060E6D6178627574746F6E73 - 74796C6505416C69676E070643656E7465720A53697A652E5769647468050000 - 0000000000C804400B53697A652E4865696768740500000000000000C8034014 - 53697A652E506C6174666F726D44656661756C74080756697369626C65080854 - 61624F726465720228000A5452656374616E676C6500095374796C654E616D65 - 06096D6178627574746F6E05416C69676E0706436C69656E740A46696C6C2E43 - 6F6C6F7207097846463230323032300748697454657374080A53697A652E5769 - 6474680500000000000000C804400B53697A652E486569676874050000000000 - 0000C803401453697A652E506C6174666F726D44656661756C74080B5374726F - 6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E0009 - 5374796C654E616D650614436F6C6F72416E696D6174696F6E315374796C6508 - 4475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65 - 060A46696C6C2E436F6C6F720A537461727456616C7565070978464632303230 - 32300953746F7056616C75650709784646324138324532075472696767657206 - 2049734D6F7573654F7665723D747275653B4973507265737365643D66616C73 - 650E54726967676572496E7665727365062149734D6F7573654F7665723D6661 - 6C73653B4973507265737365643D66616C736500000F54436F6C6F72416E696D - 6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E - 325374796C65084475726174696F6E050000000000CDCCCCFB3F0C50726F7065 - 7274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709 - 7846463241383245320953746F7056616C756507097846463137353739430754 - 726967676572061F49734D6F7573654F7665723D747275653B49735072657373 - 65643D747275650E54726967676572496E7665727365062049734D6F7573654F - 7665723D747275653B4973507265737365643D66616C73650000000554506174 - 6800095374796C654E616D650605506174683105416C69676E070643656E7465 - 7209446174612E506174680A5800000007000000000000000000C8420000C842 - 0100000000002F440000C8420100000000002F4400002F440100000000800944 - 00800944010000000080094400007A430100000000007A4300007A4303000000 - 0000C8420000C8420A46696C6C2E436F6C6F720708636C615768697465074869 - 7454657374080A53697A652E57696474680500000000000000A002400B53697A - 652E4865696768740500000000000000A002401453697A652E506C6174666F72 - 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000005450 - 463007544C61796F757400095374796C654E616D65060E6D696E627574746F6E - 7374796C6505416C69676E070643656E7465720A53697A652E57696474680500 - 000000000000C804400B53697A652E4865696768740500000000000000C80340 - 1453697A652E506C6174666F726D44656661756C74080756697369626C650808 - 5461624F726465720229000A5452656374616E676C6500095374796C654E616D - 6506096D696E627574746F6E05416C69676E0706436C69656E740A46696C6C2E - 436F6C6F7207097846463230323032300748697454657374080A53697A652E57 - 696474680500000000000000C804400B53697A652E4865696768740500000000 - 000000C803401453697A652E506C6174666F726D44656661756C74080B537472 - 6F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00 - 095374796C654E616D650614436F6C6F72416E696D6174696F6E315374796C65 - 084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D - 65060A46696C6C2E436F6C6F720A537461727456616C75650709784646323032 - 3032300953746F7056616C756507097846463241383245320754726967676572 - 062049734D6F7573654F7665723D747275653B4973507265737365643D66616C - 73650E54726967676572496E7665727365062149734D6F7573654F7665723D66 - 616C73653B4973507265737365643D66616C736500000F54436F6C6F72416E69 - 6D6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F - 6E325374796C65084475726174696F6E050000000000CDCCCCFB3F0C50726F70 - 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 - 097846463241383245320953746F7056616C7565070978464631373537394307 - 54726967676572061F49734D6F7573654F7665723D747275653B497350726573 - 7365643D747275650E54726967676572496E7665727365062049734D6F757365 - 4F7665723D747275653B4973507265737365643D66616C736500000005545061 - 746800095374796C654E616D650605506174683105416C69676E070643656E74 - 657209446174612E506174680A40000000050000000000000000002F44008009 - 440100000000002F4400002F44010000000000C84200002F44010000000000C8 - 42008009440300000000002F44008009440A46696C6C2E436F6C6F720708636C - 6157686974650748697454657374080B4D617267696E732E546F700500000000 - 000000A002400D526F746174696F6E416E676C650500000000000000B406400A - 53697A652E57696474680500000000000000A002400B53697A652E4865696768 - 740500000000000000C000401453697A652E506C6174666F726D44656661756C - 74080B5374726F6B652E4B696E6407044E6F6E650000005450463007544C6179 - 6F757400095374796C654E616D65060E726573627574746F6E7374796C650541 + 07044E6F6E65000000005450463007544C61796F757400095374796C654E616D + 650613736D616C6C7363726F6C6C6261727374796C6505416C69676E07064365 + 6E7465720756697369626C6508085461624F726465720234000654547261636B + 00095374796C654E616D65060668747261636B05416C69676E0706436C69656E + 74064C6F636B6564090B4F7269656E746174696F6E070A486F72697A6F6E7461 + 6C0A53697A652E57696474680500000000000000C804400B53697A652E486569 + 6768740500000000000000C804401453697A652E506C6174666F726D44656661 + 756C74080B5374796C654C6F6F6B757006147363726F6C6C6261726874726163 + 6B7374796C6500000654547261636B00095374796C654E616D65060676747261 + 636B05416C69676E0706436C69656E74064C6F636B6564090B4F7269656E7461 + 74696F6E070A486F72697A6F6E74616C0A53697A652E57696474680500000000 + 000000C804400B53697A652E4865696768740500000000000000C80440145369 + 7A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B757006 + 147363726F6C6C62617276747261636B7374796C650000005450463007544C61 + 796F757400095374796C654E616D65060D636F6D626F626F787374796C650541 6C69676E070643656E7465720A53697A652E57696474680500000000000000C8 - 04400B53697A652E4865696768740500000000000000C803401453697A652E50 + 05400B53697A652E4865696768740500000000000000C803401453697A652E50 6C6174666F726D44656661756C74080756697369626C6508085461624F726465 - 72022A000A5452656374616E676C6500095374796C654E616D65060972657362 - 7574746F6E05416C69676E0706436C69656E740A46696C6C2E436F6C6F720709 - 7846463230323032300748697454657374080A53697A652E5769647468050000 - 0000000000C804400B53697A652E4865696768740500000000000000C8034014 - 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E - 6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E - 616D650614436F6C6F72416E696D6174696F6E315374796C6508447572617469 - 6F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C - 2E436F6C6F720A537461727456616C756507097846463230323032300953746F - 7056616C756507097846463241383245320754726967676572062049734D6F75 - 73654F7665723D747275653B4973507265737365643D66616C73650E54726967 - 676572496E7665727365062149734D6F7573654F7665723D66616C73653B4973 - 507265737365643D66616C736500000F54436F6C6F72416E696D6174696F6E00 - 095374796C654E616D650614436F6C6F72416E696D6174696F6E325374796C65 - 084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D - 65060A46696C6C2E436F6C6F720A537461727456616C75650709784646324138 - 3245320953746F7056616C756507097846463137353739430754726967676572 - 061F49734D6F7573654F7665723D747275653B4973507265737365643D747275 - 650E54726967676572496E7665727365062049734D6F7573654F7665723D7472 - 75653B4973507265737365643D66616C73650000000554506174680009537479 - 6C654E616D650605506174683105416C69676E070643656E7465720944617461 - 2E506174680A5800000007000000000000000000C8420000C842010000000000 - 2F440000C8420100000000002F4400002F440100000000800944008009440100 - 00000080094400007A430100000000007A4300007A43030000000000C8420000 - C8420A46696C6C2E436F6C6F720708636C615768697465074869745465737408 - 0D526F746174696F6E416E676C650500000000000000B406400A53697A652E57 - 696474680500000000000000A002400B53697A652E4865696768740500000000 - 000000A002401453697A652E506C6174666F726D44656661756C74080B537472 - 6F6B652E4B696E6407044E6F6E650000005450463007544C61796F7574000953 - 74796C654E616D65061177696E646F77626F726465727374796C6505416C6967 + 720235000C5442727573684F626A65637400095374796C654E616D65060A666F + 726567726F756E6400000B54466F6E744F626A65637400095374796C654E616D + 650604666F6E7409466F6E742E53697A650500000000000000D0024000000754 + 4C61796F757400095374796C654E616D65060A6261636B67726F756E6405416C + 69676E0708436F6E74656E74730A53697A652E57696474680500000000000000 + C805400B53697A652E4865696768740500000000000000C803401453697A652E + 506C6174666F726D44656661756C7408000A5452656374616E676C6500095374 + 796C654E616D65060A52656374616E676C653105416C69676E0706436C69656E + 740A46696C6C2E436F6C6F720709784646323032303230074869745465737408 + 0A53697A652E57696474680500000000000000C805400B53697A652E48656967 + 68740500000000000000C803401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E650007544C61796F75740009 + 5374796C654E616D650611427574746F6E5374796C654F626A65637405416C69 + 676E070846697452696768740B4D617267696E732E546F700500000000000000 + 80FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D6172 + 67696E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E + 580500000000005ED99705400A506F736974696F6E2E59050000000000000080 + FF3F0A53697A652E5769647468050000000000889AB803400B53697A652E4865 + 696768740500000000000000B803401453697A652E506C6174666F726D446566 + 61756C74080007544C61796F757400095374796C654E616D6506074C61796F75 + 743105416C69676E070643656E7465720C4D617267696E732E4C656674050000 + 000000000080FF3F0A53697A652E57696474680500000000000000A002400B53 + 697A652E4865696768740500000000000000C001401453697A652E506C617466 + 6F726D44656661756C74080005545061746800095374796C654E616D65060550 + 6174683105416C69676E0706436C69656E7409446174612E506174680A340000 + 0004000000000000000000C8420000C84201000000000096430000C842010000 + 000000484300009643030000000000C8420000C8420A46696C6C2E436F6C6F72 + 0708636C6157686974650748697454657374080A53697A652E57696474680500 + 000000000000A002400B53697A652E4865696768740500000000000000C00140 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E65000000000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E310844 + 75726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C756507097846463230323032 + 300953746F7056616C7565070978464634303430343007547269676765720630 + 49734D6F7573654F7665723D747275653B4973507265737365643D66616C7365 + 3B4973466F63757365643D66616C73650E54726967676572496E766572736506 + 3149734D6F7573654F7665723D66616C73653B4973507265737365643D66616C + 73653B4973466F63757365643D66616C736500000F54436F6C6F72416E696D61 + 74696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D + 6174696F6E32084475726174696F6E050000000000CDCCCCFB3F0C50726F7065 + 7274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709 + 7846463430343034300953746F7056616C756507097846463137353739430754 + 726967676572062F4973507265737365643D747275653B49734D6F7573654F76 + 65723D747275653B4973466F63757365643D66616C736500000F54436F6C6F72 + 416E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F + 72416E696D6174696F6E33084475726174696F6E050000000000CDCCCCFB3F0C + 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 + 6C756507097846463241383245320953746F7056616C75650709784646313735 + 3739430754726967676572062E4973507265737365643D747275653B49734D6F + 7573654F7665723D747275653B4973466F63757365643D747275650E54726967 + 676572496E7665727365062F4973507265737365643D66616C73653B49734D6F + 7573654F7665723D747275653B4973466F63757365643D747275650000000007 + 544C61796F757400095374796C654E616D650607636F6E74656E7405416C6967 + 6E0706436C69656E74064C6F636B6564090C4D617267696E732E4C6566740500 + 0000000000008000400B4D617267696E732E546F700500000000000000800040 + 0D4D617267696E732E52696768740500000000000000D803400E4D617267696E + 732E426F74746F6D05000000000000008000400A53697A652E57696474680500 + 0000000000008E05400B53697A652E4865696768740500000000000000A80340 + 1453697A652E506C6174666F726D44656661756C74080000005450463007544C + 61796F757400095374796C654E616D65060D73706C69747465727374796C6505 + 416C69676E070643656E7465720A53697A652E57696474680500000000000000 + A904400B53697A652E4865696768740500000000000080C105401453697A652E + 506C6174666F726D44656661756C74080756697369626C6508085461624F7264 + 65720236000A5452656374616E676C6500095374796C654E616D65060A526563 + 74616E676C653105416C69676E0706436C69656E740A46696C6C2E436F6C6F72 + 07097846463330333033300748697454657374080553696465730B044C656674 + 055269676874000A53697A652E57696474680500000000000000A904400B5369 + 7A652E4865696768740500000000000080C105401453697A652E506C6174666F + 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 + 3135000007544C61796F757400095374796C654E616D6506046772697005416C + 69676E0706436C69656E740A53697A652E57696474680500000000000000A904 + 400B53697A652E4865696768740500000000000080C105401453697A652E506C + 6174666F726D44656661756C7408000754436972636C6500095374796C654E61 + 6D650607436972636C653105416C69676E070643656E7465720A46696C6C2E43 + 6F6C6F7207097846463430343034300A53697A652E5769647468050000000000 + 0000E001400B53697A652E4865696768740500000000000000E001401453697A + 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 + 0978464631353135313500000754436972636C6500095374796C654E616D6506 + 07436972636C653205416C69676E070643656E7465720A46696C6C2E436F6C6F + 7207097846463430343034300B4D617267696E732E546F700500000000000000 + A003400A53697A652E57696474680500000000000000E001400B53697A652E48 + 65696768740500000000000000E001401453697A652E506C6174666F726D4465 + 6661756C74080C5374726F6B652E436F6C6F7207097846463135313531350000 + 0754436972636C6500095374796C654E616D650607436972636C653305416C69 + 676E070643656E7465720A46696C6C2E436F6C6F720709784646343034303430 + 0E4D617267696E732E426F74746F6D0500000000000000A003400A53697A652E + 57696474680500000000000000E001400B53697A652E48656967687405000000 + 00000000E001401453697A652E506C6174666F726D44656661756C74080C5374 + 726F6B652E436F6C6F720709784646313531353135000000005450463007544C + 61796F757400095374796C654E616D650610636C6F7365627574746F6E737479 + 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 + 000000C804400B53697A652E4865696768740500000000000000C80340145369 + 7A652E506C6174666F726D44656661756C74080756697369626C650808546162 + 4F726465720237000A5452656374616E676C6500095374796C654E616D65060B + 636C6F7365627574746F6E05416C69676E0706436C69656E7413456E61626C65 + 44726167486967686C69676874080A46696C6C2E436F6C6F7207097846463230 + 323032300748697454657374080A53697A652E57696474680500000000000000 + C804400B53697A652E4865696768740500000000000000C803401453697A652E + 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F + 6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614 + 436F6C6F72416E696D6174696F6E315374796C65084475726174696F6E050000 + 000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F + 720A537461727456616C756507097846463230323032300953746F7056616C75 + 6507097846464646363135370754726967676572062049734D6F7573654F7665 + 723D747275653B4973507265737365643D66616C73650E54726967676572496E + 7665727365062149734D6F7573654F7665723D66616C73653B49735072657373 + 65643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C + 654E616D650614436F6C6F72416E696D6174696F6E325374796C650844757261 + 74696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A4669 + 6C6C2E436F6C6F720A537461727456616C756507097846464646363135370953 + 746F7056616C756507097846464532344634350754726967676572061F49734D + 6F7573654F7665723D747275653B4973507265737365643D747275650E547269 + 67676572496E7665727365062049734D6F7573654F7665723D747275653B4973 + 507265737365643D66616C736500000005545061746800095374796C654E616D + 650605506174683105416C69676E070643656E74657209446174612E50617468 + 0AC400000010000000000000000000A0C00000704101000000000070410000A0 + C001000000000048420000F041010000000000AA420000A0C0010000000000D2 + 42000070410100000000008C4200004842010000000000D2420000B442010000 + 000000AA420000DC42020000003BDF34429E6F8C4202000000FE547D427FAAB0 + 4202000000000048420000964201000000000070410000DC42010000000000A0 + C00000B442010000000000F04100005C42010000000000A0C000007041030000 + 000000A0C0000070410A46696C6C2E436F6C6F720708636C6157686974650748 + 697454657374080A53697A652E57696474680500000000000000A002400B5369 + 7A652E4865696768740500000000000000A002401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000054 + 50463007544C61796F757400095374796C654E616D65060E6D6178627574746F + 6E7374796C6505416C69676E070643656E7465720A53697A652E576964746805 + 00000000000000C804400B53697A652E4865696768740500000000000000C803 + 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 + 085461624F726465720238000A5452656374616E676C6500095374796C654E61 + 6D6506096D6178627574746F6E05416C69676E0706436C69656E740A46696C6C + 2E436F6C6F7207097846463230323032300748697454657374080A53697A652E + 57696474680500000000000000C804400B53697A652E48656967687405000000 + 00000000C803401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E + 00095374796C654E616D650614436F6C6F72416E696D6174696F6E315374796C + 65084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E61 + 6D65060A46696C6C2E436F6C6F720A537461727456616C756507097846463230 + 323032300953746F7056616C7565070978464632413832453207547269676765 + 72062049734D6F7573654F7665723D747275653B4973507265737365643D6661 + 6C73650E54726967676572496E7665727365062149734D6F7573654F7665723D + 66616C73653B4973507265737365643D66616C736500000F54436F6C6F72416E + 696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D617469 + 6F6E325374796C65084475726174696F6E050000000000CDCCCCFB3F0C50726F + 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 + 07097846463241383245320953746F7056616C75650709784646313735373943 + 0754726967676572061F49734D6F7573654F7665723D747275653B4973507265 + 737365643D747275650E54726967676572496E7665727365062049734D6F7573 + 654F7665723D747275653B4973507265737365643D66616C7365000000055450 + 61746800095374796C654E616D650605506174683105416C69676E070643656E + 74657209446174612E506174680A5800000007000000000000000000C8420000 + C8420100000000002F440000C8420100000000002F4400002F44010000000080 + 094400800944010000000080094400007A430100000000007A4300007A430300 + 00000000C8420000C8420A46696C6C2E436F6C6F720708636C61576869746507 + 48697454657374080A53697A652E57696474680500000000000000A002400B53 + 697A652E4865696768740500000000000000A002401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000 + 5450463007544C61796F757400095374796C654E616D65060E6D696E62757474 + 6F6E7374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 0500000000000000C804400B53697A652E4865696768740500000000000000C8 + 03401453697A652E506C6174666F726D44656661756C74080756697369626C65 + 08085461624F726465720239000A5452656374616E676C6500095374796C654E + 616D6506096D696E627574746F6E05416C69676E0706436C69656E740A46696C + 6C2E436F6C6F7207097846463230323032300748697454657374080A53697A65 + 2E57696474680500000000000000C804400B53697A652E486569676874050000 + 0000000000C803401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F + 6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E31537479 + 6C65084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E + 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464632 + 30323032300953746F7056616C75650709784646324138324532075472696767 + 6572062049734D6F7573654F7665723D747275653B4973507265737365643D66 + 616C73650E54726967676572496E7665727365062149734D6F7573654F766572 + 3D66616C73653B4973507265737365643D66616C736500000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174 + 696F6E325374796C65084475726174696F6E050000000000CDCCCCFB3F0C5072 + 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 + 6507097846463241383245320953746F7056616C756507097846463137353739 + 430754726967676572061F49734D6F7573654F7665723D747275653B49735072 + 65737365643D747275650E54726967676572496E7665727365062049734D6F75 + 73654F7665723D747275653B4973507265737365643D66616C73650000000554 + 5061746800095374796C654E616D650605506174683105416C69676E07064365 + 6E74657209446174612E506174680A40000000050000000000000000002F4400 + 8009440100000000002F4400002F44010000000000C84200002F440100000000 + 00C842008009440300000000002F44008009440A46696C6C2E436F6C6F720708 + 636C6157686974650748697454657374080B4D617267696E732E546F70050000 + 0000000000A002400D526F746174696F6E416E676C650500000000000000B406 + 400A53697A652E57696474680500000000000000A002400B53697A652E486569 + 6768740500000000000000C000401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E650000005450463007544C + 61796F757400095374796C654E616D65060E726573627574746F6E7374796C65 + 05416C69676E070643656E7465720A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000000000C803401453697A65 + 2E506C6174666F726D44656661756C74080756697369626C6508085461624F72 + 646572023A000A5452656374616E676C6500095374796C654E616D6506097265 + 73627574746F6E05416C69676E0706436C69656E740A46696C6C2E436F6C6F72 + 07097846463230323032300748697454657374080A53697A652E576964746805 + 00000000000000C804400B53697A652E4865696768740500000000000000C803 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C + 654E616D650614436F6C6F72416E696D6174696F6E315374796C650844757261 + 74696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A4669 + 6C6C2E436F6C6F720A537461727456616C756507097846463230323032300953 + 746F7056616C756507097846463241383245320754726967676572062049734D + 6F7573654F7665723D747275653B4973507265737365643D66616C73650E5472 + 6967676572496E7665727365062149734D6F7573654F7665723D66616C73653B + 4973507265737365643D66616C736500000F54436F6C6F72416E696D6174696F + 6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E32537479 + 6C65084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E + 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464632 + 41383245320953746F7056616C75650709784646313735373943075472696767 + 6572061F49734D6F7573654F7665723D747275653B4973507265737365643D74 + 7275650E54726967676572496E7665727365062049734D6F7573654F7665723D + 747275653B4973507265737365643D66616C7365000000055450617468000953 + 74796C654E616D650605506174683105416C69676E070643656E746572094461 + 74612E506174680A5800000007000000000000000000C8420000C84201000000 + 00002F440000C8420100000000002F4400002F44010000000080094400800944 + 010000000080094400007A430100000000007A4300007A43030000000000C842 + 0000C8420A46696C6C2E436F6C6F720708636C61576869746507486974546573 + 74080D526F746174696F6E416E676C650500000000000000B406400A53697A65 + 2E57696474680500000000000000A002400B53697A652E486569676874050000 + 0000000000A002401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E650000005450463007544C61796F757400 + 095374796C654E616D65060F746F6F6C77696E646F777374796C6505416C6967 6E070643656E7465720A53697A652E576964746805000000000056D5AF07400B 53697A652E4865696768740500000000000000B306401453697A652E506C6174 - 666F726D44656661756C74080756697369626C6508085461624F72646572022B + 666F726D44656661756C74080756697369626C6508085461624F726465720241 000A5452656374616E676C6500095374796C654E616D6506046D61736B05416C 69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646313031 3031300A53697A652E576964746805000000000056D5AF07400B53697A652E48 @@ -14083,18 +15055,18 @@ object MainForm: TMainForm 6661756C74080B5374726F6B652E4B696E6407044E6F6E650756697369626C65 08000007544C61796F757400095374796C654E616D6506046C65667405416C69 676E07084D6F73744C656674064C6F636B6564090A506F736974696F6E2E5905 - 00000000000000F003400A53697A652E57696474680500000000000000A00140 - 0B53697A652E48656967687405000000000000009506401453697A652E506C61 + 00000000000000C803400A53697A652E57696474680500000000000000A00140 + 0B53697A652E48656967687405000000000000009A06401453697A652E506C61 74666F726D44656661756C7408000A5452656374616E676C650005416C69676E 07084D6F73744C6566740A46696C6C2E436F6C6F720709784646323032303230 0748697454657374080553696465730B044C656674055269676874000A53697A 652E57696474680500000000000000A001400B53697A652E4865696768740500 - 0000000000009006401453697A652E506C6174666F726D44656661756C74080C + 0000000000009506401453697A652E506C6174666F726D44656661756C74080C 5374726F6B652E436F6C6F72070978464631353135313500000A545265637461 6E676C6500095374796C654E616D65060A52656374616E676C653105416C6967 6E070A4D6F7374426F74746F6D13456E61626C6544726167486967686C696768 74080A46696C6C2E436F6C6F7207097846463230323032300748697454657374 - 080A506F736974696F6E2E5905000000000000009006400553696465730B044C + 080A506F736974696F6E2E5905000000000000009506400553696465730B044C 65667406426F74746F6D000A53697A652E57696474680500000000000000A001 400B53697A652E4865696768740500000000000000A001401453697A652E506C 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 @@ -14110,18 +15082,18 @@ object MainForm: TMainForm 726F6B652E4B696E6407044E6F6E65000000000007544C61796F757400095374 796C654E616D650605726967687405416C69676E07094D6F7374526967687406 4C6F636B6564090A506F736974696F6E2E580500000000005655AD07400A506F - 736974696F6E2E590500000000000000F003400A53697A652E57696474680500 - 000000000000A001400B53697A652E4865696768740500000000000000950640 + 736974696F6E2E590500000000000000C803400A53697A652E57696474680500 + 000000000000A001400B53697A652E48656967687405000000000000009A0640 1453697A652E506C6174666F726D44656661756C7408000A5452656374616E67 6C650005416C69676E07094D6F737452696768740A46696C6C2E436F6C6F7207 097846463230323032300748697454657374080553696465730B044C65667405 5269676874000A53697A652E57696474680500000000000000A001400B53697A - 652E48656967687405000000000000009006401453697A652E506C6174666F72 + 652E48656967687405000000000000009506401453697A652E506C6174666F72 6D44656661756C74080C5374726F6B652E436F6C6F7207097846463135313531 3500000A5452656374616E676C6500095374796C654E616D65060A5265637461 6E676C653105416C69676E070A4D6F7374426F74746F6D13456E61626C654472 6167486967686C69676874080A46696C6C2E436F6C6F72070978464632303230 - 32300748697454657374080A506F736974696F6E2E5905000000000000009006 + 32300748697454657374080A506F736974696F6E2E5905000000000000009506 400553696465730B06426F74746F6D055269676874000A53697A652E57696474 680500000000000000A001400B53697A652E4865696768740500000000000000 A001401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 @@ -14137,633 +15109,504 @@ object MainForm: TMainForm 6F6E6500000000000A5452656374616E676C650005416C69676E07074D6F7374 546F700A46696C6C2E436F6C6F720709784646323032303230064C6F636B6564 090748697454657374080A53697A652E576964746805000000000056D5AF0740 - 0B53697A652E4865696768740500000000000000F003401453697A652E506C61 + 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 35313531350007544C61796F757400095374796C654E616D6506076361707469 6F6E05416C69676E0708436F6E74656E7473064C6F636B656409074869745465 7374090A53697A652E576964746805000000000056D5AF07400B53697A652E48 - 65696768740500000000000000F003401453697A652E506C6174666F726D4465 + 65696768740500000000000000C803401453697A652E506C6174666F726D4465 6661756C7408000007544C61796F75740005416C69676E0706436C69656E7406 4C6F636B6564090C4D617267696E732E4C656674050000000000000080FF3F0B 4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E52 69676874050000000000000080FF3F0E4D617267696E732E426F74746F6D0500 00000000000080FF3F0A53697A652E576964746805000000000056D5AE07400B - 53697A652E4865696768740500000000000000E003401453697A652E506C6174 + 53697A652E4865696768740500000000000000B803401453697A652E506C6174 666F726D44656661756C74080007544C61796F75740005416C69676E07044C65 6674064C6F636B6564090A53697A652E57696474680500000000000000900240 - 0B53697A652E4865696768740500000000000000E003401453697A652E506C61 + 0B53697A652E4865696768740500000000000000B803401453697A652E506C61 74666F726D44656661756C7408000007544C61796F757400095374796C654E61 - 6D65060469636F6E064C6F636B6564090A506F736974696F6E2E580500000000 - 0000009002400A506F736974696F6E2E590500000000000000E001400A53697A - 652E57696474680500000000000000C803400B53697A652E4865696768740500 - 000000000000A803401453697A652E506C6174666F726D44656661756C740800 - 0007544C61796F757400095374796C654E616D65060773797362746E7305416C - 69676E0706436C69656E74064C6F636B6564090A53697A652E57696474680500 - 000000005655AA07400B53697A652E4865696768740500000000000000E00340 - 1453697A652E506C6174666F726D44656661756C7408000C5453706565644275 - 74746F6E00095374796C654E616D650605636C6F736505416C69676E07055269 - 676874064C6F636B6564090A506F736974696F6E2E5805000000000056559107 - 400A53697A652E57696474680500000000000000C804400B53697A652E486569 - 6768740500000000000000E003401453697A652E506C6174666F726D44656661 - 756C74080B5374796C654C6F6F6B75700610636C6F7365627574746F6E737479 - 6C6500000C545370656564427574746F6E00095374796C654E616D6506036D61 - 7805416C69676E07055269676874064C6F636B6564090A506F736974696F6E2E - 5805000000000056558207400A53697A652E57696474680500000000000000F0 - 03400B53697A652E4865696768740500000000000000E003401453697A652E50 - 6C6174666F726D44656661756C74080B5374796C654C6F6F6B7570060E6D6178 - 627574746F6E7374796C6500000C545370656564427574746F6E00095374796C - 654E616D65060372657305416C69676E07055269676874064C6F636B6564090A - 506F736974696F6E2E58050000000000ACAAE606400A53697A652E5769647468 - 0500000000000000F003400B53697A652E4865696768740500000000000000E0 - 03401453697A652E506C6174666F726D44656661756C74080B5374796C654C6F - 6F6B7570060E726573627574746F6E7374796C6500000C545370656564427574 - 746F6E00095374796C654E616D6506036D696E05416C69676E07055269676874 - 064C6F636B6564090A506F736974696F6E2E58050000000000ACAAC806400A53 - 697A652E57696474680500000000000000F003400B53697A652E486569676874 - 0500000000000000E003401453697A652E506C6174666F726D44656661756C74 - 080B5374796C654C6F6F6B7570060E6D696E627574746F6E7374796C65000005 - 545465787400095374796C654E616D6506057469746C6505416C69676E070643 - 6C69656E74064C6F636B6564090748697454657374080A53697A652E57696474 - 68050000000000ACAAC806400B53697A652E4865696768740500000000000000 - E003401453697A652E506C6174666F726D44656661756C740804546578740605 - 5469746C65165465787453657474696E67732E466F6E74436F6C6F720708636C - 615768697465000000000007544C61796F757400095374796C654E616D650606 - 636C69656E7405416C69676E0706436C69656E74064C6F636B65640907486974 - 54657374090A53697A652E576964746805000000000056D5AA07400B53697A65 - 2E48656967687405000000000000009006401453697A652E506C6174666F726D - 44656661756C7408000007544C61796F757400095374796C654E616D65060662 - 6F74746F6D05416C69676E0706426F74746F6D064C6F636B6564090A506F7369 - 74696F6E2E580500000000000000A001400A506F736974696F6E2E5905000000 - 00000000AE06400A53697A652E576964746805000000000056D5AA07400B5369 - 7A652E4865696768740500000000000000A001401453697A652E506C6174666F - 726D44656661756C7408000A5452656374616E676C6500095374796C654E616D - 6506047265637405416C69676E0706426F74746F6D0A46696C6C2E436F6C6F72 - 07097846463230323032300748697454657374080553696465730B03546F7006 - 426F74746F6D000A53697A652E576964746805000000000056D5AA07400B5369 - 7A652E4865696768740500000000000000A001401453697A652E506C6174666F - 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 - 3135000000005450463007544C61796F757400095374796C654E616D65060F74 - 6F6F6C77696E646F777374796C6505416C69676E070643656E7465720A53697A - 652E576964746805000000000056D5AF07400B53697A652E4865696768740500 - 000000000000B306401453697A652E506C6174666F726D44656661756C740807 - 56697369626C6508085461624F72646572022C000A5452656374616E676C6500 - 095374796C654E616D6506046D61736B05416C69676E0708436F6E74656E7473 - 0A46696C6C2E436F6C6F7207097846463130313031300A53697A652E57696474 - 6805000000000056D5AF07400B53697A652E4865696768740500000000000000 - B306401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 - 2E4B696E6407044E6F6E650756697369626C6508000007544C61796F75740009 - 5374796C654E616D6506046C65667405416C69676E07084D6F73744C65667406 - 4C6F636B6564090A506F736974696F6E2E590500000000000000C803400A5369 - 7A652E57696474680500000000000000A001400B53697A652E48656967687405 - 000000000000009A06401453697A652E506C6174666F726D44656661756C7408 - 000A5452656374616E676C650005416C69676E07084D6F73744C6566740A4669 - 6C6C2E436F6C6F72070978464632303230323007486974546573740805536964 - 65730B044C656674055269676874000A53697A652E5769647468050000000000 - 0000A001400B53697A652E48656967687405000000000000009506401453697A - 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 - 0978464631353135313500000A5452656374616E676C6500095374796C654E61 - 6D65060A52656374616E676C653105416C69676E070A4D6F7374426F74746F6D - 13456E61626C6544726167486967686C69676874080A46696C6C2E436F6C6F72 - 07097846463230323032300748697454657374080A506F736974696F6E2E5905 - 000000000000009506400553696465730B044C65667406426F74746F6D000A53 - 697A652E57696474680500000000000000A001400B53697A652E486569676874 - 0500000000000000A001401453697A652E506C6174666F726D44656661756C74 - 080C5374726F6B652E436F6C6F7207097846463135313531350007544C61796F - 757400095374796C654E616D6506074C61796F75743305416C69676E07094D6F - 737452696768740A506F736974696F6E2E5805000000000000008001400A5369 - 7A652E5769647468050000000000000080FF3F0B53697A652E48656967687405 - 00000000000000A001401453697A652E506C6174666F726D44656661756C7408 - 000A5452656374616E676C6500095374796C654E616D65060A52656374616E67 - 6C653105416C69676E0703546F700A46696C6C2E436F6C6F7207097846463135 - 313531350748697454657374080A53697A652E57696474680500000000000000 - 80FF3F0B53697A652E486569676874050000000000000080FF3F1453697A652E - 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F - 6E65000000000007544C61796F757400095374796C654E616D65060572696768 - 7405416C69676E07094D6F73745269676874064C6F636B6564090A506F736974 - 696F6E2E580500000000005655AD07400A506F736974696F6E2E590500000000 - 000000C803400A53697A652E57696474680500000000000000A001400B53697A - 652E48656967687405000000000000009A06401453697A652E506C6174666F72 - 6D44656661756C7408000A5452656374616E676C650005416C69676E07094D6F - 737452696768740A46696C6C2E436F6C6F720709784646323032303230074869 - 7454657374080553696465730B044C656674055269676874000A53697A652E57 - 696474680500000000000000A001400B53697A652E4865696768740500000000 - 0000009506401453697A652E506C6174666F726D44656661756C74080C537472 - 6F6B652E436F6C6F72070978464631353135313500000A5452656374616E676C - 6500095374796C654E616D65060A52656374616E676C653105416C69676E070A - 4D6F7374426F74746F6D13456E61626C6544726167486967686C69676874080A - 46696C6C2E436F6C6F7207097846463230323032300748697454657374080A50 - 6F736974696F6E2E5905000000000000009506400553696465730B06426F7474 - 6F6D055269676874000A53697A652E57696474680500000000000000A001400B - 53697A652E4865696768740500000000000000A001401453697A652E506C6174 - 666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846463135 - 313531350007544C61796F757400095374796C654E616D6506074C61796F7574 - 3305416C69676E07084D6F73744C6566740A53697A652E576964746805000000 - 0000000080FF3F0B53697A652E4865696768740500000000000000A001401453 - 697A652E506C6174666F726D44656661756C7408000A5452656374616E676C65 - 00095374796C654E616D65060A52656374616E676C653105416C69676E070354 - 6F700A46696C6C2E436F6C6F7207097846463135313531350748697454657374 - 080A53697A652E5769647468050000000000000080FF3F0B53697A652E486569 - 676874050000000000000080FF3F1453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E6500000000000A54526563 - 74616E676C650005416C69676E07074D6F7374546F700A46696C6C2E436F6C6F - 720709784646323032303230064C6F636B6564090748697454657374080A5369 - 7A652E576964746805000000000056D5AF07400B53697A652E48656967687405 - 00000000000000C803401453697A652E506C6174666F726D44656661756C7408 - 0C5374726F6B652E436F6C6F7207097846463135313531350007544C61796F75 - 7400095374796C654E616D65060763617074696F6E05416C69676E0708436F6E - 74656E7473064C6F636B6564090748697454657374090A53697A652E57696474 - 6805000000000056D5AF07400B53697A652E4865696768740500000000000000 - C803401453697A652E506C6174666F726D44656661756C7408000007544C6179 - 6F75740005416C69676E0706436C69656E74064C6F636B6564090C4D61726769 - 6E732E4C656674050000000000000080FF3F0B4D617267696E732E546F700500 - 00000000000080FF3F0D4D617267696E732E5269676874050000000000000080 - FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A - 652E576964746805000000000056D5AE07400B53697A652E4865696768740500 - 000000000000B803401453697A652E506C6174666F726D44656661756C740800 - 07544C61796F75740005416C69676E07044C656674064C6F636B6564090A5369 - 7A652E576964746805000000000000009002400B53697A652E48656967687405 - 00000000000000B803401453697A652E506C6174666F726D44656661756C7408 - 000007544C61796F757400095374796C654E616D65060773797362746E730541 - 6C69676E0706436C69656E74064C6F636B6564090A53697A652E576964746805 - 00000000005655AA07400B53697A652E4865696768740500000000000000B803 - 401453697A652E506C6174666F726D44656661756C7408000C54537065656442 - 7574746F6E00095374796C654E616D650605636C6F736505416C69676E070552 - 69676874064C6F636B6564090A506F736974696F6E2E5805000000000056D59D - 07400A53697A652E57696474680500000000000000C803400B53697A652E4865 - 696768740500000000000000B803401453697A652E506C6174666F726D446566 - 61756C74080B5374796C654C6F6F6B75700610636C6F7365627574746F6E7374 - 796C65000005545465787400095374796C654E616D6506057469746C6505416C - 69676E0706436C69656E74064C6F636B6564090748697454657374080A53697A - 652E576964746805000000000056D59D07400B53697A652E4865696768740500 - 000000000000B803401453697A652E506C6174666F726D44656661756C740804 - 5465787406055469746C65165465787453657474696E67732E466F6E74436F6C - 6F720708636C615768697465000000000007544C61796F757400095374796C65 - 4E616D650606636C69656E7405416C69676E0706436C69656E74064C6F636B65 - 64090748697454657374090A53697A652E576964746805000000000056D5AA07 - 400B53697A652E48656967687405000000000000009506401453697A652E506C - 6174666F726D44656661756C7408000007544C61796F757400095374796C654E - 616D650606626F74746F6D05416C69676E0706426F74746F6D064C6F636B6564 - 090A506F736974696F6E2E580500000000000000A001400A506F736974696F6E - 2E590500000000000000AE06400A53697A652E576964746805000000000056D5 - AA07400B53697A652E4865696768740500000000000000A001401453697A652E - 506C6174666F726D44656661756C7408000A5452656374616E676C6500095374 - 796C654E616D6506047265637405416C69676E0706426F74746F6D0A46696C6C - 2E436F6C6F7207097846463230323032300553696465730B03546F7006426F74 - 746F6D000A53697A652E576964746805000000000056D5AA07400B53697A652E - 4865696768740500000000000000A001401453697A652E506C6174666F726D44 - 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313500 - 0000005450463007544C61796F757400095374796C654E616D65061072616469 - 6F627574746F6E7374796C6505416C69676E070643656E7465720A53697A652E - 57696474680500000000000000F205400B53697A652E48656967687405000000 - 00000000A803401453697A652E506C6174666F726D44656661756C7408075669 - 7369626C6508085461624F72646572022E0007544C61796F75740005416C6967 - 6E07044C6566740A53697A652E57696474680500000000000000A803400B5369 + 6D65060773797362746E7305416C69676E0706436C69656E74064C6F636B6564 + 090A53697A652E57696474680500000000005655AA07400B53697A652E486569 + 6768740500000000000000B803401453697A652E506C6174666F726D44656661 + 756C7408000C545370656564427574746F6E00095374796C654E616D65060563 + 6C6F736505416C69676E07055269676874064C6F636B6564090A506F73697469 + 6F6E2E5805000000000056D59D07400A53697A652E5769647468050000000000 + 0000C803400B53697A652E4865696768740500000000000000B803401453697A + 652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B75700610 + 636C6F7365627574746F6E7374796C65000005545465787400095374796C654E + 616D6506057469746C6505416C69676E0706436C69656E74064C6F636B656409 + 0748697454657374080A53697A652E576964746805000000000056D59D07400B + 53697A652E4865696768740500000000000000B803401453697A652E506C6174 + 666F726D44656661756C7408045465787406055469746C651654657874536574 + 74696E67732E466F6E74436F6C6F720708636C61576869746500000000000754 + 4C61796F757400095374796C654E616D650606636C69656E7405416C69676E07 + 06436C69656E74064C6F636B6564090748697454657374090A53697A652E5769 + 64746805000000000056D5AA07400B53697A652E486569676874050000000000 + 00009506401453697A652E506C6174666F726D44656661756C7408000007544C + 61796F757400095374796C654E616D650606626F74746F6D05416C69676E0706 + 426F74746F6D064C6F636B6564090A506F736974696F6E2E5805000000000000 + 00A001400A506F736974696F6E2E590500000000000000AE06400A53697A652E + 576964746805000000000056D5AA07400B53697A652E48656967687405000000 + 00000000A001401453697A652E506C6174666F726D44656661756C7408000A54 + 52656374616E676C6500095374796C654E616D6506047265637405416C69676E + 0706426F74746F6D0A46696C6C2E436F6C6F7207097846463230323032300553 + 696465730B03546F7006426F74746F6D000A53697A652E576964746805000000 + 000056D5AA07400B53697A652E4865696768740500000000000000A001401453 + 697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F + 720709784646313531353135000000005450463007544C61796F757400095374 + 796C654E616D650610726164696F627574746F6E7374796C6505416C69676E07 + 0643656E7465720A53697A652E57696474680500000000000000F205400B5369 7A652E4865696768740500000000000000A803401453697A652E506C6174666F - 726D44656661756C7408000854456C6C6970736500095374796C654E616D6506 - 0A6261636B67726F756E6405416C69676E070643656E7465720A46696C6C2E43 - 6F6C6F720709784646323032303230064C6F636B656409074869745465737408 - 0A53697A652E57696474680500000000000000F002400B53697A652E48656967 - 68740500000000000000F002401453697A652E506C6174666F726D4465666175 - 6C74080C5374726F6B652E436F6C6F720709784646313531353135000854456C - 6C6970736500095374796C654E616D650609636865636B6D61726B05416C6967 - 6E0706436C69656E740A46696C6C2E436F6C6F72070978464632413832453206 - 4C6F636B656409074869745465737408074F7061636974790500000000000000 - 0000000C4D617267696E732E4C65667405000000000000008000400B4D617267 - 696E732E546F7005000000000000008000400D4D617267696E732E5269676874 - 05000000000000008000400E4D617267696E732E426F74746F6D050000000000 - 00008000400A53697A652E57696474680500000000000000B002400B53697A65 - 2E4865696768740500000000000000B002401453697A652E506C6174666F726D - 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F - 6174416E696D6174696F6E00095374796C654E616D65061A6F70616369747943 - 6865636B6D61726B416E696D6174696F6E31084475726174696F6E0500000000 - 00CDCCCCFB3F0C50726F70657274794E616D6506074F7061636974790A537461 - 727456616C756505000000000000000000000953746F7056616C756505000000 - 0000000080FF3F0754726967676572060E4973436865636B65643D747275650E - 54726967676572496E7665727365060F4973436865636B65643D66616C736500 - 00000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65061A72 - 6164696F627574746F6E436F6C6F72416E696D6174696F6E3108447572617469 - 6F6E050000000000CDCCCCFB3F07496E7665727365090C50726F70657274794E - 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464632 - 30323032300953746F7056616C75650709784646343034303430075472696767 - 6572061049734D6F7573654F7665723D747275650E54726967676572496E7665 - 727365061149734D6F7573654F7665723D66616C736500000F54436F6C6F7241 - 6E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174 - 696F6E315374796C65084475726174696F6E050000000000CDCCCCFB3F0C5072 - 6F70657274794E616D65060C5374726F6B652E436F6C6F720A53746172745661 - 6C756507097846463135313531350953746F7056616C75650709784646324138 - 3245320754726967676572060E4973436865636B65643D747275650E54726967 - 676572496E7665727365060F4973436865636B65643D66616C73650000000005 - 545465787400095374796C654E616D6506047465787405416C69676E0706436C - 69656E74064C6F636B6564090748697454657374080A53697A652E5769647468 - 0500000000000000C805400B53697A652E4865696768740500000000000000A8 - 03401453697A652E506C6174666F726D44656661756C74080454657874060454 - 657874165465787453657474696E67732E466F6E74436F6C6F720708636C6157 - 686974650000005450463007544C61796F757400095374796C654E616D650618 - 756C63656E746572726164696F627574746F6E7374796C6505416C69676E0706 - 43656E7465720A53697A652E57696474680500000000005655FB05400B53697A - 652E4865696768740500000000000000A004401453697A652E506C6174666F72 - 6D44656661756C74080756697369626C6508085461624F726465720230000754 - 4C61796F75740005416C69676E0706426F74746F6D0A506F736974696F6E2E59 - 05000000000000008804400A53697A652E57696474680500000000005655FB05 - 400B53697A652E4865696768740500000000000000C001401453697A652E506C - 6174666F726D44656661756C7408000A5452656374616E676C6500095374796C - 654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74 - 7307436F726E6572730B07546F704C6566740A426F74746F6D4C656674000A46 - 696C6C2E436F6C6F720709784646323032303230064C6F636B65640907486974 - 54657374080A53697A652E57696474680500000000005655FB05400B53697A65 - 2E4865696768740500000000000000C001401453697A652E506C6174666F726D - 44656661756C74080C5374726F6B652E436F6C6F720709784646313531353135 - 000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506216261 - 636B67726F756E64556C427574746F6E436F6C6F72416E696D6174696F6E3108 - 4475726174696F6E050000000000CDCCCCFB3F07496E7665727365090C50726F - 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 - 07097846463230323032300953746F7056616C75650709784646343034303430 - 0754726967676572061049734D6F7573654F7665723D747275650E5472696767 - 6572496E7665727365061149734D6F7573654F7665723D66616C736500000A54 - 52656374616E676C6500095374796C654E616D650609636865636B6D61726B05 - 416C69676E0708436F6E74656E747307436F726E6572730B07546F704C656674 - 0A426F74746F6D4C656674000A46696C6C2E436F6C6F72070978464632413832 - 4532064C6F636B656409074869745465737408074F7061636974790500000000 - 0000000000000C4D617267696E732E4C656674050000000000000080FF3F0B4D - 617267696E732E546F70050000000000000080FF3F0D4D617267696E732E5269 - 676874050000000000000080FF3F0E4D617267696E732E426F74746F6D050000 - 000000000080FF3F0A53697A652E57696474680500000000005655F705400B53 - 697A652E48656967687405000000000000008001401453697A652E506C617466 - 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54 - 466C6F6174416E696D6174696F6E00095374796C654E616D65061A636865636B - 6D61726B4F706163697479416E696D6174696F6E31084475726174696F6E0500 - 00000000CDCCCCFB3F0C50726F70657274794E616D6506074F7061636974790A - 537461727456616C756505000000000000000000000953746F7056616C756505 - 0000000000000080FF3F0754726967676572060E4973436865636B65643D7472 - 75650E54726967676572496E7665727365060F4973436865636B65643D66616C - 7365000000000005545465787400095374796C654E616D650604746578740541 - 6C69676E0706436C69656E74064C6F636B6564090748697454657374080A5369 - 7A652E57696474680500000000005655FB05400B53697A652E48656967687405 - 000000000000008804401453697A652E506C6174666F726D44656661756C7408 - 0454657874060454657874165465787453657474696E67732E466F6E74436F6C - 6F720708636C6157686974650000005450463007544C61796F75740009537479 - 6C654E616D650616756C6C656674726164696F627574746F6E7374796C650541 - 6C69676E070643656E7465720A53697A652E57696474680500000000005655FB - 05400B53697A652E4865696768740500000000000000A004401453697A652E50 + 726D44656661756C74080756697369626C6508085461624F7264657202430007 + 544C61796F75740005416C69676E07044C6566740A53697A652E576964746805 + 00000000000000A803400B53697A652E4865696768740500000000000000A803 + 401453697A652E506C6174666F726D44656661756C7408000854456C6C697073 + 6500095374796C654E616D65060A6261636B67726F756E6405416C69676E0706 + 43656E7465720A46696C6C2E436F6C6F720709784646323032303230064C6F63 + 6B6564090748697454657374080A53697A652E57696474680500000000000000 + F002400B53697A652E4865696768740500000000000000F002401453697A652E + 506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72070978 + 4646313531353135000854456C6C6970736500095374796C654E616D65060963 + 6865636B6D61726B05416C69676E0706436C69656E740A46696C6C2E436F6C6F + 720709784646324138324532064C6F636B656409074869745465737408074F70 + 616369747905000000000000000000000C4D617267696E732E4C656674050000 + 00000000008000400B4D617267696E732E546F7005000000000000008000400D + 4D617267696E732E526967687405000000000000008000400E4D617267696E73 + 2E426F74746F6D05000000000000008000400A53697A652E5769647468050000 + 0000000000B002400B53697A652E4865696768740500000000000000B0024014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E65000F54466C6F6174416E696D6174696F6E00095374796C654E + 616D65061A6F706163697479436865636B6D61726B416E696D6174696F6E3108 + 4475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65 + 06074F7061636974790A537461727456616C7565050000000000000000000009 + 53746F7056616C7565050000000000000080FF3F0754726967676572060E4973 + 436865636B65643D747275650E54726967676572496E7665727365060F497343 + 6865636B65643D66616C73650000000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D65061A726164696F627574746F6E436F6C6F72416E696D + 6174696F6E31084475726174696F6E050000000000CDCCCCFB3F07496E766572 + 7365090C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461 + 727456616C756507097846463230323032300953746F7056616C756507097846 + 463430343034300754726967676572061049734D6F7573654F7665723D747275 + 650E54726967676572496E7665727365061149734D6F7573654F7665723D6661 + 6C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 + 0614436F6C6F72416E696D6174696F6E315374796C65084475726174696F6E05 + 0000000000CDCCCCFB3F0C50726F70657274794E616D65060C5374726F6B652E + 436F6C6F720A537461727456616C756507097846463135313531350953746F70 + 56616C756507097846463241383245320754726967676572060E497343686563 + 6B65643D747275650E54726967676572496E7665727365060F4973436865636B + 65643D66616C73650000000005545465787400095374796C654E616D65060474 + 65787405416C69676E0706436C69656E74064C6F636B65640907486974546573 + 74080A53697A652E57696474680500000000000000C805400B53697A652E4865 + 696768740500000000000000A803401453697A652E506C6174666F726D446566 + 61756C74080454657874060454657874165465787453657474696E67732E466F + 6E74436F6C6F720708636C6157686974650000005450463007544C61796F7574 + 00095374796C654E616D650618756C63656E746572726164696F627574746F6E + 7374796C6505416C69676E070643656E7465720A53697A652E57696474680500 + 000000005655FB05400B53697A652E4865696768740500000000000000A00440 + 1453697A652E506C6174666F726D44656661756C74080756697369626C650808 + 5461624F7264657202440007544C61796F75740005416C69676E0706426F7474 + 6F6D0A506F736974696F6E2E5905000000000000008804400A53697A652E5769 + 6474680500000000005655FB05400B53697A652E486569676874050000000000 + 0000C001401453697A652E506C6174666F726D44656661756C7408000A545265 + 6374616E676C6500095374796C654E616D65060A6261636B67726F756E640541 + 6C69676E0708436F6E74656E747307436F726E6572730B07546F704C6566740A + 426F74746F6D4C656674000A46696C6C2E436F6C6F7207097846463230323032 + 30064C6F636B6564090748697454657374080A53697A652E5769647468050000 + 0000005655FB05400B53697A652E4865696768740500000000000000C0014014 + 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C + 6F720709784646313531353135000F54436F6C6F72416E696D6174696F6E0009 + 5374796C654E616D6506216261636B67726F756E64556C427574746F6E436F6C + 6F72416E696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F + 07496E7665727365090C50726F70657274794E616D65060A46696C6C2E436F6C + 6F720A537461727456616C756507097846463230323032300953746F7056616C + 756507097846463430343034300754726967676572061049734D6F7573654F76 + 65723D747275650E54726967676572496E7665727365061149734D6F7573654F + 7665723D66616C736500000A5452656374616E676C6500095374796C654E616D + 650609636865636B6D61726B05416C69676E0708436F6E74656E747307436F72 + 6E6572730B07546F704C6566740A426F74746F6D4C656674000A46696C6C2E43 + 6F6C6F720709784646324138324532064C6F636B656409074869745465737408 + 074F70616369747905000000000000000000000C4D617267696E732E4C656674 + 050000000000000080FF3F0B4D617267696E732E546F70050000000000000080 + FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D617267 + 696E732E426F74746F6D050000000000000080FF3F0A53697A652E5769647468 + 0500000000005655F705400B53697A652E486569676874050000000000000080 + 01401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E0009537479 + 6C654E616D65061A636865636B6D61726B4F706163697479416E696D6174696F + 6E31084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E + 616D6506074F7061636974790A537461727456616C7565050000000000000000 + 00000953746F7056616C7565050000000000000080FF3F075472696767657206 + 0E4973436865636B65643D747275650E54726967676572496E7665727365060F + 4973436865636B65643D66616C7365000000000005545465787400095374796C + 654E616D6506047465787405416C69676E0706436C69656E74064C6F636B6564 + 090748697454657374080A53697A652E57696474680500000000005655FB0540 + 0B53697A652E48656967687405000000000000008804401453697A652E506C61 + 74666F726D44656661756C740804546578740604546578741654657874536574 + 74696E67732E466F6E74436F6C6F720708636C61576869746500000054504630 + 07544C61796F757400095374796C654E616D650616756C6C656674726164696F + 627574746F6E7374796C6505416C69676E070643656E7465720A53697A652E57 + 696474680500000000005655FB05400B53697A652E4865696768740500000000 + 000000A004401453697A652E506C6174666F726D44656661756C740807566973 + 69626C6508085461624F7264657202470007544C61796F75740005416C69676E + 0706426F74746F6D0A506F736974696F6E2E5905000000000000008804400A53 + 697A652E57696474680500000000005655FB05400B53697A652E486569676874 + 0500000000000000C001401453697A652E506C6174666F726D44656661756C74 + 08000A5452656374616E676C6500095374796C654E616D65060A6261636B6772 + 6F756E6405416C69676E0708436F6E74656E747307436F726E6572730B07546F + 704C6566740A426F74746F6D4C656674000A46696C6C2E436F6C6F7207097846 + 46323032303230064C6F636B6564090748697454657374080A53697A652E5769 + 6474680500000000005655FB05400B53697A652E486569676874050000000000 + 0000C001401453697A652E506C6174666F726D44656661756C74080C5374726F + 6B652E436F6C6F720709784646313531353135000F54436F6C6F72416E696D61 + 74696F6E00095374796C654E616D6506216261636B67726F756E64556C427574 + 746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E0500000000 + 00CDCCCCFB3F07496E7665727365090C50726F70657274794E616D65060A4669 + 6C6C2E436F6C6F720A537461727456616C756507097846463230323032300953 + 746F7056616C756507097846463430343034300754726967676572061049734D + 6F7573654F7665723D747275650E54726967676572496E766572736506114973 + 4D6F7573654F7665723D66616C736500000A5452656374616E676C6500095374 + 796C654E616D650609636865636B6D61726B05416C69676E0708436F6E74656E + 747307436F726E6572730B07546F704C6566740A426F74746F6D4C656674000A + 46696C6C2E436F6C6F720709784646324138324532064C6F636B656409074869 + 745465737408074F70616369747905000000000000000000000C4D617267696E + 732E4C656674050000000000000080FF3F0B4D617267696E732E546F70050000 + 000000000080FF3F0D4D617267696E732E5269676874050000000000000080FF + 3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A65 + 2E57696474680500000000005655F705400B53697A652E486569676874050000 + 00000000008001401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F + 6E00095374796C654E616D65061A636865636B6D61726B4F706163697479416E + 696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F0C50726F + 70657274794E616D6506074F7061636974790A537461727456616C7565050000 + 00000000000000000953746F7056616C7565050000000000000080FF3F075472 + 6967676572060E4973436865636B65643D747275650E54726967676572496E76 + 65727365060F4973436865636B65643D66616C73650000000000055454657874 + 00095374796C654E616D6506047465787405416C69676E0706436C69656E7406 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 005655FB05400B53697A652E4865696768740500000000000000880440145369 + 7A652E506C6174666F726D44656661756C7408165465787453657474696E6773 + 2E466F6E74436F6C6F720708636C6157686974650000005450463007544C6179 + 6F757400095374796C654E616D650617756C7269676874726164696F62757474 + 6F6E7374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 0500000000005655FB05400B53697A652E4865696768740500000000000000A0 + 04401453697A652E506C6174666F726D44656661756C74080756697369626C65 + 08085461624F72646572024B0007544C61796F75740005416C69676E0706426F + 74746F6D0A506F736974696F6E2E5905000000000000008804400A53697A652E + 57696474680500000000005655FB05400B53697A652E48656967687405000000 + 00000000C001401453697A652E506C6174666F726D44656661756C7408000A54 + 52656374616E676C6500095374796C654E616D65060A6261636B67726F756E64 + 05416C69676E0708436F6E74656E747307436F726E6572730B08546F70526967 + 68740B426F74746F6D5269676874000A46696C6C2E436F6C6F72070978464632 + 3032303230064C6F636B6564090748697454657374080A53697A652E57696474 + 680500000000005655FB05400B53697A652E4865696768740500000000000000 + C001401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 + 2E436F6C6F720709784646313531353135000F54436F6C6F72416E696D617469 + 6F6E00095374796C654E616D6506216261636B67726F756E64556C427574746F + 6E436F6C6F72416E696D6174696F6E31084475726174696F6E050000000000CD + CCCCFB3F07496E7665727365090C50726F70657274794E616D65060A46696C6C + 2E436F6C6F720A537461727456616C756507097846463230323032300953746F + 7056616C756507097846463430343034300754726967676572061049734D6F75 + 73654F7665723D747275650E54726967676572496E7665727365061149734D6F + 7573654F7665723D66616C736500000A5452656374616E676C6500095374796C + 654E616D650609636865636B6D61726B05416C69676E0708436F6E74656E7473 + 07436F726E6572730B08546F7052696768740B426F74746F6D5269676874000A + 46696C6C2E436F6C6F720709784646324138324532064C6F636B656409074869 + 745465737408074F70616369747905000000000000000000000C4D617267696E + 732E4C656674050000000000000080FF3F0B4D617267696E732E546F70050000 + 000000000080FF3F0D4D617267696E732E5269676874050000000000000080FF + 3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A65 + 2E57696474680500000000005655F705400B53697A652E486569676874050000 + 00000000008001401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F + 6E00095374796C654E616D65061A636865636B6D61726B4F706163697479416E + 696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F0C50726F + 70657274794E616D6506074F7061636974790A537461727456616C7565050000 + 00000000000000000953746F7056616C7565050000000000000080FF3F075472 + 6967676572060E4973436865636B65643D747275650E54726967676572496E76 + 65727365060F4973436865636B65643D66616C73650000000000055454657874 + 00095374796C654E616D6506047465787405416C69676E0706436C69656E7406 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 005655FB05400B53697A652E4865696768740500000000000000880440145369 + 7A652E506C6174666F726D44656661756C7408165465787453657474696E6773 + 2E466F6E74436F6C6F720708636C6157686974650000005450463007544C6179 + 6F757400095374796C654E616D65060E636F6D626F656469747374796C650541 + 6C69676E070643656E7465720A53697A652E57696474680500000000000000C8 + 05400B53697A652E4865696768740500000000000000C803401453697A652E50 6C6174666F726D44656661756C74080756697369626C6508085461624F726465 - 7202320007544C61796F75740005416C69676E0706426F74746F6D0A506F7369 - 74696F6E2E5905000000000000008804400A53697A652E576964746805000000 - 00005655FB05400B53697A652E4865696768740500000000000000C001401453 - 697A652E506C6174666F726D44656661756C7408000A5452656374616E676C65 - 00095374796C654E616D65060A6261636B67726F756E6405416C69676E070843 - 6F6E74656E747307436F726E6572730B07546F704C6566740A426F74746F6D4C - 656674000A46696C6C2E436F6C6F720709784646323032303230064C6F636B65 - 64090748697454657374080A53697A652E57696474680500000000005655FB05 - 400B53697A652E4865696768740500000000000000C001401453697A652E506C - 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 - 313531353135000F54436F6C6F72416E696D6174696F6E00095374796C654E61 - 6D6506216261636B67726F756E64556C427574746F6E436F6C6F72416E696D61 - 74696F6E31084475726174696F6E050000000000CDCCCCFB3F07496E76657273 - 65090C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 - 7456616C756507097846463230323032300953746F7056616C75650709784646 - 3430343034300754726967676572061049734D6F7573654F7665723D74727565 - 0E54726967676572496E7665727365061149734D6F7573654F7665723D66616C - 736500000A5452656374616E676C6500095374796C654E616D65060963686563 - 6B6D61726B05416C69676E0708436F6E74656E747307436F726E6572730B0754 - 6F704C6566740A426F74746F6D4C656674000A46696C6C2E436F6C6F72070978 - 4646324138324532064C6F636B656409074869745465737408074F7061636974 - 7905000000000000000000000C4D617267696E732E4C65667405000000000000 - 0080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267 - 696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F74 - 746F6D050000000000000080FF3F0A53697A652E576964746805000000000056 - 55F705400B53697A652E48656967687405000000000000008001401453697A65 - 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E - 6F6E65000F54466C6F6174416E696D6174696F6E00095374796C654E616D6506 - 1A636865636B6D61726B4F706163697479416E696D6174696F6E310844757261 - 74696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D6506074F70 - 61636974790A537461727456616C756505000000000000000000000953746F70 - 56616C7565050000000000000080FF3F0754726967676572060E497343686563 - 6B65643D747275650E54726967676572496E7665727365060F4973436865636B - 65643D66616C7365000000000005545465787400095374796C654E616D650604 - 7465787405416C69676E0706436C69656E74064C6F636B656409074869745465 - 7374080A53697A652E57696474680500000000005655FB05400B53697A652E48 - 656967687405000000000000008804401453697A652E506C6174666F726D4465 - 6661756C7408165465787453657474696E67732E466F6E74436F6C6F72070863 - 6C6157686974650000005450463007544C61796F757400095374796C654E616D - 650617756C7269676874726164696F627574746F6E7374796C6505416C69676E - 070643656E7465720A53697A652E57696474680500000000005655FB05400B53 - 697A652E4865696768740500000000000000A004401453697A652E506C617466 - 6F726D44656661756C74080756697369626C6508085461624F72646572023400 - 07544C61796F75740005416C69676E0706426F74746F6D0A506F736974696F6E - 2E5905000000000000008804400A53697A652E57696474680500000000005655 - FB05400B53697A652E4865696768740500000000000000C001401453697A652E + 72024E000C5442727573684F626A65637400095374796C654E616D65060A666F + 726567726F756E6400000B54466F6E744F626A65637400095374796C654E616D + 650604666F6E7409466F6E742E53697A650500000000000000D0024000000754 + 4C61796F757400095374796C654E616D65060A6261636B67726F756E6405416C + 69676E0708436F6E74656E74730A53697A652E57696474680500000000000000 + C805400B53697A652E4865696768740500000000000000C803401453697A652E 506C6174666F726D44656661756C7408000A5452656374616E676C6500095374 - 796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E7465 - 6E747307436F726E6572730B08546F7052696768740B426F74746F6D52696768 - 74000A46696C6C2E436F6C6F720709784646323032303230064C6F636B656409 - 0748697454657374080A53697A652E57696474680500000000005655FB05400B - 53697A652E4865696768740500000000000000C001401453697A652E506C6174 - 666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846463135 - 31353135000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 - 06216261636B67726F756E64556C427574746F6E436F6C6F72416E696D617469 - 6F6E31084475726174696F6E050000000000CDCCCCFB3F07496E766572736509 - 0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456 - 616C756507097846463230323032300953746F7056616C756507097846463430 - 343034300754726967676572061049734D6F7573654F7665723D747275650E54 - 726967676572496E7665727365061149734D6F7573654F7665723D66616C7365 - 00000A5452656374616E676C6500095374796C654E616D650609636865636B6D - 61726B05416C69676E0708436F6E74656E747307436F726E6572730B08546F70 - 52696768740B426F74746F6D5269676874000A46696C6C2E436F6C6F72070978 - 4646324138324532064C6F636B656409074869745465737408074F7061636974 - 7905000000000000000000000C4D617267696E732E4C65667405000000000000 - 0080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267 - 696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F74 - 746F6D050000000000000080FF3F0A53697A652E576964746805000000000056 - 55F705400B53697A652E48656967687405000000000000008001401453697A65 - 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E - 6F6E65000F54466C6F6174416E696D6174696F6E00095374796C654E616D6506 - 1A636865636B6D61726B4F706163697479416E696D6174696F6E310844757261 - 74696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D6506074F70 - 61636974790A537461727456616C756505000000000000000000000953746F70 - 56616C7565050000000000000080FF3F0754726967676572060E497343686563 - 6B65643D747275650E54726967676572496E7665727365060F4973436865636B - 65643D66616C7365000000000005545465787400095374796C654E616D650604 - 7465787405416C69676E0706436C69656E74064C6F636B656409074869745465 - 7374080A53697A652E57696474680500000000005655FB05400B53697A652E48 - 656967687405000000000000008804401453697A652E506C6174666F726D4465 - 6661756C7408165465787453657474696E67732E466F6E74436F6C6F72070863 - 6C6157686974650000005450463007544C61796F757400095374796C654E616D - 65060E636F6D626F656469747374796C6505416C69676E070643656E7465720A - 53697A652E57696474680500000000000000C805400B53697A652E4865696768 - 740500000000000000C803401453697A652E506C6174666F726D44656661756C - 74080756697369626C6508085461624F726465720239000C5442727573684F62 - 6A65637400095374796C654E616D65060A666F726567726F756E6400000B5446 - 6F6E744F626A65637400095374796C654E616D650604666F6E7409466F6E742E - 53697A650500000000000000D00240000007544C61796F757400095374796C65 - 4E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E7473 + 796C654E616D65060A52656374616E676C653105416C69676E0706436C69656E + 740A46696C6C2E436F6C6F720709784646323032303230074869745465737408 0A53697A652E57696474680500000000000000C805400B53697A652E48656967 68740500000000000000C803401453697A652E506C6174666F726D4465666175 - 6C7408000A5452656374616E676C6500095374796C654E616D65060A52656374 - 616E676C653105416C69676E0706436C69656E740A46696C6C2E436F6C6F7207 - 097846463230323032300748697454657374080A53697A652E57696474680500 - 000000000000C805400B53697A652E4865696768740500000000000000C80340 - 1453697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F - 6C6F720709784646323032303230000F54436F6C6F72416E696D6174696F6E00 - 095374796C654E616D650614436F6C6F72416E696D6174696F6E315374796C65 - 084475726174696F6E050000000000CDCCCCFB3F07496E7665727365090C5072 - 6F70657274794E616D65060C5374726F6B652E436F6C6F720A53746172745661 - 6C756507097846463230323032300953746F7056616C75650709784646343034 - 3034300754726967676572062049734D6F7573654F7665723D747275653B4973 - 466F63757365643D66616C73650E54726967676572496E766572736506214973 - 4D6F7573654F7665723D66616C73653B4973466F63757365643D66616C736500 - 000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F - 6C6F72416E696D6174696F6E325374796C65084475726174696F6E0500000000 - 00CDCCCCFB3F07496E7665727365090C50726F70657274794E616D65060C5374 - 726F6B652E436F6C6F720A537461727456616C75650709784646343034303430 - 0953746F7056616C756507097846463241383245320754726967676572061F49 - 734D6F7573654F7665723D747275653B4973466F63757365643D747275650E54 - 726967676572496E7665727365062049734D6F7573654F7665723D747275653B - 4973466F63757365643D66616C7365000007544C61796F757400095374796C65 - 4E616D6506056172726F7705416C69676E070846697452696768740B4D617267 - 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 - 050000000000000080FF3F0E4D617267696E732E426F74746F6D050000000000 - 000080FF3F0A506F736974696F6E2E580500000000005ED99705400A506F7369 - 74696F6E2E59050000000000000080FF3F0A53697A652E576964746805000000 - 0000889AB803400B53697A652E4865696768740500000000000000B803401453 - 697A652E506C6174666F726D44656661756C7408000A5452656374616E676C65 - 00095374796C654E616D65060A52656374616E676C653105416C69676E070843 - 6F6E74656E74730A46696C6C2E436F6C6F720709784646333033303330074869 - 7454657374080A53697A652E5769647468050000000000889AB803400B53697A - 652E4865696768740500000000000000B803401453697A652E506C6174666F72 - 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F + 6C74080C5374726F6B652E436F6C6F720709784646323032303230000F54436F 6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E 696D6174696F6E315374796C65084475726174696F6E050000000000CDCCCCFB - 3F07496E7665727365090C50726F70657274794E616D65060A46696C6C2E436F - 6C6F720A537461727456616C756507097846463330333033300953746F705661 - 6C756507097846463430343034300754726967676572062049734D6F7573654F - 7665723D747275653B4973466F63757365643D66616C73650E54726967676572 - 496E7665727365062149734D6F7573654F7665723D66616C73653B4973466F63 - 757365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 - 796C654E616D650614436F6C6F72416E696D6174696F6E325374796C65084475 - 726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A - 46696C6C2E436F6C6F720A537461727456616C75650709784646343034303430 - 0953746F7056616C756507097846463137353739430754726967676572061F49 - 73466F63757365643D747275653B49734D6F7573654F7665723D747275650000 - 0007544C61796F757400095374796C654E616D6506074C61796F75743105416C - 69676E070643656E7465720C4D617267696E732E4C6566740500000000000000 - 80FF3F0A53697A652E57696474680500000000000000A002400B53697A652E48 - 65696768740500000000000000C001401453697A652E506C6174666F726D4465 - 6661756C74080005545061746800095374796C654E616D650605506174683105 - 416C69676E0706436C69656E7409446174612E506174680A3400000004000000 - 000000000000C8420000C84201000000000096430000C8420100000000004843 - 00009643030000000000C8420000C8420A46696C6C2E436F6C6F720708636C61 - 57686974650748697454657374080A53697A652E576964746805000000000000 - 00A002400B53697A652E4865696768740500000000000000C001401453697A65 - 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E - 6F6E650000000000000C5442727573684F626A65637400095374796C654E616D - 65060973656C656374696F6E0B42727573682E436F6C6F720709783936324138 - 324532000007544C61796F757400095374796C654E616D650607636F6E74656E - 7405416C69676E0706436C69656E740C4D617267696E732E4C65667405000000 - 000000008000400B4D617267696E732E546F7005000000000000008000400D4D - 617267696E732E52696768740500000000000000F003400E4D617267696E732E - 426F74746F6D05000000000000008000400A53697A652E576964746805000000 - 000000008805400B53697A652E4865696768740500000000000000A803401453 - 697A652E506C6174666F726D44656661756C74080000005450463007544C6179 - 6F757400095374796C654E616D650611616E69696E64696361746F727374796C - 6505416C69676E070643656E7465720756697369626C65080004544172630009 - 5374796C654E616D65060341726305416C69676E0708436F6E74656E74730748 - 697454657374080D526F746174696F6E416E676C650500000000000000B40740 - 0A53697A652E57696474680500000000000000C804400B53697A652E48656967 - 68740500000000000000C804401453697A652E506C6174666F726D4465666175 - 6C74080C5374726F6B652E436F6C6F720708636C615768697465105374726F6B - 652E546869636B6E657373050000000000000080004008456E64416E676C6505 - 00000000000000B405C0000F54466C6F6174416E696D6174696F6E0009537479 - 6C654E616D650603616E6907456E61626C656409084475726174696F6E050000 - 000000000080FF3F044C6F6F70090C50726F70657274794E616D65060D526F74 - 6174696F6E416E676C650A537461727456616C75650500000000000000000000 - 0953746F7056616C75650500000000000000B407400754726967676572060E49 - 7356697369626C653D74727565000000005450463007544C61796F7574000953 - 74796C654E616D650613657870616E646572627574746F6E7374796C6505416C - 69676E070643656E7465720B4D617267696E732E546F70050000000000000080 - FF3F0A53697A652E57696474680500000000000000B003400B53697A652E4865 - 696768740500000000000000B003401453697A652E506C6174666F726D446566 - 61756C74080756697369626C6508085461624F72646572023E00055450617468 - 00095374796C654E616D650605506174683105416C69676E070643656E746572 - 09446174612E506174680A3400000004000000000000000000C8420000C84201 - 000000000096430000C842010000000000484300009643030000000000C84200 - 00C8420A46696C6C2E436F6C6F720708636C6157686974650748697454657374 - 080D526F746174696F6E416E676C650500000000000000B405400A53697A652E - 57696474680500000000000000A002400B53697A652E48656967687405000000 - 00000000C001401453697A652E506C6174666F726D44656661756C74080B5374 - 726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E - 00095374796C654E616D650614466C6F6174416E696D6174696F6E315374796C - 65084475726174696F6E050000000000CDCCCCFB3F0D496E746572706F6C6174 - 696F6E070843697263756C61720C50726F70657274794E616D65060D526F7461 - 74696F6E416E676C650A537461727456616C75650500000000000000B4054009 - 53746F7056616C756505000000000000000000000754726967676572060F4973 - 457870616E6465643D747275650E54726967676572496E766572736506104973 - 457870616E6465643D66616C7365000000005450463007544C61796F75740009 - 5374796C654E616D650615657870616E646572636865636B626F787374796C65 - 05416C69676E070643656E7465720A53697A652E576964746805000000000000 - 008406400B53697A652E48656967687405000000000000008404401453697A65 - 2E506C6174666F726D44656661756C74080756697369626C6508085461624F72 - 64657202420007544C61796F75740005416C69676E07044C6566740A53697A65 - 2E57696474680500000000000000C003400B53697A652E486569676874050000 - 00000000008404401453697A652E506C6174666F726D44656661756C74080005 - 54506174680005416C69676E0706436C69656E7409446174612E506174680AD8 - 0100002700000000000000FEC8BA4402E79244020000002592AD4402E7924402 - 0000006D5BA544FEB09E44020000006D5BA544FEB09E440200000093A4A4446A - 0C9F44020000004A80AC44FC79AA4402000000046EBA44FC79AA44020000004A - 00C844FC79AA44020000000080CF44FEB09E44020000000080CF44FEB09E4402 - 0000000080CF44FEB09E44020000004C5BC84402E7924402000000FEC8BA4402 - E7924400000000FE88BA44FE30974402000000B876BF44FE3097440200000002 - 77C344EEA09A44020000000277C34404DE9E44020000000277C344121BA34402 - 000000B876BF44008CA64402000000FE88BA44008CA644020000004C9BB54400 - 8CA64402000000009CB144121BA34402000000009CB14404DE9E440200000000 - 9CB144EEA09A44020000004C9BB544FE30974402000000FE88BA44FE30974400 - 0000000080BA44045E9B4402000000146EB844045E9B440200000000C0B64454 - F79C440200000000C0B64400F09E440200000000C0B644ACE8A0440200000014 - 6EB844FC81A244020000000080BA44FC81A24402000000EC91BC44FC81A24402 - 0000000040BE44ACE8A044020000000040BE4400F09E44020000000040BE4454 - F79C4402000000EC91BC44045E9B44020000000080BA44045E9B440A46696C6C - 2E436F6C6F7207097836303030303030300748697454657374080C4D61726769 - 6E732E4C65667405000000000000008000400B4D617267696E732E546F700500 - 0000000000008000400D4D617267696E732E5269676874050000000000000080 - 00400E4D617267696E732E426F74746F6D05000000000000008000400A53697A - 652E57696474680500000000000000A003400B53697A652E4865696768740500 - 000000000000E803401453697A652E506C6174666F726D44656661756C74080B - 5374726F6B652E4B696E6407044E6F6E6508577261704D6F6465070346697400 - 0F54436F6C6F72416E696D6174696F6E00084475726174696F6E050000000000 - CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53 - 7461727456616C756507097836303030303030300953746F7056616C75650708 - 636C61426C61636B0754726967676572060E4973436865636B65643D74727565 - 00000F54436F6C6F72416E696D6174696F6E00084475726174696F6E05000000 - 0000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F72 - 0A537461727456616C75650708636C61426C61636B0953746F7056616C756507 - 097836303030303030300754726967676572060F4973436865636B65643D6661 - 6C73650000000005545465787400095374796C654E616D650604746578740541 - 6C69676E0706436C69656E74064C6F636B6564090748697454657374080C4D61 - 7267696E732E4C65667405000000000000008002400B4D617267696E732E546F - 7005000000000000008000400D4D617267696E732E5269676874050000000000 - 000080FF3F0A53697A652E57696474680500000000000000C605400B53697A65 - 2E4865696768740500000000000000F803401453697A652E506C6174666F726D - 44656661756C7408165465787453657474696E67732E466F6E74436F6C6F7207 - 09784646454545454545165465787453657474696E67732E486F727A416C6967 - 6E07074C656164696E670000005450463007544C61796F757400095374796C65 - 4E616D65060A70616E656C7374796C6505416C69676E070643656E7465720A53 - 697A652E57696474680500000000000000C006400B53697A652E486569676874 - 0500000000000000A406401453697A652E506C6174666F726D44656661756C74 - 080756697369626C6508000A5452656374616E676C6500095374796C654E616D - 65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A4669 - 6C6C2E436F6C6F7207097846463230323032300A53697A652E57696474680500 - 000000000000C006400B53697A652E4865696768740500000000000000A40640 + 3F07496E7665727365090C50726F70657274794E616D65060C5374726F6B652E + 436F6C6F720A537461727456616C756507097846463230323032300953746F70 + 56616C756507097846463430343034300754726967676572062049734D6F7573 + 654F7665723D747275653B4973466F63757365643D66616C73650E5472696767 + 6572496E7665727365062149734D6F7573654F7665723D66616C73653B497346 + 6F63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009 + 5374796C654E616D650614436F6C6F72416E696D6174696F6E325374796C6508 + 4475726174696F6E050000000000CDCCCCFB3F07496E7665727365090C50726F + 70657274794E616D65060C5374726F6B652E436F6C6F720A537461727456616C + 756507097846463430343034300953746F7056616C7565070978464632413832 + 45320754726967676572061F49734D6F7573654F7665723D747275653B497346 + 6F63757365643D747275650E54726967676572496E7665727365062049734D6F + 7573654F7665723D747275653B4973466F63757365643D66616C736500000754 + 4C61796F757400095374796C654E616D6506056172726F7705416C69676E0708 + 46697452696768740B4D617267696E732E546F70050000000000000080FF3F0D + 4D617267696E732E5269676874050000000000000080FF3F0E4D617267696E73 + 2E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E58050000 + 0000005ED99705400A506F736974696F6E2E59050000000000000080FF3F0A53 + 697A652E5769647468050000000000889AB803400B53697A652E486569676874 + 0500000000000000B803401453697A652E506C6174666F726D44656661756C74 + 08000A5452656374616E676C6500095374796C654E616D65060A52656374616E + 676C653105416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207 + 097846463330333033300748697454657374080A53697A652E57696474680500 + 00000000889AB803400B53697A652E4865696768740500000000000000B80340 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 - 6E6407044E6F6E650000005450463007544C61796F757400095374796C654E61 - 6D65061970726F67726573736261726D696E696572726F727374796C6505416C - 69676E070643656E7465720A53697A652E576964746805000000000033338505 - 400B53697A652E4865696768740500000000009999E104401453697A652E506C - 6174666F726D44656661756C74080756697369626C6508085461624F72646572 - 021B000A5452656374616E676C6500095374796C654E616D6506066874726163 - 6B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846 - 46343034303430064C6F636B6564090748697454657374080A53697A652E5769 - 64746805000000000033338505400B53697A652E486569676874050000000000 + 6E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C65 + 4E616D650614436F6C6F72416E696D6174696F6E315374796C65084475726174 + 696F6E050000000000CDCCCCFB3F07496E7665727365090C50726F7065727479 + 4E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709784646 + 3330333033300953746F7056616C756507097846463430343034300754726967 + 676572062049734D6F7573654F7665723D747275653B4973466F63757365643D + 66616C73650E54726967676572496E7665727365062149734D6F7573654F7665 + 723D66616C73653B4973466F63757365643D66616C736500000F54436F6C6F72 + 416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D61 + 74696F6E325374796C65084475726174696F6E050000000000CDCCCCFB3F0C50 + 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C + 756507097846463430343034300953746F7056616C7565070978464631373537 + 39430754726967676572061F4973466F63757365643D747275653B49734D6F75 + 73654F7665723D7472756500000007544C61796F757400095374796C654E616D + 6506074C61796F75743105416C69676E070643656E7465720C4D617267696E73 + 2E4C656674050000000000000080FF3F0A53697A652E57696474680500000000 + 000000A002400B53697A652E4865696768740500000000000000C00140145369 + 7A652E506C6174666F726D44656661756C74080005545061746800095374796C + 654E616D650605506174683105416C69676E0706436C69656E7409446174612E + 506174680A3400000004000000000000000000C8420000C84201000000000096 + 430000C842010000000000484300009643030000000000C8420000C8420A4669 + 6C6C2E436F6C6F720708636C6157686974650748697454657374080A53697A65 + 2E57696474680500000000000000A002400B53697A652E486569676874050000 + 0000000000C001401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E650000000000000C5442727573684F626A + 65637400095374796C654E616D65060973656C656374696F6E0B42727573682E + 436F6C6F720709783936324138324532000007544C61796F757400095374796C + 654E616D650607636F6E74656E7405416C69676E0706436C69656E740C4D6172 + 67696E732E4C65667405000000000000008000400B4D617267696E732E546F70 + 05000000000000008000400D4D617267696E732E526967687405000000000000 + 00F003400E4D617267696E732E426F74746F6D05000000000000008000400A53 + 697A652E576964746805000000000000008805400B53697A652E486569676874 + 0500000000000000A803401453697A652E506C6174666F726D44656661756C74 + 080000005450463007544C61796F757400095374796C654E616D650611616E69 + 696E64696361746F727374796C6505416C69676E070643656E74657207566973 + 69626C6508085461624F72646572025000045441726300095374796C654E616D + 65060341726305416C69676E0708436F6E74656E74730748697454657374080D + 526F746174696F6E416E676C650500000000000000B407400A53697A652E5769 + 6474680500000000000000C804400B53697A652E486569676874050000000000 + 0000C804401453697A652E506C6174666F726D44656661756C74080C5374726F + 6B652E436F6C6F720708636C615768697465105374726F6B652E546869636B6E + 65737305000000000000008001400A5374726F6B652E4361700705526F756E64 + 08456E64416E676C650500000000000000B405C0000F54466C6F6174416E696D + 6174696F6E00095374796C654E616D650603616E6907456E61626C6564090844 + 75726174696F6E050000000000000080FF3F044C6F6F70090C50726F70657274 + 794E616D65060D526F746174696F6E416E676C650A537461727456616C756505 + 000000000000000000000953746F7056616C75650500000000000000B4074007 + 54726967676572060E497356697369626C653D74727565000000005450463007 + 544C61796F757400095374796C654E616D650613657870616E64657262757474 + 6F6E7374796C6505416C69676E070643656E7465720B4D617267696E732E546F + 70050000000000000080FF3F0A53697A652E57696474680500000000000000B0 + 03400B53697A652E4865696768740500000000000000B003401453697A652E50 + 6C6174666F726D44656661756C74080756697369626C6508085461624F726465 + 7202550005545061746800095374796C654E616D650605506174683105416C69 + 676E070643656E74657209446174612E506174680A3400000004000000000000 + 000000C8420000C84201000000000096430000C8420100000000004843000096 + 43030000000000C8420000C8420A46696C6C2E436F6C6F720708636C61576869 + 74650748697454657374080D526F746174696F6E416E676C6505000000000000 + 00B405400A53697A652E57696474680500000000000000A002400B53697A652E + 4865696768740500000000000000C001401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F61 + 74416E696D6174696F6E00095374796C654E616D650614466C6F6174416E696D + 6174696F6E315374796C65084475726174696F6E050000000000CDCCCCFB3F0D + 496E746572706F6C6174696F6E070843697263756C61720C50726F7065727479 + 4E616D65060D526F746174696F6E416E676C650A537461727456616C75650500 + 000000000000B405400953746F7056616C756505000000000000000000000754 + 726967676572060F4973457870616E6465643D747275650E5472696767657249 + 6E766572736506104973457870616E6465643D66616C73650000000054504630 + 07544C61796F757400095374796C654E616D650615657870616E646572636865 + 636B626F787374796C6505416C69676E070643656E7465720A53697A652E5769 + 64746805000000000000008406400B53697A652E486569676874050000000000 + 00008404401453697A652E506C6174666F726D44656661756C74080756697369 + 626C6508085461624F72646572025B0007544C61796F75740005416C69676E07 + 044C6566740A53697A652E57696474680500000000000000C003400B53697A65 + 2E48656967687405000000000000008404401453697A652E506C6174666F726D + 44656661756C7408000554506174680005416C69676E0706436C69656E740944 + 6174612E506174680AD80100002700000000000000FEC8BA4402E79244020000 + 002592AD4402E79244020000006D5BA544FEB09E44020000006D5BA544FEB09E + 440200000093A4A4446A0C9F44020000004A80AC44FC79AA4402000000046EBA + 44FC79AA44020000004A00C844FC79AA44020000000080CF44FEB09E44020000 + 000080CF44FEB09E44020000000080CF44FEB09E44020000004C5BC84402E792 + 4402000000FEC8BA4402E7924400000000FE88BA44FE30974402000000B876BF + 44FE309744020000000277C344EEA09A44020000000277C34404DE9E44020000 + 000277C344121BA34402000000B876BF44008CA64402000000FE88BA44008CA6 + 44020000004C9BB544008CA64402000000009CB144121BA34402000000009CB1 + 4404DE9E4402000000009CB144EEA09A44020000004C9BB544FE309744020000 + 00FE88BA44FE309744000000000080BA44045E9B4402000000146EB844045E9B + 440200000000C0B64454F79C440200000000C0B64400F09E440200000000C0B6 + 44ACE8A04402000000146EB844FC81A244020000000080BA44FC81A244020000 + 00EC91BC44FC81A244020000000040BE44ACE8A044020000000040BE4400F09E + 44020000000040BE4454F79C4402000000EC91BC44045E9B44020000000080BA + 44045E9B440A46696C6C2E436F6C6F7207097836303030303030300748697454 + 657374080C4D617267696E732E4C65667405000000000000008000400B4D6172 + 67696E732E546F7005000000000000008000400D4D617267696E732E52696768 + 7405000000000000008000400E4D617267696E732E426F74746F6D0500000000 + 0000008000400A53697A652E57696474680500000000000000A003400B53697A + 652E4865696768740500000000000000E803401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650857726170 + 4D6F64650703466974000F54436F6C6F72416E696D6174696F6E000844757261 + 74696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A4669 + 6C6C2E436F6C6F720A537461727456616C756507097836303030303030300953 + 746F7056616C75650708636C61426C61636B0754726967676572060E49734368 + 65636B65643D7472756500000F54436F6C6F72416E696D6174696F6E00084475 + 726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A + 46696C6C2E436F6C6F720A537461727456616C75650708636C61426C61636B09 + 53746F7056616C756507097836303030303030300754726967676572060F4973 + 436865636B65643D66616C73650000000005545465787400095374796C654E61 + 6D6506047465787405416C69676E0706436C69656E74064C6F636B6564090748 + 697454657374080C4D617267696E732E4C65667405000000000000008002400B + 4D617267696E732E546F7005000000000000008000400D4D617267696E732E52 + 69676874050000000000000080FF3F0A53697A652E5769647468050000000000 + 0000C605400B53697A652E4865696768740500000000000000F803401453697A + 652E506C6174666F726D44656661756C7408165465787453657474696E67732E + 466F6E74436F6C6F720709784646454545454545165465787453657474696E67 + 732E486F727A416C69676E07074C656164696E670000005450463007544C6179 + 6F757400095374796C654E616D65060A70616E656C7374796C6505416C69676E + 070643656E7465720A53697A652E57696474680500000000000000C006400B53 + 697A652E4865696768740500000000000000A406401453697A652E506C617466 + 6F726D44656661756C74080756697369626C6508085461624F72646572026100 + 0A5452656374616E676C6500095374796C654E616D65060A6261636B67726F75 + 6E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978 + 46463230323032300A53697A652E57696474680500000000000000C006400B53 + 697A652E4865696768740500000000000000A406401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000 + 5450463007544C61796F757400095374796C654E616D65061970726F67726573 + 736261726D696E696572726F727374796C6505416C69676E070643656E746572 + 0A53697A652E576964746805000000000033338505400B53697A652E48656967 + 68740500000000009999E104401453697A652E506C6174666F726D4465666175 + 6C74080756697369626C6508085461624F726465720229000A5452656374616E + 676C6500095374796C654E616D65060668747261636B05416C69676E0708436F + 6E74656E74730A46696C6C2E436F6C6F720709784646343034303430064C6F63 + 6B6564090748697454657374080A53697A652E57696474680500000000003333 + 8505400B53697A652E4865696768740500000000009999E104401453697A652E + 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F + 6E65000A5452656374616E676C6500095374796C654E616D65060A68696E6469 + 6361746F7205416C69676E07044C6566740A46696C6C2E436F6C6F7207097846 + 46453232413241064C6F636B6564090748697454657374080A53697A652E5769 + 6474680500000000000000C804400B53697A652E486569676874050000000000 9999E104401453697A652E506C6174666F726D44656661756C74080B5374726F - 6B652E4B696E6407044E6F6E65000A5452656374616E676C6500095374796C65 - 4E616D65060A68696E64696361746F7205416C69676E07044C6566740A46696C - 6C2E436F6C6F720709784646453232413241064C6F636B656409074869745465 - 7374080A53697A652E57696474680500000000000000C804400B53697A652E48 - 65696768740500000000009999E104401453697A652E506C6174666F726D4465 - 6661756C74080B5374726F6B652E4B696E6407044E6F6E650000000A54526563 - 74616E676C6500095374796C654E616D65060676747261636B05416C69676E07 - 08436F6E74656E74730A46696C6C2E436F6C6F72070978464634303430343006 - 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 - 0033338505400B53697A652E4865696768740500000000009999E10440145369 - 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 - 044E6F6E65000A5452656374616E676C6500095374796C654E616D65060A7669 - 6E64696361746F7205416C69676E0706426F74746F6D0A46696C6C2E436F6C6F - 720709784646453232413241064C6F636B6564090748697454657374080A506F - 736974696F6E2E5905000000000099998D04400A53697A652E57696474680500 - 0000000033338505400B53697A652E4865696768740500000000000000A80340 - 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 - 6E6407044E6F6E65000000005450463007544C61796F757400095374796C654E - 616D65061470726F67726573736261726D696E697374796C6505416C69676E07 - 0643656E7465720A53697A652E576964746805000000000033338505400B5369 - 7A652E4865696768740500000000009999E104401453697A652E506C6174666F - 726D44656661756C74080756697369626C6508085461624F726465720219000A - 5452656374616E676C6500095374796C654E616D65060668747261636B05416C - 69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646343034 - 303430064C6F636B6564090748697454657374080A53697A652E576964746805 - 000000000033338505400B53697A652E4865696768740500000000009999E104 + 6B652E4B696E6407044E6F6E650000000A5452656374616E676C650009537479 + 6C654E616D65060676747261636B05416C69676E0708436F6E74656E74730A46 + 696C6C2E436F6C6F720709784646343034303430064C6F636B65640907486974 + 54657374080A53697A652E576964746805000000000033338505400B53697A65 + 2E4865696768740500000000009999E104401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000A54526563 + 74616E676C6500095374796C654E616D65060A76696E64696361746F7205416C + 69676E0706426F74746F6D0A46696C6C2E436F6C6F7207097846464532324132 + 41064C6F636B6564090748697454657374080A506F736974696F6E2E59050000 + 00000099998D04400A53697A652E576964746805000000000033338505400B53 + 697A652E4865696768740500000000000000A803401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000 + 005450463007544C61796F757400095374796C654E616D65061470726F677265 + 73736261726D696E697374796C6505416C69676E070643656E7465720A53697A + 652E576964746805000000000033338505400B53697A652E4865696768740500 + 000000009999E104401453697A652E506C6174666F726D44656661756C740807 + 56697369626C6508085461624F72646572021A000A5452656374616E676C6500 + 095374796C654E616D65060668747261636B05416C69676E0708436F6E74656E + 74730A46696C6C2E436F6C6F720709784646343034303430064C6F636B656409 + 0748697454657374080A53697A652E576964746805000000000033338505400B + 53697A652E4865696768740500000000009999E104401453697A652E506C6174 + 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000A + 5452656374616E676C6500095374796C654E616D65060A68696E64696361746F + 7205416C69676E07044C6566740A46696C6C2E436F6C6F720709784646324138 + 324532064C6F636B6564090748697454657374080A53697A652E576964746805 + 00000000000000C804400B53697A652E4865696768740500000000009999E104 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B - 696E6407044E6F6E65000A5452656374616E676C6500095374796C654E616D65 - 060A68696E64696361746F7205416C69676E07044C6566740A46696C6C2E436F - 6C6F720709784646324138324532064C6F636B6564090748697454657374080A - 53697A652E57696474680500000000000000C804400B53697A652E4865696768 - 740500000000009999E104401453697A652E506C6174666F726D44656661756C - 74080B5374726F6B652E4B696E6407044E6F6E650000000A5452656374616E67 - 6C6500095374796C654E616D65060676747261636B05416C69676E0708436F6E - 74656E74730A46696C6C2E436F6C6F720709784646343034303430064C6F636B - 6564090748697454657374080A53697A652E5769647468050000000000333385 - 05400B53697A652E4865696768740500000000009999E104401453697A652E50 - 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E - 65000A5452656374616E676C6500095374796C654E616D65060A76696E646963 - 61746F7205416C69676E0706426F74746F6D0A46696C6C2E436F6C6F72070978 - 4646324138324532064C6F636B6564090748697454657374080A506F73697469 - 6F6E2E5905000000000099998D04400A53697A652E5769647468050000000000 - 33338505400B53697A652E4865696768740500000000000000A803401453697A - 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 - 4E6F6E65000000005450463007544C61796F757400095374796C654E616D6506 - 0D657870616E6465727374796C6505416C69676E070643656E7465720A53697A - 652E576964746805000000000000C08407400B53697A652E4865696768740500 - 000000000000C803401453697A652E506C6174666F726D44656661756C740807 - 56697369626C6508085461624F72646572023D000A5452656374616E676C6500 - 095374796C654E616D65060B626772656374616E676C6505416C69676E070843 - 6F6E74656E74730C436C69704368696C6472656E090A46696C6C2E436F6C6F72 - 0709784646324432443244064C6F636B6564090748697454657374080A53697A - 652E576964746805000000000000C08407400B53697A652E4865696768740500 - 000000000000C803401453697A652E506C6174666F726D44656661756C74080C - 5374726F6B652E436F6C6F7207097846463135313531350007544C61796F7574 - 00095374796C654E616D6506074C61796F75743305416C69676E0703546F700A - 53697A652E576964746805000000000000C08407400B53697A652E4865696768 - 740500000000000000C803401453697A652E506C6174666F726D44656661756C - 74080007544C61796F757400095374796C654E616D6506074C61796F75743405 - 416C69676E0708436F6E74656E74730A53697A652E5769647468050000000000 - 00C08407400B53697A652E4865696768740500000000000000C803401453697A - 652E506C6174666F726D44656661756C7408000A5452656374616E676C650009 - 5374796C654E616D65060A52656374616E676C653205416C69676E0708436F6E - 74656E74730A46696C6C2E436F6C6F720709784646323532353235064C6F636B - 6564090748697454657374080A53697A652E576964746805000000000000C084 - 07400B53697A652E4865696768740500000000000000C803401453697A652E50 - 6C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846 - 4631353135313500000A5452656374616E676C6500095374796C654E616D6506 - 0A52656374616E676C653105416C69676E0708436F6E74656E74730A46696C6C - 2E436F6C6F720709784646313531353135064C6F636B65640907486974546573 - 74080A53697A652E576964746805000000000000C08407400B53697A652E4865 - 696768740500000000000000C803401453697A652E506C6174666F726D446566 - 61756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F617441 - 6E696D6174696F6E00095374796C654E616D650614466C6F6174416E696D6174 - 696F6E315374796C65084475726174696F6E0500000000009A9999FD3F0D496E - 746572706F6C6174696F6E070843697263756C61720C50726F70657274794E61 - 6D6506075363616C652E580A537461727456616C7565050000000000000080FF - 3F0953746F7056616C756505000000000000000000000754726967676572060F - 4973457870616E6465643D747275650E54726967676572496E76657273650610 - 4973457870616E6465643D66616C73650000000007544C61796F757400095374 - 796C654E616D6506074C61796F75743305416C69676E0708436F6E74656E7473 - 0A53697A652E576964746805000000000000C08407400B53697A652E48656967 - 68740500000000000000C803401453697A652E506C6174666F726D4465666175 - 6C74080005545465787400095374796C654E616D6506047465787405416C6967 - 6E07044C656674084175746F53697A65090A436C6970506172656E7409064C6F - 636B6564090748697454657374080C4D617267696E732E4C6566740500000000 - 000000A002400A506F736974696F6E2E580500000000000000A002400A53697A - 652E57696474680500000000000018D103400B53697A652E4865696768740500 - 000000000060FF02401453697A652E506C6174666F726D44656661756C740804 - 54657874060454657874165465787453657474696E67732E466F6E74436F6C6F - 720708636C615768697465165465787453657474696E67732E486F727A416C69 - 676E07074C656164696E670000000F54457870616E646572427574746F6E0009 - 5374796C654E616D650606627574746F6E05416C69676E07055269676874064C - 6F636B6564090A506F736974696F6E2E580500000000000080F506400A53697A - 652E57696474680500000000000000A003400B53697A652E4865696768740500 - 000000000000C803401453697A652E506C6174666F726D44656661756C740800 - 000000005450463007544C61796F757400095374796C654E616D650615616E69 - 696E64696361746F72686F727A7374796C6505416C69676E070643656E746572 - 0A53697A652E57696474680500000000000040C006400B53697A652E48656967 - 687405000000000000008000401453697A652E506C6174666F726D4465666175 - 6C74080756697369626C6508000A5452656374616E676C6500095374796C654E + 696E6407044E6F6E650000000A5452656374616E676C6500095374796C654E61 + 6D65060676747261636B05416C69676E0708436F6E74656E74730A46696C6C2E + 436F6C6F720709784646343034303430064C6F636B6564090748697454657374 + 080A53697A652E576964746805000000000033338505400B53697A652E486569 + 6768740500000000009999E104401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E65000A5452656374616E67 + 6C6500095374796C654E616D65060A76696E64696361746F7205416C69676E07 + 06426F74746F6D0A46696C6C2E436F6C6F720709784646324138324532064C6F + 636B6564090748697454657374080A506F736974696F6E2E5905000000000099 + 998D04400A53697A652E576964746805000000000033338505400B53697A652E + 4865696768740500000000000000A803401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000000545046 + 3007544C61796F757400095374796C654E616D65060D657870616E6465727374 + 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 + 000000C08407400B53697A652E4865696768740500000000000000C803401453 + 697A652E506C6174666F726D44656661756C74080756697369626C6508085461 + 624F726465720240000A5452656374616E676C6500095374796C654E616D6506 + 0B626772656374616E676C6505416C69676E0708436F6E74656E74730C436C69 + 704368696C6472656E090A46696C6C2E436F6C6F720709784646324432443244 + 064C6F636B6564090748697454657374080A53697A652E576964746805000000 + 000000C08407400B53697A652E4865696768740500000000000000C803401453 + 697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F + 7207097846463135313531350007544C61796F757400095374796C654E616D65 + 06074C61796F75743305416C69676E0703546F700A53697A652E576964746805 + 000000000000C08407400B53697A652E4865696768740500000000000000C803 + 401453697A652E506C6174666F726D44656661756C74080007544C61796F7574 + 00095374796C654E616D6506074C61796F75743405416C69676E0708436F6E74 + 656E74730A53697A652E576964746805000000000000C08407400B53697A652E + 4865696768740500000000000000C803401453697A652E506C6174666F726D44 + 656661756C7408000A5452656374616E676C6500095374796C654E616D65060A + 52656374616E676C653205416C69676E0708436F6E74656E74730A46696C6C2E + 436F6C6F720709784646323532353235064C6F636B6564090748697454657374 + 080A53697A652E576964746805000000000000C08407400B53697A652E486569 + 6768740500000000000000C803401453697A652E506C6174666F726D44656661 + 756C74080C5374726F6B652E436F6C6F72070978464631353135313500000A54 + 52656374616E676C6500095374796C654E616D65060A52656374616E676C6531 + 05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646 + 313531353135064C6F636B6564090748697454657374080A53697A652E576964 + 746805000000000000C08407400B53697A652E48656967687405000000000000 + 00C803401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E000953 + 74796C654E616D650614466C6F6174416E696D6174696F6E315374796C650844 + 75726174696F6E0500000000009A9999FD3F0D496E746572706F6C6174696F6E + 070843697263756C61720C50726F70657274794E616D6506075363616C652E58 + 0A537461727456616C7565050000000000000080FF3F0953746F7056616C7565 + 05000000000000000000000754726967676572060F4973457870616E6465643D + 747275650E54726967676572496E766572736506104973457870616E6465643D + 66616C73650000000007544C61796F757400095374796C654E616D6506074C61 + 796F75743305416C69676E0708436F6E74656E74730A53697A652E5769647468 + 05000000000000C08407400B53697A652E4865696768740500000000000000C8 + 03401453697A652E506C6174666F726D44656661756C74080005545465787400 + 095374796C654E616D6506047465787405416C69676E07044C65667408417574 + 6F53697A65090A436C6970506172656E7409064C6F636B656409074869745465 + 7374080C4D617267696E732E4C6566740500000000000000A002400A506F7369 + 74696F6E2E580500000000000000A002400A53697A652E576964746805000000 + 000000B8C703400B53697A652E4865696768740500000000000060FF02401453 + 697A652E506C6174666F726D44656661756C7408045465787406045465787416 + 5465787453657474696E67732E466F6E74436F6C6F720708636C615768697465 + 165465787453657474696E67732E486F727A416C69676E07074C656164696E67 + 0000000F54457870616E646572427574746F6E00095374796C654E616D650606 + 627574746F6E05416C69676E07055269676874064C6F636B6564090A506F7369 + 74696F6E2E580500000000000080F506400A53697A652E576964746805000000 + 00000000A003400B53697A652E4865696768740500000000000000C803401453 + 697A652E506C6174666F726D44656661756C740800000000005450463007544C + 61796F757400095374796C654E616D650615616E69696E64696361746F72686F + 727A7374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 0500000000000040C006400B53697A652E486569676874050000000000000080 + 00401453697A652E506C6174666F726D44656661756C74080756697369626C65 + 08085461624F726465720242000A5452656374616E676C6500095374796C654E 616D65060A52656374616E676C653105416C69676E0706436C69656E740C436C 69704368696C6472656E090A46696C6C2E436F6C6F7207097846463430343034 300A53697A652E57696474680500000000000040C006400B53697A652E486569 @@ -14783,1780 +15626,2222 @@ object MainForm: TMainForm 654E616D65060E6C6F67627574746F6E7374796C6505416C69676E070643656E 7465720A53697A652E57696474680500000000000000C005400B53697A652E48 65696768740500000000000000C005401453697A652E506C6174666F726D4465 - 6661756C74080756697369626C6508000A5452656374616E676C650009537479 - 6C654E616D65060A6261636B67726F756E6405416C69676E0706436C69656E74 - 0C436C69704368696C6472656E090A436C6970506172656E74090A46696C6C2E - 436F6C6F7207097846463230323032300748697454657374080A53697A652E57 - 696474680500000000000000C005400B53697A652E4865696768740500000000 - 000000C005401453697A652E506C6174666F726D44656661756C74080B537472 - 6F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00 - 095374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E - 31084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E61 - 6D65060A46696C6C2E436F6C6F720A537461727456616C756507097846463230 - 323032300953746F7056616C7565070978464634303430343007547269676765 - 72063049734D6F7573654F7665723D747275653B4973507265737365643D6661 - 6C73653B4973466F63757365643D66616C73650E54726967676572496E766572 - 7365063149734D6F7573654F7665723D66616C73653B4973507265737365643D - 66616C73653B4973466F63757365643D66616C736500000F54436F6C6F72416E - 696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F7241 - 6E696D6174696F6E32084475726174696F6E050000000000CDCCCCFB3F0C5072 - 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 - 6507097846463430343034300953746F7056616C756507097846463137353739 - 430754726967676572062F4973507265737365643D747275653B49734D6F7573 - 654F7665723D747275653B4973466F63757365643D66616C736500000F54436F - 6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E43 - 6F6C6F72416E696D6174696F6E33084475726174696F6E050000000000CDCCCC - FB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 - 7456616C756507097846463241383245320953746F7056616C75650709784646 - 3137353739430754726967676572062E4973507265737365643D747275653B49 - 734D6F7573654F7665723D747275653B4973466F63757365643D747275650E54 - 726967676572496E7665727365062F4973507265737365643D66616C73653B49 - 734D6F7573654F7665723D747275653B4973466F63757365643D747275650000 - 05545061746800095374796C654E616D650605506174683105416C69676E0706 - 436C69656E7409446174612E506174680A5C02000032000000000000000000A8 - 41CDCCCC40010000000000A8410000C041010000000000C03F0000C041010000 - 000000C03F00000000010000009A99694100000000010000000000A841CDCCCC - 40030000000000A841CDCCCC400000000000009C410000F04001000000000058 - 410000F04001000000000058410000C03F01000000000040400000C03F010000 - 00000040400000B4410100000000009C410000B4410100000000009C410000F0 - 400300000000009C410000F04000000000000040410000F04001000000000090 - 400000F04001000000000090400000C04001000000000040410000C040010000 - 00000040410000F04003000000000040410000F0400000000000009040000010 - 4101000000000090410000104101000000000090410000284101000000000090 - 4000002841010000000000904000001041030000000000904000001041000000 - 0000009040000040410100000000009041000040410100000000009041000058 - 4101000000000090400000584101000000000090400000404103000000000090 - 4000004041000000000000904000007041010000000000904100007041010000 - 0000009041000084410100000000009040000084410100000000009040000070 - 4103000000000090400000704100000000000090400000904101000000000090 - 4100009041010000000000904100009C41010000000000904000009C41010000 - 00000090400000904103000000000090400000904100000000000070410000C0 - 4001000000333393410000C04001000000000070416666264001000000000070 - 410000C04003000000000070410000C0400A46696C6C2E436F6C6F720708636C - 6157686974650748697454657374080C4D617267696E732E4C65667405000000 - 00000000A002400B4D617267696E732E546F700500000000000000A002400D4D - 617267696E732E52696768740500000000000000A002400E4D617267696E732E - 426F74746F6D0500000000000000A002400A53697A652E576964746805000000 - 000000009805400B53697A652E48656967687405000000000000009805401453 - 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 - 07044E6F6E6508577261704D6F6465070346697400000000} - end - item - Platform = 'OSX Yosemite' - ResourcesBin = { - 464D585F5354594C4520322E3501060F6261636B67726F756E647374796C6503 - AF00060B627574746F6E7374796C6503EB04060D636865636B626F787374796C - 6503F3050609656469747374796C6503D4050609677269647374796C6503E608 - 060D67726F7570626F787374796C6503B402060F6865616465726974656D7374 - 796C6503F403060E696D61676563656C6C7374796C65033D01060A6C6162656C - 7374796C65032001060D6C697374626F78666F6F746572038B0106106C697374 - 626F786974656D7374796C6503520306126C697374626F78706C61696E686561 - 646572036C02060C6C697374626F787374796C6503AA07060E706F7075706365 - 6C6C7374796C65038E03061070726F67726573736261727374796C6503020506 - 1170726F677265737363656C6C7374796C6503CB0206157363726F6C6C626172 - 626F74746F6D627574746F6E03740406147363726F6C6C62617268747261636B - 7374796C65033B0106137363726F6C6C6261726C656674627574746F6E038704 - 06147363726F6C6C6261727269676874627574746F6E038A04060E7363726F6C - 6C6261727374796C6503630406127363726F6C6C626172746F70627574746F6E - 03840406147363726F6C6C62617276747261636B7374796C65033B01060C7370 - 696E626F787374796C65034F08060B7377697463687374796C6503ED01060F74 - 6162636F6E74726F6C7374796C6503F701060B746162646F747374796C65037F - 01060C7461626974656D7374796C65032B05060D7465787463656C6C7374796C - 6503A601060D7468756D626261727374796C65034C03060A7468756D62737479 - 6C65034402060D747261636B6261727374796C65034A0806096D656D6F737479 - 6C65037008060D73697A65677269707374796C6503FB04060E73746174757362 - 61727374796C6503DB01060C746F6F6C6261727374796C6503CA00061570726F - 67726573736261726572726F727374796C65030705060E6C696E6B6C6162656C - 7374796C65035B030613736D616C6C7363726F6C6C6261727374796C6503AE01 - 060D636F6D626F626F787374796C65032708060D73706C69747465727374796C - 6503C0030610726164696F627574746F6E7374796C6503C4050618756C63656E - 746572726164696F627574746F6E7374796C650368050616756C6C6566747261 - 64696F627574746F6E7374796C6503A7050617756C7269676874726164696F62 - 7574746F6E7374796C6503AC050615616E69696E64696361746F72686F727A73 - 74796C6503D502060E6C6F67627574746F6E7374796C6503DA07061365787061 - 6E646572627574746F6E7374796C650381020615657870616E64657263686563 - 6B626F787374796C6503DB05060D657870616E6465727374796C65031607060A - 70616E656C7374796C65034401061970726F67726573736261726D696E696572 - 726F727374796C6503EE03061470726F67726573736261726D696E697374796C - 6503F403060E636F6D626F656469747374796C6503F80906106D656E75626172 - 6974656D7374796C6503650B060C6D656E756261727374796C6503B802060D6D - 656E756974656D7374796C6503890B06126D656E75736570617261746F727374 - 796C6503E501060D6D656E75766965777374796C6503DD0200545046300A5452 - 656374616E676C6500095374796C654E616D65060F6261636B67726F756E6473 - 74796C6505416C69676E070643656E7465720A46696C6C2E436F6C6F72070978 - 46463244324432440A53697A652E576964746805000000000000009407400B53 - 697A652E4865696768740500000000000080D206401453697A652E506C617466 - 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65075669 - 7369626C650800005450463007544C61796F757400095374796C654E616D6506 - 0B627574746F6E7374796C6505416C69676E070643656E7465720A53697A652E - 57696474680500000000000000C805400B53697A652E48656967687405000000 - 00000000C803401453697A652E506C6174666F726D44656661756C7408075669 - 7369626C6508085461624F726465720202000A5452656374616E676C65000953 - 74796C654E616D65060A6261636B67726F756E6405416C69676E0706436C6965 - 6E740C436C69704368696C6472656E090A436C6970506172656E74090A46696C - 6C2E436F6C6F7207097846463230323032300748697454657374080A53697A65 - 2E57696474680500000000000000C805400B53697A652E486569676874050000 - 0000000000C803401453697A652E506C6174666F726D44656661756C74080B53 - 74726F6B652E4B696E6407044E6F6E6507585261646975730500000000000000 - C0004007595261646975730500000000000000C00040000F54436F6C6F72416E - 696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F7241 - 6E696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F0C5072 - 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 - 6507097846463230323032300953746F7056616C756507097846463430343034 - 300754726967676572063049734D6F7573654F7665723D747275653B49735072 - 65737365643D66616C73653B4973466F63757365643D66616C73650E54726967 - 676572496E7665727365063149734D6F7573654F7665723D66616C73653B4973 - 507265737365643D66616C73653B4973466F63757365643D66616C736500000F - 54436F6C6F72416E696D6174696F6E00095374796C654E616D65061562757474 - 6F6E436F6C6F72416E696D6174696F6E32084475726174696F6E050000000000 - CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53 - 7461727456616C756507097846463430343034300953746F7056616C75650709 - 7846463137353739430754726967676572062F4973507265737365643D747275 - 653B49734D6F7573654F7665723D747275653B4973466F63757365643D66616C - 736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 - 15627574746F6E436F6C6F72416E696D6174696F6E33084475726174696F6E05 - 0000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F - 6C6F720A537461727456616C756507097846463241383245320953746F705661 - 6C756507097846463137353739430754726967676572062E4973507265737365 - 643D747275653B49734D6F7573654F7665723D747275653B4973466F63757365 - 643D747275650E54726967676572496E7665727365062F497350726573736564 - 3D66616C73653B49734D6F7573654F7665723D747275653B4973466F63757365 - 643D7472756500000005545465787400095374796C654E616D65060474657874 - 05416C69676E0706436C69656E7413456E61626C6544726167486967686C6967 - 6874080748697454657374080A53697A652E57696474680500000000000000C8 - 05400B53697A652E4865696768740500000000000000C803401453697A652E50 - 6C6174666F726D44656661756C7408165465787453657474696E67732E466F6E - 74436F6C6F720708636C6157686974650000005450463007544C61796F757400 - 095374796C654E616D65060D636865636B626F787374796C6505416C69676E07 - 0643656E7465720A53697A652E5769647468050000000000ACAA8006400B5369 - 7A652E48656967687405000000000058559904401453697A652E506C6174666F - 726D44656661756C74080756697369626C6508085461624F7264657202030007 - 544C61796F75740005416C69676E07044C6566740A53697A652E576964746805 - 000000000000009003400B53697A652E48656967687405000000000058559904 - 401453697A652E506C6174666F726D44656661756C7408000A5452656374616E - 676C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E - 070643656E7465720A46696C6C2E436F6C6F7207097846463230323032300748 - 697454657374080A53697A652E57696474680500000000000000F002400B5369 - 7A652E4865696768740500000000000000F002401453697A652E506C6174666F - 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 - 313507585261646975730500000000000000C000400759526164697573050000 - 0000000000C00040000A5452656374616E676C6500095374796C654E616D6506 - 0A52656374616E676C653105416C69676E0706436C69656E740A46696C6C2E43 - 6F6C6F720709784646324138324532074869745465737408074F706163697479 - 05000000000000000000000C4D617267696E732E4C6566740500000000000000 - 8000400B4D617267696E732E546F7005000000000000008000400D4D61726769 - 6E732E526967687405000000000000008000400E4D617267696E732E426F7474 - 6F6D05000000000000008000400A53697A652E57696474680500000000000000 - B002400B53697A652E4865696768740500000000000000B002401453697A652E - 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F - 6E6507585261646975730500000000000000C000400759526164697573050000 - 0000000000C00040000F54466C6F6174416E696D6174696F6E00095374796C65 - 4E616D65061B6368656368626F7856697362696C697479416E696D6174696F6E - 31084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E61 - 6D6506074F7061636974790A537461727456616C756505000000000000000000 - 000953746F7056616C75650500000000000000C805400754726967676572060E - 4973436865636B65643D747275650E54726967676572496E7665727365060F49 - 73436865636B65643D66616C73650000000F54436F6C6F72416E696D6174696F - 6E00095374796C654E616D650618636865636B626F785374726F6B65416E696D - 6174696F6E31084475726174696F6E050000000000CDCCCCFB3F0C50726F7065 - 7274794E616D65060C5374726F6B652E436F6C6F720A537461727456616C7565 - 07097846463135313531350953746F7056616C75650709784646324138324532 - 0754726967676572060E4973436865636B65643D747275650E54726967676572 - 496E7665727365060F4973436865636B65643D66616C736500000F54436F6C6F - 72416E696D6174696F6E00095374796C654E616D650617636865636B626F7843 - 6F6C6F72416E696D6174696F6E31084475726174696F6E050000000000CDCCCC - FB3F07496E7665727365090C50726F70657274794E616D65060A46696C6C2E43 - 6F6C6F720A537461727456616C756507097846463230323032300953746F7056 - 616C756507097846463430343034300754726967676572061049734D6F757365 - 4F7665723D747275650E54726967676572496E7665727365061149734D6F7573 - 654F7665723D66616C73650000000005545465787400095374796C654E616D65 - 06047465787405416C69676E0706436C69656E740A53697A652E576964746805 - 00000000005855DD05400B53697A652E48656967687405000000000058559904 - 401453697A652E506C6174666F726D44656661756C7408045465787406045465 - 7874165465787453657474696E67732E466F6E74436F6C6F720708636C615768 - 6974650000005450463007544C61796F757400095374796C654E616D65060965 - 6469747374796C6505416C69676E070643656E7465720A53697A652E57696474 - 680500000000000000C805400B53697A652E4865696768740500000000000000 - C803401453697A652E506C6174666F726D44656661756C74080756697369626C - 6508085461624F726465720204000C5442727573684F626A6563740009537479 - 6C654E616D65060A666F726567726F756E6400000C5442727573684F626A6563 - 7400095374796C654E616D65060973656C656374696F6E0B42727573682E436F - 6C6F72070978393632413832453200000B54466F6E744F626A65637400095374 - 796C654E616D650604666F6E7409466F6E742E53697A650500000000000000D0 - 024000000A5452656374616E676C6500095374796C654E616D65060A6261636B - 67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F - 7207097846463230323032300748697454657374080A53697A652E5769647468 - 0500000000000000C805400B53697A652E4865696768740500000000000000C8 - 03401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E - 436F6C6F72070978464631353135313507585261646975730500000000000000 - C0004007595261646975730500000000000000C00040000F54436F6C6F72416E - 696D6174696F6E00095374796C654E616D650614656469745374726F6B65416E - 696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F0C50726F - 70657274794E616D65060C5374726F6B652E436F6C6F720A537461727456616C - 756507097846463135313531350953746F7056616C7565070978464632413832 - 45320754726967676572060E4973466F63757365643D747275650E5472696767 - 6572496E7665727365060F4973466F63757365643D66616C736500000F54436F - 6C6F72416E696D6174696F6E00095374796C654E616D65061465646974537472 - 6F6B65416E696D6174696F6E32084475726174696F6E050000000000CDCCCCFB - 3F07496E7665727365090C50726F70657274794E616D65060C5374726F6B652E - 436F6C6F720A537461727456616C756507097846463135313531350953746F70 - 56616C756507097846463443344334430754726967676572062149734D6F7573 - 654F7665723D747275653B4973466F63757365643D66616C73653B0E54726967 - 676572496E7665727365062249734D6F7573654F7665723D66616C73653B4973 - 466F63757365643D66616C73653B00000007544C61796F757400095374796C65 - 4E616D650607627574746F6E7305416C69676E07055269676874064C6F636B65 - 64090B4D617267696E732E546F7005000000000000008000400D4D617267696E - 732E526967687405000000000000008000400E4D617267696E732E426F74746F - 6D05000000000000008000400A506F736974696F6E2E580500000000000000C0 - 04400A506F736974696F6E2E5905000000000000008000400A53697A652E5769 - 6474680500000000000000C804400B53697A652E486569676874050000000000 - 0000A803401453697A652E506C6174666F726D44656661756C7408000007544C - 61796F757400095374796C654E616D650607636F6E74656E7405416C69676E07 - 06436C69656E74064C6F636B6564090C4D617267696E732E4C65667405000000 - 000000008001400B4D617267696E732E546F7005000000000000008000400D4D - 617267696E732E526967687405000000000000008000400E4D617267696E732E - 426F74746F6D05000000000000008000400A53697A652E576964746805000000 - 00000000A804400B53697A652E4865696768740500000000000000A803401453 - 697A652E506C6174666F726D44656661756C7408000006544C6162656C000953 - 74796C654E616D65060670726F6D7074064C6F636B656409074F706163697479 - 050000000000000080FE3F165465787453657474696E67732E466F6E74436F6C - 6F720708636C6157686974650454657874060454657874000000545046300754 - 4C61796F757400095374796C654E616D650609677269647374796C6505416C69 - 676E070643656E7465720A53697A652E5769647468050000000000FFFFE90540 - 0B53697A652E48656967687405000000000000008306401453697A652E506C61 - 74666F726D44656661756C74080756697369626C6508085461624F7264657202 - 05000C5442727573684F626A65637400095374796C654E616D650618416C7465 - 726E6174696E67526F774261636B67726F756E640B42727573682E436F6C6F72 - 070978333237383738373800000C5442727573684F626A65637400095374796C - 654E616D6506086C696E6566696C6C0B42727573682E436F6C6F720709784646 - 31353135313500000A5452656374616E676C6500095374796C654E616D65060A - 6261636B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E - 436F6C6F720709784646323032303230064C6F636B6564090748697454657374 - 080C50616464696E672E4C65667405000000000000008000400B50616464696E - 672E546F7005000000000000008000400D50616464696E672E52696768740500 - 0000000000008000400E50616464696E672E426F74746F6D0500000000000000 - 8000400A53697A652E5769647468050000000000FFFFE905400B53697A652E48 - 656967687405000000000000008306401453697A652E506C6174666F726D4465 - 6661756C74080C5374726F6B652E436F6C6F7207097846463135313531350758 - 5261646975730500000000000000C00040075952616469757305000000000000 - 00C0004000075448656164657200095374796C654E616D650606686561646572 - 0553696465730B03546F70044C65667406426F74746F6D055269676874000541 - 6C69676E0703546F700A506F736974696F6E2E5805000000000000008000400A - 506F736974696F6E2E5905000000000000008000400A53697A652E5769647468 - 050000000000FFFFE105400B53697A652E4865696768740500000000000000A8 - 03401453697A652E506C6174666F726D44656661756C7408000007544C61796F - 757400095374796C654E616D650607636F6E74656E7405416C69676E0706436C - 69656E740C436C69704368696C6472656E090A53697A652E5769647468050000 - 000000FFFFC105400B53697A652E4865696768740500000000000000B4054014 - 53697A652E506C6174666F726D44656661756C7408000A5452656374616E676C - 6500095374796C654E616D65060973656C656374696F6E0A46696C6C2E436F6C - 6F7207097846463241383245320748697454657374080A53697A652E57696474 - 680500000000000000C804400B53697A652E4865696768740500000000000000 - C804401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 - 2E4B696E6407044E6F6E6507585261646975730500000000000000C000400759 - 5261646975730500000000000000C0004000000A5452656374616E676C650009 - 5374796C654E616D650605666F6375730A46696C6C2E436F6C6F720709784146 - 3241383245320748697454657374080C4D617267696E732E4C65667405000000 - 0000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D - 617267696E732E5269676874050000000000000080FF3F0E4D617267696E732E - 426F74746F6D050000000000000080FF3F0A53697A652E576964746805000000 - 00000000C804400B53697A652E4865696768740500000000000000C804401453 - 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 - 07044E6F6E6507585261646975730500000000000000C0004007595261646975 - 730500000000000000C000400000000A545363726F6C6C42617200095374796C - 654E616D65060A767363726F6C6C62617205416C69676E070552696768740B53 - 6D616C6C4368616E676505000000000000000000000B4F7269656E746174696F - 6E0708566572746963616C0A506F736974696F6E2E58050000000000FFFFC505 - 400A506F736974696F6E2E590500000000000000B803400A53697A652E576964 - 746805000000000000008003400B53697A652E48656967687405000000000000 - 00B405401453697A652E506C6174666F726D44656661756C740800000A545363 - 726F6C6C42617200095374796C654E616D65060A687363726F6C6C6261720541 - 6C69676E0706426F74746F6D0B536D616C6C4368616E67650500000000000000 - 0000000B4F7269656E746174696F6E070A486F72697A6F6E74616C0A506F7369 - 74696F6E2E5805000000000000008000400A506F736974696F6E2E5905000000 - 00000000E205400A53697A652E5769647468050000000000FFFFE105400B5369 - 7A652E48656967687405000000000000008003401453697A652E506C6174666F - 726D44656661756C740800000F54536D616C6C5363726F6C6C42617200095374 - 796C654E616D65060F76736D616C6C7363726F6C6C62617205416C69676E0705 - 52696768740B536D616C6C4368616E676505000000000000000000000B4F7269 - 656E746174696F6E0708566572746963616C0C4D617267696E732E4C65667405 - 000000000000008000400A506F736974696F6E2E580500000000000000C60540 - 0A506F736974696F6E2E5905000000000000008000400A53697A652E57696474 - 6805000000000000008002400B53697A652E4865696768740500000000000000 - 8002401453697A652E506C6174666F726D44656661756C74080756697369626C - 650800000F54536D616C6C5363726F6C6C42617200095374796C654E616D6506 - 0F68736D616C6C7363726F6C6C62617205416C69676E0706426F74746F6D0B53 - 6D616C6C4368616E676505000000000000000000000B4F7269656E746174696F - 6E070A486F72697A6F6E74616C0B4D617267696E732E546F7005000000000000 - 008000400A506F736974696F6E2E5805000000000000008000400A506F736974 - 696F6E2E590500000000000000E205400A53697A652E57696474680500000000 - 0000009606400B53697A652E4865696768740500000000000000800240145369 - 7A652E506C6174666F726D44656661756C74080756697369626C650800000000 - 5450463007544C61796F757400095374796C654E616D65060D67726F7570626F - 787374796C6505416C69676E070643656E7465720A53697A652E576964746805 - 00000000000000F004400B53697A652E4865696768740500000000000000C804 - 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 - 085461624F726465720206000A5452656374616E676C6500095374796C654E61 - 6D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730946 - 696C6C2E4B696E6407044E6F6E650748697454657374080C4D617267696E732E - 4C6566740500000000000000C000400B4D617267696E732E546F700500000000 - 0000009002400D4D617267696E732E52696768740500000000000000C000400E - 4D617267696E732E426F74746F6D0500000000000000C000400A53697A652E57 - 696474680500000000000000D804400B53697A652E4865696768740500000000 - 0000009804401453697A652E506C6174666F726D44656661756C74080C537472 - 6F6B652E436F6C6F720709784646313531353135075852616469757305000000 - 00000000C0004007595261646975730500000000000000C00040000554546578 - 7400095374796C654E616D65060474657874084175746F53697A65090A436C69 - 70506172656E74090748697454657374080C4D617267696E732E4C6566740500 - 000000000000A002400A506F736974696F6E2E5805000000000060559502400A - 506F736974696F6E2E590500000000004055D501C00A53697A652E5769647468 - 05000000000000B8C703400B53697A652E4865696768740500000000000060FF - 02401453697A652E506C6174666F726D44656661756C74081654657874536574 - 74696E67732E466F6E74436F6C6F720708636C61576869746515546578745365 - 7474696E67732E576F72645772617008000000005450463007544C61796F7574 - 00095374796C654E616D65060F6865616465726974656D7374796C6505416C69 - 676E070643656E7465720A53697A652E57696474680500000000000000920540 - 0B53697A652E4865696768740500000000000000D003401453697A652E506C61 + 6661756C74080756697369626C6508085461624F726465720248000A54526563 + 74616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C + 69676E0706436C69656E740C436C69704368696C6472656E090A436C69705061 + 72656E74090A46696C6C2E436F6C6F7207097846463230323032300748697454 + 657374080A53697A652E57696474680500000000000000C005400B53697A652E + 4865696768740500000000000000C005401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F + 72416E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C + 6F72416E696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F + 0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456 + 616C756507097846463230323032300953746F7056616C756507097846463430 + 343034300754726967676572063049734D6F7573654F7665723D747275653B49 + 73507265737365643D66616C73653B4973466F63757365643D66616C73650E54 + 726967676572496E7665727365063149734D6F7573654F7665723D66616C7365 + 3B4973507265737365643D66616C73653B4973466F63757365643D66616C7365 + 00000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65061562 + 7574746F6E436F6C6F72416E696D6174696F6E32084475726174696F6E050000 + 000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F + 720A537461727456616C756507097846463430343034300953746F7056616C75 + 6507097846463137353739430754726967676572062F4973507265737365643D + 747275653B49734D6F7573654F7665723D747275653B4973466F63757365643D + 66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E61 + 6D650615627574746F6E436F6C6F72416E696D6174696F6E3308447572617469 + 6F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C + 2E436F6C6F720A537461727456616C756507097846463241383245320953746F + 7056616C756507097846463137353739430754726967676572062E4973507265 + 737365643D747275653B49734D6F7573654F7665723D747275653B4973466F63 + 757365643D747275650E54726967676572496E7665727365062F497350726573 + 7365643D66616C73653B49734D6F7573654F7665723D747275653B4973466F63 + 757365643D74727565000005545061746800095374796C654E616D6506055061 + 74683105416C69676E0706436C69656E7409446174612E506174680A5C020000 + 32000000000000000000A841CDCCCC40010000000000A8410000C04101000000 + 0000C03F0000C041010000000000C03F00000000010000009A99694100000000 + 010000000000A841CDCCCC40030000000000A841CDCCCC400000000000009C41 + 0000F04001000000000058410000F04001000000000058410000C03F01000000 + 000040400000C03F01000000000040400000B4410100000000009C410000B441 + 0100000000009C410000F0400300000000009C410000F0400000000000004041 + 0000F04001000000000090400000F04001000000000090400000C04001000000 + 000040410000C04001000000000040410000F04003000000000040410000F040 + 0000000000009040000010410100000000009041000010410100000000009041 + 0000284101000000000090400000284101000000000090400000104103000000 + 0000904000001041000000000000904000004041010000000000904100004041 + 0100000000009041000058410100000000009040000058410100000000009040 + 0000404103000000000090400000404100000000000090400000704101000000 + 0000904100007041010000000000904100008441010000000000904000008441 + 0100000000009040000070410300000000009040000070410000000000009040 + 00009041010000000000904100009041010000000000904100009C4101000000 + 0000904000009C41010000000000904000009041030000000000904000009041 + 00000000000070410000C04001000000333393410000C0400100000000007041 + 6666264001000000000070410000C04003000000000070410000C0400A46696C + 6C2E436F6C6F720708636C6157686974650748697454657374080C4D61726769 + 6E732E4C6566740500000000000000A002400B4D617267696E732E546F700500 + 000000000000A002400D4D617267696E732E52696768740500000000000000A0 + 02400E4D617267696E732E426F74746F6D0500000000000000A002400A53697A + 652E576964746805000000000000009805400B53697A652E4865696768740500 + 0000000000009805401453697A652E506C6174666F726D44656661756C74080B + 5374726F6B652E4B696E6407044E6F6E6508577261704D6F6465070346697400 + 0000005450463007544C61796F757400095374796C654E616D65061B74726565 + 76696577657870616E646572627574746F6E7374796C6505416C69676E070643 + 656E7465720B4D617267696E732E546F70050000000000000080FF3F0A53697A + 652E57696474680500000000000000B003400B53697A652E4865696768740500 + 000000000000B003401453697A652E506C6174666F726D44656661756C740808 + 5461624F72646572024C0005545061746800095374796C654E616D6506055061 + 74683105416C69676E070643656E74657209446174612E506174680A34000000 + 04000000000000000000C8420000C84201000000000096430000C84201000000 + 0000484300009643030000000000C8420000C8420A46696C6C2E436F6C6F7207 + 08636C6157686974650748697454657374080D526F746174696F6E416E676C65 + 0500000000000000B405C00A53697A652E57696474680500000000000000A002 + 400B53697A652E4865696768740500000000000000C001401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 000F54466C6F6174416E696D6174696F6E00095374796C654E616D650614466C + 6F6174416E696D6174696F6E315374796C65084475726174696F6E0500000000 + 00CDCCCCFB3F0D496E746572706F6C6174696F6E070843697263756C61720C50 + 726F70657274794E616D65060D526F746174696F6E416E676C650A5374617274 + 56616C75650500000000000000B405C00953746F7056616C7565050000000000 + 00000000000754726967676572060F4973457870616E6465643D747275650E54 + 726967676572496E766572736506104973457870616E6465643D66616C736500 + 000000545046300A5452656374616E676C6500095374796C654E616D65061174 + 726565766965776974656D7374796C6505416C69676E070643656E7465720946 + 696C6C2E4B696E6407044E6F6E650748697454657374080553696465730B0642 + 6F74746F6D000A53697A652E57696474680500000000000000AE05400B53697A + 652E4865696768740500000000000000A004401453697A652E506C6174666F72 + 6D44656661756C74080C5374726F6B652E436F6C6F7207097846463135313531 + 350756697369626C6508000C545370656564427574746F6E00095374796C654E + 616D650606627574746F6E05416C69676E07044C6566740A53697A652E576964 + 74680500000000000000A003400B53697A652E48656967687405000000000000 + 00A004401453697A652E506C6174666F726D44656661756C74080B5374796C65 + 4C6F6F6B7570061B7472656576696577657870616E646572627574746F6E7374 + 796C65000007544C61796F75740005416C69676E0708436F6E74656E74730C4D + 617267696E732E4C6566740500000000000000A003400A53697A652E57696474 + 6805000000000000008605400B53697A652E4865696768740500000000000000 + A004401453697A652E506C6174666F726D44656661756C740800095443686563 + 6B426F7800095374796C654E616D650605636865636B05416C69676E07044C65 + 66740843616E466F637573081244697361626C65466F63757345666665637409 + 0A53697A652E57696474680500000000000000A003400B53697A652E48656967 + 68740500000000000000A004401453697A652E506C6174666F726D4465666175 + 6C740800000654476C79706800095374796C654E616D65060A676C7970687374 + 796C650C4D617267696E732E4C65667405000000000000008000400B4D617267 + 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 + 05000000000000008000400E4D617267696E732E426F74746F6D050000000000 + 000080FF3F05416C69676E07044C6566740A506F736974696F6E2E5805000000 + 00000000B003400A506F736974696F6E2E59050000000000000080FF3F0A5369 + 7A652E576964746805000000000000008003400B53697A652E48656967687405 + 000000000000009804401453697A652E506C6174666F726D44656661756C7408 + 000005545465787400095374796C654E616D6506047465787405416C69676E07 + 06436C69656E74064C6F636B6564090748697454657374080A53697A652E5769 + 6474680500000000000000BC04400B53697A652E486569676874050000000000 + 0000A004401453697A652E506C6174666F726D44656661756C74081654657874 + 53657474696E67732E466F6E74436F6C6F720708636C61576869746515546578 + 7453657474696E67732E576F72645772617008165465787453657474696E6773 + 2E486F727A416C69676E07074C656164696E670000000A5452656374616E676C + 650005416C69676E0708436F6E74656E74730946696C6C2E4B696E6407044E6F + 6E650748697454657374080E4D617267696E732E426F74746F6D050000000000 + 000080FF3F0553696465730B044C656674000A53697A652E5769647468050000 + 0000000000AE05400B53697A652E48656967687405000000000000009C044014 + 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C + 6F720709784646324138324532105374726F6B652E546869636B6E6573730500 + 0000000000008000400000005450463007544C61796F757400095374796C654E + 616D65060D74726565766965777374796C6505416C69676E070643656E746572 + 0A53697A652E57696474680500000000000000E106400B53697A652E48656967 + 687405000000000000808107401453697A652E506C6174666F726D4465666175 + 6C74080756697369626C6508085461624F726465720252000C5442727573684F + 626A65637400095374796C654E616D650618416C7465726E6174696E67526F77 + 4261636B67726F756E640B42727573682E436F6C6F7207097830464646464646 + 4600000A5452656374616E676C6500095374796C654E616D65060A6261636B67 + 726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72 + 0709784646323032303230064C6F636B6564090748697454657374080C506164 + 64696E672E4C656674050000000000000080FF3F0D50616464696E672E526967 + 6874050000000000000080FF3F0A53697A652E57696474680500000000000000 + E106400B53697A652E48656967687405000000000000808107401453697A652E + 506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72070978 + 46463135313531350007544C61796F757400095374796C654E616D650607636F + 6E74656E7405416C69676E0706436C69656E740C436C69704368696C6472656E + 090B4D617267696E732E546F70050000000000000080FF3F0A53697A652E5769 + 6474680500000000000000CD06400B53697A652E486569676874050000000000 + 0000F006401453697A652E506C6174666F726D44656661756C7408000A545265 + 6374616E676C6500095374796C654E616D65060973656C656374696F6E0A4669 + 6C6C2E436F6C6F7207097846463241383245320748697454657374080A53697A + 652E57696474680500000000000000C804400B53697A652E4865696768740500 + 000000000000C804401453697A652E506C6174666F726D44656661756C74080B + 5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E676C650009 + 5374796C654E616D650610666F637573656473656C656374696F6E0A46696C6C + 2E436F6C6F7207097846463241383245320748697454657374080A53697A652E + 57696474680500000000000000C804400B53697A652E48656967687405000000 + 00000000C804401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E650B5374726F6B652E446173680703446F74 + 0000000A545363726F6C6C42617200095374796C654E616D65060A767363726F + 6C6C62617205416C69676E070552696768740B536D616C6C4368616E67650500 + 0000000000000000000B4F7269656E746174696F6E0708566572746963616C0C + 4D617267696E732E4C65667405000000000000008000400A506F736974696F6E + 2E580500000000000000D006400A53697A652E57696474680500000000000000 + 8003400B53697A652E4865696768740500000000000000F106401453697A652E + 506C6174666F726D44656661756C740800000A545363726F6C6C426172000953 + 74796C654E616D65060A687363726F6C6C62617205416C69676E0706426F7474 + 6F6D0B536D616C6C4368616E676505000000000000000000000B4F7269656E74 + 6174696F6E070A486F72697A6F6E74616C0B4D617267696E732E546F70050000 + 00000000008000400A506F736974696F6E2E58050000000000000080FF3F0A50 + 6F736974696F6E2E590500000000000000F306400A53697A652E576964746805 + 00000000000000DF06400B53697A652E48656967687405000000000000008003 + 401453697A652E506C6174666F726D44656661756C740800000F54536D616C6C + 5363726F6C6C42617200095374796C654E616D65060F76736D616C6C7363726F + 6C6C62617205416C69676E070552696768740B536D616C6C4368616E67650500 + 0000000000000000000B4F7269656E746174696F6E0708566572746963616C0C + 4D617267696E732E4C65667405000000000000008000400A506F736974696F6E + 2E580500000000000000C605400A506F736974696F6E2E590500000000000000 + 8000400A53697A652E576964746805000000000000008002400B53697A652E48 + 656967687405000000000000008002401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C650800000F54536D616C6C5363726F6C6C4261 + 7200095374796C654E616D65060F68736D616C6C7363726F6C6C62617205416C + 69676E0706426F74746F6D0B536D616C6C4368616E6765050000000000000000 + 00000B4F7269656E746174696F6E070A486F72697A6F6E74616C0B4D61726769 + 6E732E546F7005000000000000008000400A506F736974696F6E2E5805000000 + 000000008000400A506F736974696F6E2E590500000000000000E205400A5369 + 7A652E576964746805000000000000009606400B53697A652E48656967687405 + 000000000000008002401453697A652E506C6174666F726D44656661756C7408 + 0756697369626C6508000000005450463007544C61796F757400095374796C65 + 4E616D65061670726F677265737362617266696E6973687374796C6505416C69 + 676E070643656E7465720A53697A652E57696474680500000000003333850540 + 0B53697A652E4865696768740500000000009999E104401453697A652E506C61 74666F726D44656661756C74080756697369626C6508085461624F7264657202 - 07000A5452656374616E676C6500095374796C654E616D65060A6261636B6772 - 6F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207 - 09784646344334433443064C6F636B6564090748697454657374080A53697A65 - 2E576964746805000000000000009205400B53697A652E486569676874050000 - 0000000000D003401453697A652E506C6174666F726D44656661756C74080C53 - 74726F6B652E436F6C6F72070978464631353135313507585261646975730500 - 000000000000C0004007595261646975730500000000000000C00040000F5443 - 6F6C6F72416E696D6174696F6E00095374796C654E616D650615686561646572 - 436F6C6F72416E696D6174696F6E31084475726174696F6E050000000000CDCC - CCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461 - 727456616C756507097846463443344334430953746F7056616C756507097846 - 463241383245320754726967676572060E4973507265737365643D747275650E - 54726967676572496E7665727365060F4973507265737365643D66616C736500 - 000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506166865 - 616465725374726F6B65416E696D6174696F6E31084475726174696F6E050000 - 000000CDCCCCFB3F0C50726F70657274794E616D65060C5374726F6B652E436F - 6C6F720A537461727456616C756507097846463135313531350953746F705661 - 6C756507097846463241383245320754726967676572060E4973507265737365 - 643D747275650E54726967676572496E7665727365060F497350726573736564 - 3D66616C736500000005545465787400095374796C654E616D65060474657874 - 05416C69676E0706436C69656E74064C6F636B6564090748697454657374080C - 4D617267696E732E4C6566740500000000000000A001400B4D617267696E732E - 546F7005000000000000008000400D4D617267696E732E526967687405000000 - 00000000A001400E4D617267696E732E426F74746F6D05000000000000008000 - 400A53697A652E57696474680500000000000000FC04400B53697A652E486569 - 6768740500000000000000B003401453697A652E506C6174666F726D44656661 - 756C7408165465787453657474696E67732E466F6E74436F6C6F720708636C61 - 57686974650000005450463007544C61796F757400095374796C654E616D6506 - 0E696D61676563656C6C7374796C6505416C69676E070643656E746572075669 - 7369626C6508085461624F726465720208000654496D61676500095374796C65 - 4E616D650605696D6167650E4D756C74695265734269746D61700E0100000541 - 6C69676E0706436C69656E74064C6F636B6564090748697454657374080C4D61 + 46000A5452656374616E676C6500095374796C654E616D65060668747261636B + 05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646 + 323032303230064C6F636B6564090748697454657374080A53697A652E576964 + 746805000000000033338505400B53697A652E48656967687405000000000099 + 99E104401453697A652E506C6174666F726D44656661756C74080C5374726F6B + 652E436F6C6F720709784646313531353135000A5452656374616E676C650009 + 5374796C654E616D65060A68696E64696361746F7205416C69676E07044C6566 + 740A46696C6C2E436F6C6F720709784646324345323434064C6F636B65640907 + 48697454657374080C4D617267696E732E4C656674050000000000000080FF3F + 0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E + 5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D05 + 0000000000000080FF3F0A506F736974696F6E2E58050000000000000080FF3F + 0A506F736974696F6E2E59050000000000000080FF3F0A53697A652E57696474 + 680500000000000000C804400B53697A652E4865696768740500000000009999 + D904401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E650000000A5452656374616E676C6500095374796C65 + 4E616D65060676747261636B05416C69676E0708436F6E74656E74730A46696C + 6C2E436F6C6F720709784646323032303230064C6F636B656409074869745465 + 7374080A53697A652E576964746805000000000033338505400B53697A652E48 + 65696768740500000000009999E104401453697A652E506C6174666F726D4465 + 6661756C74080C5374726F6B652E436F6C6F720709784646313531353135000A + 5452656374616E676C6500095374796C654E616D65060A76696E64696361746F + 7205416C69676E0706426F74746F6D0A46696C6C2E436F6C6F72070978464632 + 4345323434064C6F636B6564090748697454657374080C4D617267696E732E4C + 656674050000000000000080FF3F0B4D617267696E732E546F70050000000000 + 000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D + 617267696E732E426F74746F6D050000000000000080FF3F0A506F736974696F + 6E2E58050000000000000080FF3F0A506F736974696F6E2E5905000000000099 + 998904400A53697A652E576964746805000000000033338105400B53697A652E + 4865696768740500000000000000A803401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000000545046 + 3007544C61796F757400095374796C654E616D65061A70726F67726573736261 + 726D696E6966696E6973687374796C6505416C69676E070643656E7465720A53 + 697A652E576964746805000000000033338505400B53697A652E486569676874 + 0500000000009999E104401453697A652E506C6174666F726D44656661756C74 + 080756697369626C6508085461624F726465720251000A5452656374616E676C + 6500095374796C654E616D65060668747261636B05416C69676E0708436F6E74 + 656E74730A46696C6C2E436F6C6F720709784646343034303430064C6F636B65 + 64090748697454657374080A53697A652E576964746805000000000033338505 + 400B53697A652E4865696768740500000000009999E104401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 000A5452656374616E676C6500095374796C654E616D65060A68696E64696361 + 746F7205416C69676E07044C6566740A46696C6C2E436F6C6F72070978464632 + 4345323434064C6F636B6564090748697454657374080A53697A652E57696474 + 680500000000000000C804400B53697A652E4865696768740500000000009999 + E104401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E650000000A5452656374616E676C6500095374796C65 + 4E616D65060676747261636B05416C69676E0708436F6E74656E74730A46696C + 6C2E436F6C6F720709784646343034303430064C6F636B656409074869745465 + 7374080A53697A652E576964746805000000000033338505400B53697A652E48 + 65696768740500000000009999E104401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E65000A545265637461 + 6E676C6500095374796C654E616D65060A76696E64696361746F7205416C6967 + 6E0706426F74746F6D0A46696C6C2E436F6C6F72070978464632434532343406 + 4C6F636B6564090748697454657374080A506F736974696F6E2E590500000000 + 0099998D04400A53697A652E576964746805000000000033338505400B53697A + 652E4865696768740500000000000000A803401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000000054 + 50463007544C61796F757400095374796C654E616D65061177696E646F77626F + 726465727374796C6505416C69676E070643656E7465720A53697A652E576964 + 746805000000000056D5AF07400B53697A652E48656967687405000000000000 + 00B306401453697A652E506C6174666F726D44656661756C7408075669736962 + 6C6508085461624F72646572023B000A5452656374616E676C6500095374796C + 654E616D6506046D61736B05416C69676E0708436F6E74656E74730A46696C6C + 2E436F6C6F7207097846463130313031300A53697A652E576964746805000000 + 000056D5AF07400B53697A652E4865696768740500000000000000B306401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E650756697369626C6508000007544C61796F757400095374796C65 + 4E616D6506046C65667405416C69676E07084D6F73744C656674064C6F636B65 + 64090A506F736974696F6E2E5905000000000000008004400A53697A652E5769 + 64746805000000000000008001400B53697A652E486569676874050000000000 + 00009306401453697A652E506C6174666F726D44656661756C7408000A545265 + 6374616E676C650005416C69676E07084D6F73744C6566740A46696C6C2E436F + 6C6F7207097846463230323032300748697454657374080553696465730B044C + 656674055269676874000A53697A652E57696474680500000000000000800140 + 0B53697A652E48656967687405000000000000008F06401453697A652E506C61 + 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 + 353135313500000A5452656374616E676C6500095374796C654E616D65060A52 + 656374616E676C653105416C69676E070A4D6F7374426F74746F6D13456E6162 + 6C6544726167486967686C69676874080A46696C6C2E436F6C6F720709784646 + 3230323032300748697454657374080A506F736974696F6E2E59050000000000 + 00008F06400553696465730B044C65667406426F74746F6D000A53697A652E57 + 6964746805000000000000008001400B53697A652E4865696768740500000000 + 0000008001401453697A652E506C6174666F726D44656661756C74080C537472 + 6F6B652E436F6C6F7207097846463135313531350007544C61796F7574000953 + 74796C654E616D6506074C61796F75743305416C69676E07094D6F7374526967 + 68740A506F736974696F6E2E580500000000000000C000400A53697A652E5769 + 647468050000000000000080FF3F0B53697A652E486569676874050000000000 + 00008001401453697A652E506C6174666F726D44656661756C7408000A545265 + 6374616E676C6500095374796C654E616D65060A52656374616E676C65310541 + 6C69676E0703546F700A46696C6C2E436F6C6F72070978464631353135313507 + 48697454657374080A53697A652E5769647468050000000000000080FF3F0B53 + 697A652E486569676874050000000000000080FF3F1453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000 + 000007544C61796F757400095374796C654E616D650605726967687405416C69 + 676E07094D6F73745269676874064C6F636B6564090A506F736974696F6E2E58 + 05000000000056D5AD07400A506F736974696F6E2E5905000000000000008004 + 400A53697A652E576964746805000000000000008001400B53697A652E486569 + 67687405000000000000009306401453697A652E506C6174666F726D44656661 + 756C7408000A5452656374616E676C650005416C69676E07094D6F7374526967 + 68740A46696C6C2E436F6C6F7207097846463230323032300748697454657374 + 080553696465730B044C656674055269676874000A53697A652E576964746805 + 000000000000008001400B53697A652E48656967687405000000000000008F06 + 401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E43 + 6F6C6F72070978464631353135313500000A5452656374616E676C6500095374 + 796C654E616D65060A52656374616E676C653105416C69676E070A4D6F737442 + 6F74746F6D13456E61626C6544726167486967686C69676874080A46696C6C2E + 436F6C6F7207097846463230323032300748697454657374080A506F73697469 + 6F6E2E5905000000000000008F06400553696465730B06426F74746F6D055269 + 676874000A53697A652E576964746805000000000000008001400B53697A652E + 48656967687405000000000000008001401453697A652E506C6174666F726D44 + 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313500 + 07544C61796F757400095374796C654E616D6506074C61796F75743305416C69 + 676E07084D6F73744C6566740A53697A652E5769647468050000000000000080 + FF3F0B53697A652E48656967687405000000000000008001401453697A652E50 + 6C6174666F726D44656661756C7408000A5452656374616E676C650009537479 + 6C654E616D65060A52656374616E676C653105416C69676E0703546F700A4669 + 6C6C2E436F6C6F7207097846463135313531350748697454657374080A53697A + 652E5769647468050000000000000080FF3F0B53697A652E4865696768740500 + 00000000000080FF3F1453697A652E506C6174666F726D44656661756C74080B + 5374726F6B652E4B696E6407044E6F6E6500000000000A5452656374616E676C + 650005416C69676E07074D6F7374546F700A46696C6C2E436F6C6F7207097846 + 46323032303230064C6F636B6564090748697454657374080A53697A652E5769 + 64746805000000000056D5AF07400B53697A652E486569676874050000000000 + 00008004401453697A652E506C6174666F726D44656661756C74080C5374726F + 6B652E436F6C6F7207097846463135313531350007544C61796F757400095374 + 796C654E616D65060763617074696F6E05416C69676E0708436F6E74656E7473 + 064C6F636B6564090748697454657374090C4D617267696E732E4C6566740500 + 0000000000008001400B4D617267696E732E546F700500000000000000800140 + 0D4D617267696E732E526967687405000000000000008001400A53697A652E57 + 6964746805000000000056D5AB07400B53697A652E4865696768740500000000 + 000000E003401453697A652E506C6174666F726D44656661756C740800000754 + 4C61796F75740005416C69676E0706436C69656E74064C6F636B6564090C4D61 7267696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F 70050000000000000080FF3F0D4D617267696E732E5269676874050000000000 000080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A - 53697A652E57696474680500000000000000C004400B53697A652E4865696768 - 740500000000000000C004401453697A652E506C6174666F726D44656661756C - 74080000005450463007544C61796F757400095374796C654E616D65060A6C61 - 62656C7374796C6505416C69676E070643656E7465720A53697A652E57696474 + 53697A652E576964746805000000000056D5AE07400B53697A652E4865696768 + 740500000000000000F003401453697A652E506C6174666F726D44656661756C + 74080007544C61796F75740005416C69676E07044C656674064C6F636B656409 + 0A53697A652E576964746805000000000000009002400B53697A652E48656967 + 68740500000000000000F003401453697A652E506C6174666F726D4465666175 + 6C7408000007544C61796F757400095374796C654E616D65060469636F6E064C + 6F636B6564090A506F736974696F6E2E5805000000000000009002400A506F73 + 6974696F6E2E590500000000000000E001400A53697A652E5769647468050000 + 0000000000C803400B53697A652E4865696768740500000000000000A8034014 + 53697A652E506C6174666F726D44656661756C7408000007544C61796F757400 + 095374796C654E616D65060773797362746E7305416C69676E0706436C69656E + 74064C6F636B6564090A53697A652E57696474680500000000005655AA07400B + 53697A652E4865696768740500000000000000F003401453697A652E506C6174 + 666F726D44656661756C7408000C545370656564427574746F6E00095374796C + 654E616D650605636C6F736505416C69676E07055269676874064C6F636B6564 + 090A506F736974696F6E2E5805000000000056559107400A53697A652E576964 + 74680500000000000000C804400B53697A652E48656967687405000000000000 + 00F003401453697A652E506C6174666F726D44656661756C74080B5374796C65 + 4C6F6F6B75700610636C6F7365627574746F6E7374796C6500000C5453706565 + 64427574746F6E00095374796C654E616D6506036D617805416C69676E070552 + 69676874064C6F636B6564090A506F736974696F6E2E58050000000000565581 + 07400A53697A652E576964746805000000000000008004400B53697A652E4865 + 696768740500000000000000F003401453697A652E506C6174666F726D446566 + 61756C74080B5374796C654C6F6F6B7570060E6D6178627574746F6E7374796C + 6500000C545370656564427574746F6E00095374796C654E616D650603726573 + 05416C69676E07055269676874064C6F636B6564090A506F736974696F6E2E58 + 050000000000ACAAE206400A53697A652E576964746805000000000000008004 + 400B53697A652E4865696768740500000000000000F003401453697A652E506C + 6174666F726D44656661756C74080B5374796C654C6F6F6B7570060E72657362 + 7574746F6E7374796C6500000C545370656564427574746F6E00095374796C65 + 4E616D6506036D696E05416C69676E07055269676874064C6F636B6564090A50 + 6F736974696F6E2E58050000000000ACAAC206400A53697A652E576964746805 + 000000000000008004400B53697A652E4865696768740500000000000000F003 + 401453697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F + 6B7570060E6D696E627574746F6E7374796C6500000554546578740009537479 + 6C654E616D6506057469746C6505416C69676E0706436C69656E74064C6F636B + 6564090748697454657374080A53697A652E5769647468050000000000ACAAC2 + 06400B53697A652E4865696768740500000000000000F003401453697A652E50 + 6C6174666F726D44656661756C7408045465787406055469746C651654657874 + 53657474696E67732E466F6E74436F6C6F720708636C61576869746500000000 + 0007544C61796F757400095374796C654E616D650606636C69656E7405416C69 + 676E0706436C69656E74064C6F636B6564090748697454657374090A53697A65 + 2E576964746805000000000056D5AB07400B53697A652E486569676874050000 + 00000000008F06401453697A652E506C6174666F726D44656661756C74080000 + 07544C61796F757400095374796C654E616D650606626F74746F6D05416C6967 + 6E0706426F74746F6D064C6F636B6564090A506F736974696F6E2E5805000000 + 000000008001400A506F736974696F6E2E590500000000000000AF06400A5369 + 7A652E576964746805000000000056D5AB07400B53697A652E48656967687405 + 000000000000008001401453697A652E506C6174666F726D44656661756C7408 + 000A5452656374616E676C6500095374796C654E616D6506047265637405416C + 69676E0706426F74746F6D0A46696C6C2E436F6C6F7207097846463230323032 + 300748697454657374080553696465730B03546F7006426F74746F6D000A5369 + 7A652E576964746805000000000056D5AB07400B53697A652E48656967687405 + 000000000000008001401453697A652E506C6174666F726D44656661756C7408 + 0C5374726F6B652E436F6C6F7207097846463135313531350000000054504630 + 07544C61796F757400095374796C654E616D6506136172726F77646F776E746F + 6F6C627574746F6E05416C69676E070643656E7465720A53697A652E57696474 680500000000000000C805400B53697A652E4865696768740500000000000000 C803401453697A652E506C6174666F726D44656661756C74080756697369626C - 6508085461624F7264657202090005545465787400095374796C654E616D6506 - 047465787405416C69676E0708436F6E74656E74730748697454657374080A53 - 697A652E57696474680500000000000000C805400B53697A652E486569676874 - 0500000000000000C803401453697A652E506C6174666F726D44656661756C74 - 08165465787453657474696E67732E466F6E74436F6C6F720708636C61576869 - 74650000005450463007544C61796F757400095374796C654E616D65060D6C69 - 7374626F78666F6F74657205416C69676E070643656E7465720A53697A652E57 - 6964746805000000000000009205400B53697A652E4865696768740500000000 - 000000D003401453697A652E506C6174666F726D44656661756C740807566973 - 69626C6508085461624F72646572020A0005545465787400095374796C654E61 - 6D6506047465787405416C69676E0706436C69656E74064C6F636B6564090748 - 697454657374080C4D617267696E732E4C6566740500000000000000A001400B - 4D617267696E732E546F7005000000000000008000400D4D617267696E732E52 - 696768740500000000000000A001400E4D617267696E732E426F74746F6D0500 - 0000000000008000400A53697A652E57696474680500000000000000FC04400B - 53697A652E4865696768740500000000000000B003401453697A652E506C6174 - 666F726D44656661756C7408165465787453657474696E67732E466F6E74436F - 6C6F720708636C6157686974650000005450463007544C61796F757400095374 - 796C654E616D6506106C697374626F786974656D7374796C6505416C69676E07 - 0643656E7465720A53697A652E57696474680500000000000000D605400B5369 - 7A652E4865696768740500000000000000C003401453697A652E506C6174666F - 726D44656661756C74080756697369626C6508085461624F72646572020B0006 - 54476C79706800095374796C654E616D65060A676C7970687374796C650C4D61 - 7267696E732E4C65667405000000000000008000400B4D617267696E732E546F - 70050000000000000080FF3F0D4D617267696E732E5269676874050000000000 - 00008000400E4D617267696E732E426F74746F6D050000000000000080FF3F05 - 416C69676E07044C6566740A506F736974696F6E2E5805000000000000008000 - 400A506F736974696F6E2E59050000000000000080FF3F0A53697A652E576964 - 746805000000000000008003400B53697A652E48656967687405000000000000 - 00B003401453697A652E506C6174666F726D44656661756C7408000005545465 + 6508085461624F726465720201000A5452656374616E676C6500095374796C65 + 4E616D65060A6261636B67726F756E6405416C69676E0706436C69656E740C43 + 6C69704368696C6472656E090A436C6970506172656E74090A46696C6C2E436F + 6C6F7207097830303230323032300748697454657374080A53697A652E576964 + 74680500000000000000C805400B53697A652E48656967687405000000000000 + 00C803401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E000953 + 74796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E3108 + 4475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65 + 060A46696C6C2E436F6C6F720A537461727456616C7565070978303032303230 + 32300953746F7056616C75650709784646343034303430075472696767657206 + 3049734D6F7573654F7665723D747275653B4973507265737365643D66616C73 + 653B4973466F63757365643D66616C73650E54726967676572496E7665727365 + 063149734D6F7573654F7665723D66616C73653B4973507265737365643D6661 + 6C73653B4973466F63757365643D66616C736500000F54436F6C6F72416E696D + 6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E69 + 6D6174696F6E32084475726174696F6E050000000000CDCCCCFB3F0C50726F70 + 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 + 097846463430343034300953746F7056616C7565070978464631373537394307 + 54726967676572062F4973507265737365643D747275653B49734D6F7573654F + 7665723D747275653B4973466F63757365643D66616C736500000F54436F6C6F + 72416E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C + 6F72416E696D6174696F6E33084475726174696F6E050000000000CDCCCCFB3F + 0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456 + 616C756507097846463241383245320953746F7056616C756507097846463137 + 353739430754726967676572062E4973507265737365643D747275653B49734D + 6F7573654F7665723D747275653B4973466F63757365643D747275650E547269 + 67676572496E7665727365062F4973507265737365643D66616C73653B49734D + 6F7573654F7665723D747275653B4973466F63757365643D7472756500000005 + 545061746800095374796C654E616D6506047061746805416C69676E07064365 + 6E74657209446174612E506174680A3400000004000000000000000000C84200 + 00C84201000000000096430000C8420100000000004843000096430300000000 + 00C8420000C8420A46696C6C2E436F6C6F720708636C61576869746507486974 + 54657374080A53697A652E57696474680500000000000000A002400B53697A65 + 2E4865696768740500000000000000C001401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000005545465 787400095374796C654E616D6506047465787405416C69676E0706436C69656E - 740748697454657374080C4D617267696E732E4C6566740500000000000000C0 - 00400B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E - 732E52696768740500000000000000C000400E4D617267696E732E426F74746F - 6D050000000000000080FF3F0A53697A652E57696474680500000000000000CA - 05400B53697A652E4865696768740500000000000000B003401453697A652E50 - 6C6174666F726D44656661756C7408165465787453657474696E67732E466F6E - 74436F6C6F720708636C615768697465155465787453657474696E67732E576F - 72645772617008165465787453657474696E67732E486F727A416C69676E0707 - 4C656164696E6700000954436865636B426F7800095374796C654E616D650605 - 636865636B05416C69676E07084D6F73744C6566740843616E466F6375730812 - 44697361626C65466F637573456666656374090A53697A652E57696474680500 - 000000000000A003400B53697A652E4865696768740500000000000000C00340 - 1453697A652E506C6174666F726D44656661756C74080756697369626C650800 - 00005450463007544C61796F757400095374796C654E616D6506126C69737462 - 6F78706C61696E68656164657205416C69676E070643656E7465720A53697A65 - 2E576964746805000000000000009205400B53697A652E486569676874050000 - 0000000000D003401453697A652E506C6174666F726D44656661756C74080756 - 697369626C6508085461624F72646572020C000A5452656374616E676C650009 - 5374796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E - 74656E74730A46696C6C2E436F6C6F720709784646324432443244064C6F636B - 6564090748697454657374080A53697A652E5769647468050000000000000092 - 05400B53697A652E4865696768740500000000000000D003401453697A652E50 - 6C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846 - 4631353135313507585261646975730500000000000000C00040075952616469 - 75730500000000000000C00040000005545465787400095374796C654E616D65 - 06047465787405416C69676E0706436C69656E74064C6F636B65640907486974 - 54657374080C4D617267696E732E4C6566740500000000000000A001400B4D61 - 7267696E732E546F7005000000000000008000400D4D617267696E732E526967 - 68740500000000000000A001400E4D617267696E732E426F74746F6D05000000 - 000000008000400A53697A652E57696474680500000000000000FC04400B5369 - 7A652E4865696768740500000000000000B003401453697A652E506C6174666F - 726D44656661756C7408165465787453657474696E67732E466F6E74436F6C6F - 720708636C6157686974650000005450463007544C61796F757400095374796C - 654E616D65060C6C697374626F787374796C6505416C69676E070643656E7465 - 720A53697A652E5769647468050000000000FFFFE905400B53697A652E486569 - 67687405000000000000008306401453697A652E506C6174666F726D44656661 - 756C7408085461624F72646572020D000C5442727573684F626A656374000953 - 74796C654E616D650618416C7465726E6174696E67526F774261636B67726F75 - 6E640B42727573682E436F6C6F72070978464632433243324300000A54526563 - 74616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C - 69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646323032 - 303230064C6F636B6564090748697454657374080C50616464696E672E4C6566 - 7405000000000000008000400B50616464696E672E546F700500000000000000 - 8000400D50616464696E672E526967687405000000000000008000400E506164 - 64696E672E426F74746F6D05000000000000008000400A53697A652E57696474 - 68050000000000FFFFE905400B53697A652E4865696768740500000000000000 - 8306401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 - 2E436F6C6F720709784646313531353135075852616469757305000000000000 - 00C0004007595261646975730500000000000000C000400007544C61796F7574 - 00095374796C654E616D650607636F6E74656E7405416C69676E0706436C6965 - 6E740C436C69704368696C6472656E090A53697A652E57696474680500000000 - 00FFFFC105400B53697A652E4865696768740500000000000000DE0540145369 - 7A652E506C6174666F726D44656661756C7408000A5452656374616E676C6500 - 095374796C654E616D65060973656C656374696F6E0A46696C6C2E436F6C6F72 - 07097846463241383245320748697454657374080A53697A652E576964746805 - 00000000000000C804400B53697A652E4865696768740500000000000000C804 + 740748697454657374080A53697A652E57696474680500000000000000C80540 + 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 + 74666F726D44656661756C740804546578740604546578741654657874536574 + 74696E67732E466F6E74436F6C6F720708636C6157686974650756697369626C + 65080000005450463007544C61796F757400095374796C654E616D65060D706F + 707570626F787374796C6505416C69676E070643656E7465720A53697A652E57 + 696474680500000000000000C805400B53697A652E4865696768740500000000 + 000000C803401453697A652E506C6174666F726D44656661756C740807566973 + 69626C6508085461624F726465720231000A5452656374616E676C6500095374 + 796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E7465 + 6E74730A46696C6C2E436F6C6F72070978464632303230323007486974546573 + 74080A53697A652E57696474680500000000000000C805400B53697A652E4865 + 696768740500000000000000C803401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174 + 696F6E315374796C65084475726174696F6E050000000000CDCCCCFB3F0C5072 + 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 + 6507097846463230323032300953746F7056616C756507097846463430343034 + 300754726967676572062049734D6F7573654F7665723D747275653B49735072 + 65737365643D66616C73650E54726967676572496E7665727365062149734D6F + 7573654F7665723D66616C73653B4973507265737365643D66616C736500000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F + 72416E696D6174696F6E325374796C65084475726174696F6E050000000000CD + CCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 + 61727456616C756507097846463430343034300953746F7056616C7565070978 + 46463241383245320754726967676572062049734D6F7573654F7665723D7472 + 75653B4973507265737365643D747275653B0E54726967676572496E76657273 + 65062049734D6F7573654F7665723D747275653B4973507265737365643D6661 + 6C736500000007544C61796F75740005416C69676E070846697452696768740A + 506F736974696F6E2E5805000000000000009605400A53697A652E5769647468 + 0500000000000000C803400B53697A652E4865696768740500000000000000C8 + 03401453697A652E506C6174666F726D44656661756C74080005545061746800 + 05416C69676E070643656E74657209446174612E506174680A40000000050000 + 0000000000000000000000803F010000000000803F0000803F01000000000000 + 3F0000000001000000000000000000803F0300000000000000000000000A4669 + 6C6C2E436F6C6F720708636C6157686974650748697454657374080B4D617267 + 696E732E546F700500000000000000E001C00A53697A652E5769647468050000 + 00000000008002400B53697A652E486569676874050000000000000080014014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E6500000554506174680005416C69676E070643656E7465720944 + 6174612E506174680A3400000004000000000000000000000000000000010000 + 000000803F00000000010000000000003F0000803F0300000000000000000000 + 000A46696C6C2E436F6C6F720708636C6157686974650748697454657374080B + 4D617267696E732E546F700500000000000000C001400A53697A652E57696474 + 6805000000000000008002400B53697A652E4865696768740500000000000000 + 8001401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E6500000005545465787400095374796C654E616D6506 + 047465787405416C69676E0706436C69656E740748697454657374080C4D6172 + 67696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F70 + 050000000000000080FF3F0D4D617267696E732E526967687405000000000000 + 0080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53 + 697A652E576964746805000000000000009205400B53697A652E486569676874 + 0500000000000000B803401453697A652E506C6174666F726D44656661756C74 + 080454657874060454657874165465787453657474696E67732E466F6E74436F + 6C6F720708636C615768697465000000} + end + item + Platform = 'OSX Yosemite' + ResourcesBin = { + 464D585F5354594C4520322E3501060F6261636B67726F756E647374796C6503 + AF00060B627574746F6E7374796C6503EB04060D636865636B626F787374796C + 6503F3050609656469747374796C6503D4050609677269647374796C6503E608 + 060D67726F7570626F787374796C6503B402060F6865616465726974656D7374 + 796C6503F403060E696D61676563656C6C7374796C65033D01060A6C6162656C + 7374796C65032001060D6C697374626F78666F6F746572038B0106106C697374 + 626F786974656D7374796C6503520306126C697374626F78706C61696E686561 + 646572036C02060C6C697374626F787374796C6503B307060E706F7075706365 + 6C6C7374796C65038E03061070726F67726573736261727374796C6503020506 + 1170726F677265737363656C6C7374796C6503CB0206157363726F6C6C626172 + 626F74746F6D627574746F6E03740406147363726F6C6C62617268747261636B + 7374796C65033B0106137363726F6C6C6261726C656674627574746F6E038704 + 06147363726F6C6C6261727269676874627574746F6E038A04060E7363726F6C + 6C6261727374796C6503630406127363726F6C6C626172746F70627574746F6E + 03840406147363726F6C6C62617276747261636B7374796C65033B01060C7370 + 696E626F787374796C65038507060B7377697463687374796C6503ED01060F74 + 6162636F6E74726F6C7374796C6503F701060B746162646F747374796C65037F + 01060C7461626974656D7374796C65032B05060D7465787463656C6C7374796C + 6503A601060D7468756D626261727374796C65034C03060A7468756D62737479 + 6C65034402060D747261636B6261727374796C65034A0806096D656D6F737479 + 6C65037008060D73697A65677269707374796C6503FB04060E73746174757362 + 61727374796C6503DB01060C746F6F6C6261727374796C6503CA00061570726F + 67726573736261726572726F727374796C65030705060E6C696E6B6C6162656C + 7374796C65035B030613736D616C6C7363726F6C6C6261727374796C6503AE01 + 060D636F6D626F626F787374796C65032708060D73706C69747465727374796C + 6503C0030610726164696F627574746F6E7374796C6503C4050618756C63656E + 746572726164696F627574746F6E7374796C650368050616756C6C6566747261 + 64696F627574746F6E7374796C6503A7050617756C7269676874726164696F62 + 7574746F6E7374796C6503AC050615616E69696E64696361746F72686F727A73 + 74796C6503E002060E6C6F67627574746F6E7374796C6503DA07061365787061 + 6E646572627574746F6E7374796C650381020615657870616E64657263686563 + 6B626F787374796C6503DB05060D657870616E6465727374796C65031607060A + 70616E656C7374796C65034F01061970726F67726573736261726D696E696572 + 726F727374796C6503F903061470726F67726573736261726D696E697374796C + 6503F403060E636F6D626F656469747374796C6503F80906106D656E75626172 + 6974656D7374796C6503650B060C6D656E756261727374796C6503B802060D6D + 656E756974656D7374796C6503890B06126D656E75736570617261746F727374 + 796C6503E501060D6D656E75766965777374796C6503DD02061B747265657669 + 6577657870616E646572627574746F6E7374796C650389020611747265657669 + 65776974656D7374796C65032705060D74726565766965777374796C65038D07 + 061670726F677265737362617266696E6973687374796C65030805061A70726F + 67726573736261726D696E6966696E6973687374796C6503FA0306136172726F + 77646F776E746F6F6C627574746F6E03EC05060D706F707570626F787374796C + 6503680600545046300A5452656374616E676C6500095374796C654E616D6506 + 0F6261636B67726F756E647374796C6505416C69676E070643656E7465720A46 + 696C6C2E436F6C6F7207097846463244324432440A53697A652E576964746805 + 000000000000009407400B53697A652E4865696768740500000000000080D206 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B - 696E6407044E6F6E6507585261646975730500000000000000C0004007595261 - 646975730500000000000000C0004000000A5452656374616E676C6500095374 - 796C654E616D650610666F637573656473656C656374696F6E0A46696C6C2E43 - 6F6C6F7207097846463241383245320748697454657374080A53697A652E5769 - 6474680500000000000000C804400B53697A652E486569676874050000000000 - 0000C804401453697A652E506C6174666F726D44656661756C74080B5374726F - 6B652E4B696E6407044E6F6E650B5374726F6B652E446173680703446F740758 - 5261646975730500000000000000C00040075952616469757305000000000000 - 00C000400000000A545363726F6C6C42617200095374796C654E616D65060A76 - 7363726F6C6C62617205416C69676E070552696768740B536D616C6C4368616E - 676505000000000000000000000B4F7269656E746174696F6E07085665727469 - 63616C0A506F736974696F6E2E58050000000000FFFFC505400A506F73697469 - 6F6E2E5905000000000000008000400A53697A652E5769647468050000000000 - 00008003400B53697A652E4865696768740500000000000000DE05401453697A - 652E506C6174666F726D44656661756C740800000A545363726F6C6C42617200 - 095374796C654E616D65060A687363726F6C6C62617205416C69676E0706426F - 74746F6D0B536D616C6C4368616E676505000000000000000000000B4F726965 - 6E746174696F6E070A486F72697A6F6E74616C0A506F736974696F6E2E580500 - 0000000000008000400A506F736974696F6E2E590500000000000000E205400A - 53697A652E5769647468050000000000FFFFE105400B53697A652E4865696768 - 7405000000000000008003401453697A652E506C6174666F726D44656661756C - 740800000F54536D616C6C5363726F6C6C42617200095374796C654E616D6506 - 0F76736D616C6C7363726F6C6C62617205416C69676E070552696768740B536D - 616C6C4368616E676505000000000000000000000B4F7269656E746174696F6E - 0708566572746963616C0C4D617267696E732E4C656674050000000000000080 - 00400A506F736974696F6E2E580500000000000000C605400A506F736974696F - 6E2E5905000000000000008000400A53697A652E576964746805000000000000 - 008002400B53697A652E48656967687405000000000000008002401453697A65 - 2E506C6174666F726D44656661756C74080756697369626C650800000F54536D - 616C6C5363726F6C6C42617200095374796C654E616D65060F68736D616C6C73 - 63726F6C6C62617205416C69676E0706426F74746F6D0B536D616C6C4368616E - 676505000000000000000000000B4F7269656E746174696F6E070A486F72697A - 6F6E74616C0B4D617267696E732E546F7005000000000000008000400A506F73 - 6974696F6E2E5805000000000000008000400A506F736974696F6E2E59050000 - 0000000000E205400A53697A652E576964746805000000000000009606400B53 - 697A652E48656967687405000000000000008002401453697A652E506C617466 - 6F726D44656661756C74080756697369626C6508000000005450463007544C61 - 796F757400095374796C654E616D65060E706F70757063656C6C7374796C6505 - 416C69676E070643656E7465720756697369626C6508085461624F7264657202 - 0E0007544C61796F75740005416C69676E070552696768740A506F736974696F - 6E2E5805000000000000008C04400A53697A652E576964746805000000000000 - 00F002400B53697A652E4865696768740500000000000000C804401453697A65 - 2E506C6174666F726D44656661756C7408000554506174680005416C69676E07 - 0643656E74657209446174612E506174680A4000000005000000000000000000 - 00000000803F010000000000803F0000803F010000000000003F000000000100 - 0000000000000000803F0300000000000000000000000A46696C6C2E436F6C6F - 720708636C6157686974650748697454657374080B4D617267696E732E546F70 - 0500000000000000E001C00A53697A652E576964746805000000000000008002 - 400B53697A652E48656967687405000000000000008001401453697A652E506C - 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 - 00000554506174680005416C69676E070643656E74657209446174612E506174 - 680A3400000004000000000000000000000000000000010000000000803F0000 - 0000010000000000003F0000803F0300000000000000000000000A46696C6C2E - 436F6C6F720708636C6157686974650748697454657374080B4D617267696E73 - 2E546F700500000000000000C001400A53697A652E5769647468050000000000 - 00008002400B53697A652E48656967687405000000000000008001401453697A - 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 - 4E6F6E6500000005545465787400095374796C654E616D650604746578740541 - 6C69676E0706436C69656E74064C6F636B6564090748697454657374080C4D61 - 7267696E732E4C6566740500000000000000A001400B4D617267696E732E546F - 7005000000000000008000400D4D617267696E732E5269676874050000000000 - 0000A001400E4D617267696E732E426F74746F6D05000000000000008000400A - 53697A652E57696474680500000000000000C803400B53697A652E4865696768 - 740500000000000000B804401453697A652E506C6174666F726D44656661756C - 7408165465787453657474696E67732E466F6E74436F6C6F720708636C615768 - 6974650000005450463007544C61796F757400095374796C654E616D65061070 - 726F67726573736261727374796C6505416C69676E070643656E7465720A5369 - 7A652E576964746805000000000033338505400B53697A652E48656967687405 - 00000000009999E104401453697A652E506C6174666F726D44656661756C7408 - 0756697369626C6508085461624F72646572020F000A5452656374616E676C65 - 00095374796C654E616D65060668747261636B05416C69676E0708436F6E7465 - 6E74730A46696C6C2E436F6C6F720709784646323032303230064C6F636B6564 - 090748697454657374080A53697A652E57696474680500000000003333850540 - 0B53697A652E4865696768740500000000009999E104401453697A652E506C61 - 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 - 353135313507585261646975730500000000000000C000400759526164697573 - 0500000000000000C00040000A5452656374616E676C6500095374796C654E61 - 6D65060A68696E64696361746F7205416C69676E07044C6566740A46696C6C2E - 436F6C6F720709784646324138324532064C6F636B6564090748697454657374 - 080C4D617267696E732E4C656674050000000000000080FF3F0B4D617267696E - 732E546F70050000000000000080FF3F0D4D617267696E732E52696768740500 - 00000000000080FF3F0E4D617267696E732E426F74746F6D0500000000000000 - 80FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F73697469 - 6F6E2E59050000000000000080FF3F0A53697A652E5769647468050000000000 - 0000C804400B53697A652E4865696768740500000000009999D904401453697A - 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 - 4E6F6E6507585261646975730500000000000000C00040075952616469757305 - 00000000000000C000400000000A5452656374616E676C6500095374796C654E - 616D65060676747261636B05416C69676E0708436F6E74656E74730A46696C6C - 2E436F6C6F720709784646323032303230064C6F636B65640907486974546573 - 74080A53697A652E576964746805000000000033338505400B53697A652E4865 - 696768740500000000009999E104401453697A652E506C6174666F726D446566 - 61756C74080C5374726F6B652E436F6C6F720709784646313531353135075852 - 61646975730500000000000000C0004007595261646975730500000000000000 - C00040000A5452656374616E676C6500095374796C654E616D65060A76696E64 - 696361746F7205416C69676E0706426F74746F6D0A46696C6C2E436F6C6F7207 - 09784646324138324532064C6F636B6564090748697454657374080C4D617267 + 696E6407044E6F6E650756697369626C650800005450463007544C61796F7574 + 00095374796C654E616D65060B627574746F6E7374796C6505416C69676E0706 + 43656E7465720A53697A652E57696474680500000000000000C805400B53697A + 652E4865696768740500000000000000C803401453697A652E506C6174666F72 + 6D44656661756C74080756697369626C6508085461624F726465720203000A54 + 52656374616E676C6500095374796C654E616D65060A6261636B67726F756E64 + 05416C69676E0706436C69656E740C436C69704368696C6472656E090A436C69 + 70506172656E74090A46696C6C2E436F6C6F7207097846463230323032300748 + 697454657374080A53697A652E57696474680500000000000000C805400B5369 + 7A652E4865696768740500000000000000C803401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6507585261 + 646975730500000000000000C0004007595261646975730500000000000000C0 + 0040000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650615 + 627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E0500 + 00000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C + 6F720A537461727456616C756507097846463230323032300953746F7056616C + 756507097846463430343034300754726967676572063049734D6F7573654F76 + 65723D747275653B4973507265737365643D66616C73653B4973466F63757365 + 643D66616C73650E54726967676572496E7665727365063149734D6F7573654F + 7665723D66616C73653B4973507265737365643D66616C73653B4973466F6375 + 7365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009537479 + 6C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E32084475 + 726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A + 46696C6C2E436F6C6F720A537461727456616C75650709784646343034303430 + 0953746F7056616C756507097846463137353739430754726967676572062F49 + 73507265737365643D747275653B49734D6F7573654F7665723D747275653B49 + 73466F63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E + 00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F + 6E33084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E + 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464632 + 41383245320953746F7056616C75650709784646313735373943075472696767 + 6572062E4973507265737365643D747275653B49734D6F7573654F7665723D74 + 7275653B4973466F63757365643D747275650E54726967676572496E76657273 + 65062F4973507265737365643D66616C73653B49734D6F7573654F7665723D74 + 7275653B4973466F63757365643D747275650000000554546578740009537479 + 6C654E616D6506047465787405416C69676E0706436C69656E7413456E61626C + 6544726167486967686C69676874080748697454657374080A53697A652E5769 + 6474680500000000000000C805400B53697A652E486569676874050000000000 + 0000C803401453697A652E506C6174666F726D44656661756C74081654657874 + 53657474696E67732E466F6E74436F6C6F720708636C61576869746500000054 + 50463007544C61796F757400095374796C654E616D65060D636865636B626F78 + 7374796C6505416C69676E070643656E7465720A53697A652E57696474680500 + 00000000ACAA8006400B53697A652E4865696768740500000000005855990440 + 1453697A652E506C6174666F726D44656661756C74080756697369626C650808 + 5461624F7264657202040007544C61796F75740005416C69676E07044C656674 + 0A53697A652E576964746805000000000000009003400B53697A652E48656967 + 687405000000000058559904401453697A652E506C6174666F726D4465666175 + 6C7408000A5452656374616E676C6500095374796C654E616D65060A6261636B + 67726F756E6405416C69676E070643656E7465720A46696C6C2E436F6C6F7207 + 097846463230323032300748697454657374080A53697A652E57696474680500 + 000000000000F002400B53697A652E4865696768740500000000000000F00240 + 1453697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F + 6C6F72070978464631353135313507585261646975730500000000000000C000 + 4007595261646975730500000000000000C00040000A5452656374616E676C65 + 00095374796C654E616D65060A52656374616E676C653105416C69676E070643 + 6C69656E740A46696C6C2E436F6C6F7207097846463241383245320748697454 + 65737408074F70616369747905000000000000000000000C4D617267696E732E + 4C65667405000000000000008000400B4D617267696E732E546F700500000000 + 0000008000400D4D617267696E732E526967687405000000000000008000400E + 4D617267696E732E426F74746F6D05000000000000008000400A53697A652E57 + 696474680500000000000000B002400B53697A652E4865696768740500000000 + 000000B002401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E6507585261646975730500000000000000C000 + 4007595261646975730500000000000000C00040000F54466C6F6174416E696D + 6174696F6E00095374796C654E616D65061B6368656368626F7856697362696C + 697479416E696D6174696F6E31084475726174696F6E050000000000CDCCCCFB + 3F0C50726F70657274794E616D6506074F7061636974790A537461727456616C + 756505000000000000000000000953746F7056616C75650500000000000000C8 + 05400754726967676572060E4973436865636B65643D747275650E5472696767 + 6572496E7665727365060F4973436865636B65643D66616C73650000000F5443 + 6F6C6F72416E696D6174696F6E00095374796C654E616D650618636865636B62 + 6F785374726F6B65416E696D6174696F6E31084475726174696F6E0500000000 + 00CDCCCCFB3F0C50726F70657274794E616D65060C5374726F6B652E436F6C6F + 720A537461727456616C756507097846463135313531350953746F7056616C75 + 6507097846463241383245320754726967676572060E4973436865636B65643D + 747275650E54726967676572496E7665727365060F4973436865636B65643D66 + 616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650617636865636B626F78436F6C6F72416E696D6174696F6E31084475726174 + 696F6E050000000000CDCCCCFB3F07496E7665727365090C50726F7065727479 + 4E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709784646 + 3230323032300953746F7056616C756507097846463430343034300754726967 + 676572061049734D6F7573654F7665723D747275650E54726967676572496E76 + 65727365061149734D6F7573654F7665723D66616C7365000000000554546578 + 7400095374796C654E616D6506047465787405416C69676E0706436C69656E74 + 0A53697A652E57696474680500000000005855DD05400B53697A652E48656967 + 687405000000000058559904401453697A652E506C6174666F726D4465666175 + 6C74080454657874060454657874165465787453657474696E67732E466F6E74 + 436F6C6F720708636C6157686974650000005450463007544C61796F75740009 + 5374796C654E616D650609656469747374796C6505416C69676E070643656E74 + 65720A53697A652E57696474680500000000000000C805400B53697A652E4865 + 696768740500000000000000C803401453697A652E506C6174666F726D446566 + 61756C74080756697369626C6508085461624F726465720205000C5442727573 + 684F626A65637400095374796C654E616D65060A666F726567726F756E640000 + 0C5442727573684F626A65637400095374796C654E616D65060973656C656374 + 696F6E0B42727573682E436F6C6F72070978393632413832453200000B54466F + 6E744F626A65637400095374796C654E616D650604666F6E7409466F6E742E53 + 697A650500000000000000D0024000000A5452656374616E676C650009537479 + 6C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E + 74730A46696C6C2E436F6C6F7207097846463230323032300748697454657374 + 080A53697A652E57696474680500000000000000C805400B53697A652E486569 + 6768740500000000000000C803401453697A652E506C6174666F726D44656661 + 756C74080C5374726F6B652E436F6C6F72070978464631353135313507585261 + 646975730500000000000000C0004007595261646975730500000000000000C0 + 0040000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614 + 656469745374726F6B65416E696D6174696F6E31084475726174696F6E050000 + 000000CDCCCCFB3F0C50726F70657274794E616D65060C5374726F6B652E436F + 6C6F720A537461727456616C756507097846463135313531350953746F705661 + 6C756507097846463241383245320754726967676572060E4973466F63757365 + 643D747275650E54726967676572496E7665727365060F4973466F6375736564 + 3D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E + 616D650614656469745374726F6B65416E696D6174696F6E3208447572617469 + 6F6E050000000000CDCCCCFB3F07496E7665727365090C50726F70657274794E + 616D65060C5374726F6B652E436F6C6F720A537461727456616C756507097846 + 463135313531350953746F7056616C7565070978464634433443344307547269 + 67676572062149734D6F7573654F7665723D747275653B4973466F6375736564 + 3D66616C73653B0E54726967676572496E7665727365062249734D6F7573654F + 7665723D66616C73653B4973466F63757365643D66616C73653B00000007544C + 61796F757400095374796C654E616D650607627574746F6E7305416C69676E07 + 055269676874064C6F636B6564090B4D617267696E732E546F70050000000000 + 00008000400D4D617267696E732E526967687405000000000000008000400E4D + 617267696E732E426F74746F6D05000000000000008000400A506F736974696F + 6E2E580500000000000000C004400A506F736974696F6E2E5905000000000000 + 008000400A53697A652E57696474680500000000000000C804400B53697A652E + 4865696768740500000000000000A803401453697A652E506C6174666F726D44 + 656661756C7408000007544C61796F757400095374796C654E616D650607636F + 6E74656E7405416C69676E0706436C69656E74064C6F636B6564090C4D617267 + 696E732E4C65667405000000000000008001400B4D617267696E732E546F7005 + 000000000000008000400D4D617267696E732E52696768740500000000000000 + 8000400E4D617267696E732E426F74746F6D05000000000000008000400A5369 + 7A652E57696474680500000000000000A804400B53697A652E48656967687405 + 00000000000000A803401453697A652E506C6174666F726D44656661756C7408 + 000006544C6162656C00095374796C654E616D65060670726F6D7074064C6F63 + 6B656409074F706163697479050000000000000080FE3F165465787453657474 + 696E67732E466F6E74436F6C6F720708636C6157686974650454657874060454 + 6578740000005450463007544C61796F757400095374796C654E616D65060967 + 7269647374796C6505416C69676E070643656E7465720A53697A652E57696474 + 68050000000000FFFFE905400B53697A652E4865696768740500000000000000 + 8306401453697A652E506C6174666F726D44656661756C74080756697369626C + 6508085461624F726465720206000C5442727573684F626A6563740009537479 + 6C654E616D650618416C7465726E6174696E67526F774261636B67726F756E64 + 0B42727573682E436F6C6F72070978333237383738373800000C544272757368 + 4F626A65637400095374796C654E616D6506086C696E6566696C6C0B42727573 + 682E436F6C6F72070978464631353135313500000A5452656374616E676C6500 + 095374796C654E616D65060A6261636B67726F756E6405416C69676E0708436F + 6E74656E74730A46696C6C2E436F6C6F720709784646323032303230064C6F63 + 6B6564090748697454657374080C50616464696E672E4C656674050000000000 + 00008000400B50616464696E672E546F7005000000000000008000400D506164 + 64696E672E526967687405000000000000008000400E50616464696E672E426F + 74746F6D05000000000000008000400A53697A652E5769647468050000000000 + FFFFE905400B53697A652E48656967687405000000000000008306401453697A + 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 + 0978464631353135313507585261646975730500000000000000C00040075952 + 61646975730500000000000000C0004000075448656164657200095374796C65 + 4E616D6506066865616465720553696465730B03546F70044C65667406426F74 + 746F6D0552696768740005416C69676E0703546F700A506F736974696F6E2E58 + 05000000000000008000400A506F736974696F6E2E5905000000000000008000 + 400A53697A652E5769647468050000000000FFFFE105400B53697A652E486569 + 6768740500000000000000A803401453697A652E506C6174666F726D44656661 + 756C7408000007544C61796F757400095374796C654E616D650607636F6E7465 + 6E7405416C69676E0706436C69656E740C436C69704368696C6472656E090A53 + 697A652E5769647468050000000000FFFFC105400B53697A652E486569676874 + 0500000000000000B405401453697A652E506C6174666F726D44656661756C74 + 08000A5452656374616E676C6500095374796C654E616D65060973656C656374 + 696F6E0A46696C6C2E436F6C6F72070978464632413832453207486974546573 + 74080A53697A652E57696474680500000000000000C804400B53697A652E4865 + 696768740500000000000000C804401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65075852616469757305 + 00000000000000C0004007595261646975730500000000000000C0004000000A + 5452656374616E676C6500095374796C654E616D650605666F6375730A46696C + 6C2E436F6C6F7207097841463241383245320748697454657374080C4D617267 696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F7005 0000000000000080FF3F0D4D617267696E732E52696768740500000000000000 - 80FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A506F - 736974696F6E2E58050000000000000080FF3F0A506F736974696F6E2E590500 - 0000000099998904400A53697A652E576964746805000000000033338105400B - 53697A652E4865696768740500000000000000A803401453697A652E506C6174 + 80FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A5369 + 7A652E57696474680500000000000000C804400B53697A652E48656967687405 + 00000000000000C804401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E650758526164697573050000000000 + 0000C0004007595261646975730500000000000000C000400000000A54536372 + 6F6C6C42617200095374796C654E616D65060A767363726F6C6C62617205416C + 69676E070552696768740B536D616C6C4368616E676505000000000000000000 + 000B4F7269656E746174696F6E0708566572746963616C0A506F736974696F6E + 2E58050000000000FFFFC505400A506F736974696F6E2E590500000000000000 + B803400A53697A652E576964746805000000000000008003400B53697A652E48 + 65696768740500000000000000B405401453697A652E506C6174666F726D4465 + 6661756C740800000A545363726F6C6C42617200095374796C654E616D65060A + 687363726F6C6C62617205416C69676E0706426F74746F6D0B536D616C6C4368 + 616E676505000000000000000000000B4F7269656E746174696F6E070A486F72 + 697A6F6E74616C0A506F736974696F6E2E5805000000000000008000400A506F + 736974696F6E2E590500000000000000E205400A53697A652E57696474680500 + 00000000FFFFE105400B53697A652E4865696768740500000000000000800340 + 1453697A652E506C6174666F726D44656661756C740800000F54536D616C6C53 + 63726F6C6C42617200095374796C654E616D65060F76736D616C6C7363726F6C + 6C62617205416C69676E070552696768740B536D616C6C4368616E6765050000 + 00000000000000000B4F7269656E746174696F6E0708566572746963616C0C4D + 617267696E732E4C65667405000000000000008000400A506F736974696F6E2E + 580500000000000000C605400A506F736974696F6E2E59050000000000000080 + 00400A53697A652E576964746805000000000000008002400B53697A652E4865 + 6967687405000000000000008002401453697A652E506C6174666F726D446566 + 61756C74080756697369626C650800000F54536D616C6C5363726F6C6C426172 + 00095374796C654E616D65060F68736D616C6C7363726F6C6C62617205416C69 + 676E0706426F74746F6D0B536D616C6C4368616E676505000000000000000000 + 000B4F7269656E746174696F6E070A486F72697A6F6E74616C0B4D617267696E + 732E546F7005000000000000008000400A506F736974696F6E2E580500000000 + 0000008000400A506F736974696F6E2E590500000000000000E205400A53697A + 652E576964746805000000000000009606400B53697A652E4865696768740500 + 0000000000008002401453697A652E506C6174666F726D44656661756C740807 + 56697369626C6508000000005450463007544C61796F757400095374796C654E + 616D65060D67726F7570626F787374796C6505416C69676E070643656E746572 + 0A53697A652E57696474680500000000000000F004400B53697A652E48656967 + 68740500000000000000C804401453697A652E506C6174666F726D4465666175 + 6C74080756697369626C6508085461624F726465720207000A5452656374616E + 676C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E + 0708436F6E74656E74730946696C6C2E4B696E6407044E6F6E65074869745465 + 7374080C4D617267696E732E4C6566740500000000000000C000400B4D617267 + 696E732E546F7005000000000000009002400D4D617267696E732E5269676874 + 0500000000000000C000400E4D617267696E732E426F74746F6D050000000000 + 0000C000400A53697A652E57696474680500000000000000D804400B53697A65 + 2E48656967687405000000000000009804401453697A652E506C6174666F726D + 44656661756C74080C5374726F6B652E436F6C6F720709784646313531353135 + 07585261646975730500000000000000C0004007595261646975730500000000 + 000000C000400005545465787400095374796C654E616D650604746578740841 + 75746F53697A65090A436C6970506172656E74090748697454657374080C4D61 + 7267696E732E4C6566740500000000000000A002400A506F736974696F6E2E58 + 05000000000060559502400A506F736974696F6E2E590500000000004055D501 + C00A53697A652E576964746805000000000000B8C703400B53697A652E486569 + 6768740500000000000060FF02401453697A652E506C6174666F726D44656661 + 756C7408165465787453657474696E67732E466F6E74436F6C6F720708636C61 + 5768697465155465787453657474696E67732E576F7264577261700800000000 + 5450463007544C61796F757400095374796C654E616D65060F68656164657269 + 74656D7374796C6505416C69676E070643656E7465720A53697A652E57696474 + 6805000000000000009205400B53697A652E4865696768740500000000000000 + D003401453697A652E506C6174666F726D44656661756C74080756697369626C + 6508085461624F726465720208000A5452656374616E676C6500095374796C65 + 4E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E7473 + 0A46696C6C2E436F6C6F720709784646344334433443064C6F636B6564090748 + 697454657374080A53697A652E576964746805000000000000009205400B5369 + 7A652E4865696768740500000000000000D003401453697A652E506C6174666F + 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 + 313507585261646975730500000000000000C000400759526164697573050000 + 0000000000C00040000F54436F6C6F72416E696D6174696F6E00095374796C65 + 4E616D650615686561646572436F6C6F72416E696D6174696F6E310844757261 + 74696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A4669 + 6C6C2E436F6C6F720A537461727456616C756507097846463443344334430953 + 746F7056616C756507097846463241383245320754726967676572060E497350 + 7265737365643D747275650E54726967676572496E7665727365060F49735072 + 65737365643D66616C736500000F54436F6C6F72416E696D6174696F6E000953 + 74796C654E616D6506166865616465725374726F6B65416E696D6174696F6E31 + 084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D + 65060C5374726F6B652E436F6C6F720A537461727456616C7565070978464631 + 35313531350953746F7056616C75650709784646324138324532075472696767 + 6572060E4973507265737365643D747275650E54726967676572496E76657273 + 65060F4973507265737365643D66616C73650000000554546578740009537479 + 6C654E616D6506047465787405416C69676E0706436C69656E74064C6F636B65 + 64090748697454657374080C4D617267696E732E4C6566740500000000000000 + A001400B4D617267696E732E546F7005000000000000008000400D4D61726769 + 6E732E52696768740500000000000000A001400E4D617267696E732E426F7474 + 6F6D05000000000000008000400A53697A652E57696474680500000000000000 + FC04400B53697A652E4865696768740500000000000000B003401453697A652E + 506C6174666F726D44656661756C7408165465787453657474696E67732E466F + 6E74436F6C6F720708636C6157686974650000005450463007544C61796F7574 + 00095374796C654E616D65060E696D61676563656C6C7374796C6505416C6967 + 6E070643656E7465720756697369626C6508085461624F726465720209000654 + 496D61676500095374796C654E616D650605696D6167650E4D756C7469526573 + 4269746D61700E01000005416C69676E0706436C69656E74064C6F636B656409 + 0748697454657374080C4D617267696E732E4C656674050000000000000080FF + 3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E73 + 2E5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D + 050000000000000080FF3F0A53697A652E57696474680500000000000000C004 + 400B53697A652E4865696768740500000000000000C004401453697A652E506C + 6174666F726D44656661756C74080000005450463007544C61796F7574000953 + 74796C654E616D65060A6C6162656C7374796C6505416C69676E070643656E74 + 65720A53697A652E57696474680500000000000000C805400B53697A652E4865 + 696768740500000000000000C803401453697A652E506C6174666F726D446566 + 61756C74080756697369626C6508085461624F72646572020A00055454657874 + 00095374796C654E616D6506047465787405416C69676E0708436F6E74656E74 + 730748697454657374080A53697A652E57696474680500000000000000C80540 + 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 + 74666F726D44656661756C7408165465787453657474696E67732E466F6E7443 + 6F6C6F720708636C6157686974650000005450463007544C61796F7574000953 + 74796C654E616D65060D6C697374626F78666F6F74657205416C69676E070643 + 656E7465720A53697A652E576964746805000000000000009205400B53697A65 + 2E4865696768740500000000000000D003401453697A652E506C6174666F726D + 44656661756C74080756697369626C6508085461624F72646572020B00055454 + 65787400095374796C654E616D6506047465787405416C69676E0706436C6965 + 6E74064C6F636B6564090748697454657374080C4D617267696E732E4C656674 + 0500000000000000A001400B4D617267696E732E546F70050000000000000080 + 00400D4D617267696E732E52696768740500000000000000A001400E4D617267 + 696E732E426F74746F6D05000000000000008000400A53697A652E5769647468 + 0500000000000000FC04400B53697A652E4865696768740500000000000000B0 + 03401453697A652E506C6174666F726D44656661756C74081654657874536574 + 74696E67732E466F6E74436F6C6F720708636C61576869746500000054504630 + 07544C61796F757400095374796C654E616D6506106C697374626F786974656D + 7374796C6505416C69676E070643656E7465720A53697A652E57696474680500 + 000000000000D605400B53697A652E4865696768740500000000000000C00340 + 1453697A652E506C6174666F726D44656661756C74080756697369626C650808 + 5461624F72646572020C000654476C79706800095374796C654E616D65060A67 + 6C7970687374796C650C4D617267696E732E4C65667405000000000000008000 + 400B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E73 + 2E526967687405000000000000008000400E4D617267696E732E426F74746F6D + 050000000000000080FF3F05416C69676E07044C6566740A506F736974696F6E + 2E5805000000000000008000400A506F736974696F6E2E590500000000000000 + 80FF3F0A53697A652E576964746805000000000000008003400B53697A652E48 + 65696768740500000000000000B003401453697A652E506C6174666F726D4465 + 6661756C7408000005545465787400095374796C654E616D6506047465787405 + 416C69676E0706436C69656E740748697454657374080C4D617267696E732E4C + 6566740500000000000000C000400B4D617267696E732E546F70050000000000 + 000080FF3F0D4D617267696E732E52696768740500000000000000C000400E4D + 617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E5769 + 6474680500000000000000CA05400B53697A652E486569676874050000000000 + 0000B003401453697A652E506C6174666F726D44656661756C74081654657874 + 53657474696E67732E466F6E74436F6C6F720708636C61576869746515546578 + 7453657474696E67732E576F72645772617008165465787453657474696E6773 + 2E486F727A416C69676E07074C656164696E6700000954436865636B426F7800 + 095374796C654E616D650605636865636B05416C69676E07084D6F73744C6566 + 740843616E466F637573081244697361626C65466F637573456666656374090A + 53697A652E57696474680500000000000000A003400B53697A652E4865696768 + 740500000000000000C003401453697A652E506C6174666F726D44656661756C + 74080756697369626C65080000005450463007544C61796F757400095374796C + 654E616D6506126C697374626F78706C61696E68656164657205416C69676E07 + 0643656E7465720A53697A652E576964746805000000000000009205400B5369 + 7A652E4865696768740500000000000000D003401453697A652E506C6174666F + 726D44656661756C74080756697369626C6508085461624F72646572020D000A + 5452656374616E676C6500095374796C654E616D65060A6261636B67726F756E + 6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846 + 46324432443244064C6F636B6564090748697454657374080A53697A652E5769 + 64746805000000000000009205400B53697A652E486569676874050000000000 + 0000D003401453697A652E506C6174666F726D44656661756C74080C5374726F + 6B652E436F6C6F72070978464631353135313507585261646975730500000000 + 000000C0004007595261646975730500000000000000C0004000000554546578 + 7400095374796C654E616D6506047465787405416C69676E0706436C69656E74 + 064C6F636B6564090748697454657374080C4D617267696E732E4C6566740500 + 000000000000A001400B4D617267696E732E546F700500000000000000800040 + 0D4D617267696E732E52696768740500000000000000A001400E4D617267696E + 732E426F74746F6D05000000000000008000400A53697A652E57696474680500 + 000000000000FC04400B53697A652E4865696768740500000000000000B00340 + 1453697A652E506C6174666F726D44656661756C740816546578745365747469 + 6E67732E466F6E74436F6C6F720708636C615768697465000000545046300754 + 4C61796F757400095374796C654E616D65060C6C697374626F787374796C6505 + 416C69676E070643656E7465720A53697A652E5769647468050000000000FFFF + E905400B53697A652E48656967687405000000000000008306401453697A652E + 506C6174666F726D44656661756C74080756697369626C6508085461624F7264 + 6572020E000C5442727573684F626A65637400095374796C654E616D65061841 + 6C7465726E6174696E67526F774261636B67726F756E640B42727573682E436F + 6C6F72070978464632433243324300000A5452656374616E676C650009537479 + 6C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E + 74730A46696C6C2E436F6C6F720709784646323032303230064C6F636B656409 + 0748697454657374080C50616464696E672E4C65667405000000000000008000 + 400B50616464696E672E546F7005000000000000008000400D50616464696E67 + 2E526967687405000000000000008000400E50616464696E672E426F74746F6D + 05000000000000008000400A53697A652E5769647468050000000000FFFFE905 + 400B53697A652E48656967687405000000000000008306401453697A652E506C + 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 + 31353135313507585261646975730500000000000000C0004007595261646975 + 730500000000000000C000400007544C61796F757400095374796C654E616D65 + 0607636F6E74656E7405416C69676E0706436C69656E740C436C69704368696C + 6472656E090A53697A652E5769647468050000000000FFFFC105400B53697A65 + 2E4865696768740500000000000000DE05401453697A652E506C6174666F726D + 44656661756C7408000A5452656374616E676C6500095374796C654E616D6506 + 0973656C656374696F6E0A46696C6C2E436F6C6F720709784646324138324532 + 0748697454657374080A53697A652E57696474680500000000000000C804400B + 53697A652E4865696768740500000000000000C804401453697A652E506C6174 + 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650758 + 5261646975730500000000000000C00040075952616469757305000000000000 + 00C0004000000A5452656374616E676C6500095374796C654E616D650610666F + 637573656473656C656374696F6E0A46696C6C2E436F6C6F7207097846463241 + 383245320748697454657374080A53697A652E57696474680500000000000000 + C804400B53697A652E4865696768740500000000000000C804401453697A652E + 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F + 6E650B5374726F6B652E446173680703446F7407585261646975730500000000 + 000000C0004007595261646975730500000000000000C000400000000A545363 + 726F6C6C42617200095374796C654E616D65060A767363726F6C6C6261720541 + 6C69676E070552696768740B536D616C6C4368616E6765050000000000000000 + 00000B4F7269656E746174696F6E0708566572746963616C0A506F736974696F + 6E2E58050000000000FFFFC505400A506F736974696F6E2E5905000000000000 + 008000400A53697A652E576964746805000000000000008003400B53697A652E + 4865696768740500000000000000DE05401453697A652E506C6174666F726D44 + 656661756C740800000A545363726F6C6C42617200095374796C654E616D6506 + 0A687363726F6C6C62617205416C69676E0706426F74746F6D0B536D616C6C43 + 68616E676505000000000000000000000B4F7269656E746174696F6E070A486F + 72697A6F6E74616C0A506F736974696F6E2E5805000000000000008000400A50 + 6F736974696F6E2E590500000000000000E205400A53697A652E576964746805 + 0000000000FFFFE105400B53697A652E48656967687405000000000000008003 + 401453697A652E506C6174666F726D44656661756C740800000F54536D616C6C + 5363726F6C6C42617200095374796C654E616D65060F76736D616C6C7363726F + 6C6C62617205416C69676E070552696768740B536D616C6C4368616E67650500 + 0000000000000000000B4F7269656E746174696F6E0708566572746963616C0C + 4D617267696E732E4C65667405000000000000008000400A506F736974696F6E + 2E580500000000000000C605400A506F736974696F6E2E590500000000000000 + 8000400A53697A652E576964746805000000000000008002400B53697A652E48 + 656967687405000000000000008002401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C650800000F54536D616C6C5363726F6C6C4261 + 7200095374796C654E616D65060F68736D616C6C7363726F6C6C62617205416C + 69676E0706426F74746F6D0B536D616C6C4368616E6765050000000000000000 + 00000B4F7269656E746174696F6E070A486F72697A6F6E74616C0B4D61726769 + 6E732E546F7005000000000000008000400A506F736974696F6E2E5805000000 + 000000008000400A506F736974696F6E2E590500000000000000E205400A5369 + 7A652E576964746805000000000000009606400B53697A652E48656967687405 + 000000000000008002401453697A652E506C6174666F726D44656661756C7408 + 0756697369626C6508000000005450463007544C61796F757400095374796C65 + 4E616D65060E706F70757063656C6C7374796C6505416C69676E070643656E74 + 65720756697369626C6508085461624F72646572020F0007544C61796F757400 + 05416C69676E070552696768740A506F736974696F6E2E580500000000000000 + 8C04400A53697A652E57696474680500000000000000F002400B53697A652E48 + 65696768740500000000000000C804401453697A652E506C6174666F726D4465 + 6661756C7408000554506174680005416C69676E070643656E74657209446174 + 612E506174680A400000000500000000000000000000000000803F0100000000 + 00803F0000803F010000000000003F0000000001000000000000000000803F03 + 00000000000000000000000A46696C6C2E436F6C6F720708636C615768697465 + 0748697454657374080B4D617267696E732E546F700500000000000000E001C0 + 0A53697A652E576964746805000000000000008002400B53697A652E48656967 + 687405000000000000008001401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E650000055450617468000541 + 6C69676E070643656E74657209446174612E506174680A340000000400000000 + 0000000000000000000000010000000000803F00000000010000000000003F00 + 00803F0300000000000000000000000A46696C6C2E436F6C6F720708636C6157 + 686974650748697454657374080B4D617267696E732E546F7005000000000000 + 00C001400A53697A652E576964746805000000000000008002400B53697A652E + 48656967687405000000000000008001401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000005545465 + 787400095374796C654E616D6506047465787405416C69676E0706436C69656E + 74064C6F636B6564090748697454657374080C4D617267696E732E4C65667405 + 00000000000000A001400B4D617267696E732E546F7005000000000000008000 + 400D4D617267696E732E52696768740500000000000000A001400E4D61726769 + 6E732E426F74746F6D05000000000000008000400A53697A652E576964746805 + 00000000000000C803400B53697A652E4865696768740500000000000000B804 + 401453697A652E506C6174666F726D44656661756C7408165465787453657474 + 696E67732E466F6E74436F6C6F720708636C6157686974650000005450463007 + 544C61796F757400095374796C654E616D65061070726F677265737362617273 + 74796C6505416C69676E070643656E7465720A53697A652E5769647468050000 + 00000033338505400B53697A652E4865696768740500000000009999E1044014 + 53697A652E506C6174666F726D44656661756C74080756697369626C65080854 + 61624F726465720210000A5452656374616E676C6500095374796C654E616D65 + 060668747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F + 6C6F720709784646323032303230064C6F636B6564090748697454657374080A + 53697A652E576964746805000000000033338505400B53697A652E4865696768 + 740500000000009999E104401453697A652E506C6174666F726D44656661756C + 74080C5374726F6B652E436F6C6F720709784646313531353135075852616469 + 75730500000000000000C0004007595261646975730500000000000000C00040 + 000A5452656374616E676C6500095374796C654E616D65060A68696E64696361 + 746F7205416C69676E07044C6566740A46696C6C2E436F6C6F72070978464632 + 4138324532064C6F636B6564090748697454657374080C4D617267696E732E4C + 656674050000000000000080FF3F0B4D617267696E732E546F70050000000000 + 000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D + 617267696E732E426F74746F6D050000000000000080FF3F0A506F736974696F + 6E2E58050000000000000080FF3F0A506F736974696F6E2E5905000000000000 + 0080FF3F0A53697A652E57696474680500000000000000C804400B53697A652E + 4865696768740500000000009999D904401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6507585261646975 + 730500000000000000C0004007595261646975730500000000000000C0004000 + 00000A5452656374616E676C6500095374796C654E616D65060676747261636B + 05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646 + 323032303230064C6F636B6564090748697454657374080A53697A652E576964 + 746805000000000033338505400B53697A652E48656967687405000000000099 + 99E104401453697A652E506C6174666F726D44656661756C74080C5374726F6B + 652E436F6C6F7207097846463135313531350758526164697573050000000000 + 0000C0004007595261646975730500000000000000C00040000A545265637461 + 6E676C6500095374796C654E616D65060A76696E64696361746F7205416C6967 + 6E0706426F74746F6D0A46696C6C2E436F6C6F72070978464632413832453206 + 4C6F636B6564090748697454657374080C4D617267696E732E4C656674050000 + 000000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D + 4D617267696E732E5269676874050000000000000080FF3F0E4D617267696E73 + 2E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E58050000 + 000000000080FF3F0A506F736974696F6E2E5905000000000099998904400A53 + 697A652E576964746805000000000033338105400B53697A652E486569676874 + 0500000000000000A803401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E6507585261646975730500000000 + 000000C0004007595261646975730500000000000000C0004000000000545046 + 3007544C61796F757400095374796C654E616D65061170726F67726573736365 + 6C6C7374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 0500000000000000F805400B53697A652E4865696768740500000000000000FC + 05401453697A652E506C6174666F726D44656661756C74080756697369626C65 + 08085461624F7264657202110007544C61796F757400095374796C654E616D65 + 060668747261636B05416C69676E0708436F6E74656E7473064C6F636B656409 + 0C4D617267696E732E4C65667405000000000000008000400B4D617267696E73 + 2E546F7005000000000000008000400D4D617267696E732E5269676874050000 + 00000000008000400E4D617267696E732E426F74746F6D050000000000000080 + 00400A53697A652E57696474680500000000000000F005400B53697A652E4865 + 696768740500000000000000F405401453697A652E506C6174666F726D446566 + 61756C7408000A5452656374616E676C6500095374796C654E616D65060A6869 + 6E64696361746F7205416C69676E07044C6566740A46696C6C2E436F6C6F7207 + 09784646324138324532064C6F636B6564090748697454657374080C4D617267 + 696E732E4C65667405000000000000008000400B4D617267696E732E546F7005 + 000000000000008000400D4D617267696E732E52696768740500000000000000 + 8000400E4D617267696E732E426F74746F6D05000000000000008000400A506F + 736974696F6E2E5805000000000000008000400A506F736974696F6E2E590500 + 0000000000008000400A53697A652E57696474680500000000000000C804400B + 53697A652E4865696768740500000000000000EC05401453697A652E506C6174 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650758 5261646975730500000000000000C00040075952616469757305000000000000 00C00040000000005450463007544C61796F757400095374796C654E616D6506 - 1170726F677265737363656C6C7374796C6505416C69676E070643656E746572 - 0A53697A652E57696474680500000000000000F805400B53697A652E48656967 - 68740500000000000000FC05401453697A652E506C6174666F726D4465666175 - 6C74080756697369626C6508085461624F7264657202100007544C61796F7574 - 00095374796C654E616D65060668747261636B05416C69676E0708436F6E7465 - 6E7473064C6F636B6564090C4D617267696E732E4C6566740500000000000000 - 8000400B4D617267696E732E546F7005000000000000008000400D4D61726769 - 6E732E526967687405000000000000008000400E4D617267696E732E426F7474 - 6F6D05000000000000008000400A53697A652E57696474680500000000000000 - F005400B53697A652E4865696768740500000000000000F405401453697A652E - 506C6174666F726D44656661756C7408000A5452656374616E676C6500095374 - 796C654E616D65060A68696E64696361746F7205416C69676E07044C6566740A - 46696C6C2E436F6C6F720709784646324138324532064C6F636B656409074869 - 7454657374080C4D617267696E732E4C65667405000000000000008000400B4D - 617267696E732E546F7005000000000000008000400D4D617267696E732E5269 - 67687405000000000000008000400E4D617267696E732E426F74746F6D050000 - 00000000008000400A506F736974696F6E2E5805000000000000008000400A50 - 6F736974696F6E2E5905000000000000008000400A53697A652E576964746805 - 00000000000000C804400B53697A652E4865696768740500000000000000EC05 - 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B - 696E6407044E6F6E6507585261646975730500000000000000C0004007595261 - 646975730500000000000000C00040000000005450463007544C61796F757400 - 095374796C654E616D6506157363726F6C6C626172626F74746F6D627574746F - 6E05416C69676E070643656E7465720756697369626C6508085461624F726465 - 720211000A5452656374616E676C6500095374796C654E616D65060A6261636B - 67726F756E6405416C69676E0706436C69656E740C436C69704368696C647265 - 6E090A436C6970506172656E740907436F726E6572730B0A426F74746F6D4C65 - 66740B426F74746F6D5269676874000A46696C6C2E436F6C6F72070978464632 - 30323032300748697454657374080A53697A652E576964746805000000000000 - 00C804400B53697A652E4865696768740500000000000000C804401453697A65 - 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E - 6F6E6507585261646975730500000000000000C0004007595261646975730500 - 000000000000C00040000F54436F6C6F72416E696D6174696F6E00095374796C - 654E616D650615627574746F6E436F6C6F72416E696D6174696F6E3108447572 - 6174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46 - 696C6C2E436F6C6F720A537461727456616C7565070978464632303230323009 - 53746F7056616C75650709784646343034303430075472696767657206204973 - 4D6F7573654F7665723D747275653B4973507265737365643D66616C73650E54 - 726967676572496E7665727365062149734D6F7573654F7665723D66616C7365 - 3B4973507265737365643D66616C736500000F54436F6C6F72416E696D617469 - 6F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174 - 696F6E32084475726174696F6E05000000000000000000000C50726F70657274 - 794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507097846 - 463430343034300953746F7056616C7565070978464631373537394307547269 - 67676572061F4973507265737365643D747275653B49734D6F7573654F766572 - 3D747275650E54726967676572496E766572736506204973507265737365643D - 66616C73653B49734D6F7573654F7665723D7472756500000007544C61796F75 - 7400095374796C654E616D6506074C61796F75743105416C69676E070643656E - 7465720A53697A652E57696474680500000000000000A002400B53697A652E48 - 65696768740500000000000000C001401453697A652E506C6174666F726D4465 - 6661756C74080005545061746800095374796C654E616D650605506174683105 - 416C69676E0706436C69656E7409446174612E506174680A3400000004000000 - 000000000000C8420000C84201000000000096430000C8420100000000004843 - 00009643030000000000C8420000C8420A46696C6C2E436F6C6F720708636C61 - 57686974650748697454657374080A53697A652E576964746805000000000000 - 00A002400B53697A652E4865696768740500000000000000C001401453697A65 - 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E - 6F6E6500000000545046300A5452656374616E676C6500095374796C654E616D - 6506147363726F6C6C62617268747261636B7374796C6505416C69676E070643 - 656E7465720A46696C6C2E436F6C6F7207097846463135313531350748697454 - 657374080A53697A652E57696474680500000000000000C804400B53697A652E - 4865696768740500000000000000C804401453697A652E506C6174666F726D44 - 656661756C74080B5374726F6B652E4B696E6407044E6F6E650756697369626C - 65080006545468756D6200095374796C654E616D6506057468756D62064C6F63 - 6B6564090A53697A652E576964746805000000000000008003400B53697A652E - 4865696768740500000000000000C804401453697A652E506C6174666F726D44 - 656661756C74080B5374796C654C6F6F6B7570060A7468756D627374796C6500 - 00005450463007544C61796F757400095374796C654E616D6506137363726F6C - 6C6261726C656674627574746F6E05416C69676E070643656E74657207566973 - 69626C6508085461624F726465720212000A5452656374616E676C6500095374 - 796C654E616D65060A6261636B67726F756E6405416C69676E0706436C69656E - 740C436C69704368696C6472656E090A436C6970506172656E740907436F726E - 6572730B07546F704C6566740A426F74746F6D4C656674000A46696C6C2E436F - 6C6F7207097846463230323032300748697454657374080A53697A652E576964 - 74680500000000000000C804400B53697A652E48656967687405000000000000 - 00C804401453697A652E506C6174666F726D44656661756C74080B5374726F6B - 652E4B696E6407044E6F6E6507585261646975730500000000000000C0004007 - 595261646975730500000000000000C00040000F54436F6C6F72416E696D6174 - 696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D61 - 74696F6E31084475726174696F6E050000000000CDCCCCFB3F0C50726F706572 - 74794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978 - 46463230323032300953746F7056616C75650709784646343034303430075472 - 6967676572062049734D6F7573654F7665723D747275653B4973507265737365 - 643D66616C73650E54726967676572496E7665727365062149734D6F7573654F - 7665723D66616C73653B4973507265737365643D66616C736500000F54436F6C - 6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E436F - 6C6F72416E696D6174696F6E32084475726174696F6E05000000000000000000 - 000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374617274 - 56616C756507097846463430343034300953746F7056616C7565070978464631 - 37353739430754726967676572061F4973507265737365643D747275653B4973 - 4D6F7573654F7665723D747275650E54726967676572496E7665727365062049 - 73507265737365643D66616C73653B49734D6F7573654F7665723D7472756500 - 000007544C61796F757400095374796C654E616D6506074C61796F7574310541 - 6C69676E070643656E7465720A53697A652E57696474680500000000000000A0 - 02400B53697A652E4865696768740500000000000000C001401453697A652E50 - 6C6174666F726D44656661756C74080005545061746800095374796C654E616D - 650605506174683105416C69676E0706436C69656E7409446174612E50617468 - 0A3400000004000000000000000000C8420000C84201000000000096430000C8 - 42010000000000484300009643030000000000C8420000C8420A46696C6C2E43 - 6F6C6F720708636C6157686974650748697454657374080D526F746174696F6E - 416E676C650500000000000000B405400A53697A652E57696474680500000000 - 000000A002400B53697A652E4865696768740500000000000000C00140145369 - 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 - 044E6F6E65000000005450463007544C61796F757400095374796C654E616D65 - 06147363726F6C6C6261727269676874627574746F6E05416C69676E07064365 - 6E7465720756697369626C6508085461624F726465720213000A545265637461 + 157363726F6C6C626172626F74746F6D627574746F6E05416C69676E07064365 + 6E7465720756697369626C6508085461624F726465720212000A545265637461 6E676C6500095374796C654E616D65060A6261636B67726F756E6405416C6967 6E0706436C69656E740C436C69704368696C6472656E090A436C697050617265 - 6E740907436F726E6572730B08546F7052696768740B426F74746F6D52696768 - 74000A46696C6C2E436F6C6F7207097846463230323032300748697454657374 - 080A53697A652E57696474680500000000000000C804400B53697A652E486569 - 6768740500000000000000C804401453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E6507585261646975730500 - 000000000000C0004007595261646975730500000000000000C00040000F5443 - 6F6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E - 436F6C6F72416E696D6174696F6E31084475726174696F6E050000000000CDCC - CCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461 - 727456616C756507097846463230323032300953746F7056616C756507097846 - 463430343034300754726967676572062049734D6F7573654F7665723D747275 - 653B4973507265737365643D66616C73650E54726967676572496E7665727365 - 062149734D6F7573654F7665723D66616C73653B4973507265737365643D6661 - 6C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 - 0615627574746F6E436F6C6F72416E696D6174696F6E32084475726174696F6E - 05000000000000000000000C50726F70657274794E616D65060A46696C6C2E43 - 6F6C6F720A537461727456616C756507097846463430343034300953746F7056 - 616C756507097846463137353739430754726967676572061F49735072657373 - 65643D747275653B49734D6F7573654F7665723D747275650E54726967676572 - 496E766572736506204973507265737365643D66616C73653B49734D6F757365 - 4F7665723D7472756500000007544C61796F757400095374796C654E616D6506 - 074C61796F75743105416C69676E070643656E7465720A53697A652E57696474 - 680500000000000000A002400B53697A652E4865696768740500000000000000 - C001401453697A652E506C6174666F726D44656661756C740800055450617468 - 00095374796C654E616D650605506174683105416C69676E0706436C69656E74 - 09446174612E506174680A3400000004000000000000000000C8420000C84201 - 000000000096430000C842010000000000484300009643030000000000C84200 - 00C8420A46696C6C2E436F6C6F720708636C6157686974650748697454657374 - 080D526F746174696F6E416E676C650500000000000000B405C00A53697A652E - 57696474680500000000000000A002400B53697A652E48656967687405000000 - 00000000C001401453697A652E506C6174666F726D44656661756C74080B5374 - 726F6B652E4B696E6407044E6F6E65000000005450463007544C61796F757400 - 095374796C654E616D65060E7363726F6C6C6261727374796C6505416C69676E - 070643656E7465720756697369626C6508085461624F72646572021400075442 - 7574746F6E00095374796C654E616D65060A6C656674627574746F6E05416C69 - 676E07044C656674064C6F636B6564090A506F736974696F6E2E590500000000 - 0000008003400A53697A652E576964746805000000000000008003400B53697A - 652E48656967687405000000000000009003401453697A652E506C6174666F72 - 6D44656661756C74080B5374796C654C6F6F6B757006137363726F6C6C626172 - 6C656674627574746F6E00000754427574746F6E00095374796C654E616D6506 - 0B7269676874627574746F6E05416C69676E07055269676874064C6F636B6564 - 090A506F736974696F6E2E5805000000000000008804400A506F736974696F6E - 2E5905000000000000008003400A53697A652E57696474680500000000000000 - 8003400B53697A652E48656967687405000000000000009003401453697A652E - 506C6174666F726D44656661756C74080B5374796C654C6F6F6B757006147363 - 726F6C6C6261727269676874627574746F6E00000754427574746F6E00095374 - 796C654E616D65060C626F74746F6D627574746F6E05416C69676E0706426F74 - 746F6D064C6F636B6564090A506F736974696F6E2E5905000000000000008804 - 400A53697A652E57696474680500000000000000C804400B53697A652E486569 - 67687405000000000000008003401453697A652E506C6174666F726D44656661 - 756C74080B5374796C654C6F6F6B757006157363726F6C6C626172626F74746F - 6D627574746F6E00000654547261636B00095374796C654E616D650606687472 - 61636B05416C69676E0706436C69656E74064C6F636B6564090B4F7269656E74 - 6174696F6E070A486F72697A6F6E74616C0A53697A652E576964746805000000 - 000000009003400B53697A652E48656967687405000000000000009003401453 - 697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570 - 06147363726F6C6C62617268747261636B7374796C6500000654547261636B00 - 095374796C654E616D65060676747261636B05416C69676E0706436C69656E74 - 064C6F636B6564090B4F7269656E746174696F6E070A486F72697A6F6E74616C - 0A53697A652E576964746805000000000000009003400B53697A652E48656967 - 687405000000000000009003401453697A652E506C6174666F726D4465666175 - 6C74080B5374796C654C6F6F6B757006147363726F6C6C62617276747261636B - 7374796C6500000754427574746F6E00095374796C654E616D650609746F7062 - 7574746F6E05416C69676E0703546F700A53697A652E57696474680500000000 - 000000C804400B53697A652E4865696768740500000000000000800340145369 - 7A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B757006 - 127363726F6C6C626172746F70627574746F6E0000005450463007544C61796F - 757400095374796C654E616D6506127363726F6C6C626172746F70627574746F - 6E05416C69676E070643656E7465720756697369626C6508085461624F726465 - 720215000A5452656374616E676C6500095374796C654E616D65060A6261636B - 67726F756E6405416C69676E0706436C69656E740C436C69704368696C647265 - 6E090A436C6970506172656E740907436F726E6572730B07546F704C65667408 - 546F705269676874000A46696C6C2E436F6C6F72070978464632303230323007 - 48697454657374080A53697A652E57696474680500000000000000C804400B53 - 697A652E4865696768740500000000000000C804401453697A652E506C617466 - 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65075852 - 61646975730500000000000000C0004007595261646975730500000000000000 - C00040000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 - 15627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E05 - 0000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F - 6C6F720A537461727456616C756507097846463230323032300953746F705661 - 6C756507097846463430343034300754726967676572062049734D6F7573654F - 7665723D747275653B4973507265737365643D66616C73650E54726967676572 - 496E7665727365062149734D6F7573654F7665723D66616C73653B4973507265 - 737365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 - 796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E320844 - 75726174696F6E05000000000000000000000C50726F70657274794E616D6506 - 0A46696C6C2E436F6C6F720A537461727456616C756507097846463430343034 - 300953746F7056616C756507097846463137353739430754726967676572061F - 4973507265737365643D747275653B49734D6F7573654F7665723D747275650E - 54726967676572496E766572736506204973507265737365643D66616C73653B - 49734D6F7573654F7665723D7472756500000007544C61796F75740009537479 - 6C654E616D6506074C61796F75743105416C69676E070643656E7465720A5369 - 7A652E57696474680500000000000000A002400B53697A652E48656967687405 - 00000000000000C001401453697A652E506C6174666F726D44656661756C7408 - 0005545061746800095374796C654E616D650605506174683105416C69676E07 - 06436C69656E7409446174612E506174680A3400000004000000000000000000 - C8420000C84201000000000096430000C8420100000000004843000096430300 - 00000000C8420000C8420A46696C6C2E436F6C6F720708636C61576869746507 - 48697454657374080D526F746174696F6E416E676C650500000000000000B406 - 400A53697A652E57696474680500000000000000A002400B53697A652E486569 + 6E740907436F726E6572730B0A426F74746F6D4C6566740B426F74746F6D5269 + 676874000A46696C6C2E436F6C6F720709784646323032303230074869745465 + 7374080A53697A652E57696474680500000000000000C804400B53697A652E48 + 65696768740500000000000000C804401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E650758526164697573 + 0500000000000000C0004007595261646975730500000000000000C00040000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D65061562757474 + 6F6E436F6C6F72416E696D6174696F6E31084475726174696F6E050000000000 + CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53 + 7461727456616C756507097846463230323032300953746F7056616C75650709 + 7846463430343034300754726967676572062049734D6F7573654F7665723D74 + 7275653B4973507265737365643D66616C73650E54726967676572496E766572 + 7365062149734D6F7573654F7665723D66616C73653B4973507265737365643D + 66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E61 + 6D650615627574746F6E436F6C6F72416E696D6174696F6E3208447572617469 + 6F6E05000000000000000000000C50726F70657274794E616D65060A46696C6C + 2E436F6C6F720A537461727456616C756507097846463430343034300953746F + 7056616C756507097846463137353739430754726967676572061F4973507265 + 737365643D747275653B49734D6F7573654F7665723D747275650E5472696767 + 6572496E766572736506204973507265737365643D66616C73653B49734D6F75 + 73654F7665723D7472756500000007544C61796F757400095374796C654E616D + 6506074C61796F75743105416C69676E070643656E7465720A53697A652E5769 + 6474680500000000000000A002400B53697A652E486569676874050000000000 + 0000C001401453697A652E506C6174666F726D44656661756C74080005545061 + 746800095374796C654E616D650605506174683105416C69676E0706436C6965 + 6E7409446174612E506174680A3400000004000000000000000000C8420000C8 + 4201000000000096430000C842010000000000484300009643030000000000C8 + 420000C8420A46696C6C2E436F6C6F720708636C615768697465074869745465 + 7374080A53697A652E57696474680500000000000000A002400B53697A652E48 + 65696768740500000000000000C001401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E650000000054504630 + 0A5452656374616E676C6500095374796C654E616D6506147363726F6C6C6261 + 7268747261636B7374796C6505416C69676E070643656E7465720A46696C6C2E + 436F6C6F7207097846463135313531350748697454657374080A53697A652E57 + 696474680500000000000000C804400B53697A652E4865696768740500000000 + 000000C804401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E650756697369626C65080006545468756D6200 + 095374796C654E616D6506057468756D62064C6F636B6564090A53697A652E57 + 6964746805000000000000008003400B53697A652E4865696768740500000000 + 000000C804401453697A652E506C6174666F726D44656661756C74080B537479 + 6C654C6F6F6B7570060A7468756D627374796C650000005450463007544C6179 + 6F757400095374796C654E616D6506137363726F6C6C6261726C656674627574 + 746F6E05416C69676E070643656E7465720756697369626C6508085461624F72 + 6465720213000A5452656374616E676C6500095374796C654E616D65060A6261 + 636B67726F756E6405416C69676E0706436C69656E740C436C69704368696C64 + 72656E090A436C6970506172656E740907436F726E6572730B07546F704C6566 + 740A426F74746F6D4C656674000A46696C6C2E436F6C6F720709784646323032 + 3032300748697454657374080A53697A652E57696474680500000000000000C8 + 04400B53697A652E4865696768740500000000000000C804401453697A652E50 + 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E + 6507585261646975730500000000000000C00040075952616469757305000000 + 00000000C00040000F54436F6C6F72416E696D6174696F6E00095374796C654E + 616D650615627574746F6E436F6C6F72416E696D6174696F6E31084475726174 + 696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C + 6C2E436F6C6F720A537461727456616C75650709784646323032303230095374 + 6F7056616C756507097846463430343034300754726967676572062049734D6F + 7573654F7665723D747275653B4973507265737365643D66616C73650E547269 + 67676572496E7665727365062149734D6F7573654F7665723D66616C73653B49 + 73507265737365643D66616C736500000F54436F6C6F72416E696D6174696F6E + 00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F + 6E32084475726174696F6E05000000000000000000000C50726F70657274794E + 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464634 + 30343034300953746F7056616C75650709784646313735373943075472696767 + 6572061F4973507265737365643D747275653B49734D6F7573654F7665723D74 + 7275650E54726967676572496E766572736506204973507265737365643D6661 + 6C73653B49734D6F7573654F7665723D7472756500000007544C61796F757400 + 095374796C654E616D6506074C61796F75743105416C69676E070643656E7465 + 720A53697A652E57696474680500000000000000A002400B53697A652E486569 6768740500000000000000C001401453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E6500000000545046300A54 - 52656374616E676C6500095374796C654E616D6506147363726F6C6C62617276 - 747261636B7374796C6505416C69676E070643656E7465720A46696C6C2E436F - 6C6F7207097846463135313531350748697454657374080A53697A652E576964 - 74680500000000000000C804400B53697A652E48656967687405000000000000 - 00C804401453697A652E506C6174666F726D44656661756C74080B5374726F6B - 652E4B696E6407044E6F6E650756697369626C65080006545468756D62000953 - 74796C654E616D6506057468756D62064C6F636B6564090A53697A652E576964 - 74680500000000000000C804400B53697A652E48656967687405000000000000 - 008003401453697A652E506C6174666F726D44656661756C74080B5374796C65 - 4C6F6F6B7570060A7468756D627374796C650000005450463007544C61796F75 - 7400095374796C654E616D65060C7370696E626F787374796C6505416C69676E - 070643656E7465720A53697A652E57696474680500000000006666E005400B53 - 697A652E4865696768740500000000000000A803401453697A652E506C617466 - 6F726D44656661756C74080756697369626C6508085461624F72646572021600 - 0A5452656374616E676C6500095374796C654E616D65060A6261636B67726F75 - 6E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978 - 46463230323032300A53697A652E57696474680500000000006666E005400B53 - 697A652E4865696768740500000000000000A803401453697A652E506C617466 - 6F726D44656661756C74080C5374726F6B652E436F6C6F720709784646313531 - 35313507585261646975730500000000000000C0004007595261646975730500 - 000000000000C00040000F54436F6C6F72416E696D6174696F6E00095374796C - 654E616D650614436F6C6F72416E696D6174696F6E315374796C650844757261 - 74696F6E050000000000CDCCCCFB3F07496E7665727365090C50726F70657274 - 794E616D65060C5374726F6B652E436F6C6F720A537461727456616C75650709 - 7846463135313531350953746F7056616C756507097846463430343034300754 - 726967676572061049734D6F7573654F7665723D747275650E54726967676572 - 496E7665727365061149734D6F7573654F7665723D66616C73650000000C5442 - 727573684F626A65637400095374796C654E616D65060A666F726567726F756E - 640B42727573682E436F6C6F72070978464645414541454100000C5442727573 - 684F626A65637400095374796C654E616D65060973656C656374696F6E0B4272 - 7573682E436F6C6F720709783936324138324532000007544C61796F75740009 - 5374796C654E616D650607636F6E74656E7405416C69676E0706436C69656E74 - 064C6F636B6564090C4D617267696E732E4C6566740500000000000000800040 - 0B4D617267696E732E546F7005000000000000008000400D4D617267696E732E - 526967687405000000000000008000400E4D617267696E732E426F74746F6D05 - 000000000000008000400A53697A652E57696474680500000000007066840540 - 0B53697A652E48656967687405000000000000008803401453697A652E506C61 - 74666F726D44656661756C740800000754427574746F6E00095374796C654E61 - 6D65060B6D696E7573627574746F6E05416C69676E07074669744C6566740843 - 616E466F6375730806437572736F72070763724172726F770C4D617267696E73 - 2E4C65667405000000000000008000400B4D617267696E732E546F7005000000 - 000000008000400D4D617267696E732E52696768740500000000000000800040 - 0E4D617267696E732E426F74746F6D05000000000000008000400A506F736974 - 696F6E2E5805000000000000008000400A506F736974696F6E2E590500000000 - 0000008000400A53697A652E5769647468050000000000E8FF8703400B53697A - 652E48656967687405000000000000008803401453697A652E506C6174666F72 - 6D44656661756C74080B5374796C654C6F6F6B7570060B627574746F6E737479 - 6C65000554506174680005416C69676E0706436C69656E7409446174612E5061 - 74680A4000000005000000000000000000803F00000000010000000000803F00 - 00803F01000000000000000000003F010000000000803F000000000300000000 - 00803F000000000A46696C6C2E436F6C6F720708636C61576869746507486974 - 54657374080C4D617267696E732E4C6566740500000000000000C001400B4D61 - 7267696E732E546F700500000000000000C001400D4D617267696E732E526967 - 68740500000000000000C001400E4D617267696E732E426F74746F6D05000000 - 00000000C001400A53697A652E5769647468050000000000A0FF9F01400B5369 - 7A652E4865696768740500000000000000A001401453697A652E506C6174666F - 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000007 - 54427574746F6E00095374796C654E616D65060A706C7573627574746F6E0541 - 6C69676E070846697452696768740843616E466F6375730806437572736F7207 - 0763724172726F770C4D617267696E732E4C6566740500000000000000800040 - 0B4D617267696E732E546F7005000000000000008000400D4D617267696E732E - 526967687405000000000000008000400E4D617267696E732E426F74746F6D05 - 000000000000008000400A506F736974696F6E2E580500000000006A66BA0540 - 0A506F736974696F6E2E5905000000000000008000400A53697A652E57696474 - 68050000000000F0FF8703400B53697A652E4865696768740500000000000000 - 8803401453697A652E506C6174666F726D44656661756C74080B5374796C654C - 6F6F6B7570060B627574746F6E7374796C65000554506174680005416C69676E - 0706436C69656E7409446174612E506174680A34000000040000000000000000 - 0000000000000001000000000000000000803F010000000000803F0000003F03 - 00000000000000000000000A46696C6C2E436F6C6F720708636C615768697465 - 0748697454657374080C4D617267696E732E4C6566740500000000000000C001 - 400B4D617267696E732E546F700500000000000000C001400D4D617267696E73 - 2E52696768740500000000000000C001400E4D617267696E732E426F74746F6D - 0500000000000000C001400A53697A652E5769647468050000000000C0FF9F01 - 400B53697A652E4865696768740500000000000000A001401453697A652E506C - 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 - 00000000545046300D545377697463684F626A65637400095374796C654E616D - 65060B7377697463687374796C6505416C69676E070643656E746572044B696E - 64070C466164696E67547261636B730A53697A652E5769647468050000000000 - 0000C805400B53697A652E4865696768740500000000000000C803401453697A - 652E506C6174666F726D44656661756C7408085461624F726465720217125472 - 61636B696E675468756D625363616C65050000000000000080FF3F0756697369 - 626C65080A46696C6C2E436F6C6F7207097846463230323032300C46696C6C4F - 6E2E436F6C6F7207097846463137353739430B46696C6C4F6E2E4B696E640705 - 536F6C69640B5374726F6B652E4B696E6407044E6F6E650B5468756D622E436F - 6C6F7207097846463430343034300D5468756D624F6E2E436F6C6F7207097846 - 463241383245320C5468756D624F6E2E4B696E640705536F6C6964105468756D - 625374726F6B652E4B696E6407044E6F6E650F5468756D625374726F6B652E43 - 61700705526F756E64105468756D625374726F6B652E44617368070643757374 - 6F6D105468756D625374726F6B652E4A6F696E0705526F756E64165468756D62 - 5374726F6B652E437573746F6D446173680A0800000000000000000000000553 - 686170650709526F756E645265637400005450463007544C61796F7574000953 - 74796C654E616D65060F746162636F6E74726F6C7374796C6505416C69676E07 - 0643656E7465720A53697A652E576964746805000000000000008E06400B5369 - 7A652E486569676874050000000000FFFFC905401453697A652E506C6174666F - 726D44656661756C74080756697369626C6508085461624F726465720218000A - 5452656374616E676C6500095374796C654E616D65060A6261636B67726F756E - 6405416C69676E0708436F6E74656E747307436F726E6572730B08546F705269 - 6768740A426F74746F6D4C6566740B426F74746F6D5269676874000A46696C6C - 2E436F6C6F720709784646333033303330064C6F636B65640907486974546573 - 74080C50616464696E672E4C65667405000000000000008000400B5061646469 - 6E672E546F7005000000000000008000400D50616464696E672E526967687405 - 000000000000008000400E50616464696E672E426F74746F6D05000000000000 - 008000400A53697A652E576964746805000000000000008E06400B53697A652E - 486569676874050000000000FFFFC905401453697A652E506C6174666F726D44 - 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313507 - 585261646975730500000000000000C000400759526164697573050000000000 - 0000C00040000000545046300A5452656374616E676C6500095374796C654E61 - 6D65060B746162646F747374796C6505416C69676E070643656E7465720A4669 - 6C6C2E436F6C6F7207097846463135313531350748697454657374080A53697A - 652E57696474680500000000000000C804400B53697A652E4865696768740500 - 000000000000C804401453697A652E506C6174666F726D44656661756C74080B - 5374726F6B652E4B696E6407044E6F6E650756697369626C6508075852616469 - 75730500000000000000C8034007595261646975730500000000000000C80340 - 000F54436F6C6F72416E696D6174696F6E00084475726174696F6E0500000000 - 00CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A - 537461727456616C756507097846463135313531350953746F7056616C756507 - 097846463241383245320754726967676572060F497353656C65637465643D74 - 7275650E54726967676572496E76657273650610497353656C65637465643D66 - 616C73650000005450463007544C61796F757400095374796C654E616D65060C - 7461626974656D7374796C6505416C69676E070643656E7465720A53697A652E - 57696474680500000000000000C804400B53697A652E48656967687405000000 - 00000000C803401453697A652E506C6174666F726D44656661756C7408075669 - 7369626C6508085461624F726465720219000A5452656374616E676C65000953 - 74796C654E616D650603746F7005416C69676E0708436F6E74656E74730C436C - 69704368696C6472656E0907436F726E6572730B07546F704C65667408546F70 - 5269676874000A46696C6C2E436F6C6F720709784646323032303230064C6F63 - 6B6564090748697454657374080553696465730B03546F70044C656674055269 - 676874000A53697A652E57696474680500000000000000C804400B53697A652E - 4865696768740500000000000000C803401453697A652E506C6174666F726D44 - 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313507 - 585261646975730500000000000000C000400759526164697573050000000000 - 0000C00040000654476C79706800095374796C654E616D65060A676C79706873 - 74796C650C4D617267696E732E4C65667405000000000000008001400D4D6172 - 67696E732E526967687405000000000000008001C005416C69676E07044C6566 - 740A506F736974696F6E2E5805000000000000008001400A53697A652E576964 - 746805000000000000008003400B53697A652E48656967687405000000000000 - 00C803401453697A652E506C6174666F726D44656661756C7408000005545465 - 787400095374796C654E616D6506047465787405416C69676E0706436C69656E - 74064C6F636B6564090748697454657374080C4D617267696E732E4C65667405 - 00000000000000C000400B4D617267696E732E546F700500000000000000C000 - 400D4D617267696E732E52696768740500000000000000C000400E4D61726769 - 6E732E426F74746F6D0500000000000000C000400A53697A652E576964746805 - 00000000000000B004400B53697A652E48656967687405000000000000009803 - 401453697A652E506C6174666F726D44656661756C7408165465787453657474 - 696E67732E466F6E74436F6C6F720708636C6157686974651554657874536574 - 74696E67732E576F7264577261700800000F54436F6C6F72416E696D6174696F - 6E00095374796C654E616D650612746162436F6C6F72416E696D6174696F6E31 - 0D416E696D6174696F6E547970650705496E4F7574084475726174696F6E0500 - 00000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C - 6F720A537461727456616C756507097846463230323032300953746F7056616C - 756507097846463430343034300754726967676572062149734D6F7573654F76 - 65723D747275653B497353656C65637465643D66616C73650E54726967676572 - 496E7665727365062249734D6F7573654F7665723D66616C73653B497353656C - 65637465643D66616C736500000F54436F6C6F72416E696D6174696F6E000953 - 74796C654E616D650612746162436F6C6F72416E696D6174696F6E3208447572 - 6174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46 - 696C6C2E436F6C6F720A537461727456616C7565070978464632303230323009 - 53746F7056616C756507097846463241383245320754726967676572060F4973 - 53656C65637465643D747275650E54726967676572496E766572736506104973 - 53656C65637465643D66616C7365000000005450463007544C61796F75740009 - 5374796C654E616D65060D7465787463656C6C7374796C6505416C69676E0706 - 43656E7465720756697369626C6508085461624F72646572021A0007544C6179 - 6F757400095374796C654E616D650607636F6E74656E7405416C69676E070843 - 6F6E74656E7473064C6F636B6564090C4D617267696E732E4C65667405000000 - 000000008001400B4D617267696E732E546F7005000000000000008001400D4D - 617267696E732E526967687405000000000000008001400E4D617267696E732E - 426F74746F6D05000000000000008001400A53697A652E576964746805000000 - 00000000A804400B53697A652E4865696768740500000000000000A804401453 - 697A652E506C6174666F726D44656661756C740800000C5442727573684F626A - 65637400095374796C654E616D65060A666F726567726F756E6400000C544272 - 7573684F626A65637400095374796C654E616D65060973656C656374696F6E0B - 42727573682E436F6C6F72070978393632413832453200000B54466F6E744F62 - 6A65637400095374796C654E616D650604666F6E740000005450463007544369 - 72636C6500095374796C654E616D65060D7468756D626261727374796C650541 - 6C69676E070643656E7465720A46696C6C2E436F6C6F72070978464632413832 - 45320748697454657374080A53697A652E57696474680500000000000000A003 - 400B53697A652E4865696768740500000000000000A003401453697A652E506C - 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 - 3135313531350756697369626C6508000F54436F6C6F72416E696D6174696F6E + 756C74080005545061746800095374796C654E616D650605506174683105416C + 69676E0706436C69656E7409446174612E506174680A34000000040000000000 + 00000000C8420000C84201000000000096430000C84201000000000048430000 + 9643030000000000C8420000C8420A46696C6C2E436F6C6F720708636C615768 + 6974650748697454657374080D526F746174696F6E416E676C65050000000000 + 0000B405400A53697A652E57696474680500000000000000A002400B53697A65 + 2E4865696768740500000000000000C001401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000005450 + 463007544C61796F757400095374796C654E616D6506147363726F6C6C626172 + 7269676874627574746F6E05416C69676E070643656E7465720756697369626C + 6508085461624F726465720214000A5452656374616E676C6500095374796C65 + 4E616D65060A6261636B67726F756E6405416C69676E0706436C69656E740C43 + 6C69704368696C6472656E090A436C6970506172656E740907436F726E657273 + 0B08546F7052696768740B426F74746F6D5269676874000A46696C6C2E436F6C + 6F7207097846463230323032300748697454657374080A53697A652E57696474 + 680500000000000000C804400B53697A652E4865696768740500000000000000 + C804401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E6507585261646975730500000000000000C000400759 + 5261646975730500000000000000C00040000F54436F6C6F72416E696D617469 + 6F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174 + 696F6E31084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274 + 794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507097846 + 463230323032300953746F7056616C7565070978464634303430343007547269 + 67676572062049734D6F7573654F7665723D747275653B497350726573736564 + 3D66616C73650E54726967676572496E7665727365062149734D6F7573654F76 + 65723D66616C73653B4973507265737365643D66616C736500000F54436F6C6F + 72416E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C + 6F72416E696D6174696F6E32084475726174696F6E0500000000000000000000 + 0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456 + 616C756507097846463430343034300953746F7056616C756507097846463137 + 353739430754726967676572061F4973507265737365643D747275653B49734D + 6F7573654F7665723D747275650E54726967676572496E766572736506204973 + 507265737365643D66616C73653B49734D6F7573654F7665723D747275650000 + 0007544C61796F757400095374796C654E616D6506074C61796F75743105416C + 69676E070643656E7465720A53697A652E57696474680500000000000000A002 + 400B53697A652E4865696768740500000000000000C001401453697A652E506C + 6174666F726D44656661756C74080005545061746800095374796C654E616D65 + 0605506174683105416C69676E0706436C69656E7409446174612E506174680A + 3400000004000000000000000000C8420000C84201000000000096430000C842 + 010000000000484300009643030000000000C8420000C8420A46696C6C2E436F + 6C6F720708636C6157686974650748697454657374080D526F746174696F6E41 + 6E676C650500000000000000B405C00A53697A652E5769647468050000000000 + 0000A002400B53697A652E4865696768740500000000000000C001401453697A + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E65000000005450463007544C61796F757400095374796C654E616D6506 + 0E7363726F6C6C6261727374796C6505416C69676E070643656E746572075669 + 7369626C6508085461624F726465720215000754427574746F6E00095374796C + 654E616D65060A6C656674627574746F6E05416C69676E07044C656674064C6F + 636B6564090A506F736974696F6E2E5905000000000000008003400A53697A65 + 2E576964746805000000000000008003400B53697A652E486569676874050000 + 00000000009003401453697A652E506C6174666F726D44656661756C74080B53 + 74796C654C6F6F6B757006137363726F6C6C6261726C656674627574746F6E00 + 000754427574746F6E00095374796C654E616D65060B7269676874627574746F + 6E05416C69676E07055269676874064C6F636B6564090A506F736974696F6E2E + 5805000000000000008804400A506F736974696F6E2E59050000000000000080 + 03400A53697A652E576964746805000000000000008003400B53697A652E4865 + 6967687405000000000000009003401453697A652E506C6174666F726D446566 + 61756C74080B5374796C654C6F6F6B757006147363726F6C6C62617272696768 + 74627574746F6E00000754427574746F6E00095374796C654E616D65060C626F + 74746F6D627574746F6E05416C69676E0706426F74746F6D064C6F636B656409 + 0A506F736974696F6E2E5905000000000000008804400A53697A652E57696474 + 680500000000000000C804400B53697A652E4865696768740500000000000000 + 8003401453697A652E506C6174666F726D44656661756C74080B5374796C654C + 6F6F6B757006157363726F6C6C626172626F74746F6D627574746F6E00000654 + 547261636B00095374796C654E616D65060668747261636B05416C69676E0706 + 436C69656E74064C6F636B6564090B4F7269656E746174696F6E070A486F7269 + 7A6F6E74616C0A53697A652E576964746805000000000000009003400B53697A + 652E48656967687405000000000000009003401453697A652E506C6174666F72 + 6D44656661756C74080B5374796C654C6F6F6B757006147363726F6C6C626172 + 68747261636B7374796C6500000654547261636B00095374796C654E616D6506 + 0676747261636B05416C69676E0706436C69656E74064C6F636B6564090B4F72 + 69656E746174696F6E070A486F72697A6F6E74616C0A53697A652E5769647468 + 05000000000000009003400B53697A652E486569676874050000000000000090 + 03401453697A652E506C6174666F726D44656661756C74080B5374796C654C6F + 6F6B757006147363726F6C6C62617276747261636B7374796C65000007544275 + 74746F6E00095374796C654E616D650609746F70627574746F6E05416C69676E + 0703546F700A53697A652E57696474680500000000000000C804400B53697A65 + 2E48656967687405000000000000008003401453697A652E506C6174666F726D + 44656661756C74080B5374796C654C6F6F6B757006127363726F6C6C62617274 + 6F70627574746F6E0000005450463007544C61796F757400095374796C654E61 + 6D6506127363726F6C6C626172746F70627574746F6E05416C69676E07064365 + 6E7465720756697369626C6508085461624F726465720216000A545265637461 + 6E676C6500095374796C654E616D65060A6261636B67726F756E6405416C6967 + 6E0706436C69656E740C436C69704368696C6472656E090A436C697050617265 + 6E740907436F726E6572730B07546F704C65667408546F705269676874000A46 + 696C6C2E436F6C6F7207097846463230323032300748697454657374080A5369 + 7A652E57696474680500000000000000C804400B53697A652E48656967687405 + 00000000000000C804401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E650758526164697573050000000000 + 0000C0004007595261646975730500000000000000C00040000F54436F6C6F72 + 416E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F + 72416E696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F0C + 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 + 6C756507097846463230323032300953746F7056616C75650709784646343034 + 3034300754726967676572062049734D6F7573654F7665723D747275653B4973 + 507265737365643D66616C73650E54726967676572496E766572736506214973 + 4D6F7573654F7665723D66616C73653B4973507265737365643D66616C736500 + 000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506156275 + 74746F6E436F6C6F72416E696D6174696F6E32084475726174696F6E05000000 + 000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F72 + 0A537461727456616C756507097846463430343034300953746F7056616C7565 + 07097846463137353739430754726967676572061F4973507265737365643D74 + 7275653B49734D6F7573654F7665723D747275650E54726967676572496E7665 + 72736506204973507265737365643D66616C73653B49734D6F7573654F766572 + 3D7472756500000007544C61796F757400095374796C654E616D6506074C6179 + 6F75743105416C69676E070643656E7465720A53697A652E5769647468050000 + 0000000000A002400B53697A652E4865696768740500000000000000C0014014 + 53697A652E506C6174666F726D44656661756C74080005545061746800095374 + 796C654E616D650605506174683105416C69676E0706436C69656E7409446174 + 612E506174680A3400000004000000000000000000C8420000C8420100000000 + 0096430000C842010000000000484300009643030000000000C8420000C8420A + 46696C6C2E436F6C6F720708636C6157686974650748697454657374080D526F + 746174696F6E416E676C650500000000000000B406400A53697A652E57696474 + 680500000000000000A002400B53697A652E4865696768740500000000000000 + C001401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E6500000000545046300A5452656374616E676C650009 + 5374796C654E616D6506147363726F6C6C62617276747261636B7374796C6505 + 416C69676E070643656E7465720A46696C6C2E436F6C6F720709784646313531 + 3531350748697454657374080A53697A652E57696474680500000000000000C8 + 04400B53697A652E4865696768740500000000000000C804401453697A652E50 + 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E + 650756697369626C65080006545468756D6200095374796C654E616D65060574 + 68756D62064C6F636B6564090A53697A652E57696474680500000000000000C8 + 04400B53697A652E48656967687405000000000000008003401453697A652E50 + 6C6174666F726D44656661756C74080B5374796C654C6F6F6B7570060A746875 + 6D627374796C650000005450463007544C61796F757400095374796C654E616D + 65060C7370696E626F787374796C6505416C69676E070643656E7465720A5369 + 7A652E57696474680500000000006666E005400B53697A652E48656967687405 + 00000000000000C003401453697A652E506C6174666F726D44656661756C7408 + 0756697369626C6508085461624F726465720217000A5452656374616E676C65 + 00095374796C654E616D65060A6261636B67726F756E6405416C69676E070843 + 6F6E74656E74730A46696C6C2E436F6C6F7207097846463230323032300A5369 + 7A652E57696474680500000000006666E005400B53697A652E48656967687405 + 00000000000000C003401453697A652E506C6174666F726D44656661756C7408 + 0C5374726F6B652E436F6C6F7207097846463135313531350758526164697573 + 0500000000000000C0004007595261646975730500000000000000C00040000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F + 72416E696D6174696F6E315374796C65084475726174696F6E050000000000CD + CCCCFB3F07496E7665727365090C50726F70657274794E616D65060C5374726F + 6B652E436F6C6F720A537461727456616C756507097846463135313531350953 + 746F7056616C756507097846463430343034300754726967676572061049734D + 6F7573654F7665723D747275650E54726967676572496E766572736506114973 + 4D6F7573654F7665723D66616C73650000000C5442727573684F626A65637400 + 095374796C654E616D65060A666F726567726F756E640B42727573682E436F6C + 6F72070978464645414541454100000C5442727573684F626A65637400095374 + 796C654E616D65060973656C656374696F6E0B42727573682E436F6C6F720709 + 783936324138324532000007544C61796F757400095374796C654E616D650607 + 636F6E74656E7405416C69676E0706436C69656E74064C6F636B6564090C4D61 + 7267696E732E4C65667405000000000000008000400B4D617267696E732E546F + 7005000000000000008000400D4D617267696E732E5269676874050000000000 + 00008000400E4D617267696E732E426F74746F6D05000000000000008000400A + 53697A652E5769647468050000000000D8CCF004400B53697A652E4865696768 + 740500000000000000A003401453697A652E506C6174666F726D44656661756C + 740800000754427574746F6E00095374796C654E616D65060B6D696E75736275 + 74746F6E05416C69676E07044C6566740843616E466F6375730806437572736F + 72070763724172726F770C4D617267696E732E4C656674050000000000000080 + 00400B4D617267696E732E546F7005000000000000008000400D4D617267696E + 732E526967687405000000000000008000400E4D617267696E732E426F74746F + 6D05000000000000008000400A506F736974696F6E2E58050000000000000080 + 00400A506F736974696F6E2E5905000000000000008000400A53697A652E5769 + 6474680500000000000000A003400B53697A652E486569676874050000000000 + 0000A003401453697A652E506C6174666F726D44656661756C74080B5374796C + 654C6F6F6B7570060B627574746F6E7374796C65000554506174680005416C69 + 676E070643656E74657209446174612E506174680A4000000005000000000000 + 000000803F00000000010000000000803F0000803F0100000000000000000000 + 3F010000000000803F00000000030000000000803F000000000A46696C6C2E43 + 6F6C6F720708636C6157686974650748697454657374080A53697A652E576964 + 746805000000000000008002400B53697A652E48656967687405000000000000 + 008002401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E650000000754427574746F6E00095374796C654E61 + 6D65060A706C7573627574746F6E05416C69676E070552696768740843616E46 + 6F6375730806437572736F72070763724172726F770C4D617267696E732E4C65 + 667405000000000000008000400B4D617267696E732E546F7005000000000000 + 008000400D4D617267696E732E526967687405000000000000008000400E4D61 + 7267696E732E426F74746F6D05000000000000008000400A506F736974696F6E + 2E580500000000006C66B405400A506F736974696F6E2E590500000000000000 + 8000400A53697A652E5769647468050000000000E8FF9F03400B53697A652E48 + 65696768740500000000000000A003401453697A652E506C6174666F726D4465 + 6661756C74080B5374796C654C6F6F6B7570060B627574746F6E7374796C6500 + 0554506174680005416C69676E070643656E74657209446174612E506174680A + 340000000400000000000000000000000000000001000000000000000000803F + 010000000000803F0000003F0300000000000000000000000A46696C6C2E436F + 6C6F720708636C6157686974650748697454657374080A53697A652E57696474 + 68050000000000A0FFFF01400B53697A652E4865696768740500000000000000 + 8002401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E6500000000545046300D545377697463684F626A6563 + 7400095374796C654E616D65060B7377697463687374796C6505416C69676E07 + 0643656E746572044B696E64070C466164696E67547261636B730A53697A652E + 57696474680500000000000000C805400B53697A652E48656967687405000000 + 00000000C803401453697A652E506C6174666F726D44656661756C7408085461 + 624F72646572021812547261636B696E675468756D625363616C650500000000 + 00000080FF3F0756697369626C65080A46696C6C2E436F6C6F72070978464632 + 30323032300C46696C6C4F6E2E436F6C6F7207097846463137353739430B4669 + 6C6C4F6E2E4B696E640705536F6C69640B5374726F6B652E4B696E6407044E6F + 6E650B5468756D622E436F6C6F7207097846463430343034300D5468756D624F + 6E2E436F6C6F7207097846463241383245320C5468756D624F6E2E4B696E6407 + 05536F6C6964105468756D625374726F6B652E4B696E6407044E6F6E650F5468 + 756D625374726F6B652E4361700705526F756E64105468756D625374726F6B65 + 2E446173680706437573746F6D105468756D625374726F6B652E4A6F696E0705 + 526F756E64165468756D625374726F6B652E437573746F6D446173680A080000 + 0000000000000000000553686170650709526F756E6452656374000054504630 + 07544C61796F757400095374796C654E616D65060F746162636F6E74726F6C73 + 74796C6505416C69676E070643656E7465720A53697A652E5769647468050000 + 00000000008E06400B53697A652E486569676874050000000000FFFFC9054014 + 53697A652E506C6174666F726D44656661756C74080756697369626C65080854 + 61624F726465720219000A5452656374616E676C6500095374796C654E616D65 + 060A6261636B67726F756E6405416C69676E0708436F6E74656E747307436F72 + 6E6572730B08546F7052696768740A426F74746F6D4C6566740B426F74746F6D + 5269676874000A46696C6C2E436F6C6F720709784646333033303330064C6F63 + 6B6564090748697454657374080C50616464696E672E4C656674050000000000 + 00008000400B50616464696E672E546F7005000000000000008000400D506164 + 64696E672E526967687405000000000000008000400E50616464696E672E426F + 74746F6D05000000000000008000400A53697A652E5769647468050000000000 + 00008E06400B53697A652E486569676874050000000000FFFFC905401453697A + 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 + 0978464631353135313507585261646975730500000000000000C00040075952 + 61646975730500000000000000C00040000000545046300A5452656374616E67 + 6C6500095374796C654E616D65060B746162646F747374796C6505416C69676E + 070643656E7465720A46696C6C2E436F6C6F7207097846463135313531350748 + 697454657374080A53697A652E57696474680500000000000000C804400B5369 + 7A652E4865696768740500000000000000C804401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6507566973 + 69626C650807585261646975730500000000000000C803400759526164697573 + 0500000000000000C80340000F54436F6C6F72416E696D6174696F6E00084475 + 726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A + 46696C6C2E436F6C6F720A537461727456616C75650709784646313531353135 + 0953746F7056616C756507097846463241383245320754726967676572060F49 + 7353656C65637465643D747275650E54726967676572496E7665727365061049 + 7353656C65637465643D66616C73650000005450463007544C61796F75740009 + 5374796C654E616D65060C7461626974656D7374796C6505416C69676E070643 + 656E7465720A53697A652E57696474680500000000000000C804400B53697A65 + 2E4865696768740500000000000000C803401453697A652E506C6174666F726D + 44656661756C74080756697369626C6508085461624F72646572021A000A5452 + 656374616E676C6500095374796C654E616D650603746F7005416C69676E0708 + 436F6E74656E74730C436C69704368696C6472656E0907436F726E6572730B07 + 546F704C65667408546F705269676874000A46696C6C2E436F6C6F7207097846 + 46323032303230064C6F636B6564090748697454657374080553696465730B03 + 546F70044C656674055269676874000A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000000000C803401453697A + 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 + 0978464631353135313507585261646975730500000000000000C00040075952 + 61646975730500000000000000C00040000654476C79706800095374796C654E + 616D65060A676C7970687374796C650C4D617267696E732E4C65667405000000 + 000000008001400D4D617267696E732E526967687405000000000000008001C0 + 05416C69676E07044C6566740A506F736974696F6E2E58050000000000000080 + 01400A53697A652E576964746805000000000000008003400B53697A652E4865 + 696768740500000000000000C803401453697A652E506C6174666F726D446566 + 61756C7408000005545465787400095374796C654E616D650604746578740541 + 6C69676E0706436C69656E74064C6F636B6564090748697454657374080C4D61 + 7267696E732E4C6566740500000000000000C000400B4D617267696E732E546F + 700500000000000000C000400D4D617267696E732E5269676874050000000000 + 0000C000400E4D617267696E732E426F74746F6D0500000000000000C000400A + 53697A652E57696474680500000000000000B004400B53697A652E4865696768 + 7405000000000000009803401453697A652E506C6174666F726D44656661756C + 7408165465787453657474696E67732E466F6E74436F6C6F720708636C615768 + 697465155465787453657474696E67732E576F7264577261700800000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650612746162436F6C6F + 72416E696D6174696F6E310D416E696D6174696F6E547970650705496E4F7574 + 084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D + 65060A46696C6C2E436F6C6F720A537461727456616C75650709784646323032 + 3032300953746F7056616C756507097846463430343034300754726967676572 + 062149734D6F7573654F7665723D747275653B497353656C65637465643D6661 + 6C73650E54726967676572496E7665727365062249734D6F7573654F7665723D + 66616C73653B497353656C65637465643D66616C736500000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D650612746162436F6C6F72416E69 + 6D6174696F6E32084475726174696F6E050000000000CDCCCCFB3F0C50726F70 + 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 + 097846463230323032300953746F7056616C7565070978464632413832453207 + 54726967676572060F497353656C65637465643D747275650E54726967676572 + 496E76657273650610497353656C65637465643D66616C736500000000545046 + 3007544C61796F757400095374796C654E616D65060D7465787463656C6C7374 + 796C6505416C69676E070643656E7465720756697369626C6508085461624F72 + 646572021B0007544C61796F757400095374796C654E616D650607636F6E7465 + 6E7405416C69676E0708436F6E74656E7473064C6F636B6564090C4D61726769 + 6E732E4C65667405000000000000008001400B4D617267696E732E546F700500 + 0000000000008001400D4D617267696E732E5269676874050000000000000080 + 01400E4D617267696E732E426F74746F6D05000000000000008001400A53697A + 652E57696474680500000000000000A804400B53697A652E4865696768740500 + 000000000000A804401453697A652E506C6174666F726D44656661756C740800 + 000C5442727573684F626A65637400095374796C654E616D65060A666F726567 + 726F756E6400000C5442727573684F626A65637400095374796C654E616D6506 + 0973656C656374696F6E0B42727573682E436F6C6F7207097839363241383245 + 3200000B54466F6E744F626A65637400095374796C654E616D650604666F6E74 + 000000545046300754436972636C6500095374796C654E616D65060D7468756D + 626261727374796C6505416C69676E070643656E7465720A46696C6C2E436F6C + 6F7207097846463241383245320748697454657374080A53697A652E57696474 + 680500000000000000A003400B53697A652E4865696768740500000000000000 + A003401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 + 2E436F6C6F7207097846463135313531350756697369626C6508000F54436F6C + 6F72416E696D6174696F6E00095374796C654E616D6506147468756D62436F6C + 6F72416E696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F + 0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456 + 616C756507097846463241383245320953746F7056616C756507097846463137 + 353739430754726967676572061F4973507265737365643D747275653B49734D + 6F7573654F7665723D747275650E54726967676572496E766572736506104973 + 507265737365643D66616C73653B00000F54436F6C6F72416E696D6174696F6E 00095374796C654E616D6506147468756D62436F6C6F72416E696D6174696F6E - 31084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E61 + 32084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E61 6D65060A46696C6C2E436F6C6F720A537461727456616C756507097846463241 - 383245320953746F7056616C7565070978464631373537394307547269676765 - 72061F4973507265737365643D747275653B49734D6F7573654F7665723D7472 - 75650E54726967676572496E766572736506104973507265737365643D66616C - 73653B00000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 - 06147468756D62436F6C6F72416E696D6174696F6E32084475726174696F6E05 - 0000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F - 6C6F720A537461727456616C756507097846463241383245320953746F705661 - 6C756507097846463430394246460754726967676572062049734D6F7573654F - 7665723D747275653B4973507265737365643D66616C73650E54726967676572 - 496E7665727365062149734D6F7573654F7665723D66616C73653B4973507265 - 737365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 - 796C654E616D6506157468756D625374726F6B65416E696D6174696F6E310844 - 75726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D6506 - 0C5374726F6B652E436F6C6F720A537461727456616C75650709784646313531 - 3531350953746F7056616C756507097846463137353739430754726967676572 - 061F4973507265737365643D747275653B49734D6F7573654F7665723D747275 - 650E54726967676572496E7665727365060F4973507265737365643D66616C73 - 65000000545046300A5452656374616E676C6500095374796C654E616D65060A - 7468756D627374796C6505416C69676E070643656E7465720A46696C6C2E436F - 6C6F7207097846463444344434440748697454657374080A53697A652E576964 - 74680500000000000000C804400B53697A652E48656967687405000000000000 - 00C804401453697A652E506C6174666F726D44656661756C74080B5374726F6B - 652E4B696E6407044E6F6E650756697369626C6508000F54436F6C6F72416E69 - 6D6174696F6E00095374796C654E616D6506147468756D62436F6C6F72416E69 - 6D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F0C50726F70 - 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 - 097846463444344434440953746F7056616C7565070978464631373537394307 - 54726967676572060E4973507265737365643D747275650E5472696767657249 - 6E7665727365060F4973507265737365643D66616C736500000F54436F6C6F72 - 416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D61 - 74696F6E315374796C65084475726174696F6E050000000000CDCCCCFB3F0749 - 6E7665727365090C50726F70657274794E616D65060A46696C6C2E436F6C6F72 - 0A537461727456616C756507097846463444344434440953746F7056616C7565 - 0707636C61477261790754726967676572061049734D6F7573654F7665723D74 - 7275650E54726967676572496E7665727365061149734D6F7573654F7665723D - 66616C73650000005450463007544C61796F757400095374796C654E616D6506 - 0D747261636B6261727374796C6505416C69676E070643656E7465720A53697A - 652E57696474680500000000000000C805400B53697A652E4865696768740500 - 000000000000C805401453697A652E506C6174666F726D44656661756C740807 - 56697369626C6508085461624F72646572021B0B466978656448656967687402 - 11000A5452656374616E676C6500095374796C654E616D65060668747261636B - 05416C69676E070A5665727443656E7465720A46696C6C2E436F6C6F72070978 - 46463135313531350748697454657374080A506F736974696F6E2E5905000000 - 00000000BC04400A53697A652E57696474680500000000000000C805400B5369 - 7A652E4865696768740500000000000000A001401453697A652E506C6174666F - 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6507585261 - 646975730500000000000000A0004007595261646975730500000000000000A0 - 0040000A5452656374616E676C6500095374796C654E616D65060A6261636B67 - 726F756E6405416C69676E0708436F6E74656E74730946696C6C2E4B696E6407 - 044E6F6E65064C6F636B6564090748697454657374080C4D617267696E732E4C - 6566740500000000000000C001400B4D617267696E732E546F70050000000000 - 000080FF3F0D4D617267696E732E52696768740500000000000000C001400E4D - 617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E5769 - 6474680500000000000000B005400B53697A652E486569676874050000000000 - 0000C000401453697A652E506C6174666F726D44656661756C74080B5374726F - 6B652E4B696E6407044E6F6E6507585261646975730500000000000000C0FF3F - 07595261646975730500000000000000C0FF3F00000A5452656374616E676C65 - 00095374796C654E616D650609686967686C6967687405416C69676E07044C65 - 66740A46696C6C2E436F6C6F7207097846463241383245320748697454657374 - 080C50616464696E672E4C6566740500000000000000A002400A53697A652E57 - 696474680500000000000000F003400B53697A652E4865696768740500000000 - 000000A001401453697A652E506C6174666F726D44656661756C74080B537472 - 6F6B652E4B696E6407044E6F6E6507585261646975730500000000000000A000 - 4007595261646975730500000000000000A0004000000B54476C6F7745666665 - 63740008536F66746E657373050000000000CDCCCCFC3F09476C6F77436F6C6F - 720709784646324138324532074F706163697479050000000000000080FF3F07 - 456E61626C6564080000000A5452656374616E676C6500095374796C654E616D - 65060676747261636B05416C69676E070A486F727A43656E7465720A46696C6C - 2E436F6C6F7207097846463135313531350748697454657374080A506F736974 - 696F6E2E580500000000000000BC04400A53697A652E57696474680500000000 - 000000A001400B53697A652E4865696768740500000000000000C80540145369 - 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 - 044E6F6E6507585261646975730500000000000000A000400759526164697573 - 0500000000000000A00040000A5452656374616E676C6500095374796C654E61 - 6D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730946 - 696C6C2E4B696E6407044E6F6E65064C6F636B6564090748697454657374080C - 4D617267696E732E4C6566740500000000000000C001400B4D617267696E732E - 546F70050000000000000080FF3F0D4D617267696E732E526967687405000000 - 00000000C001400E4D617267696E732E426F74746F6D050000000000000080FF - 3F0A53697A652E576964746805000000000000000000000B53697A652E486569 - 6768740500000000000000C405401453697A652E506C6174666F726D44656661 - 756C74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E - 676C6500095374796C654E616D650609686967686C6967687405416C69676E07 - 03546F700A46696C6C2E436F6C6F720709784646324138324532074869745465 - 7374080A53697A652E57696474680500000000000000A001400B53697A652E48 - 65696768740500000000000000F003401453697A652E506C6174666F726D4465 + 383245320953746F7056616C7565070978464634303942464607547269676765 + 72062049734D6F7573654F7665723D747275653B4973507265737365643D6661 + 6C73650E54726967676572496E7665727365062149734D6F7573654F7665723D + 66616C73653B4973507265737365643D66616C736500000F54436F6C6F72416E + 696D6174696F6E00095374796C654E616D6506157468756D625374726F6B6541 + 6E696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F0C5072 + 6F70657274794E616D65060C5374726F6B652E436F6C6F720A53746172745661 + 6C756507097846463135313531350953746F7056616C75650709784646313735 + 3739430754726967676572061F4973507265737365643D747275653B49734D6F + 7573654F7665723D747275650E54726967676572496E7665727365060F497350 + 7265737365643D66616C7365000000545046300A5452656374616E676C650009 + 5374796C654E616D65060A7468756D627374796C6505416C69676E070643656E + 7465720A46696C6C2E436F6C6F72070978464634443444344407486974546573 + 74080A53697A652E57696474680500000000000000C804400B53697A652E4865 + 696768740500000000000000C804401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E650756697369626C6508 + 000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506147468 + 756D62436F6C6F72416E696D6174696F6E31084475726174696F6E0500000000 + 00CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A + 537461727456616C756507097846463444344434440953746F7056616C756507 + 097846463137353739430754726967676572060E4973507265737365643D7472 + 75650E54726967676572496E7665727365060F4973507265737365643D66616C + 736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 14436F6C6F72416E696D6174696F6E315374796C65084475726174696F6E0500 + 00000000CDCCCCFB3F07496E7665727365090C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C756507097846463444344434 + 440953746F7056616C75650707636C6147726179075472696767657206104973 + 4D6F7573654F7665723D747275650E54726967676572496E7665727365061149 + 734D6F7573654F7665723D66616C73650000005450463007544C61796F757400 + 095374796C654E616D65060D747261636B6261727374796C6505416C69676E07 + 0643656E7465720A53697A652E57696474680500000000000000C805400B5369 + 7A652E4865696768740500000000000000C805401453697A652E506C6174666F + 726D44656661756C74080756697369626C6508085461624F72646572021C0B46 + 697865644865696768740211000A5452656374616E676C6500095374796C654E + 616D65060668747261636B05416C69676E070A5665727443656E7465720A4669 + 6C6C2E436F6C6F7207097846463135313531350748697454657374080A506F73 + 6974696F6E2E590500000000000000BC04400A53697A652E5769647468050000 + 0000000000C805400B53697A652E4865696768740500000000000000A0014014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E6507585261646975730500000000000000A00040075952616469 + 75730500000000000000A00040000A5452656374616E676C6500095374796C65 + 4E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E7473 + 0946696C6C2E4B696E6407044E6F6E65064C6F636B6564090748697454657374 + 080C4D617267696E732E4C6566740500000000000000C001400B4D617267696E + 732E546F70050000000000000080FF3F0D4D617267696E732E52696768740500 + 000000000000C001400E4D617267696E732E426F74746F6D0500000000000000 + 80FF3F0A53697A652E57696474680500000000000000B005400B53697A652E48 + 65696768740500000000000000C000401453697A652E506C6174666F726D4465 6661756C74080B5374726F6B652E4B696E6407044E6F6E650758526164697573 - 0500000000000000A0004007595261646975730500000000000000A000400000 - 0B54476C6F774566666563740008536F66746E657373050000000000CDCCCCFC - 3F09476C6F77436F6C6F720709784646324138324532074F7061636974790500 - 00000000000080FF3F07456E61626C65640800000006545468756D6200095374 - 796C654E616D650606687468756D62064C6F636B6564090A506F736974696F6E - 2E580500000000003033AB03400A506F736974696F6E2E59050000000000FFFF - A304400A53697A652E57696474680500000000000000F002400B53697A652E48 - 65696768740500000000000000F002401453697A652E506C6174666F726D4465 - 6661756C74080B5374796C654C6F6F6B7570060D7468756D626261727374796C - 65000006545468756D6200095374796C654E616D650606767468756D62064C6F - 636B6564090A506F736974696F6E2E58050000000000CBCCA804400A506F7369 - 74696F6E2E590500000000009899B103400A53697A652E576964746805000000 - 00000000F002400B53697A652E4865696768740500000000000000F002401453 - 697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570 - 060D7468756D626261727374796C650000005450463007544C61796F75740009 - 5374796C654E616D6506096D656D6F7374796C6505416C69676E070643656E74 - 65720A53697A652E5769647468050000000000CCCC8806400B53697A652E4865 - 696768740500000000006666F405401453697A652E506C6174666F726D446566 - 61756C74080756697369626C6508085461624F72646572021C000B54476C6F77 - 4566666563740008536F66746E657373050000000000CDCCCCFC3F09476C6F77 - 436F6C6F720709784646343837394133074F7061636974790500000000000000 - 80FF3F0754726967676572060E4973466F63757365643D7472756507456E6162 - 6C65640800000C5442727573684F626A65637400095374796C654E616D65060A - 666F726567726F756E6400000C5442727573684F626A65637400095374796C65 - 4E616D65060973656C656374696F6E0B42727573682E436F6C6F720709783746 - 34343735394400000B54466F6E744F626A65637400095374796C654E616D6506 - 04666F6E7400000A5452656374616E676C6500095374796C654E616D65060A62 - 61636B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E43 - 6F6C6F7207097846463230323032300748697454657374080A53697A652E5769 - 647468050000000000CCCC8806400B53697A652E486569676874050000000000 - 6666F405401453697A652E506C6174666F726D44656661756C74080C5374726F - 6B652E436F6C6F72070978464631353135313507585261646975730500000000 - 000000C0004007595261646975730500000000000000C000400007544C61796F - 757400095374796C654E616D650607636F6E74656E7405416C69676E0706436C - 69656E740C4D617267696E732E4C65667405000000000000008000400B4D6172 - 67696E732E546F7005000000000000008000400D4D617267696E732E52696768 - 7405000000000000008000400E4D617267696E732E426F74746F6D0500000000 - 0000008000400A53697A652E57696474680500000000009899E905400B53697A - 652E4865696768740500000000006666CC05401453697A652E506C6174666F72 - 6D44656661756C740800000A545363726F6C6C42617200095374796C654E616D - 65060A687363726F6C6C62617205416C69676E0706426F74746F6D0643757273 + 0500000000000000C0FF3F07595261646975730500000000000000C0FF3F0000 + 0A5452656374616E676C6500095374796C654E616D650609686967686C696768 + 7405416C69676E07044C6566740A46696C6C2E436F6C6F720709784646324138 + 3245320748697454657374080C50616464696E672E4C65667405000000000000 + 00A002400A53697A652E57696474680500000000000000F003400B53697A652E + 4865696768740500000000000000A001401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6507585261646975 + 730500000000000000A0004007595261646975730500000000000000A0004000 + 000B54476C6F774566666563740008536F66746E657373050000000000CDCCCC + FC3F09476C6F77436F6C6F720709784646324138324532074F70616369747905 + 0000000000000080FF3F07456E61626C6564080000000A5452656374616E676C + 6500095374796C654E616D65060676747261636B05416C69676E070A486F727A + 43656E7465720A46696C6C2E436F6C6F72070978464631353135313507486974 + 54657374080A506F736974696F6E2E580500000000000000BC04400A53697A65 + 2E57696474680500000000000000A001400B53697A652E486569676874050000 + 0000000000C805401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E6507585261646975730500000000000000 + A0004007595261646975730500000000000000A00040000A5452656374616E67 + 6C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E07 + 08436F6E74656E74730946696C6C2E4B696E6407044E6F6E65064C6F636B6564 + 090748697454657374080C4D617267696E732E4C6566740500000000000000C0 + 01400B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E + 732E52696768740500000000000000C001400E4D617267696E732E426F74746F + 6D050000000000000080FF3F0A53697A652E5769647468050000000000000000 + 00000B53697A652E4865696768740500000000000000C405401453697A652E50 + 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E + 6500000A5452656374616E676C6500095374796C654E616D650609686967686C + 6967687405416C69676E0703546F700A46696C6C2E436F6C6F72070978464632 + 41383245320748697454657374080A53697A652E576964746805000000000000 + 00A001400B53697A652E4865696768740500000000000000F003401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E6507585261646975730500000000000000A0004007595261646975730500 + 000000000000A0004000000B54476C6F774566666563740008536F66746E6573 + 73050000000000CDCCCCFC3F09476C6F77436F6C6F7207097846463241383245 + 32074F706163697479050000000000000080FF3F07456E61626C656408000000 + 06545468756D6200095374796C654E616D650606687468756D62064C6F636B65 + 64090A506F736974696F6E2E580500000000003033AB03400A506F736974696F + 6E2E59050000000000FFFFA304400A53697A652E576964746805000000000000 + 00F002400B53697A652E4865696768740500000000000000F002401453697A65 + 2E506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570060D74 + 68756D626261727374796C65000006545468756D6200095374796C654E616D65 + 0606767468756D62064C6F636B6564090A506F736974696F6E2E580500000000 + 00CBCCA804400A506F736974696F6E2E590500000000009899B103400A53697A + 652E57696474680500000000000000F002400B53697A652E4865696768740500 + 000000000000F002401453697A652E506C6174666F726D44656661756C74080B + 5374796C654C6F6F6B7570060D7468756D626261727374796C65000000545046 + 3007544C61796F757400095374796C654E616D6506096D656D6F7374796C6505 + 416C69676E070643656E7465720A53697A652E5769647468050000000000CCCC + 8806400B53697A652E4865696768740500000000006666F405401453697A652E + 506C6174666F726D44656661756C74080756697369626C6508085461624F7264 + 6572021D000B54476C6F774566666563740008536F66746E6573730500000000 + 00CDCCCCFC3F09476C6F77436F6C6F720709784646343837394133074F706163 + 697479050000000000000080FF3F0754726967676572060E4973466F63757365 + 643D7472756507456E61626C65640800000C5442727573684F626A6563740009 + 5374796C654E616D65060A666F726567726F756E6400000C5442727573684F62 + 6A65637400095374796C654E616D65060973656C656374696F6E0B4272757368 + 2E436F6C6F72070978374634343735394400000B54466F6E744F626A65637400 + 095374796C654E616D650604666F6E7400000A5452656374616E676C65000953 + 74796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74 + 656E74730A46696C6C2E436F6C6F720709784646323032303230074869745465 + 7374080A53697A652E5769647468050000000000CCCC8806400B53697A652E48 + 65696768740500000000006666F405401453697A652E506C6174666F726D4465 + 6661756C74080C5374726F6B652E436F6C6F7207097846463135313531350758 + 5261646975730500000000000000C00040075952616469757305000000000000 + 00C000400007544C61796F757400095374796C654E616D650607636F6E74656E + 7405416C69676E0706436C69656E740C4D617267696E732E4C65667405000000 + 000000008000400B4D617267696E732E546F7005000000000000008000400D4D + 617267696E732E526967687405000000000000008000400E4D617267696E732E + 426F74746F6D05000000000000008000400A53697A652E576964746805000000 + 00009899E905400B53697A652E4865696768740500000000006666CC05401453 + 697A652E506C6174666F726D44656661756C740800000A545363726F6C6C4261 + 7200095374796C654E616D65060A687363726F6C6C62617205416C69676E0706 + 426F74746F6D06437572736F72070763724172726F770B536D616C6C4368616E + 676505000000000000000000000B4F7269656E746174696F6E070A486F72697A + 6F6E74616C0A506F736974696F6E2E590500000000006666D405400A53697A65 + 2E5769647468050000000000CCCC8806400B53697A652E486569676874050000 + 00000000008003401453697A652E506C6174666F726D44656661756C74080000 + 0A545363726F6C6C42617200095374796C654E616D65060A767363726F6C6C62 + 617205416C69676E0705526967687406437572736F72070763724172726F770B + 536D616C6C4368616E676505000000000000000000000B4F7269656E74617469 + 6F6E0708566572746963616C0A506F736974696F6E2E580500000000009899F1 + 05400A53697A652E576964746805000000000000008003400B53697A652E4865 + 696768740500000000006666D405401453697A652E506C6174666F726D446566 + 61756C7408000007544C61796F75740005416C69676E0706436C69656E740A53 + 697A652E57696474680500000000009899F105400B53697A652E486569676874 + 0500000000006666D405401453697A652E506C6174666F726D44656661756C74 + 08000F54536D616C6C5363726F6C6C42617200095374796C654E616D65060F76 + 736D616C6C7363726F6C6C62617205416C69676E070552696768740643757273 6F72070763724172726F770B536D616C6C4368616E6765050000000000000000 - 00000B4F7269656E746174696F6E070A486F72697A6F6E74616C0A506F736974 - 696F6E2E590500000000006666D405400A53697A652E57696474680500000000 - 00CCCC8806400B53697A652E4865696768740500000000000000800340145369 - 7A652E506C6174666F726D44656661756C740800000A545363726F6C6C426172 - 00095374796C654E616D65060A767363726F6C6C62617205416C69676E070552 - 6967687406437572736F72070763724172726F770B536D616C6C4368616E6765 - 05000000000000000000000B4F7269656E746174696F6E070856657274696361 - 6C0A506F736974696F6E2E580500000000009899F105400A53697A652E576964 - 746805000000000000008003400B53697A652E48656967687405000000000066 - 66D405401453697A652E506C6174666F726D44656661756C7408000007544C61 - 796F75740005416C69676E0706436C69656E740A53697A652E57696474680500 - 000000009899F105400B53697A652E4865696768740500000000006666D40540 - 1453697A652E506C6174666F726D44656661756C7408000F54536D616C6C5363 - 726F6C6C42617200095374796C654E616D65060F76736D616C6C7363726F6C6C - 62617205416C69676E0705526967687406437572736F72070763724172726F77 - 0B536D616C6C4368616E676505000000000000000000000B4F7269656E746174 - 696F6E0708566572746963616C0C4D617267696E732E4C656674050000000000 - 00008000400A53697A652E576964746805000000000000008002400B53697A65 - 2E48656967687405000000000000008002401453697A652E506C6174666F726D - 44656661756C74080756697369626C650800000F54536D616C6C5363726F6C6C - 42617200095374796C654E616D65060F68736D616C6C7363726F6C6C62617205 - 416C69676E0706426F74746F6D06437572736F72070763724172726F770B536D - 616C6C4368616E676505000000000000000000000B4F7269656E746174696F6E - 070A486F72697A6F6E74616C0B4D617267696E732E546F700500000000000000 - 8000400A53697A652E576964746805000000000000009606400B53697A652E48 - 656967687405000000000000008002401453697A652E506C6174666F726D4465 - 6661756C74080756697369626C65080000000F54436F6C6F72416E696D617469 - 6F6E00095374796C654E616D6506146D656D6F5374726F6B65416E696D617469 - 6F6E31084475726174696F6E050000000000CDCCCCFB3F0C50726F7065727479 - 4E616D65060C5374726F6B652E436F6C6F720A537461727456616C7565070978 - 46463135313531350953746F7056616C75650709784646343034303430075472 - 6967676572062049734D6F7573654F7665723D747275653B4973466F63757365 - 643D66616C73650E54726967676572496E7665727365062149734D6F7573654F - 7665723D66616C73653B4973466F63757365643D66616C736500000F54436F6C - 6F72416E696D6174696F6E00095374796C654E616D6506146D656D6F5374726F - 6B65416E696D6174696F6E32084475726174696F6E050000000000CDCCCCFB3F - 0C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A53746172 - 7456616C756507097846463430343034300953746F7056616C75650709784646 - 3241383245320754726967676572060E4973466F63757365643D747275650E54 - 726967676572496E7665727365060F4973466F63757365643D66616C73650000 - 00005450463007544C61796F757400095374796C654E616D65060D73697A6567 - 7269707374796C6505416C69676E070643656E7465720A53697A652E57696474 - 680500000000000000C803400B53697A652E4865696768740500000000000000 - C803401453697A652E506C6174666F726D44656661756C74080756697369626C - 6508085461624F72646572021D000A5452656374616E676C6500095374796C65 - 4E616D65060A52656374616E676C653105416C69676E070643656E7465720A46 - 696C6C2E436F6C6F7207097846463630363036300A53697A652E576964746805 + 00000B4F7269656E746174696F6E0708566572746963616C0C4D617267696E73 + 2E4C65667405000000000000008000400A53697A652E57696474680500000000 + 0000008002400B53697A652E4865696768740500000000000000800240145369 + 7A652E506C6174666F726D44656661756C74080756697369626C650800000F54 + 536D616C6C5363726F6C6C42617200095374796C654E616D65060F68736D616C + 6C7363726F6C6C62617205416C69676E0706426F74746F6D06437572736F7207 + 0763724172726F770B536D616C6C4368616E676505000000000000000000000B + 4F7269656E746174696F6E070A486F72697A6F6E74616C0B4D617267696E732E + 546F7005000000000000008000400A53697A652E576964746805000000000000 + 009606400B53697A652E48656967687405000000000000008002401453697A65 + 2E506C6174666F726D44656661756C74080756697369626C65080000000F5443 + 6F6C6F72416E696D6174696F6E00095374796C654E616D6506146D656D6F5374 + 726F6B65416E696D6174696F6E31084475726174696F6E050000000000CDCCCC + FB3F0C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A5374 + 61727456616C756507097846463135313531350953746F7056616C7565070978 + 46463430343034300754726967676572062049734D6F7573654F7665723D7472 + 75653B4973466F63757365643D66616C73650E54726967676572496E76657273 + 65062149734D6F7573654F7665723D66616C73653B4973466F63757365643D66 + 616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 6506146D656D6F5374726F6B65416E696D6174696F6E32084475726174696F6E + 050000000000CDCCCCFB3F0C50726F70657274794E616D65060C5374726F6B65 + 2E436F6C6F720A537461727456616C756507097846463430343034300953746F + 7056616C756507097846463241383245320754726967676572060E4973466F63 + 757365643D747275650E54726967676572496E7665727365060F4973466F6375 + 7365643D66616C7365000000005450463007544C61796F757400095374796C65 + 4E616D65060D73697A65677269707374796C6505416C69676E070643656E7465 + 720A53697A652E57696474680500000000000000C803400B53697A652E486569 + 6768740500000000000000C803401453697A652E506C6174666F726D44656661 + 756C74080756697369626C6508085461624F72646572021E000A545265637461 + 6E676C6500095374796C654E616D65060A52656374616E676C653105416C6967 + 6E070643656E7465720A46696C6C2E436F6C6F7207097846463630363036300A + 53697A652E57696474680500000000000000A000400B53697A652E4865696768 + 740500000000000000A000401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E676C + 6500095374796C654E616D65060A52656374616E676C653205416C69676E0706 + 43656E7465720A46696C6C2E436F6C6F7207097846463630363036300C4D6172 + 67696E732E4C6566740500000000000000A002400A53697A652E576964746805 00000000000000A000400B53697A652E4865696768740500000000000000A000 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B 696E6407044E6F6E6500000A5452656374616E676C6500095374796C654E616D - 65060A52656374616E676C653205416C69676E070643656E7465720A46696C6C + 65060A52656374616E676C653305416C69676E070643656E7465720A46696C6C 2E436F6C6F7207097846463630363036300C4D617267696E732E4C6566740500 - 000000000000A002400A53697A652E57696474680500000000000000A000400B - 53697A652E4865696768740500000000000000A000401453697A652E506C6174 - 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000 - 0A5452656374616E676C6500095374796C654E616D65060A52656374616E676C - 653305416C69676E070643656E7465720A46696C6C2E436F6C6F720709784646 - 3630363036300C4D617267696E732E4C6566740500000000000000A002400B4D - 617267696E732E546F700500000000000000A002400A53697A652E5769647468 - 0500000000000000A000400B53697A652E4865696768740500000000000000A0 - 00401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E - 4B696E6407044E6F6E6500000A5452656374616E676C6500095374796C654E61 - 6D65060A52656374616E676C653405416C69676E070643656E7465720A46696C - 6C2E436F6C6F7207097846463630363036300B4D617267696E732E546F700500 - 000000000000A002400A53697A652E57696474680500000000000000A000400B - 53697A652E4865696768740500000000000000A000401453697A652E506C6174 - 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000 - 0A5452656374616E676C6500095374796C654E616D65060A52656374616E676C - 653505416C69676E070643656E7465720A46696C6C2E436F6C6F720709784646 - 3630363036300B4D617267696E732E546F700500000000000000A002400D4D61 - 7267696E732E52696768740500000000000000A002400A53697A652E57696474 - 680500000000000000A000400B53697A652E4865696768740500000000000000 - A000401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 - 2E4B696E6407044E6F6E6500000A5452656374616E676C6500095374796C654E - 616D65060A52656374616E676C653605416C69676E070643656E7465720A4669 - 6C6C2E436F6C6F7207097846463630363036300C4D617267696E732E4C656674 - 0500000000000000A002400E4D617267696E732E426F74746F6D050000000000 - 0000A002400A53697A652E57696474680500000000000000A000400B53697A65 - 2E4865696768740500000000000000A000401453697A652E506C6174666F726D - 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000545046 - 300A5452656374616E676C6500095374796C654E616D65060E73746174757362 - 61727374796C6505416C69676E070643656E7465720C436C69704368696C6472 - 656E090A46696C6C2E436F6C6F7207097846463235323532350553696465730B - 03546F70000A53697A652E57696474680500000000000000F004400B53697A65 - 2E4865696768740500000000000000C804401453697A652E506C6174666F726D - 44656661756C74080C5374726F6B652E436F6C6F720709784646313531353135 - 0756697369626C65080007544C61796F757400095374796C654E616D6506074C - 61796F75743105416C69676E070552696768740A506F736974696F6E2E580500 - 0000000000008C04400A53697A652E57696474680500000000000000C803400B - 53697A652E4865696768740500000000000000C804401453697A652E506C6174 - 666F726D44656661756C740800095453697A654772697000095374796C654E61 - 6D65060973697A65677267697005416C69676E0706426F74746F6D0A506F7369 - 74696F6E2E590500000000000000C803400A53697A652E576964746805000000 - 00000000C803400B53697A652E4865696768740500000000000000C803401453 - 697A652E506C6174666F726D44656661756C740800000000545046300A545265 - 6374616E676C6500095374796C654E616D65060C746F6F6C6261727374796C65 - 05416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846463235 - 323532350748697454657374080553696465730B06426F74746F6D000A53697A - 652E57696474680500000000000000C804400B53697A652E4865696768740500 - 000000000000C804401453697A652E506C6174666F726D44656661756C74080C - 5374726F6B652E436F6C6F7207097846463135313531350756697369626C6508 - 00005450463007544C61796F757400095374796C654E616D65061570726F6772 - 6573736261726572726F727374796C6505416C69676E070643656E7465720A53 - 697A652E576964746805000000000033338505400B53697A652E486569676874 - 0500000000009999E104401453697A652E506C6174666F726D44656661756C74 - 080756697369626C6508085461624F72646572021E000A5452656374616E676C - 6500095374796C654E616D65060668747261636B05416C69676E0708436F6E74 - 656E74730A46696C6C2E436F6C6F720709784646323032303230064C6F636B65 - 64090748697454657374080A53697A652E576964746805000000000033338505 - 400B53697A652E4865696768740500000000009999E104401453697A652E506C - 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 - 31353135313507585261646975730500000000000000C0004007595261646975 - 730500000000000000C00040000A5452656374616E676C6500095374796C654E - 616D65060A68696E64696361746F7205416C69676E07044C6566740A46696C6C - 2E436F6C6F720709784646453232413241064C6F636B65640907486974546573 - 74080C4D617267696E732E4C656674050000000000000080FF3F0B4D61726769 - 6E732E546F70050000000000000080FF3F0D4D617267696E732E526967687405 - 0000000000000080FF3F0E4D617267696E732E426F74746F6D05000000000000 - 0080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F736974 - 696F6E2E59050000000000000080FF3F0A53697A652E57696474680500000000 - 000000C804400B53697A652E4865696768740500000000009999D90440145369 + 000000000000A002400B4D617267696E732E546F700500000000000000A00240 + 0A53697A652E57696474680500000000000000A000400B53697A652E48656967 + 68740500000000000000A000401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E67 + 6C6500095374796C654E616D65060A52656374616E676C653405416C69676E07 + 0643656E7465720A46696C6C2E436F6C6F7207097846463630363036300B4D61 + 7267696E732E546F700500000000000000A002400A53697A652E576964746805 + 00000000000000A000400B53697A652E4865696768740500000000000000A000 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E6500000A5452656374616E676C6500095374796C654E616D + 65060A52656374616E676C653505416C69676E070643656E7465720A46696C6C + 2E436F6C6F7207097846463630363036300B4D617267696E732E546F70050000 + 0000000000A002400D4D617267696E732E52696768740500000000000000A002 + 400A53697A652E57696474680500000000000000A000400B53697A652E486569 + 6768740500000000000000A000401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E + 676C6500095374796C654E616D65060A52656374616E676C653605416C69676E + 070643656E7465720A46696C6C2E436F6C6F7207097846463630363036300C4D + 617267696E732E4C6566740500000000000000A002400E4D617267696E732E42 + 6F74746F6D0500000000000000A002400A53697A652E57696474680500000000 + 000000A000400B53697A652E4865696768740500000000000000A00040145369 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 - 044E6F6E6507585261646975730500000000000000C000400759526164697573 - 0500000000000000C000400000000A5452656374616E676C6500095374796C65 - 4E616D65060676747261636B05416C69676E0708436F6E74656E74730A46696C - 6C2E436F6C6F720709784646323032303230064C6F636B656409074869745465 - 7374080A53697A652E576964746805000000000033338505400B53697A652E48 - 65696768740500000000009999E104401453697A652E506C6174666F726D4465 - 6661756C74080C5374726F6B652E436F6C6F7207097846463135313531350758 - 5261646975730500000000000000C00040075952616469757305000000000000 - 00C00040000A5452656374616E676C6500095374796C654E616D65060A76696E - 64696361746F7205416C69676E0706426F74746F6D0A46696C6C2E436F6C6F72 - 0709784646453232413241064C6F636B6564090748697454657374080C4D6172 - 67696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F70 - 050000000000000080FF3F0D4D617267696E732E526967687405000000000000 - 0080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A50 - 6F736974696F6E2E58050000000000000080FF3F0A506F736974696F6E2E5905 - 000000000099998904400A53697A652E57696474680500000000003333810540 - 0B53697A652E4865696768740500000000000000A803401453697A652E506C61 - 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6507 - 585261646975730500000000000000C000400759526164697573050000000000 - 0000C00040000000005450463007544C61796F757400095374796C654E616D65 - 060E6C696E6B6C6162656C7374796C6505416C69676E070643656E7465720A53 - 697A652E5769647468050000000000CCCC8006400B53697A652E486569676874 - 0500000000009A998104401453697A652E506C6174666F726D44656661756C74 - 080756697369626C6508085461624F72646572021F0005545465787400095374 - 796C654E616D6506047465787405416C69676E0708436F6E74656E7473074869 - 7454657374080A53697A652E5769647468050000000000CCCC8006400B53697A - 652E4865696768740500000000009A998104401453697A652E506C6174666F72 - 6D44656661756C740804546578740604546578741A5465787453657474696E67 - 732E466F6E742E5374796C654578740A0D000000040400000000000000040000 - 00165465787453657474696E67732E466F6E74436F6C6F72070D636C61446F64 - 676572626C7565000F54436F6C6F72416E696D6174696F6E00095374796C654E - 616D650614436F6C6F72416E696D6174696F6E315374796C6508447572617469 - 6F6E050000000000CDCCCCFB3F07496E7665727365090C50726F70657274794E - 616D6506165465787453657474696E67732E466F6E74436F6C6F720A53746172 - 7456616C7565070D636C61446F64676572626C75650953746F7056616C756507 - 0E636C6144656570736B79626C75650754726967676572063049734D6F757365 - 4F7665723D747275653B4973507265737365643D66616C73653B4973466F6375 - 7365643D66616C73650E54726967676572496E7665727365063149734D6F7573 - 654F7665723D66616C73653B4973507265737365643D66616C73653B4973466F - 63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E000953 - 74796C654E616D650614436F6C6F72416E696D6174696F6E325374796C650844 - 75726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D6506 - 165465787453657474696E67732E466F6E74436F6C6F720A537461727456616C - 7565070E636C6144656570736B79626C75650953746F7056616C756507097846 - 463137353739430754726967676572062F4973507265737365643D747275653B - 49734D6F7573654F7665723D747275653B4973466F63757365643D66616C7365 - 000000005450463007544C61796F757400095374796C654E616D650613736D61 - 6C6C7363726F6C6C6261727374796C6505416C69676E070643656E7465720756 - 697369626C6508085461624F726465720220000654547261636B00095374796C - 654E616D65060668747261636B05416C69676E0706436C69656E74064C6F636B - 6564090B4F7269656E746174696F6E070A486F72697A6F6E74616C0A53697A65 + 044E6F6E65000000545046300A5452656374616E676C6500095374796C654E61 + 6D65060E7374617475736261727374796C6505416C69676E070643656E746572 + 0C436C69704368696C6472656E090A46696C6C2E436F6C6F7207097846463235 + 323532350553696465730B03546F70000A53697A652E57696474680500000000 + 000000F004400B53697A652E4865696768740500000000000000C80440145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 07097846463135313531350756697369626C65080007544C61796F7574000953 + 74796C654E616D6506074C61796F75743105416C69676E070552696768740A50 + 6F736974696F6E2E5805000000000000008C04400A53697A652E576964746805 + 00000000000000C803400B53697A652E4865696768740500000000000000C804 + 401453697A652E506C6174666F726D44656661756C740800095453697A654772 + 697000095374796C654E616D65060973697A65677267697005416C69676E0706 + 426F74746F6D0A506F736974696F6E2E590500000000000000C803400A53697A + 652E57696474680500000000000000C803400B53697A652E4865696768740500 + 000000000000C803401453697A652E506C6174666F726D44656661756C740800 + 000000545046300A5452656374616E676C6500095374796C654E616D65060C74 + 6F6F6C6261727374796C6505416C69676E070643656E7465720A46696C6C2E43 + 6F6C6F7207097846463235323532350748697454657374080553696465730B06 + 426F74746F6D000A53697A652E57696474680500000000000000C804400B5369 + 7A652E4865696768740500000000000000C804401453697A652E506C6174666F + 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 + 31350756697369626C650800005450463007544C61796F757400095374796C65 + 4E616D65061570726F67726573736261726572726F727374796C6505416C6967 + 6E070643656E7465720A53697A652E576964746805000000000033338505400B + 53697A652E4865696768740500000000009999E104401453697A652E506C6174 + 666F726D44656661756C74080756697369626C6508085461624F72646572021F + 000A5452656374616E676C6500095374796C654E616D65060668747261636B05 + 416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978464632 + 3032303230064C6F636B6564090748697454657374080A53697A652E57696474 + 6805000000000033338505400B53697A652E4865696768740500000000009999 + E104401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 + 2E436F6C6F720709784646313531353135075852616469757305000000000000 + 00C0004007595261646975730500000000000000C00040000A5452656374616E + 676C6500095374796C654E616D65060A68696E64696361746F7205416C69676E + 07044C6566740A46696C6C2E436F6C6F720709784646453232413241064C6F63 + 6B6564090748697454657374080C4D617267696E732E4C656674050000000000 + 000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D6172 + 67696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F + 74746F6D050000000000000080FF3F0A506F736974696F6E2E58050000000000 + 000080FF3F0A506F736974696F6E2E59050000000000000080FF3F0A53697A65 2E57696474680500000000000000C804400B53697A652E486569676874050000 - 0000000000C804401453697A652E506C6174666F726D44656661756C74080B53 - 74796C654C6F6F6B757006147363726F6C6C62617268747261636B7374796C65 - 00000654547261636B00095374796C654E616D65060676747261636B05416C69 - 676E0706436C69656E74064C6F636B6564090B4F7269656E746174696F6E070A - 486F72697A6F6E74616C0A53697A652E57696474680500000000000000C80440 - 0B53697A652E4865696768740500000000000000C804401453697A652E506C61 - 74666F726D44656661756C74080B5374796C654C6F6F6B757006147363726F6C - 6C62617276747261636B7374796C650000005450463007544C61796F75740009 - 5374796C654E616D65060D636F6D626F626F787374796C6505416C69676E0706 - 43656E7465720A53697A652E57696474680500000000000000C805400B53697A - 652E4865696768740500000000000000C803401453697A652E506C6174666F72 - 6D44656661756C74080756697369626C6508085461624F726465720221000C54 - 42727573684F626A65637400095374796C654E616D65060A666F726567726F75 - 6E6400000B54466F6E744F626A65637400095374796C654E616D650604666F6E - 7409466F6E742E53697A650500000000000000D00240000007544C61796F7574 - 00095374796C654E616D65060A6261636B67726F756E6405416C69676E070843 - 6F6E74656E74730A53697A652E57696474680500000000000000C805400B5369 - 7A652E4865696768740500000000000000C803401453697A652E506C6174666F - 726D44656661756C7408000A5452656374616E676C6500095374796C654E616D - 65060A52656374616E676C653105416C69676E0706436C69656E740A46696C6C - 2E436F6C6F7207097846463230323032300748697454657374080A53697A652E - 57696474680500000000000000C805400B53697A652E48656967687405000000 - 00000000C803401453697A652E506C6174666F726D44656661756C74080B5374 - 726F6B652E4B696E6407044E6F6E6507585261646975730500000000000000C0 - 004007595261646975730500000000000000C000400007544C61796F75740009 - 5374796C654E616D650611427574746F6E5374796C654F626A65637405416C69 - 676E070846697452696768740B4D617267696E732E546F700500000000000000 - 80FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D6172 - 67696E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E - 580500000000005ED99705400A506F736974696F6E2E59050000000000000080 - FF3F0A53697A652E5769647468050000000000889AB803400B53697A652E4865 - 696768740500000000000000B803401453697A652E506C6174666F726D446566 - 61756C74080007544C61796F757400095374796C654E616D6506074C61796F75 - 743105416C69676E070643656E7465720C4D617267696E732E4C656674050000 - 000000000080FF3F0A53697A652E57696474680500000000000000A002400B53 - 697A652E4865696768740500000000000000C001401453697A652E506C617466 - 6F726D44656661756C74080005545061746800095374796C654E616D65060550 - 6174683105416C69676E0706436C69656E7409446174612E506174680A340000 - 0004000000000000000000C8420000C84201000000000096430000C842010000 - 000000484300009643030000000000C8420000C8420A46696C6C2E436F6C6F72 - 0708636C6157686974650748697454657374080A53697A652E57696474680500 + 0000009999D904401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E6507585261646975730500000000000000 + C0004007595261646975730500000000000000C000400000000A545265637461 + 6E676C6500095374796C654E616D65060676747261636B05416C69676E070843 + 6F6E74656E74730A46696C6C2E436F6C6F720709784646323032303230064C6F + 636B6564090748697454657374080A53697A652E576964746805000000000033 + 338505400B53697A652E4865696768740500000000009999E104401453697A65 + 2E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709 + 78464631353135313507585261646975730500000000000000C0004007595261 + 646975730500000000000000C00040000A5452656374616E676C650009537479 + 6C654E616D65060A76696E64696361746F7205416C69676E0706426F74746F6D + 0A46696C6C2E436F6C6F720709784646453232413241064C6F636B6564090748 + 697454657374080C4D617267696E732E4C656674050000000000000080FF3F0B + 4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E52 + 69676874050000000000000080FF3F0E4D617267696E732E426F74746F6D0500 + 00000000000080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A + 506F736974696F6E2E5905000000000099998904400A53697A652E5769647468 + 05000000000033338105400B53697A652E4865696768740500000000000000A8 + 03401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E6507585261646975730500000000000000C00040075952 + 61646975730500000000000000C00040000000005450463007544C61796F7574 + 00095374796C654E616D65060E6C696E6B6C6162656C7374796C6505416C6967 + 6E070643656E7465720A53697A652E5769647468050000000000CCCC8006400B + 53697A652E4865696768740500000000009A998104401453697A652E506C6174 + 666F726D44656661756C74080756697369626C6508085461624F726465720220 + 0005545465787400095374796C654E616D6506047465787405416C69676E0708 + 436F6E74656E74730748697454657374080A53697A652E576964746805000000 + 0000CCCC8006400B53697A652E4865696768740500000000009A998104401453 + 697A652E506C6174666F726D44656661756C740804546578740604546578741A + 5465787453657474696E67732E466F6E742E5374796C654578740A0D00000004 + 040000000000000004000000165465787453657474696E67732E466F6E74436F + 6C6F72070D636C61446F64676572626C7565000F54436F6C6F72416E696D6174 + 696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E3153 + 74796C65084475726174696F6E050000000000CDCCCCFB3F07496E7665727365 + 090C50726F70657274794E616D6506165465787453657474696E67732E466F6E + 74436F6C6F720A537461727456616C7565070D636C61446F64676572626C7565 + 0953746F7056616C7565070E636C6144656570736B79626C7565075472696767 + 6572063049734D6F7573654F7665723D747275653B4973507265737365643D66 + 616C73653B4973466F63757365643D66616C73650E54726967676572496E7665 + 727365063149734D6F7573654F7665723D66616C73653B497350726573736564 + 3D66616C73653B4973466F63757365643D66616C736500000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174 + 696F6E325374796C65084475726174696F6E050000000000CDCCCCFB3F0C5072 + 6F70657274794E616D6506165465787453657474696E67732E466F6E74436F6C + 6F720A537461727456616C7565070E636C6144656570736B79626C7565095374 + 6F7056616C756507097846463137353739430754726967676572062F49735072 + 65737365643D747275653B49734D6F7573654F7665723D747275653B4973466F + 63757365643D66616C7365000000005450463007544C61796F75740009537479 + 6C654E616D650613736D616C6C7363726F6C6C6261727374796C6505416C6967 + 6E070643656E7465720756697369626C6508085461624F726465720221000654 + 547261636B00095374796C654E616D65060668747261636B05416C69676E0706 + 436C69656E74064C6F636B6564090B4F7269656E746174696F6E070A486F7269 + 7A6F6E74616C0A53697A652E57696474680500000000000000C804400B53697A + 652E4865696768740500000000000000C804401453697A652E506C6174666F72 + 6D44656661756C74080B5374796C654C6F6F6B757006147363726F6C6C626172 + 68747261636B7374796C6500000654547261636B00095374796C654E616D6506 + 0676747261636B05416C69676E0706436C69656E74064C6F636B6564090B4F72 + 69656E746174696F6E070A486F72697A6F6E74616C0A53697A652E5769647468 + 0500000000000000C804400B53697A652E4865696768740500000000000000C8 + 04401453697A652E506C6174666F726D44656661756C74080B5374796C654C6F + 6F6B757006147363726F6C6C62617276747261636B7374796C65000000545046 + 3007544C61796F757400095374796C654E616D65060D636F6D626F626F787374 + 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 + 00000000C805400B53697A652E4865696768740500000000000000C803401453 + 697A652E506C6174666F726D44656661756C74080756697369626C6508085461 + 624F726465720222000C5442727573684F626A65637400095374796C654E616D + 65060A666F726567726F756E6400000B54466F6E744F626A6563740009537479 + 6C654E616D650604666F6E7409466F6E742E53697A650500000000000000D002 + 40000007544C61796F757400095374796C654E616D65060A6261636B67726F75 + 6E6405416C69676E0708436F6E74656E74730A53697A652E5769647468050000 + 0000000000C805400B53697A652E4865696768740500000000000000C8034014 + 53697A652E506C6174666F726D44656661756C7408000A5452656374616E676C + 6500095374796C654E616D65060A52656374616E676C653105416C69676E0706 + 436C69656E740A46696C6C2E436F6C6F72070978464632303230323007486974 + 54657374080A53697A652E57696474680500000000000000C805400B53697A65 + 2E4865696768740500000000000000C803401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65075852616469 + 75730500000000000000C0004007595261646975730500000000000000C00040 + 0007544C61796F757400095374796C654E616D650611427574746F6E5374796C + 654F626A65637405416C69676E070846697452696768740B4D617267696E732E + 546F70050000000000000080FF3F0D4D617267696E732E526967687405000000 + 0000000080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF + 3F0A506F736974696F6E2E580500000000005ED99705400A506F736974696F6E + 2E59050000000000000080FF3F0A53697A652E5769647468050000000000889A + B803400B53697A652E4865696768740500000000000000B803401453697A652E + 506C6174666F726D44656661756C74080007544C61796F757400095374796C65 + 4E616D6506074C61796F75743105416C69676E070643656E7465720C4D617267 + 696E732E4C656674050000000000000080FF3F0A53697A652E57696474680500 000000000000A002400B53697A652E4865696768740500000000000000C00140 - 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 - 6E6407044E6F6E65000000000F54436F6C6F72416E696D6174696F6E00095374 - 796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E310844 - 75726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D6506 - 0A46696C6C2E436F6C6F720A537461727456616C756507097846463230323032 - 300953746F7056616C7565070978464634303430343007547269676765720630 - 49734D6F7573654F7665723D747275653B4973507265737365643D66616C7365 - 3B4973466F63757365643D66616C73650E54726967676572496E766572736506 - 3149734D6F7573654F7665723D66616C73653B4973507265737365643D66616C - 73653B4973466F63757365643D66616C736500000F54436F6C6F72416E696D61 - 74696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D - 6174696F6E32084475726174696F6E050000000000CDCCCCFB3F0C50726F7065 - 7274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709 - 7846463430343034300953746F7056616C756507097846463137353739430754 - 726967676572062F4973507265737365643D747275653B49734D6F7573654F76 - 65723D747275653B4973466F63757365643D66616C736500000F54436F6C6F72 - 416E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F - 72416E696D6174696F6E33084475726174696F6E050000000000CDCCCCFB3F0C - 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 - 6C756507097846463241383245320953746F7056616C75650709784646313735 - 3739430754726967676572062E4973507265737365643D747275653B49734D6F - 7573654F7665723D747275653B4973466F63757365643D747275650E54726967 - 676572496E7665727365062F4973507265737365643D66616C73653B49734D6F - 7573654F7665723D747275653B4973466F63757365643D747275650000000007 - 544C61796F757400095374796C654E616D650607636F6E74656E7405416C6967 - 6E0706436C69656E74064C6F636B6564090C4D617267696E732E4C6566740500 - 0000000000008000400B4D617267696E732E546F700500000000000000800040 - 0D4D617267696E732E52696768740500000000000000D803400E4D617267696E - 732E426F74746F6D05000000000000008000400A53697A652E57696474680500 - 0000000000008E05400B53697A652E4865696768740500000000000000A80340 - 1453697A652E506C6174666F726D44656661756C74080000005450463007544C - 61796F757400095374796C654E616D65060D73706C69747465727374796C6505 - 416C69676E070643656E7465720A53697A652E57696474680500000000000000 - A904400B53697A652E4865696768740500000000000080C105401453697A652E - 506C6174666F726D44656661756C74080756697369626C6508085461624F7264 - 65720222000A5452656374616E676C6500095374796C654E616D65060A526563 - 74616E676C653105416C69676E0706436C69656E740A46696C6C2E436F6C6F72 - 07097846463330333033300748697454657374080553696465730B044C656674 - 055269676874000A53697A652E57696474680500000000000000A904400B5369 - 7A652E4865696768740500000000000080C105401453697A652E506C6174666F - 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 - 3135000007544C61796F757400095374796C654E616D6506046772697005416C - 69676E0706436C69656E740A53697A652E57696474680500000000000000A904 - 400B53697A652E4865696768740500000000000080C105401453697A652E506C - 6174666F726D44656661756C7408000754436972636C6500095374796C654E61 - 6D650607436972636C653105416C69676E070643656E7465720A46696C6C2E43 - 6F6C6F7207097846463430343034300A53697A652E5769647468050000000000 - 0000E001400B53697A652E4865696768740500000000000000E001401453697A - 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 - 0978464631353135313500000754436972636C6500095374796C654E616D6506 - 07436972636C653205416C69676E070643656E7465720A46696C6C2E436F6C6F - 7207097846463430343034300B4D617267696E732E546F700500000000000000 - A003400A53697A652E57696474680500000000000000E001400B53697A652E48 - 65696768740500000000000000E001401453697A652E506C6174666F726D4465 - 6661756C74080C5374726F6B652E436F6C6F7207097846463135313531350000 - 0754436972636C6500095374796C654E616D650607436972636C653305416C69 - 676E070643656E7465720A46696C6C2E436F6C6F720709784646343034303430 - 0E4D617267696E732E426F74746F6D0500000000000000A003400A53697A652E + 1453697A652E506C6174666F726D44656661756C740800055450617468000953 + 74796C654E616D650605506174683105416C69676E0706436C69656E74094461 + 74612E506174680A3400000004000000000000000000C8420000C84201000000 + 000096430000C842010000000000484300009643030000000000C8420000C842 + 0A46696C6C2E436F6C6F720708636C6157686974650748697454657374080A53 + 697A652E57696474680500000000000000A002400B53697A652E486569676874 + 0500000000000000C001401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E65000000000F54436F6C6F72416E + 696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F7241 + 6E696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F0C5072 + 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 + 6507097846463230323032300953746F7056616C756507097846463430343034 + 300754726967676572063049734D6F7573654F7665723D747275653B49735072 + 65737365643D66616C73653B4973466F63757365643D66616C73650E54726967 + 676572496E7665727365063149734D6F7573654F7665723D66616C73653B4973 + 507265737365643D66616C73653B4973466F63757365643D66616C736500000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D65061562757474 + 6F6E436F6C6F72416E696D6174696F6E32084475726174696F6E050000000000 + CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53 + 7461727456616C756507097846463430343034300953746F7056616C75650709 + 7846463137353739430754726967676572062F4973507265737365643D747275 + 653B49734D6F7573654F7665723D747275653B4973466F63757365643D66616C + 736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 15627574746F6E436F6C6F72416E696D6174696F6E33084475726174696F6E05 + 0000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463241383245320953746F705661 + 6C756507097846463137353739430754726967676572062E4973507265737365 + 643D747275653B49734D6F7573654F7665723D747275653B4973466F63757365 + 643D747275650E54726967676572496E7665727365062F497350726573736564 + 3D66616C73653B49734D6F7573654F7665723D747275653B4973466F63757365 + 643D747275650000000007544C61796F757400095374796C654E616D65060763 + 6F6E74656E7405416C69676E0706436C69656E74064C6F636B6564090C4D6172 + 67696E732E4C65667405000000000000008000400B4D617267696E732E546F70 + 05000000000000008000400D4D617267696E732E526967687405000000000000 + 00D803400E4D617267696E732E426F74746F6D05000000000000008000400A53 + 697A652E576964746805000000000000008E05400B53697A652E486569676874 + 0500000000000000A803401453697A652E506C6174666F726D44656661756C74 + 080000005450463007544C61796F757400095374796C654E616D65060D73706C + 69747465727374796C6505416C69676E070643656E7465720A53697A652E5769 + 6474680500000000000000A904400B53697A652E486569676874050000000000 + 0080C105401453697A652E506C6174666F726D44656661756C74080756697369 + 626C6508085461624F726465720223000A5452656374616E676C650009537479 + 6C654E616D65060A52656374616E676C653105416C69676E0706436C69656E74 + 0A46696C6C2E436F6C6F72070978464633303330333007486974546573740805 + 53696465730B044C656674055269676874000A53697A652E5769647468050000 + 0000000000A904400B53697A652E4865696768740500000000000080C1054014 + 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C + 6F720709784646313531353135000007544C61796F757400095374796C654E61 + 6D6506046772697005416C69676E0706436C69656E740A53697A652E57696474 + 680500000000000000A904400B53697A652E4865696768740500000000000080 + C105401453697A652E506C6174666F726D44656661756C740800075443697263 + 6C6500095374796C654E616D650607436972636C653105416C69676E07064365 + 6E7465720A46696C6C2E436F6C6F7207097846463430343034300A53697A652E 57696474680500000000000000E001400B53697A652E48656967687405000000 00000000E001401453697A652E506C6174666F726D44656661756C74080C5374 - 726F6B652E436F6C6F720709784646313531353135000000005450463007544C - 61796F757400095374796C654E616D650610726164696F627574746F6E737479 - 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 - 000000F205400B53697A652E4865696768740500000000000000A80340145369 - 7A652E506C6174666F726D44656661756C74080756697369626C650808546162 - 4F7264657202230007544C61796F75740005416C69676E07044C6566740A5369 - 7A652E57696474680500000000000000A803400B53697A652E48656967687405 - 00000000000000A803401453697A652E506C6174666F726D44656661756C7408 - 000854456C6C6970736500095374796C654E616D65060A6261636B67726F756E - 6405416C69676E070643656E7465720A46696C6C2E436F6C6F72070978464632 - 3032303230064C6F636B6564090748697454657374080A53697A652E57696474 - 680500000000000000F002400B53697A652E4865696768740500000000000000 - F002401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 - 2E436F6C6F720709784646313531353135000854456C6C697073650009537479 - 6C654E616D650609636865636B6D61726B05416C69676E0706436C69656E740A - 46696C6C2E436F6C6F720709784646324138324532064C6F636B656409074869 - 745465737408074F70616369747905000000000000000000000C4D617267696E - 732E4C65667405000000000000008000400B4D617267696E732E546F70050000 - 00000000008000400D4D617267696E732E526967687405000000000000008000 - 400E4D617267696E732E426F74746F6D05000000000000008000400A53697A65 - 2E57696474680500000000000000B002400B53697A652E486569676874050000 - 0000000000B002401453697A652E506C6174666F726D44656661756C74080B53 - 74726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F - 6E00095374796C654E616D65061A6F706163697479436865636B6D61726B416E + 726F6B652E436F6C6F72070978464631353135313500000754436972636C6500 + 095374796C654E616D650607436972636C653205416C69676E070643656E7465 + 720A46696C6C2E436F6C6F7207097846463430343034300B4D617267696E732E + 546F700500000000000000A003400A53697A652E576964746805000000000000 + 00E001400B53697A652E4865696768740500000000000000E001401453697A65 + 2E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709 + 78464631353135313500000754436972636C6500095374796C654E616D650607 + 436972636C653305416C69676E070643656E7465720A46696C6C2E436F6C6F72 + 07097846463430343034300E4D617267696E732E426F74746F6D050000000000 + 0000A003400A53697A652E57696474680500000000000000E001400B53697A65 + 2E4865696768740500000000000000E001401453697A652E506C6174666F726D + 44656661756C74080C5374726F6B652E436F6C6F720709784646313531353135 + 000000005450463007544C61796F757400095374796C654E616D650610726164 + 696F627574746F6E7374796C6505416C69676E070643656E7465720A53697A65 + 2E57696474680500000000000000F205400B53697A652E486569676874050000 + 0000000000A803401453697A652E506C6174666F726D44656661756C74080756 + 697369626C6508085461624F7264657202240007544C61796F75740005416C69 + 676E07044C6566740A53697A652E57696474680500000000000000A803400B53 + 697A652E4865696768740500000000000000A803401453697A652E506C617466 + 6F726D44656661756C7408000854456C6C6970736500095374796C654E616D65 + 060A6261636B67726F756E6405416C69676E070643656E7465720A46696C6C2E + 436F6C6F720709784646323032303230064C6F636B6564090748697454657374 + 080A53697A652E57696474680500000000000000F002400B53697A652E486569 + 6768740500000000000000F002401453697A652E506C6174666F726D44656661 + 756C74080C5374726F6B652E436F6C6F72070978464631353135313500085445 + 6C6C6970736500095374796C654E616D650609636865636B6D61726B05416C69 + 676E0706436C69656E740A46696C6C2E436F6C6F720709784646324138324532 + 064C6F636B656409074869745465737408074F70616369747905000000000000 + 000000000C4D617267696E732E4C65667405000000000000008000400B4D6172 + 67696E732E546F7005000000000000008000400D4D617267696E732E52696768 + 7405000000000000008000400E4D617267696E732E426F74746F6D0500000000 + 0000008000400A53697A652E57696474680500000000000000B002400B53697A + 652E4865696768740500000000000000B002401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C + 6F6174416E696D6174696F6E00095374796C654E616D65061A6F706163697479 + 436865636B6D61726B416E696D6174696F6E31084475726174696F6E05000000 + 0000CDCCCCFB3F0C50726F70657274794E616D6506074F7061636974790A5374 + 61727456616C756505000000000000000000000953746F7056616C7565050000 + 000000000080FF3F0754726967676572060E4973436865636B65643D74727565 + 0E54726967676572496E7665727365060F4973436865636B65643D66616C7365 + 0000000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65061A + 726164696F627574746F6E436F6C6F72416E696D6174696F6E31084475726174 + 696F6E050000000000CDCCCCFB3F07496E7665727365090C50726F7065727479 + 4E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709784646 + 3230323032300953746F7056616C756507097846463430343034300754726967 + 676572061049734D6F7573654F7665723D747275650E54726967676572496E76 + 65727365061149734D6F7573654F7665723D66616C736500000F54436F6C6F72 + 416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D61 + 74696F6E315374796C65084475726174696F6E050000000000CDCCCCFB3F0C50 + 726F70657274794E616D65060C5374726F6B652E436F6C6F720A537461727456 + 616C756507097846463135313531350953746F7056616C756507097846463241 + 383245320754726967676572060E4973436865636B65643D747275650E547269 + 67676572496E7665727365060F4973436865636B65643D66616C736500000000 + 05545465787400095374796C654E616D6506047465787405416C69676E070643 + 6C69656E74064C6F636B6564090748697454657374080A53697A652E57696474 + 680500000000000000C805400B53697A652E4865696768740500000000000000 + A803401453697A652E506C6174666F726D44656661756C740804546578740604 + 54657874165465787453657474696E67732E466F6E74436F6C6F720708636C61 + 57686974650000005450463007544C61796F757400095374796C654E616D6506 + 18756C63656E746572726164696F627574746F6E7374796C6505416C69676E07 + 0643656E7465720A53697A652E57696474680500000000005655FB05400B5369 + 7A652E4865696768740500000000000000A004401453697A652E506C6174666F + 726D44656661756C74080756697369626C6508085461624F7264657202290007 + 544C61796F75740005416C69676E0706426F74746F6D0A506F736974696F6E2E + 5905000000000000008804400A53697A652E57696474680500000000005655FB + 05400B53697A652E4865696768740500000000000000C001401453697A652E50 + 6C6174666F726D44656661756C7408000A5452656374616E676C650009537479 + 6C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E + 747307436F726E6572730B07546F704C6566740A426F74746F6D4C656674000A + 46696C6C2E436F6C6F720709784646323032303230064C6F636B656409074869 + 7454657374080A53697A652E57696474680500000000005655FB05400B53697A + 652E4865696768740500000000000000C001401453697A652E506C6174666F72 + 6D44656661756C74080C5374726F6B652E436F6C6F7207097846463135313531 + 35000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65062162 + 61636B67726F756E64556C427574746F6E436F6C6F72416E696D6174696F6E31 + 084475726174696F6E050000000000CDCCCCFB3F07496E7665727365090C5072 + 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 + 6507097846463230323032300953746F7056616C756507097846463430343034 + 300754726967676572061049734D6F7573654F7665723D747275650E54726967 + 676572496E7665727365061149734D6F7573654F7665723D66616C736500000A + 5452656374616E676C6500095374796C654E616D650609636865636B6D61726B + 05416C69676E0708436F6E74656E747307436F726E6572730B07546F704C6566 + 740A426F74746F6D4C656674000A46696C6C2E436F6C6F720709784646324138 + 324532064C6F636B656409074869745465737408074F70616369747905000000 + 000000000000000C4D617267696E732E4C656674050000000000000080FF3F0B + 4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E52 + 69676874050000000000000080FF3F0E4D617267696E732E426F74746F6D0500 + 00000000000080FF3F0A53697A652E57696474680500000000005655F705400B + 53697A652E48656967687405000000000000008001401453697A652E506C6174 + 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F + 54466C6F6174416E696D6174696F6E00095374796C654E616D65061A63686563 + 6B6D61726B4F706163697479416E696D6174696F6E31084475726174696F6E05 + 0000000000CDCCCCFB3F0C50726F70657274794E616D6506074F706163697479 + 0A537461727456616C756505000000000000000000000953746F7056616C7565 + 050000000000000080FF3F0754726967676572060E4973436865636B65643D74 + 7275650E54726967676572496E7665727365060F4973436865636B65643D6661 + 6C7365000000000005545465787400095374796C654E616D6506047465787405 + 416C69676E0706436C69656E74064C6F636B6564090748697454657374080A53 + 697A652E57696474680500000000005655FB05400B53697A652E486569676874 + 05000000000000008804401453697A652E506C6174666F726D44656661756C74 + 080454657874060454657874165465787453657474696E67732E466F6E74436F + 6C6F720708636C6157686974650000005450463007544C61796F757400095374 + 796C654E616D650616756C6C656674726164696F627574746F6E7374796C6505 + 416C69676E070643656E7465720A53697A652E57696474680500000000005655 + FB05400B53697A652E4865696768740500000000000000A004401453697A652E + 506C6174666F726D44656661756C74080756697369626C6508085461624F7264 + 6572022A0007544C61796F75740005416C69676E0706426F74746F6D0A506F73 + 6974696F6E2E5905000000000000008804400A53697A652E5769647468050000 + 0000005655FB05400B53697A652E4865696768740500000000000000C0014014 + 53697A652E506C6174666F726D44656661756C7408000A5452656374616E676C + 6500095374796C654E616D65060A6261636B67726F756E6405416C69676E0708 + 436F6E74656E747307436F726E6572730B07546F704C6566740A426F74746F6D + 4C656674000A46696C6C2E436F6C6F720709784646323032303230064C6F636B + 6564090748697454657374080A53697A652E57696474680500000000005655FB + 05400B53697A652E4865696768740500000000000000C001401453697A652E50 + 6C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846 + 4631353135313507585261646975730500000000000000C00040075952616469 + 75730500000000000000C00040000F54436F6C6F72416E696D6174696F6E0009 + 5374796C654E616D6506216261636B67726F756E64556C427574746F6E436F6C + 6F72416E696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F + 07496E7665727365090C50726F70657274794E616D65060A46696C6C2E436F6C + 6F720A537461727456616C756507097846463230323032300953746F7056616C + 756507097846463430343034300754726967676572061049734D6F7573654F76 + 65723D747275650E54726967676572496E7665727365061149734D6F7573654F + 7665723D66616C736500000A5452656374616E676C6500095374796C654E616D + 650609636865636B6D61726B05416C69676E0708436F6E74656E747307436F72 + 6E6572730B07546F704C6566740A426F74746F6D4C656674000A46696C6C2E43 + 6F6C6F720709784646324138324532064C6F636B656409074869745465737408 + 074F70616369747905000000000000000000000C4D617267696E732E4C656674 + 050000000000000080FF3F0B4D617267696E732E546F70050000000000000080 + FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D617267 + 696E732E426F74746F6D050000000000000080FF3F0A53697A652E5769647468 + 0500000000005655F705400B53697A652E486569676874050000000000000080 + 01401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E6507585261646975730500000000000000800040075952 + 61646975730500000000000000800040000F54466C6F6174416E696D6174696F + 6E00095374796C654E616D65061A636865636B6D61726B4F706163697479416E 696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F0C50726F 70657274794E616D6506074F7061636974790A537461727456616C7565050000 00000000000000000953746F7056616C7565050000000000000080FF3F075472 6967676572060E4973436865636B65643D747275650E54726967676572496E76 - 65727365060F4973436865636B65643D66616C73650000000F54436F6C6F7241 - 6E696D6174696F6E00095374796C654E616D65061A726164696F627574746F6E - 436F6C6F72416E696D6174696F6E31084475726174696F6E050000000000CDCC - CCFB3F07496E7665727365090C50726F70657274794E616D65060A46696C6C2E - 436F6C6F720A537461727456616C756507097846463230323032300953746F70 - 56616C756507097846463430343034300754726967676572061049734D6F7573 - 654F7665723D747275650E54726967676572496E7665727365061149734D6F75 - 73654F7665723D66616C736500000F54436F6C6F72416E696D6174696F6E0009 - 5374796C654E616D650614436F6C6F72416E696D6174696F6E315374796C6508 - 4475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65 - 060C5374726F6B652E436F6C6F720A537461727456616C756507097846463135 - 313531350953746F7056616C7565070978464632413832453207547269676765 - 72060E4973436865636B65643D747275650E54726967676572496E7665727365 - 060F4973436865636B65643D66616C7365000000000554546578740009537479 - 6C654E616D6506047465787405416C69676E0706436C69656E74064C6F636B65 - 64090748697454657374080A53697A652E57696474680500000000000000C805 - 400B53697A652E4865696768740500000000000000A803401453697A652E506C - 6174666F726D44656661756C7408045465787406045465787416546578745365 - 7474696E67732E466F6E74436F6C6F720708636C615768697465000000545046 - 3007544C61796F757400095374796C654E616D650618756C63656E7465727261 - 64696F627574746F6E7374796C6505416C69676E070643656E7465720A53697A + 65727365060F4973436865636B65643D66616C73650000000000055454657874 + 00095374796C654E616D6506047465787405416C69676E0706436C69656E7406 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 005655FB05400B53697A652E4865696768740500000000000000880440145369 + 7A652E506C6174666F726D44656661756C7408165465787453657474696E6773 + 2E466F6E74436F6C6F720708636C6157686974650000005450463007544C6179 + 6F757400095374796C654E616D650617756C7269676874726164696F62757474 + 6F6E7374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 0500000000005655FB05400B53697A652E4865696768740500000000000000A0 + 04401453697A652E506C6174666F726D44656661756C74080756697369626C65 + 08085461624F72646572022D0007544C61796F75740005416C69676E0706426F + 74746F6D0A506F736974696F6E2E5905000000000000008804400A53697A652E + 57696474680500000000005655FB05400B53697A652E48656967687405000000 + 00000000C001401453697A652E506C6174666F726D44656661756C7408000A54 + 52656374616E676C6500095374796C654E616D65060A6261636B67726F756E64 + 05416C69676E0708436F6E74656E747307436F726E6572730B08546F70526967 + 68740B426F74746F6D5269676874000A46696C6C2E436F6C6F72070978464632 + 3032303230064C6F636B6564090748697454657374080A53697A652E57696474 + 680500000000005655FB05400B53697A652E4865696768740500000000000000 + C001401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 + 2E436F6C6F720709784646313531353135075852616469757305000000000000 + 00C0004007595261646975730500000000000000C00040000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D6506216261636B67726F756E6455 + 6C427574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E05 + 0000000000CDCCCCFB3F07496E7665727365090C50726F70657274794E616D65 + 060A46696C6C2E436F6C6F720A537461727456616C7565070978464632303230 + 32300953746F7056616C75650709784646343034303430075472696767657206 + 1049734D6F7573654F7665723D747275650E54726967676572496E7665727365 + 061149734D6F7573654F7665723D66616C736500000A5452656374616E676C65 + 00095374796C654E616D650609636865636B6D61726B05416C69676E0708436F + 6E74656E747307436F726E6572730B08546F7052696768740B426F74746F6D52 + 69676874000A46696C6C2E436F6C6F720709784646324138324532064C6F636B + 656409074869745465737408074F70616369747905000000000000000000000C + 4D617267696E732E4C656674050000000000000080FF3F0B4D617267696E732E + 546F70050000000000000080FF3F0D4D617267696E732E526967687405000000 + 0000000080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF + 3F0A53697A652E57696474680500000000005655F705400B53697A652E486569 + 67687405000000000000008001401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E6507585261646975730500 + 00000000000080004007595261646975730500000000000000800040000F5446 + 6C6F6174416E696D6174696F6E00095374796C654E616D65061A636865636B6D + 61726B4F706163697479416E696D6174696F6E31084475726174696F6E050000 + 000000CDCCCCFB3F0C50726F70657274794E616D6506074F7061636974790A53 + 7461727456616C756505000000000000000000000953746F7056616C75650500 + 00000000000080FF3F0754726967676572060E4973436865636B65643D747275 + 650E54726967676572496E7665727365060F4973436865636B65643D66616C73 + 65000000000005545465787400095374796C654E616D6506047465787405416C + 69676E0706436C69656E74064C6F636B6564090748697454657374080A53697A 652E57696474680500000000005655FB05400B53697A652E4865696768740500 - 000000000000A004401453697A652E506C6174666F726D44656661756C740807 - 56697369626C6508085461624F7264657202280007544C61796F75740005416C - 69676E0706426F74746F6D0A506F736974696F6E2E5905000000000000008804 - 400A53697A652E57696474680500000000005655FB05400B53697A652E486569 - 6768740500000000000000C001401453697A652E506C6174666F726D44656661 - 756C7408000A5452656374616E676C6500095374796C654E616D65060A626163 - 6B67726F756E6405416C69676E0708436F6E74656E747307436F726E6572730B - 07546F704C6566740A426F74746F6D4C656674000A46696C6C2E436F6C6F7207 - 09784646323032303230064C6F636B6564090748697454657374080A53697A65 - 2E57696474680500000000005655FB05400B53697A652E486569676874050000 - 0000000000C001401453697A652E506C6174666F726D44656661756C74080C53 - 74726F6B652E436F6C6F720709784646313531353135000F54436F6C6F72416E - 696D6174696F6E00095374796C654E616D6506216261636B67726F756E64556C - 427574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E0500 - 00000000CDCCCCFB3F07496E7665727365090C50726F70657274794E616D6506 - 0A46696C6C2E436F6C6F720A537461727456616C756507097846463230323032 - 300953746F7056616C7565070978464634303430343007547269676765720610 - 49734D6F7573654F7665723D747275650E54726967676572496E766572736506 - 1149734D6F7573654F7665723D66616C736500000A5452656374616E676C6500 - 095374796C654E616D650609636865636B6D61726B05416C69676E0708436F6E - 74656E747307436F726E6572730B07546F704C6566740A426F74746F6D4C6566 - 74000A46696C6C2E436F6C6F720709784646324138324532064C6F636B656409 - 074869745465737408074F70616369747905000000000000000000000C4D6172 - 67696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F70 - 050000000000000080FF3F0D4D617267696E732E526967687405000000000000 - 0080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53 - 697A652E57696474680500000000005655F705400B53697A652E486569676874 - 05000000000000008001401453697A652E506C6174666F726D44656661756C74 - 080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D61 - 74696F6E00095374796C654E616D65061A636865636B6D61726B4F7061636974 - 79416E696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F0C - 50726F70657274794E616D6506074F7061636974790A537461727456616C7565 - 05000000000000000000000953746F7056616C7565050000000000000080FF3F - 0754726967676572060E4973436865636B65643D747275650E54726967676572 - 496E7665727365060F4973436865636B65643D66616C73650000000000055454 - 65787400095374796C654E616D6506047465787405416C69676E0706436C6965 - 6E74064C6F636B6564090748697454657374080A53697A652E57696474680500 - 000000005655FB05400B53697A652E4865696768740500000000000000880440 - 1453697A652E506C6174666F726D44656661756C740804546578740604546578 - 74165465787453657474696E67732E466F6E74436F6C6F720708636C61576869 - 74650000005450463007544C61796F757400095374796C654E616D650616756C - 6C656674726164696F627574746F6E7374796C6505416C69676E070643656E74 - 65720A53697A652E57696474680500000000005655FB05400B53697A652E4865 - 696768740500000000000000A004401453697A652E506C6174666F726D446566 - 61756C74080756697369626C6508085461624F72646572022A0007544C61796F - 75740005416C69676E0706426F74746F6D0A506F736974696F6E2E5905000000 - 000000008804400A53697A652E57696474680500000000005655FB05400B5369 - 7A652E4865696768740500000000000000C001401453697A652E506C6174666F - 726D44656661756C7408000A5452656374616E676C6500095374796C654E616D - 65060A6261636B67726F756E6405416C69676E0708436F6E74656E747307436F - 726E6572730B07546F704C6566740A426F74746F6D4C656674000A46696C6C2E - 436F6C6F720709784646323032303230064C6F636B6564090748697454657374 - 080A53697A652E57696474680500000000005655FB05400B53697A652E486569 - 6768740500000000000000C001401453697A652E506C6174666F726D44656661 - 756C74080C5374726F6B652E436F6C6F72070978464631353135313507585261 - 646975730500000000000000C0004007595261646975730500000000000000C0 - 0040000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650621 - 6261636B67726F756E64556C427574746F6E436F6C6F72416E696D6174696F6E - 31084475726174696F6E050000000000CDCCCCFB3F07496E7665727365090C50 - 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C - 756507097846463230323032300953746F7056616C7565070978464634303430 - 34300754726967676572061049734D6F7573654F7665723D747275650E547269 - 67676572496E7665727365061149734D6F7573654F7665723D66616C73650000 - 0A5452656374616E676C6500095374796C654E616D650609636865636B6D6172 - 6B05416C69676E0708436F6E74656E747307436F726E6572730B07546F704C65 - 66740A426F74746F6D4C656674000A46696C6C2E436F6C6F7207097846463241 - 38324532064C6F636B656409074869745465737408074F706163697479050000 - 00000000000000000C4D617267696E732E4C656674050000000000000080FF3F - 0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E - 5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D05 - 0000000000000080FF3F0A53697A652E57696474680500000000005655F70540 - 0B53697A652E48656967687405000000000000008001401453697A652E506C61 - 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6507 - 5852616469757305000000000000008000400759526164697573050000000000 - 0000800040000F54466C6F6174416E696D6174696F6E00095374796C654E616D - 65061A636865636B6D61726B4F706163697479416E696D6174696F6E31084475 - 726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D650607 - 4F7061636974790A537461727456616C75650500000000000000000000095374 - 6F7056616C7565050000000000000080FF3F0754726967676572060E49734368 - 65636B65643D747275650E54726967676572496E7665727365060F4973436865 - 636B65643D66616C7365000000000005545465787400095374796C654E616D65 - 06047465787405416C69676E0706436C69656E74064C6F636B65640907486974 - 54657374080A53697A652E57696474680500000000005655FB05400B53697A65 - 2E48656967687405000000000000008804401453697A652E506C6174666F726D - 44656661756C7408165465787453657474696E67732E466F6E74436F6C6F7207 - 08636C6157686974650000005450463007544C61796F757400095374796C654E - 616D650617756C7269676874726164696F627574746F6E7374796C6505416C69 - 676E070643656E7465720A53697A652E57696474680500000000005655FB0540 - 0B53697A652E4865696768740500000000000000A004401453697A652E506C61 - 74666F726D44656661756C74080756697369626C6508085461624F7264657202 - 2D0007544C61796F75740005416C69676E0706426F74746F6D0A506F73697469 - 6F6E2E5905000000000000008804400A53697A652E5769647468050000000000 - 5655FB05400B53697A652E4865696768740500000000000000C001401453697A - 652E506C6174666F726D44656661756C7408000A5452656374616E676C650009 - 5374796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E - 74656E747307436F726E6572730B08546F7052696768740B426F74746F6D5269 - 676874000A46696C6C2E436F6C6F720709784646323032303230064C6F636B65 - 64090748697454657374080A53697A652E57696474680500000000005655FB05 - 400B53697A652E4865696768740500000000000000C001401453697A652E506C - 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 - 31353135313507585261646975730500000000000000C0004007595261646975 - 730500000000000000C00040000F54436F6C6F72416E696D6174696F6E000953 - 74796C654E616D6506216261636B67726F756E64556C427574746F6E436F6C6F - 72416E696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F07 - 496E7665727365090C50726F70657274794E616D65060A46696C6C2E436F6C6F - 720A537461727456616C756507097846463230323032300953746F7056616C75 - 6507097846463430343034300754726967676572061049734D6F7573654F7665 - 723D747275650E54726967676572496E7665727365061149734D6F7573654F76 - 65723D66616C736500000A5452656374616E676C6500095374796C654E616D65 - 0609636865636B6D61726B05416C69676E0708436F6E74656E747307436F726E - 6572730B08546F7052696768740B426F74746F6D5269676874000A46696C6C2E - 436F6C6F720709784646324138324532064C6F636B6564090748697454657374 - 08074F70616369747905000000000000000000000C4D617267696E732E4C6566 - 74050000000000000080FF3F0B4D617267696E732E546F700500000000000000 - 80FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D6172 - 67696E732E426F74746F6D050000000000000080FF3F0A53697A652E57696474 - 680500000000005655F705400B53697A652E4865696768740500000000000000 - 8001401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 - 2E4B696E6407044E6F6E65075852616469757305000000000000008000400759 - 5261646975730500000000000000800040000F54466C6F6174416E696D617469 - 6F6E00095374796C654E616D65061A636865636B6D61726B4F70616369747941 - 6E696D6174696F6E31084475726174696F6E050000000000CDCCCCFB3F0C5072 - 6F70657274794E616D6506074F7061636974790A537461727456616C75650500 - 0000000000000000000953746F7056616C7565050000000000000080FF3F0754 - 726967676572060E4973436865636B65643D747275650E54726967676572496E - 7665727365060F4973436865636B65643D66616C736500000000000554546578 - 7400095374796C654E616D6506047465787405416C69676E0706436C69656E74 - 064C6F636B6564090748697454657374080A53697A652E576964746805000000 - 00005655FB05400B53697A652E48656967687405000000000000008804401453 - 697A652E506C6174666F726D44656661756C7408165465787453657474696E67 - 732E466F6E74436F6C6F720708636C6157686974650000005450463007544C61 - 796F757400095374796C654E616D650615616E69696E64696361746F72686F72 - 7A7374796C6505416C69676E070643656E7465720A53697A652E576964746805 - 00000000000040C006400B53697A652E48656967687405000000000000008000 - 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 - 000A5452656374616E676C6500095374796C654E616D65060A52656374616E67 - 6C653105416C69676E0706436C69656E740C436C69704368696C6472656E090A - 46696C6C2E436F6C6F7207097846463430343034300A53697A652E5769647468 - 0500000000000040C006400B53697A652E486569676874050000000000000080 - 00401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E - 4B696E6407044E6F6E650758526164697573050000000000000080FF3F075952 - 6164697573050000000000000080FF3F0005544C696E6500095374796C654E61 - 6D6506054C696E6531084C696E65547970650706426F74746F6D0A53697A652E - 57696474680500000000000000A00B400B53697A652E48656967687405000000 - 000000008000401453697A652E506C6174666F726D44656661756C74080C5374 - 726F6B652E436F6C6F720709784646324138324532105374726F6B652E546869 - 636B6E65737305000000000000008002400A5374726F6B652E4361700705526F - 756E640B5374726F6B652E446173680704446173680B5374726F6B652E4A6F69 - 6E0705526F756E64000F54466C6F6174416E696D6174696F6E00095374796C65 - 4E616D650603616E6907456E61626C656409084475726174696F6E0500000000 - 000000800340044C6F6F70090C50726F70657274794E616D65060A506F736974 - 696F6E2E580A537461727456616C75650500000000000000C808C00953746F70 - 56616C756505000000000000000000000754726967676572060E497356697369 - 626C653D7472756500000000005450463007544C61796F757400095374796C65 - 4E616D65060E6C6F67627574746F6E7374796C6505416C69676E070643656E74 - 65720A53697A652E57696474680500000000000000C005400B53697A652E4865 - 696768740500000000000000C005401453697A652E506C6174666F726D446566 - 61756C74080756697369626C6508085461624F726465720201000A5452656374 - 616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C69 - 676E0706436C69656E740C436C69704368696C6472656E090A436C6970506172 - 656E740907436F726E6572730B08546F7052696768740B426F74746F6D526967 - 6874000A46696C6C2E436F6C6F72070978464632303230323007486974546573 - 74080A53697A652E57696474680500000000000000C005400B53697A652E4865 - 696768740500000000000000C005401453697A652E506C6174666F726D446566 - 61756C74080B5374726F6B652E4B696E6407044E6F6E65075852616469757305 - 00000000000000C0004007595261646975730500000000000000C00040000F54 - 436F6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F - 6E436F6C6F72416E696D6174696F6E31084475726174696F6E050000000000CD - CCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 - 61727456616C756507097846463230323032300953746F7056616C7565070978 - 46463430343034300754726967676572063049734D6F7573654F7665723D7472 - 75653B4973507265737365643D66616C73653B4973466F63757365643D66616C - 73650E54726967676572496E7665727365063149734D6F7573654F7665723D66 - 616C73653B4973507265737365643D66616C73653B4973466F63757365643D66 - 616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D - 650615627574746F6E436F6C6F72416E696D6174696F6E32084475726174696F - 6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E - 436F6C6F720A537461727456616C756507097846463430343034300953746F70 - 56616C756507097846463137353739430754726967676572062F497350726573 - 7365643D747275653B49734D6F7573654F7665723D747275653B4973466F6375 - 7365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009537479 - 6C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E33084475 - 726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A - 46696C6C2E436F6C6F720A537461727456616C75650709784646324138324532 - 0953746F7056616C756507097846463137353739430754726967676572062E49 - 73507265737365643D747275653B49734D6F7573654F7665723D747275653B49 - 73466F63757365643D747275650E54726967676572496E7665727365062F4973 - 507265737365643D66616C73653B49734D6F7573654F7665723D747275653B49 - 73466F63757365643D74727565000005545061746800095374796C654E616D65 - 0605506174683105416C69676E0706436C69656E7409446174612E506174680A - 5C02000032000000000000000000A841CDCCCC40010000000000A8410000C041 - 010000000000C03F0000C041010000000000C03F00000000010000009A996941 - 00000000010000000000A841CDCCCC40030000000000A841CDCCCC4000000000 - 00009C410000F04001000000000058410000F04001000000000058410000C03F - 01000000000040400000C03F01000000000040400000B4410100000000009C41 - 0000B4410100000000009C410000F0400300000000009C410000F04000000000 - 000040410000F04001000000000090400000F04001000000000090400000C040 - 01000000000040410000C04001000000000040410000F0400300000000004041 - 0000F04000000000000090400000104101000000000090410000104101000000 - 0000904100002841010000000000904000002841010000000000904000001041 - 0300000000009040000010410000000000009040000040410100000000009041 - 0000404101000000000090410000584101000000000090400000584101000000 - 0000904000004041030000000000904000004041000000000000904000007041 - 0100000000009041000070410100000000009041000084410100000000009040 - 0000844101000000000090400000704103000000000090400000704100000000 - 0000904000009041010000000000904100009041010000000000904100009C41 - 010000000000904000009C410100000000009040000090410300000000009040 - 0000904100000000000070410000C04001000000333393410000C04001000000 - 000070416666264001000000000070410000C04003000000000070410000C040 - 0A46696C6C2E436F6C6F720708636C6157686974650748697454657374080C4D - 617267696E732E4C6566740500000000000000A002400B4D617267696E732E54 - 6F700500000000000000A002400D4D617267696E732E52696768740500000000 - 000000A002400E4D617267696E732E426F74746F6D0500000000000000A00240 - 0A53697A652E576964746805000000000000009805400B53697A652E48656967 - 687405000000000000009805401453697A652E506C6174666F726D4465666175 - 6C74080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F64650703 - 466974000000005450463007544C61796F757400095374796C654E616D650613 - 657870616E646572627574746F6E7374796C6505416C69676E070643656E7465 - 720B4D617267696E732E546F70050000000000000080FF3F0A53697A652E5769 - 6474680500000000000000B003400B53697A652E486569676874050000000000 - 0000B003401453697A652E506C6174666F726D44656661756C74080756697369 - 626C6508085461624F7264657202300005545061746800095374796C654E616D - 650605506174683105416C69676E070643656E74657209446174612E50617468 - 0A3400000004000000000000000000C8420000C84201000000000096430000C8 - 42010000000000484300009643030000000000C8420000C8420A46696C6C2E43 - 6F6C6F720708636C6157686974650748697454657374080D526F746174696F6E - 416E676C650500000000000000B405400A53697A652E57696474680500000000 - 000000A002400B53697A652E4865696768740500000000000000C00140145369 - 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 - 044E6F6E65000F54466C6F6174416E696D6174696F6E00095374796C654E616D - 650614466C6F6174416E696D6174696F6E315374796C65084475726174696F6E - 050000000000CDCCCCFB3F0D496E746572706F6C6174696F6E07084369726375 - 6C61720C50726F70657274794E616D65060D526F746174696F6E416E676C650A - 537461727456616C75650500000000000000B405400953746F7056616C756505 - 000000000000000000000754726967676572060F4973457870616E6465643D74 - 7275650E54726967676572496E766572736506104973457870616E6465643D66 - 616C7365000000005450463007544C61796F757400095374796C654E616D6506 - 15657870616E646572636865636B626F787374796C6505416C69676E07064365 - 6E7465720A53697A652E576964746805000000000000008406400B53697A652E - 48656967687405000000000000008404401453697A652E506C6174666F726D44 - 656661756C74080756697369626C6508085461624F7264657202340007544C61 - 796F75740005416C69676E07044C6566740A53697A652E576964746805000000 - 00000000C003400B53697A652E48656967687405000000000000008404401453 - 697A652E506C6174666F726D44656661756C7408000554506174680005416C69 - 676E0706436C69656E7409446174612E506174680AD801000027000000000000 - 00FEC8BA4402E79244020000002592AD4402E79244020000006D5BA544FEB09E - 44020000006D5BA544FEB09E440200000093A4A4446A0C9F44020000004A80AC - 44FC79AA4402000000046EBA44FC79AA44020000004A00C844FC79AA44020000 - 000080CF44FEB09E44020000000080CF44FEB09E44020000000080CF44FEB09E - 44020000004C5BC84402E7924402000000FEC8BA4402E7924400000000FE88BA - 44FE30974402000000B876BF44FE309744020000000277C344EEA09A44020000 - 000277C34404DE9E44020000000277C344121BA34402000000B876BF44008CA6 - 4402000000FE88BA44008CA644020000004C9BB544008CA64402000000009CB1 - 44121BA34402000000009CB14404DE9E4402000000009CB144EEA09A44020000 - 004C9BB544FE30974402000000FE88BA44FE309744000000000080BA44045E9B - 4402000000146EB844045E9B440200000000C0B64454F79C440200000000C0B6 - 4400F09E440200000000C0B644ACE8A04402000000146EB844FC81A244020000 - 000080BA44FC81A24402000000EC91BC44FC81A244020000000040BE44ACE8A0 - 44020000000040BE4400F09E44020000000040BE4454F79C4402000000EC91BC - 44045E9B44020000000080BA44045E9B440A46696C6C2E436F6C6F7207097836 - 303030303030300748697454657374080C4D617267696E732E4C656674050000 - 00000000008000400B4D617267696E732E546F7005000000000000008000400D - 4D617267696E732E526967687405000000000000008000400E4D617267696E73 - 2E426F74746F6D05000000000000008000400A53697A652E5769647468050000 - 0000000000A003400B53697A652E4865696768740500000000000000E8034014 - 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E - 6407044E6F6E6508577261704D6F64650703466974000F54436F6C6F72416E69 - 6D6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F70 - 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 - 097836303030303030300953746F7056616C75650708636C61426C61636B0754 - 726967676572060E4973436865636B65643D7472756500000F54436F6C6F7241 - 6E696D6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C5072 - 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 - 650708636C61426C61636B0953746F7056616C75650709783630303030303030 - 0754726967676572060F4973436865636B65643D66616C736500000000055454 - 65787400095374796C654E616D6506047465787405416C69676E0706436C6965 - 6E74064C6F636B6564090748697454657374080C4D617267696E732E4C656674 - 05000000000000008002400B4D617267696E732E546F70050000000000000080 - 00400D4D617267696E732E5269676874050000000000000080FF3F0A53697A65 - 2E57696474680500000000000000C605400B53697A652E486569676874050000 - 0000000000F803401453697A652E506C6174666F726D44656661756C74081654 - 65787453657474696E67732E466F6E74436F6C6F720709784646454545454545 - 165465787453657474696E67732E486F727A416C69676E07074C656164696E67 - 0000005450463007544C61796F757400095374796C654E616D65060D65787061 - 6E6465727374796C6505416C69676E070643656E7465720A53697A652E576964 - 746805000000000000C08607400B53697A652E48656967687405000000000000 - 00CE05401453697A652E506C6174666F726D44656661756C7408075669736962 - 6C6508085461624F726465720239000A5452656374616E676C6500095374796C - 654E616D65060B626772656374616E676C6505416C69676E0708436F6E74656E - 74730A46696C6C2E436F6C6F720709784646324432443244064C6F636B656409 - 0748697454657374080A53697A652E576964746805000000000000C08607400B - 53697A652E4865696768740500000000000000CE05401453697A652E506C6174 - 666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846463135 - 3135313507585261646975730500000000000000C00040075952616469757305 - 00000000000000C000400007544C61796F757400095374796C654E616D650607 - 4C61796F75743305416C69676E0703546F700A53697A652E5769647468050000 - 00000000C08607400B53697A652E4865696768740500000000000000C8034014 - 53697A652E506C6174666F726D44656661756C74080007544C61796F75740009 - 5374796C654E616D6506074C61796F75743405416C69676E0708436F6E74656E - 74730A53697A652E576964746805000000000000C08607400B53697A652E4865 - 696768740500000000000000C803401453697A652E506C6174666F726D446566 - 61756C7408000A5452656374616E676C6500095374796C654E616D65060A5265 - 6374616E676C653205416C69676E0708436F6E74656E747307436F726E657273 - 0B07546F704C65667408546F705269676874000A46696C6C2E436F6C6F720709 - 784646323532353235064C6F636B6564090748697454657374080A53697A652E - 576964746805000000000000C08607400B53697A652E48656967687405000000 - 00000000C803401453697A652E506C6174666F726D44656661756C74080C5374 - 726F6B652E436F6C6F7207097846463135313531350758526164697573050000 - 0000000000C0004007595261646975730500000000000000C0004000000A5452 - 656374616E676C6500095374796C654E616D65060A52656374616E676C653105 - 416C69676E0708436F6E74656E747307436F726E6572730B07546F704C656674 - 08546F705269676874000A46696C6C2E436F6C6F720709784646313531353135 - 064C6F636B6564090748697454657374080A53697A652E576964746805000000 - 000000C08607400B53697A652E4865696768740500000000000000C803401453 - 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 - 07044E6F6E6507585261646975730500000000000000C0004007595261646975 - 730500000000000000C00040000F54466C6F6174416E696D6174696F6E000953 - 74796C654E616D650614466C6F6174416E696D6174696F6E315374796C650844 - 75726174696F6E0500000000009A9999FD3F0D496E746572706F6C6174696F6E - 070843697263756C61720C50726F70657274794E616D6506075363616C652E58 - 0A537461727456616C7565050000000000000080FF3F0953746F7056616C7565 - 05000000000000000000000754726967676572060F4973457870616E6465643D - 747275650E54726967676572496E766572736506104973457870616E6465643D - 66616C73650000000007544C61796F757400095374796C654E616D6506074C61 - 796F75743305416C69676E0708436F6E74656E74730A53697A652E5769647468 - 05000000000000C08607400B53697A652E4865696768740500000000000000C8 - 03401453697A652E506C6174666F726D44656661756C74080005545465787400 - 095374796C654E616D6506047465787405416C69676E07044C65667408417574 - 6F53697A65090A436C6970506172656E7409064C6F636B656409074869745465 - 7374080C4D617267696E732E4C6566740500000000000000A002400A506F7369 - 74696F6E2E580500000000000000A002400A53697A652E576964746805000000 - 00000018D103400B53697A652E4865696768740500000000000060FF02401453 - 697A652E506C6174666F726D44656661756C7408045465787406045465787416 + 0000000000008804401453697A652E506C6174666F726D44656661756C740816 5465787453657474696E67732E466F6E74436F6C6F720708636C615768697465 - 165465787453657474696E67732E486F727A416C69676E07074C656164696E67 - 0000000F54457870616E646572427574746F6E00095374796C654E616D650606 - 627574746F6E05416C69676E07055269676874064C6F636B6564090A506F7369 - 74696F6E2E580500000000000080F906400A53697A652E576964746805000000 - 00000000A003400B53697A652E4865696768740500000000000000C803401453 - 697A652E506C6174666F726D44656661756C740800000000005450463007544C - 61796F757400095374796C654E616D65060A70616E656C7374796C6505416C69 - 676E070643656E7465720A53697A652E57696474680500000000000000C00640 - 0B53697A652E4865696768740500000000000000A406401453697A652E506C61 - 74666F726D44656661756C74080756697369626C6508000A5452656374616E67 - 6C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E07 - 08436F6E74656E74730A46696C6C2E436F6C6F7207097846463230323032300A - 53697A652E57696474680500000000000000C006400B53697A652E4865696768 - 740500000000000000A406401453697A652E506C6174666F726D44656661756C - 74080B5374726F6B652E4B696E6407044E6F6E65075852616469757305000000 - 00000000C0004007595261646975730500000000000000C00040000000545046 - 3007544C61796F757400095374796C654E616D65061970726F67726573736261 - 726D696E696572726F727374796C6505416C69676E070643656E7465720A5369 - 7A652E576964746805000000000033338505400B53697A652E48656967687405 - 00000000009999E104401453697A652E506C6174666F726D44656661756C7408 - 0756697369626C6508000A5452656374616E676C6500095374796C654E616D65 + 0000005450463007544C61796F757400095374796C654E616D650615616E6969 + 6E64696361746F72686F727A7374796C6505416C69676E070643656E7465720A + 53697A652E57696474680500000000000040C006400B53697A652E4865696768 + 7405000000000000008000401453697A652E506C6174666F726D44656661756C + 74080756697369626C6508085461624F72646572023A000A5452656374616E67 + 6C6500095374796C654E616D65060A52656374616E676C653105416C69676E07 + 06436C69656E740C436C69704368696C6472656E090A46696C6C2E436F6C6F72 + 07097846463430343034300A53697A652E57696474680500000000000040C006 + 400B53697A652E48656967687405000000000000008000401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 0758526164697573050000000000000080FF3F07595261646975730500000000 + 00000080FF3F0005544C696E6500095374796C654E616D6506054C696E653108 + 4C696E65547970650706426F74746F6D0A53697A652E57696474680500000000 + 000000A00B400B53697A652E4865696768740500000000000000800040145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 0709784646324138324532105374726F6B652E546869636B6E65737305000000 + 000000008002400A5374726F6B652E4361700705526F756E640B5374726F6B65 + 2E446173680704446173680B5374726F6B652E4A6F696E0705526F756E64000F + 54466C6F6174416E696D6174696F6E00095374796C654E616D650603616E6907 + 456E61626C656409084475726174696F6E0500000000000000800340044C6F6F + 70090C50726F70657274794E616D65060A506F736974696F6E2E580A53746172 + 7456616C75650500000000000000C808C00953746F7056616C75650500000000 + 0000000000000754726967676572060E497356697369626C653D747275650000 + 0000005450463007544C61796F757400095374796C654E616D65060E6C6F6762 + 7574746F6E7374796C6505416C69676E070643656E7465720A53697A652E5769 + 6474680500000000000000C005400B53697A652E486569676874050000000000 + 0000C005401453697A652E506C6174666F726D44656661756C74080756697369 + 626C6508085461624F726465720202000A5452656374616E676C650009537479 + 6C654E616D65060A6261636B67726F756E6405416C69676E0706436C69656E74 + 0C436C69704368696C6472656E090A436C6970506172656E740907436F726E65 + 72730B08546F7052696768740B426F74746F6D5269676874000A46696C6C2E43 + 6F6C6F7207097846463230323032300748697454657374080A53697A652E5769 + 6474680500000000000000C005400B53697A652E486569676874050000000000 + 0000C005401453697A652E506C6174666F726D44656661756C74080B5374726F + 6B652E4B696E6407044E6F6E6507585261646975730500000000000000C00040 + 07595261646975730500000000000000C00040000F54436F6C6F72416E696D61 + 74696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D + 6174696F6E31084475726174696F6E050000000000CDCCCCFB3F0C50726F7065 + 7274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709 + 7846463230323032300953746F7056616C756507097846463430343034300754 + 726967676572063049734D6F7573654F7665723D747275653B49735072657373 + 65643D66616C73653B4973466F63757365643D66616C73650E54726967676572 + 496E7665727365063149734D6F7573654F7665723D66616C73653B4973507265 + 737365643D66616C73653B4973466F63757365643D66616C736500000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E43 + 6F6C6F72416E696D6174696F6E32084475726174696F6E050000000000CDCCCC + FB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 + 7456616C756507097846463430343034300953746F7056616C75650709784646 + 3137353739430754726967676572062F4973507265737365643D747275653B49 + 734D6F7573654F7665723D747275653B4973466F63757365643D66616C736500 + 000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506156275 + 74746F6E436F6C6F72416E696D6174696F6E33084475726174696F6E05000000 + 0000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F72 + 0A537461727456616C756507097846463241383245320953746F7056616C7565 + 07097846463137353739430754726967676572062E4973507265737365643D74 + 7275653B49734D6F7573654F7665723D747275653B4973466F63757365643D74 + 7275650E54726967676572496E7665727365062F4973507265737365643D6661 + 6C73653B49734D6F7573654F7665723D747275653B4973466F63757365643D74 + 727565000005545061746800095374796C654E616D650605506174683105416C + 69676E0706436C69656E7409446174612E506174680A5C020000320000000000 + 00000000A841CDCCCC40010000000000A8410000C041010000000000C03F0000 + C041010000000000C03F00000000010000009A99694100000000010000000000 + A841CDCCCC40030000000000A841CDCCCC400000000000009C410000F0400100 + 0000000058410000F04001000000000058410000C03F01000000000040400000 + C03F01000000000040400000B4410100000000009C410000B441010000000000 + 9C410000F0400300000000009C410000F04000000000000040410000F0400100 + 0000000090400000F04001000000000090400000C04001000000000040410000 + C04001000000000040410000F04003000000000040410000F040000000000000 + 9040000010410100000000009041000010410100000000009041000028410100 + 0000000090400000284101000000000090400000104103000000000090400000 + 1041000000000000904000004041010000000000904100004041010000000000 + 9041000058410100000000009040000058410100000000009040000040410300 + 0000000090400000404100000000000090400000704101000000000090410000 + 7041010000000000904100008441010000000000904000008441010000000000 + 9040000070410300000000009040000070410000000000009040000090410100 + 00000000904100009041010000000000904100009C4101000000000090400000 + 9C41010000000000904000009041030000000000904000009041000000000000 + 70410000C04001000000333393410000C0400100000000007041666626400100 + 0000000070410000C04003000000000070410000C0400A46696C6C2E436F6C6F + 720708636C6157686974650748697454657374080C4D617267696E732E4C6566 + 740500000000000000A002400B4D617267696E732E546F700500000000000000 + A002400D4D617267696E732E52696768740500000000000000A002400E4D6172 + 67696E732E426F74746F6D0500000000000000A002400A53697A652E57696474 + 6805000000000000009805400B53697A652E4865696768740500000000000000 + 9805401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E6508577261704D6F6465070346697400000000545046 + 3007544C61796F757400095374796C654E616D650613657870616E6465726275 + 74746F6E7374796C6505416C69676E070643656E7465720B4D617267696E732E + 546F70050000000000000080FF3F0A53697A652E576964746805000000000000 + 00B003400B53697A652E4865696768740500000000000000B003401453697A65 + 2E506C6174666F726D44656661756C74080756697369626C6508085461624F72 + 64657202350005545061746800095374796C654E616D65060550617468310541 + 6C69676E070643656E74657209446174612E506174680A340000000400000000 + 0000000000C8420000C84201000000000096430000C842010000000000484300 + 009643030000000000C8420000C8420A46696C6C2E436F6C6F720708636C6157 + 686974650748697454657374080D526F746174696F6E416E676C650500000000 + 000000B405400A53697A652E57696474680500000000000000A002400B53697A + 652E4865696768740500000000000000C001401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C + 6F6174416E696D6174696F6E00095374796C654E616D650614466C6F6174416E + 696D6174696F6E315374796C65084475726174696F6E050000000000CDCCCCFB + 3F0D496E746572706F6C6174696F6E070843697263756C61720C50726F706572 + 74794E616D65060D526F746174696F6E416E676C650A537461727456616C7565 + 0500000000000000B405400953746F7056616C75650500000000000000000000 + 0754726967676572060F4973457870616E6465643D747275650E547269676765 + 72496E766572736506104973457870616E6465643D66616C7365000000005450 + 463007544C61796F757400095374796C654E616D650615657870616E64657263 + 6865636B626F787374796C6505416C69676E070643656E7465720A53697A652E + 576964746805000000000000008406400B53697A652E48656967687405000000 + 000000008404401453697A652E506C6174666F726D44656661756C7408075669 + 7369626C6508085461624F7264657202360007544C61796F75740005416C6967 + 6E07044C6566740A53697A652E57696474680500000000000000C003400B5369 + 7A652E48656967687405000000000000008404401453697A652E506C6174666F + 726D44656661756C7408000554506174680005416C69676E0706436C69656E74 + 09446174612E506174680AD80100002700000000000000FEC8BA4402E7924402 + 0000002592AD4402E79244020000006D5BA544FEB09E44020000006D5BA544FE + B09E440200000093A4A4446A0C9F44020000004A80AC44FC79AA440200000004 + 6EBA44FC79AA44020000004A00C844FC79AA44020000000080CF44FEB09E4402 + 0000000080CF44FEB09E44020000000080CF44FEB09E44020000004C5BC84402 + E7924402000000FEC8BA4402E7924400000000FE88BA44FE30974402000000B8 + 76BF44FE309744020000000277C344EEA09A44020000000277C34404DE9E4402 + 0000000277C344121BA34402000000B876BF44008CA64402000000FE88BA4400 + 8CA644020000004C9BB544008CA64402000000009CB144121BA3440200000000 + 9CB14404DE9E4402000000009CB144EEA09A44020000004C9BB544FE30974402 + 000000FE88BA44FE309744000000000080BA44045E9B4402000000146EB84404 + 5E9B440200000000C0B64454F79C440200000000C0B64400F09E440200000000 + C0B644ACE8A04402000000146EB844FC81A244020000000080BA44FC81A24402 + 000000EC91BC44FC81A244020000000040BE44ACE8A044020000000040BE4400 + F09E44020000000040BE4454F79C4402000000EC91BC44045E9B440200000000 + 80BA44045E9B440A46696C6C2E436F6C6F720709783630303030303030074869 + 7454657374080C4D617267696E732E4C65667405000000000000008000400B4D + 617267696E732E546F7005000000000000008000400D4D617267696E732E5269 + 67687405000000000000008000400E4D617267696E732E426F74746F6D050000 + 00000000008000400A53697A652E57696474680500000000000000A003400B53 + 697A652E4865696768740500000000000000E803401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65085772 + 61704D6F64650703466974000F54436F6C6F72416E696D6174696F6E00084475 + 726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A + 46696C6C2E436F6C6F720A537461727456616C75650709783630303030303030 + 0953746F7056616C75650708636C61426C61636B0754726967676572060E4973 + 436865636B65643D7472756500000F54436F6C6F72416E696D6174696F6E0008 + 4475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65 + 060A46696C6C2E436F6C6F720A537461727456616C75650708636C61426C6163 + 6B0953746F7056616C756507097836303030303030300754726967676572060F + 4973436865636B65643D66616C73650000000005545465787400095374796C65 + 4E616D6506047465787405416C69676E0706436C69656E74064C6F636B656409 + 0748697454657374080C4D617267696E732E4C65667405000000000000008002 + 400B4D617267696E732E546F7005000000000000008000400D4D617267696E73 + 2E5269676874050000000000000080FF3F0A53697A652E576964746805000000 + 00000000C605400B53697A652E4865696768740500000000000000F803401453 + 697A652E506C6174666F726D44656661756C7408165465787453657474696E67 + 732E466F6E74436F6C6F72070978464645454545454516546578745365747469 + 6E67732E486F727A416C69676E07074C656164696E670000005450463007544C + 61796F757400095374796C654E616D65060D657870616E6465727374796C6505 + 416C69676E070643656E7465720A53697A652E576964746805000000000000C0 + 8607400B53697A652E4865696768740500000000000000CE05401453697A652E + 506C6174666F726D44656661756C74080756697369626C6508085461624F7264 + 65720237000A5452656374616E676C6500095374796C654E616D65060B626772 + 656374616E676C6505416C69676E0708436F6E74656E74730A46696C6C2E436F + 6C6F720709784646324432443244064C6F636B6564090748697454657374080A + 53697A652E576964746805000000000000C08607400B53697A652E4865696768 + 740500000000000000CE05401453697A652E506C6174666F726D44656661756C + 74080C5374726F6B652E436F6C6F720709784646313531353135075852616469 + 75730500000000000000C0004007595261646975730500000000000000C00040 + 0007544C61796F757400095374796C654E616D6506074C61796F75743305416C + 69676E0703546F700A53697A652E576964746805000000000000C08607400B53 + 697A652E4865696768740500000000000000C803401453697A652E506C617466 + 6F726D44656661756C74080007544C61796F757400095374796C654E616D6506 + 074C61796F75743405416C69676E0708436F6E74656E74730A53697A652E5769 + 64746805000000000000C08607400B53697A652E486569676874050000000000 + 0000C803401453697A652E506C6174666F726D44656661756C7408000A545265 + 6374616E676C6500095374796C654E616D65060A52656374616E676C65320541 + 6C69676E0708436F6E74656E747307436F726E6572730B07546F704C65667408 + 546F705269676874000A46696C6C2E436F6C6F72070978464632353235323506 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 0000C08607400B53697A652E4865696768740500000000000000C80340145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 070978464631353135313507585261646975730500000000000000C000400759 + 5261646975730500000000000000C0004000000A5452656374616E676C650009 + 5374796C654E616D65060A52656374616E676C653105416C69676E0708436F6E + 74656E747307436F726E6572730B07546F704C65667408546F70526967687400 + 0A46696C6C2E436F6C6F720709784646313531353135064C6F636B6564090748 + 697454657374080A53697A652E576964746805000000000000C08607400B5369 + 7A652E4865696768740500000000000000C803401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6507585261 + 646975730500000000000000C0004007595261646975730500000000000000C0 + 0040000F54466C6F6174416E696D6174696F6E00095374796C654E616D650614 + 466C6F6174416E696D6174696F6E315374796C65084475726174696F6E050000 + 0000009A9999FD3F0D496E746572706F6C6174696F6E070843697263756C6172 + 0C50726F70657274794E616D6506075363616C652E580A537461727456616C75 + 65050000000000000080FF3F0953746F7056616C756505000000000000000000 + 000754726967676572060F4973457870616E6465643D747275650E5472696767 + 6572496E766572736506104973457870616E6465643D66616C73650000000007 + 544C61796F757400095374796C654E616D6506074C61796F75743305416C6967 + 6E0708436F6E74656E74730A53697A652E576964746805000000000000C08607 + 400B53697A652E4865696768740500000000000000C803401453697A652E506C + 6174666F726D44656661756C74080005545465787400095374796C654E616D65 + 06047465787405416C69676E07044C656674084175746F53697A65090A436C69 + 70506172656E7409064C6F636B6564090748697454657374080C4D617267696E + 732E4C6566740500000000000000A002400A506F736974696F6E2E5805000000 + 00000000A002400A53697A652E576964746805000000000000B8C703400B5369 + 7A652E4865696768740500000000000060FF02401453697A652E506C6174666F + 726D44656661756C74080454657874060454657874165465787453657474696E + 67732E466F6E74436F6C6F720708636C61576869746516546578745365747469 + 6E67732E486F727A416C69676E07074C656164696E670000000F54457870616E + 646572427574746F6E00095374796C654E616D650606627574746F6E05416C69 + 676E07055269676874064C6F636B6564090A506F736974696F6E2E5805000000 + 00000080F906400A53697A652E57696474680500000000000000A003400B5369 + 7A652E4865696768740500000000000000C803401453697A652E506C6174666F + 726D44656661756C740800000000005450463007544C61796F75740009537479 + 6C654E616D65060A70616E656C7374796C6505416C69676E070643656E746572 + 0A53697A652E57696474680500000000000000C006400B53697A652E48656967 + 68740500000000000000A406401453697A652E506C6174666F726D4465666175 + 6C74080756697369626C6508085461624F726465720238000A5452656374616E + 676C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E + 0708436F6E74656E74730A46696C6C2E436F6C6F720709784646323032303230 + 0A53697A652E57696474680500000000000000C006400B53697A652E48656967 + 68740500000000000000A406401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E650758526164697573050000 + 0000000000C0004007595261646975730500000000000000C000400000005450 + 463007544C61796F757400095374796C654E616D65061970726F677265737362 + 61726D696E696572726F727374796C6505416C69676E070643656E7465720A53 + 697A652E576964746805000000000033338505400B53697A652E486569676874 + 0500000000009999E104401453697A652E506C6174666F726D44656661756C74 + 080756697369626C6508085461624F726465720239000A5452656374616E676C + 6500095374796C654E616D65060668747261636B05416C69676E0708436F6E74 + 656E74730A46696C6C2E436F6C6F720709784646343034303430064C6F636B65 + 64090748697454657374080A53697A652E576964746805000000000033338505 + 400B53697A652E4865696768740500000000009999E104401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 0758526164697573050000000000000080004007595261646975730500000000 + 000000800040000A5452656374616E676C6500095374796C654E616D65060A68 + 696E64696361746F7205416C69676E07044C6566740A46696C6C2E436F6C6F72 + 0709784646453232413241064C6F636B6564090748697454657374080A53697A + 652E57696474680500000000000000C804400B53697A652E4865696768740500 + 000000009999E104401453697A652E506C6174666F726D44656661756C74080B + 5374726F6B652E4B696E6407044E6F6E65075852616469757305000000000000 + 00800040075952616469757305000000000000008000400000000A5452656374 + 616E676C6500095374796C654E616D65060676747261636B05416C69676E0708 + 436F6E74656E74730A46696C6C2E436F6C6F720709784646343034303430064C + 6F636B6564090748697454657374080A53697A652E5769647468050000000000 + 33338505400B53697A652E4865696768740500000000009999E104401453697A + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E6507585261646975730500000000000000800040075952616469757305 + 00000000000000800040000A5452656374616E676C6500095374796C654E616D + 65060A76696E64696361746F7205416C69676E0706426F74746F6D0A46696C6C + 2E436F6C6F720709784646453232413241064C6F636B65640907486974546573 + 74080A506F736974696F6E2E5905000000000099998D04400A53697A652E5769 + 64746805000000000033338505400B53697A652E486569676874050000000000 + 0000A803401453697A652E506C6174666F726D44656661756C74080B5374726F + 6B652E4B696E6407044E6F6E6507585261646975730500000000000000800040 + 07595261646975730500000000000000800040000000005450463007544C6179 + 6F757400095374796C654E616D65061470726F67726573736261726D696E6973 + 74796C6505416C69676E070643656E7465720A53697A652E5769647468050000 + 00000033338505400B53697A652E4865696768740500000000009999E1044014 + 53697A652E506C6174666F726D44656661756C74080756697369626C65080854 + 61624F72646572022F000A5452656374616E676C6500095374796C654E616D65 060668747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F 6C6F720709784646343034303430064C6F636B6564090748697454657374080A 53697A652E576964746805000000000033338505400B53697A652E4865696768 @@ -16564,7 +17849,7 @@ object MainForm: TMainForm 74080B5374726F6B652E4B696E6407044E6F6E65075852616469757305000000 0000000080004007595261646975730500000000000000800040000A54526563 74616E676C6500095374796C654E616D65060A68696E64696361746F7205416C - 69676E07044C6566740A46696C6C2E436F6C6F72070978464645323241324106 + 69676E07044C6566740A46696C6C2E436F6C6F72070978464632413832453206 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 000000C804400B53697A652E4865696768740500000000009999E10440145369 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 @@ -16577,387 +17862,647 @@ object MainForm: TMainForm 6661756C74080B5374726F6B652E4B696E6407044E6F6E650758526164697573 050000000000000080004007595261646975730500000000000000800040000A 5452656374616E676C6500095374796C654E616D65060A76696E64696361746F - 7205416C69676E0706426F74746F6D0A46696C6C2E436F6C6F72070978464645 - 3232413241064C6F636B6564090748697454657374080A506F736974696F6E2E + 7205416C69676E0706426F74746F6D0A46696C6C2E436F6C6F72070978464632 + 4138324532064C6F636B6564090748697454657374080A506F736974696F6E2E 5905000000000099998D04400A53697A652E5769647468050000000000333385 05400B53697A652E4865696768740500000000000000A803401453697A652E50 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E 6507585261646975730500000000000000800040075952616469757305000000 00000000800040000000005450463007544C61796F757400095374796C654E61 - 6D65061470726F67726573736261726D696E697374796C6505416C69676E0706 - 43656E7465720A53697A652E576964746805000000000033338505400B53697A - 652E4865696768740500000000009999E104401453697A652E506C6174666F72 - 6D44656661756C74080756697369626C6508085461624F72646572022F000A54 - 52656374616E676C6500095374796C654E616D65060668747261636B05416C69 - 676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978464634303430 - 3430064C6F636B6564090748697454657374080A53697A652E57696474680500 - 0000000033338505400B53697A652E4865696768740500000000009999E10440 - 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 - 6E6407044E6F6E65075852616469757305000000000000008000400759526164 - 6975730500000000000000800040000A5452656374616E676C6500095374796C - 654E616D65060A68696E64696361746F7205416C69676E07044C6566740A4669 - 6C6C2E436F6C6F720709784646324138324532064C6F636B6564090748697454 - 657374080A53697A652E57696474680500000000000000C804400B53697A652E - 4865696768740500000000009999E104401453697A652E506C6174666F726D44 - 656661756C74080B5374726F6B652E4B696E6407044E6F6E6507585261646975 - 7305000000000000008000400759526164697573050000000000000080004000 - 00000A5452656374616E676C6500095374796C654E616D65060676747261636B - 05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646 - 343034303430064C6F636B6564090748697454657374080A53697A652E576964 - 746805000000000033338505400B53697A652E48656967687405000000000099 - 99E104401453697A652E506C6174666F726D44656661756C74080B5374726F6B - 652E4B696E6407044E6F6E650758526164697573050000000000000080004007 - 595261646975730500000000000000800040000A5452656374616E676C650009 - 5374796C654E616D65060A76696E64696361746F7205416C69676E0706426F74 - 746F6D0A46696C6C2E436F6C6F720709784646324138324532064C6F636B6564 - 090748697454657374080A506F736974696F6E2E5905000000000099998D0440 - 0A53697A652E576964746805000000000033338505400B53697A652E48656967 - 68740500000000000000A803401453697A652E506C6174666F726D4465666175 - 6C74080B5374726F6B652E4B696E6407044E6F6E650758526164697573050000 - 0000000000800040075952616469757305000000000000008000400000000054 - 50463007544C61796F757400095374796C654E616D65060E636F6D626F656469 - 747374796C6505416C69676E070643656E7465720A53697A652E576964746805 + 6D65060E636F6D626F656469747374796C6505416C69676E070643656E746572 + 0A53697A652E57696474680500000000000000C805400B53697A652E48656967 + 68740500000000000000C803401453697A652E506C6174666F726D4465666175 + 6C74080756697369626C6508085461624F726465720234000C5442727573684F + 626A65637400095374796C654E616D65060A666F726567726F756E6400000B54 + 466F6E744F626A65637400095374796C654E616D650604666F6E7409466F6E74 + 2E53697A650500000000000000D00240000007544C61796F757400095374796C + 654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74 + 730A53697A652E57696474680500000000000000C805400B53697A652E486569 + 6768740500000000000000C803401453697A652E506C6174666F726D44656661 + 756C7408000A5452656374616E676C6500095374796C654E616D65060A526563 + 74616E676C653105416C69676E0706436C69656E740A46696C6C2E436F6C6F72 + 07097846463230323032300748697454657374080A53697A652E576964746805 00000000000000C805400B53697A652E4865696768740500000000000000C803 - 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 - 085461624F726465720233000C5442727573684F626A65637400095374796C65 - 4E616D65060A666F726567726F756E6400000B54466F6E744F626A6563740009 - 5374796C654E616D650604666F6E7409466F6E742E53697A6505000000000000 - 00D00240000007544C61796F757400095374796C654E616D65060A6261636B67 - 726F756E6405416C69676E0708436F6E74656E74730A53697A652E5769647468 - 0500000000000000C805400B53697A652E4865696768740500000000000000C8 - 03401453697A652E506C6174666F726D44656661756C7408000A545265637461 - 6E676C6500095374796C654E616D65060A52656374616E676C653105416C6967 - 6E0706436C69656E740A46696C6C2E436F6C6F72070978464632303230323007 - 48697454657374080A53697A652E57696474680500000000000000C805400B53 - 697A652E4865696768740500000000000000C803401453697A652E506C617466 - 6F726D44656661756C74080C5374726F6B652E436F6C6F720709784646323032 - 30323007585261646975730500000000000000C0004007595261646975730500 - 000000000000C00040000F54436F6C6F72416E696D6174696F6E00095374796C - 654E616D650614436F6C6F72416E696D6174696F6E315374796C650844757261 - 74696F6E050000000000CDCCCCFB3F07496E7665727365090C50726F70657274 - 794E616D65060C5374726F6B652E436F6C6F720A537461727456616C75650709 - 7846463230323032300953746F7056616C756507097846463430343034300754 - 726967676572062049734D6F7573654F7665723D747275653B4973466F637573 - 65643D66616C73650E54726967676572496E7665727365062149734D6F757365 - 4F7665723D66616C73653B4973466F63757365643D66616C736500000F54436F - 6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E - 696D6174696F6E325374796C65084475726174696F6E050000000000CDCCCCFB - 3F07496E7665727365090C50726F70657274794E616D65060C5374726F6B652E - 436F6C6F720A537461727456616C756507097846463430343034300953746F70 - 56616C756507097846463241383245320754726967676572061F49734D6F7573 - 654F7665723D747275653B4973466F63757365643D747275650E547269676765 - 72496E7665727365062049734D6F7573654F7665723D747275653B4973466F63 - 757365643D66616C7365000007544C61796F757400095374796C654E616D6506 - 056172726F7705416C69676E070846697452696768740B4D617267696E732E54 - 6F70050000000000000080FF3F0D4D617267696E732E52696768740500000000 - 00000080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F - 0A506F736974696F6E2E580500000000005ED99705400A506F736974696F6E2E - 59050000000000000080FF3F0A53697A652E5769647468050000000000889AB8 + 401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E43 + 6F6C6F72070978464632303230323007585261646975730500000000000000C0 + 004007595261646975730500000000000000C00040000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F + 6E315374796C65084475726174696F6E050000000000CDCCCCFB3F07496E7665 + 727365090C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A + 537461727456616C756507097846463230323032300953746F7056616C756507 + 097846463430343034300754726967676572062049734D6F7573654F7665723D + 747275653B4973466F63757365643D66616C73650E54726967676572496E7665 + 727365062149734D6F7573654F7665723D66616C73653B4973466F6375736564 + 3D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E + 616D650614436F6C6F72416E696D6174696F6E325374796C6508447572617469 + 6F6E050000000000CDCCCCFB3F07496E7665727365090C50726F70657274794E + 616D65060C5374726F6B652E436F6C6F720A537461727456616C756507097846 + 463430343034300953746F7056616C7565070978464632413832453207547269 + 67676572061F49734D6F7573654F7665723D747275653B4973466F6375736564 + 3D747275650E54726967676572496E7665727365062049734D6F7573654F7665 + 723D747275653B4973466F63757365643D66616C7365000007544C61796F7574 + 00095374796C654E616D6506056172726F7705416C69676E0708466974526967 + 68740B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E + 732E5269676874050000000000000080FF3F0E4D617267696E732E426F74746F + 6D050000000000000080FF3F0A506F736974696F6E2E580500000000005ED997 + 05400A506F736974696F6E2E59050000000000000080FF3F0A53697A652E5769 + 647468050000000000889AB803400B53697A652E486569676874050000000000 + 0000B803401453697A652E506C6174666F726D44656661756C7408000A545265 + 6374616E676C6500095374796C654E616D65060A52656374616E676C65310541 + 6C69676E0708436F6E74656E747307436F726E6572730B08546F705269676874 + 0B426F74746F6D5269676874000A46696C6C2E436F6C6F720709784646333033 + 3033300748697454657374080A53697A652E5769647468050000000000889AB8 03400B53697A652E4865696768740500000000000000B803401453697A652E50 - 6C6174666F726D44656661756C7408000A5452656374616E676C650009537479 - 6C654E616D65060A52656374616E676C653105416C69676E0708436F6E74656E - 747307436F726E6572730B08546F7052696768740B426F74746F6D5269676874 - 000A46696C6C2E436F6C6F720709784646333033303330074869745465737408 - 0A53697A652E5769647468050000000000889AB803400B53697A652E48656967 - 68740500000000000000B803401453697A652E506C6174666F726D4465666175 - 6C74080B5374726F6B652E4B696E6407044E6F6E650758526164697573050000 - 0000000000C0004007595261646975730500000000000000C00040000F54436F - 6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E - 696D6174696F6E315374796C65084475726174696F6E050000000000CDCCCCFB - 3F07496E7665727365090C50726F70657274794E616D65060A46696C6C2E436F - 6C6F720A537461727456616C756507097846463330333033300953746F705661 - 6C756507097846463430343034300754726967676572062049734D6F7573654F - 7665723D747275653B4973466F63757365643D66616C73650E54726967676572 - 496E7665727365062149734D6F7573654F7665723D66616C73653B4973466F63 - 757365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 - 796C654E616D650614436F6C6F72416E696D6174696F6E325374796C65084475 - 726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A - 46696C6C2E436F6C6F720A537461727456616C75650709784646343034303430 - 0953746F7056616C756507097846463137353739430754726967676572061F49 - 73466F63757365643D747275653B49734D6F7573654F7665723D747275650000 - 0007544C61796F757400095374796C654E616D6506074C61796F75743105416C - 69676E070643656E7465720C4D617267696E732E4C6566740500000000000000 - 80FF3F0A53697A652E57696474680500000000000000A002400B53697A652E48 - 65696768740500000000000000C001401453697A652E506C6174666F726D4465 - 6661756C74080005545061746800095374796C654E616D650605506174683105 - 416C69676E0706436C69656E7409446174612E506174680A3400000004000000 - 000000000000C8420000C84201000000000096430000C8420100000000004843 - 00009643030000000000C8420000C8420A46696C6C2E436F6C6F720708636C61 - 57686974650748697454657374080A53697A652E576964746805000000000000 - 00A002400B53697A652E4865696768740500000000000000C001401453697A65 - 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E - 6F6E650000000000000C5442727573684F626A65637400095374796C654E616D - 65060973656C656374696F6E0B42727573682E436F6C6F720709783936324138 - 324532000007544C61796F757400095374796C654E616D650607636F6E74656E - 7405416C69676E0706436C69656E740C4D617267696E732E4C65667405000000 - 000000008000400B4D617267696E732E546F7005000000000000008000400D4D - 617267696E732E52696768740500000000000000F003400E4D617267696E732E - 426F74746F6D05000000000000008000400A53697A652E576964746805000000 - 000000008805400B53697A652E4865696768740500000000000000A803401453 - 697A652E506C6174666F726D44656661756C74080000005450463007544C6179 - 6F757400095374796C654E616D6506106D656E756261726974656D7374796C65 - 05416C69676E070643656E7465720C4D617267696E732E4C6566740500000000 - 00000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D61 - 7267696E732E5269676874050000000000000080FF3F0E4D617267696E732E42 - 6F74746F6D050000000000000080FF3F0A53697A652E57696474680500000000 - 0000009205400B53697A652E4865696768740500000000000000D00340145369 - 7A652E506C6174666F726D44656661756C74080756697369626C650808546162 - 4F726465720225000A5452656374616E676C650005416C69676E0708436F6E74 - 656E74730A46696C6C2E436F6C6F720709784646324138324532074869745465 - 737408074F70616369747905000000000017B7D1F13F0A53697A652E57696474 + 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E + 6507585261646975730500000000000000C00040075952616469757305000000 + 00000000C00040000F54436F6C6F72416E696D6174696F6E00095374796C654E + 616D650614436F6C6F72416E696D6174696F6E315374796C6508447572617469 + 6F6E050000000000CDCCCCFB3F07496E7665727365090C50726F70657274794E + 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464633 + 30333033300953746F7056616C75650709784646343034303430075472696767 + 6572062049734D6F7573654F7665723D747275653B4973466F63757365643D66 + 616C73650E54726967676572496E7665727365062149734D6F7573654F766572 + 3D66616C73653B4973466F63757365643D66616C736500000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174 + 696F6E325374796C65084475726174696F6E050000000000CDCCCCFB3F0C5072 + 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 + 6507097846463430343034300953746F7056616C756507097846463137353739 + 430754726967676572061F4973466F63757365643D747275653B49734D6F7573 + 654F7665723D7472756500000007544C61796F757400095374796C654E616D65 + 06074C61796F75743105416C69676E070643656E7465720C4D617267696E732E + 4C656674050000000000000080FF3F0A53697A652E5769647468050000000000 + 0000A002400B53697A652E4865696768740500000000000000C001401453697A + 652E506C6174666F726D44656661756C74080005545061746800095374796C65 + 4E616D650605506174683105416C69676E0706436C69656E7409446174612E50 + 6174680A3400000004000000000000000000C8420000C8420100000000009643 + 0000C842010000000000484300009643030000000000C8420000C8420A46696C + 6C2E436F6C6F720708636C6157686974650748697454657374080A53697A652E + 57696474680500000000000000A002400B53697A652E48656967687405000000 + 00000000C001401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E650000000000000C5442727573684F626A65 + 637400095374796C654E616D65060973656C656374696F6E0B42727573682E43 + 6F6C6F720709783936324138324532000007544C61796F757400095374796C65 + 4E616D650607636F6E74656E7405416C69676E0706436C69656E740C4D617267 + 696E732E4C65667405000000000000008000400B4D617267696E732E546F7005 + 000000000000008000400D4D617267696E732E52696768740500000000000000 + F003400E4D617267696E732E426F74746F6D05000000000000008000400A5369 + 7A652E576964746805000000000000008805400B53697A652E48656967687405 + 00000000000000A803401453697A652E506C6174666F726D44656661756C7408 + 0000005450463007544C61796F757400095374796C654E616D6506106D656E75 + 6261726974656D7374796C6505416C69676E070643656E7465720C4D61726769 + 6E732E4C656674050000000000000080FF3F0B4D617267696E732E546F700500 + 00000000000080FF3F0D4D617267696E732E5269676874050000000000000080 + FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A + 652E576964746805000000000000009205400B53697A652E4865696768740500 + 000000000000D003401453697A652E506C6174666F726D44656661756C740807 + 56697369626C6508085461624F726465720225000A5452656374616E676C6500 + 05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646 + 324138324532074869745465737408074F70616369747905000000000017B7D1 + F13F0A53697A652E576964746805000000000000009205400B53697A652E4865 + 696768740500000000000000D003401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F617441 + 6E696D6174696F6E00084475726174696F6E05000000000018B7D1F23F0C5072 + 6F70657274794E616D6506074F7061636974790A537461727456616C75650500 + 0000000000000000000953746F7056616C7565050000000000000080FF3F0754 + 726967676572060F497353656C65637465643D747275650E5472696767657249 + 6E76657273650610497353656C65637465643D66616C73650000000A54526563 + 74616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C + 69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646324138 + 324532074869745465737408074F70616369747905000000000000000000000A + 53697A652E576964746805000000000000009205400B53697A652E4865696768 + 740500000000000000D003401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D + 6174696F6E00084475726174696F6E05000000000018B7D1F23F07496E766572 + 7365090C50726F70657274794E616D6506074F7061636974790A537461727456 + 616C756505000000000000000000000953746F7056616C756505000000000000 + 0080FF3F0754726967676572061049734D6F7573654F7665723D747275650E54 + 726967676572496E7665727365061149734D6F7573654F7665723D66616C7365 + 00000007544C61796F757400095374796C654E616D650605676C79706805416C + 69676E07044C6566740A53697A652E57696474680500000000000000C803400B + 53697A652E4865696768740500000000000000D003401453697A652E506C6174 + 666F726D44656661756C74080007544C61796F757400095374796C654E616D65 + 0609636865636B6D61726B05416C69676E0708436F6E74656E7473074F706163 + 6974790500000000006F1283F53F0A53697A652E576964746805000000000000 + 00C803400B53697A652E4865696768740500000000000000D003401453697A65 + 2E506C6174666F726D44656661756C7408000554506174680005416C69676E07 + 0643656E74657209446174612E506174680A58000000070000000000000056D9 + 524391AE2C43010000009276664365021643010000009F3983432B7C3C430100 + 00009E9AA64382D2B442010000006F1CB04375A4D1420100000026DF8243263F + 67430300000056D9524391AE2C430A46696C6C2E436F6C6F720708636C615768 + 6974650748697454657374080A53697A652E57696474680500000000000000B0 + 02400B53697A652E4865696768740500000000000000B002401453697A652E50 + 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E + 6500000F54466C6F6174416E696D6174696F6E00084475726174696F6E050000 + 000000CDCCCCFB3F0C50726F70657274794E616D6506074F7061636974790A53 + 7461727456616C756505000000000000000000000953746F7056616C75650500 + 00000000000080FF3F0754726967676572060E4973436865636B65643D747275 + 650E54726967676572496E7665727365060F4973436865636B65643D66616C73 + 650000000654476C79706800095374796C654E616D65060A676C797068737479 + 6C650C4D617267696E732E4C656674050000000000000080FF3F0B4D61726769 + 6E732E546F7005000000000000008000400D4D617267696E732E526967687405 + 00000000000000C000400E4D617267696E732E426F74746F6D05000000000000 + 0080FF3F05416C69676E070552696768740A506F736974696F6E2E5805000000 + 00000000C001400A506F736974696F6E2E5905000000000000008000400A5369 + 7A652E576964746805000000000000008003400B53697A652E48656967687405 + 00000000000000B803401453697A652E506C6174666F726D44656661756C7408 + 00000654496D61676500095374796C654E616D6506066269746D61700E4D756C + 74695265734269746D61700E01000005416C69676E0708436F6E74656E74730C + 4D617267696E732E4C65667405000000000000008000400B4D617267696E732E + 546F7005000000000000008000400D4D617267696E732E526967687405000000 + 000000008000400E4D617267696E732E426F74746F6D05000000000000008000 + 400A53697A652E57696474680500000000000000A803400B53697A652E486569 + 6768740500000000000000B003401453697A652E506C6174666F726D44656661 + 756C740800000005545465787400095374796C654E616D650604746578740541 + 6C69676E07044C656674064C6F636B6564090748697454657374080C4D617267 + 696E732E4C65667405000000000000008002400D4D617267696E732E52696768 + 7405000000000000008002400A506F736974696F6E2E58050000000000000084 + 04400A53697A652E57696474680500000000000000C804400B53697A652E4865 + 696768740500000000000000D003401453697A652E506C6174666F726D446566 + 61756C7408165465787453657474696E67732E466F6E74436F6C6F720708636C + 615768697465165465787453657474696E67732E486F727A416C69676E07074C + 656164696E67000005545465787400095374796C654E616D65060873686F7274 + 63757405416C69676E07055269676874064C6F636B6564090748697454657374 + 080C4D617267696E732E4C6566740500000000000000C002400D4D617267696E + 732E52696768740500000000000000C001400A506F736974696F6E2E58050000 + 0000000000C000C00A53697A652E57696474680500000000000000C804400B53 + 697A652E4865696768740500000000000000D003401453697A652E506C617466 + 6F726D44656661756C7408165465787453657474696E67732E466F6E74436F6C + 6F720708636C615768697465165465787453657474696E67732E486F727A416C + 69676E07074C656164696E67000007544C61796F757400095374796C654E616D + 6506077375626D61726B05416C69676E070552696768740A506F736974696F6E + 2E580500000000000000D404400A53697A652E57696474680500000000000000 + A003400B53697A652E4865696768740500000000000000D003401453697A652E + 506C6174666F726D44656661756C7408000554506174680005416C69676E0706 + 43656E74657209446174612E506174680A340000000400000000000000000000 + 000000000001000000000000000000803F010000000000803F0000003F030000 + 0000000000000000000A46696C6C2E436F6C6F720708636C615768697465064C + 6F636B6564090748697454657374080A53697A652E5769647468050000000000 + 0000E001400B53697A652E48656967687405000000000000008002401453697A + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E6500000000545046300A5452656374616E676C6500095374796C654E61 + 6D65060C6D656E756261727374796C6505416C69676E070643656E7465720C43 + 6C69704368696C6472656E090946696C6C2E4B696E6407044E6F6E6507486974 + 54657374080A53697A652E57696474680500000000000000C804400B53697A65 + 2E4865696768740500000000000000C804401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65075669736962 + 6C650807585261646975730500000000000000C0004007595261646975730500 + 000000000000C00040000A5452656374616E676C650005416C69676E0706436C + 69656E740A46696C6C2E436F6C6F720709784646323032303230074869745465 + 7374080C4D617267696E732E4C656674050000000000000080FFBF0B4D617267 + 696E732E546F70050000000000000080FFBF0D4D617267696E732E5269676874 + 050000000000000080FFBF0A53697A652E57696474680500000000000000D004 + 400B53697A652E4865696768740500000000000000CC04401453697A652E506C + 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 + 31353135313507585261646975730500000000000000C0004007595261646975 + 730500000000000000C00040000007544C61796F757400095374796C654E616D + 650607636F6E74656E7405416C69676E0706436C69656E740C4D617267696E73 + 2E4C656674050000000000000080FF3F0B4D617267696E732E546F7005000000 + 0000000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F + 0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E + 57696474680500000000000000C004400B53697A652E48656967687405000000 + 00000000C004401453697A652E506C6174666F726D44656661756C7408000000 + 5450463007544C61796F757400095374796C654E616D65060D6D656E75697465 + 6D7374796C6505416C69676E070643656E7465720C4D617267696E732E4C6566 + 74050000000000000080FF3F0B4D617267696E732E546F700500000000000000 + 80FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D6172 + 67696E732E426F74746F6D050000000000000080FF3F0A53697A652E57696474 6805000000000000009205400B53697A652E4865696768740500000000000000 - D003401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 - 2E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E00084475 - 726174696F6E05000000000018B7D1F23F0C50726F70657274794E616D650607 - 4F7061636974790A537461727456616C75650500000000000000000000095374 - 6F7056616C7565050000000000000080FF3F0754726967676572060F49735365 - 6C65637465643D747275650E54726967676572496E7665727365061049735365 - 6C65637465643D66616C73650000000A5452656374616E676C6500095374796C - 654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E74 - 730A46696C6C2E436F6C6F720709784646324138324532074869745465737408 - 074F70616369747905000000000000000000000A53697A652E57696474680500 - 0000000000009205400B53697A652E4865696768740500000000000000D00340 - 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 - 6E6407044E6F6E65000F54466C6F6174416E696D6174696F6E00084475726174 - 696F6E05000000000018B7D1F23F07496E7665727365090C50726F7065727479 + D003401453697A652E506C6174666F726D44656661756C74080756697369626C + 6508085461624F726465720226000A5452656374616E676C650005416C69676E + 0708436F6E74656E74730A46696C6C2E436F6C6F720709784646324138324532 + 074869745465737408074F70616369747905000000000017B7D1F13F0A53697A + 652E576964746805000000000000009205400B53697A652E4865696768740500 + 000000000000D003401453697A652E506C6174666F726D44656661756C74080B + 5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D617469 + 6F6E00084475726174696F6E05000000000018B7D1F23F0C50726F7065727479 4E616D6506074F7061636974790A537461727456616C75650500000000000000 0000000953746F7056616C7565050000000000000080FF3F0754726967676572 - 061049734D6F7573654F7665723D747275650E54726967676572496E76657273 - 65061149734D6F7573654F7665723D66616C736500000007544C61796F757400 - 095374796C654E616D650605676C79706805416C69676E07044C6566740A5369 - 7A652E57696474680500000000000000C803400B53697A652E48656967687405 - 00000000000000D003401453697A652E506C6174666F726D44656661756C7408 - 0007544C61796F757400095374796C654E616D650609636865636B6D61726B05 - 416C69676E0708436F6E74656E7473074F7061636974790500000000006F1283 - F53F0A53697A652E57696474680500000000000000C803400B53697A652E4865 - 696768740500000000000000D003401453697A652E506C6174666F726D446566 - 61756C7408000554506174680005416C69676E070643656E7465720944617461 - 2E506174680A58000000070000000000000056D9524391AE2C43010000009276 - 664365021643010000009F3983432B7C3C43010000009E9AA64382D2B4420100 - 00006F1CB04375A4D1420100000026DF8243263F67430300000056D9524391AE - 2C430A46696C6C2E436F6C6F720708636C615768697465074869745465737408 - 0A53697A652E57696474680500000000000000B002400B53697A652E48656967 - 68740500000000000000B002401453697A652E506C6174666F726D4465666175 - 6C74080B5374726F6B652E4B696E6407044E6F6E6500000F54466C6F6174416E - 696D6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F - 70657274794E616D6506074F7061636974790A537461727456616C7565050000 - 00000000000000000953746F7056616C7565050000000000000080FF3F075472 - 6967676572060E4973436865636B65643D747275650E54726967676572496E76 - 65727365060F4973436865636B65643D66616C73650000000654476C79706800 - 095374796C654E616D65060A676C7970687374796C650C4D617267696E732E4C - 656674050000000000000080FF3F0B4D617267696E732E546F70050000000000 - 00008000400D4D617267696E732E52696768740500000000000000C000400E4D - 617267696E732E426F74746F6D050000000000000080FF3F05416C69676E0705 - 52696768740A506F736974696F6E2E580500000000000000C001400A506F7369 - 74696F6E2E5905000000000000008000400A53697A652E576964746805000000 - 000000008003400B53697A652E4865696768740500000000000000B803401453 - 697A652E506C6174666F726D44656661756C740800000654496D616765000953 - 74796C654E616D6506066269746D61700E4D756C74695265734269746D61700E - 01000005416C69676E0708436F6E74656E74730C4D617267696E732E4C656674 - 05000000000000008000400B4D617267696E732E546F70050000000000000080 - 00400D4D617267696E732E526967687405000000000000008000400E4D617267 - 696E732E426F74746F6D05000000000000008000400A53697A652E5769647468 - 0500000000000000A803400B53697A652E4865696768740500000000000000B0 - 03401453697A652E506C6174666F726D44656661756C74080000000554546578 - 7400095374796C654E616D6506047465787405416C69676E07044C656674064C - 6F636B6564090748697454657374080C4D617267696E732E4C65667405000000 - 000000008002400D4D617267696E732E52696768740500000000000000800240 - 0A506F736974696F6E2E5805000000000000008404400A53697A652E57696474 - 680500000000000000C804400B53697A652E4865696768740500000000000000 - D003401453697A652E506C6174666F726D44656661756C740816546578745365 - 7474696E67732E466F6E74436F6C6F720708636C615768697465165465787453 - 657474696E67732E486F727A416C69676E07074C656164696E67000005545465 - 787400095374796C654E616D65060873686F727463757405416C69676E070552 - 69676874064C6F636B6564090748697454657374080C4D617267696E732E4C65 - 66740500000000000000C002400D4D617267696E732E52696768740500000000 - 000000C001400A506F736974696F6E2E580500000000000000C000C00A53697A - 652E57696474680500000000000000C804400B53697A652E4865696768740500 - 000000000000D003401453697A652E506C6174666F726D44656661756C740816 - 5465787453657474696E67732E466F6E74436F6C6F720708636C615768697465 - 165465787453657474696E67732E486F727A416C69676E07074C656164696E67 - 000007544C61796F757400095374796C654E616D6506077375626D61726B0541 - 6C69676E070552696768740A506F736974696F6E2E580500000000000000D404 - 400A53697A652E57696474680500000000000000A003400B53697A652E486569 - 6768740500000000000000D003401453697A652E506C6174666F726D44656661 - 756C7408000554506174680005416C69676E070643656E74657209446174612E - 506174680A340000000400000000000000000000000000000001000000000000 - 000000803F010000000000803F0000003F0300000000000000000000000A4669 - 6C6C2E436F6C6F720708636C615768697465064C6F636B656409074869745465 - 7374080A53697A652E57696474680500000000000000E001400B53697A652E48 - 656967687405000000000000008002401453697A652E506C6174666F726D4465 - 6661756C74080B5374726F6B652E4B696E6407044E6F6E650000000054504630 - 0A5452656374616E676C6500095374796C654E616D65060C6D656E7562617273 - 74796C6505416C69676E070643656E7465720C436C69704368696C6472656E09 - 0946696C6C2E4B696E6407044E6F6E650748697454657374080A53697A652E57 - 696474680500000000000000C804400B53697A652E4865696768740500000000 - 000000C804401453697A652E506C6174666F726D44656661756C74080B537472 - 6F6B652E4B696E6407044E6F6E650756697369626C6508075852616469757305 - 00000000000000C0004007595261646975730500000000000000C00040000A54 - 52656374616E676C650005416C69676E0706436C69656E740A46696C6C2E436F - 6C6F7207097846463230323032300748697454657374080C4D617267696E732E - 4C656674050000000000000080FFBF0B4D617267696E732E546F700500000000 - 00000080FFBF0D4D617267696E732E5269676874050000000000000080FFBF0A - 53697A652E57696474680500000000000000D004400B53697A652E4865696768 - 740500000000000000CC04401453697A652E506C6174666F726D44656661756C + 060F497353656C65637465643D747275650E54726967676572496E7665727365 + 0610497353656C65637465643D66616C73650000000A5452656374616E676C65 + 00095374796C654E616D65060A6261636B67726F756E6405416C69676E070843 + 6F6E74656E74730A46696C6C2E436F6C6F720709784646324138324532074869 + 745465737408074F70616369747905000000000000000000000A53697A652E57 + 6964746805000000000000009205400B53697A652E4865696768740500000000 + 000000D003401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E00 + 084475726174696F6E05000000000018B7D1F23F07496E7665727365090C5072 + 6F70657274794E616D6506074F7061636974790A537461727456616C75650500 + 0000000000000000000953746F7056616C7565050000000000000080FF3F0754 + 726967676572061049734D6F7573654F7665723D747275650E54726967676572 + 496E7665727365061149734D6F7573654F7665723D66616C736500000007544C + 61796F757400095374796C654E616D650605676C79706805416C69676E07044C + 6566740A53697A652E57696474680500000000000000C803400B53697A652E48 + 65696768740500000000000000D003401453697A652E506C6174666F726D4465 + 6661756C74080007544C61796F757400095374796C654E616D65060963686563 + 6B6D61726B05416C69676E0708436F6E74656E7473074F706163697479050000 + 0000006F1283F53F0A53697A652E57696474680500000000000000C803400B53 + 697A652E4865696768740500000000000000D003401453697A652E506C617466 + 6F726D44656661756C7408000554506174680005416C69676E070643656E7465 + 7209446174612E506174680A58000000070000000000000056D9524391AE2C43 + 010000009276664365021643010000009F3983432B7C3C43010000009E9AA643 + 82D2B442010000006F1CB04375A4D1420100000026DF8243263F674303000000 + 56D9524391AE2C430A46696C6C2E436F6C6F720708636C615768697465074869 + 7454657374080A53697A652E57696474680500000000000000B002400B53697A + 652E4865696768740500000000000000B002401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000F5446 + 6C6F6174416E696D6174696F6E00084475726174696F6E050000000000CDCCCC + FB3F0C50726F70657274794E616D6506074F7061636974790A53746172745661 + 6C756505000000000000000000000953746F7056616C75650500000000000000 + 80FF3F0754726967676572060E4973436865636B65643D747275650E54726967 + 676572496E7665727365060F4973436865636B65643D66616C73650000000654 + 476C79706800095374796C654E616D65060A676C7970687374796C650C4D6172 + 67696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F70 + 05000000000000008000400D4D617267696E732E526967687405000000000000 + 00C000400E4D617267696E732E426F74746F6D050000000000000080FF3F0541 + 6C69676E07044C6566740A506F736974696F6E2E58050000000000000080FF3F + 0A506F736974696F6E2E5905000000000000008000400A53697A652E57696474 + 6805000000000000008003400B53697A652E4865696768740500000000000000 + B803401453697A652E506C6174666F726D44656661756C740800000654496D61 + 676500095374796C654E616D6506066269746D61700E4D756C74695265734269 + 746D61700E01000005416C69676E07044C6566740C4D617267696E732E4C6566 + 7405000000000000008000400B4D617267696E732E546F700500000000000000 + 8000400D4D617267696E732E526967687405000000000000008000400E4D6172 + 67696E732E426F74746F6D05000000000000008000400A506F736974696F6E2E + 5805000000000000008000400A506F736974696F6E2E59050000000000000080 + 00400A53697A652E57696474680500000000000000A803400B53697A652E4865 + 696768740500000000000000B003401453697A652E506C6174666F726D446566 + 61756C740800000005545465787400095374796C654E616D6506047465787405 + 416C69676E07044C656674064C6F636B6564090748697454657374080C4D6172 + 67696E732E4C65667405000000000000008002400D4D617267696E732E526967 + 687405000000000000008002400A506F736974696F6E2E580500000000000000 + 8404400A53697A652E57696474680500000000000000C804400B53697A652E48 + 65696768740500000000000000D003401453697A652E506C6174666F726D4465 + 6661756C7408165465787453657474696E67732E466F6E74436F6C6F72070863 + 6C615768697465165465787453657474696E67732E486F727A416C69676E0707 + 4C656164696E67000005545465787400095374796C654E616D65060873686F72 + 7463757405416C69676E07055269676874064C6F636B65640907486974546573 + 74080C4D617267696E732E4C6566740500000000000000C002400D4D61726769 + 6E732E52696768740500000000000000C001400A506F736974696F6E2E580500 + 000000000000C000C00A53697A652E57696474680500000000000000C804400B + 53697A652E4865696768740500000000000000D003401453697A652E506C6174 + 666F726D44656661756C7408165465787453657474696E67732E466F6E74436F + 6C6F720708636C615768697465165465787453657474696E67732E486F727A41 + 6C69676E07074C656164696E67000007544C61796F757400095374796C654E61 + 6D6506077375626D61726B05416C69676E070552696768740A506F736974696F + 6E2E580500000000000000D404400A53697A652E576964746805000000000000 + 00A003400B53697A652E4865696768740500000000000000D003401453697A65 + 2E506C6174666F726D44656661756C7408000554506174680005416C69676E07 + 0643656E74657209446174612E506174680A3400000004000000000000000000 + 00000000000001000000000000000000803F010000000000803F0000003F0300 + 000000000000000000000A46696C6C2E436F6C6F720708636C61576869746506 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 000000E001400B53697A652E4865696768740500000000000000800240145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E65000000005450463007544C61796F757400095374796C654E616D65 + 06126D656E75736570617261746F727374796C6505416C69676E070643656E74 + 65720C4D617267696E732E4C656674050000000000000080FF3F0B4D61726769 + 6E732E546F70050000000000000080FF3F0D4D617267696E732E526967687405 + 0000000000000080FF3F0E4D617267696E732E426F74746F6D05000000000000 + 0080FF3F0A53697A652E57696474680500000000000000C804400B53697A652E + 4865696768740500000000000000C804401453697A652E506C6174666F726D44 + 656661756C74080756697369626C6508085461624F7264657202270005544C69 + 6E650005416C69676E0703546F70084C696E65547970650703546F700C4D6172 + 67696E732E4C6566740500000000000000C000400B4D617267696E732E546F70 + 05000000000000008000400D4D617267696E732E526967687405000000000000 + 00C000400A506F736974696F6E2E580500000000000000C000400A506F736974 + 696F6E2E5905000000000000008000400A53697A652E57696474680500000000 + 000000B004400B53697A652E486569676874050000000000000080FF3F145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 0709784646313531353135000000545046300A5452656374616E676C65000953 + 74796C654E616D65060D6D656E75766965777374796C6505416C69676E070643 + 656E7465720A46696C6C2E436F6C6F7207097846463230323032300A53697A65 + 2E57696474680500000000000000C804400B53697A652E486569676874050000 + 0000000000C804401453697A652E506C6174666F726D44656661756C74080C53 + 74726F6B652E436F6C6F7207097846463135313531350756697369626C650807 + 585261646975730500000000000000C000400759526164697573050000000000 + 0000C00040000A5452656374616E676C650005416C69676E0706436C69656E74 + 0A46696C6C2E436F6C6F7207097846463230323032300748697454657374080A + 53697A652E57696474680500000000000000C804400B53697A652E4865696768 + 740500000000000000C804401453697A652E506C6174666F726D44656661756C 74080C5374726F6B652E436F6C6F720709784646313531353135075852616469 75730500000000000000C0004007595261646975730500000000000000C00040 - 000007544C61796F757400095374796C654E616D650607636F6E74656E740541 - 6C69676E0706436C69656E740C4D617267696E732E4C65667405000000000000 - 0080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267 - 696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F74 - 746F6D050000000000000080FF3F0A53697A652E576964746805000000000000 - 00C004400B53697A652E4865696768740500000000000000C004401453697A65 - 2E506C6174666F726D44656661756C74080000005450463007544C61796F7574 - 00095374796C654E616D65060D6D656E756974656D7374796C6505416C69676E - 070643656E7465720C4D617267696E732E4C656674050000000000000080FF3F - 0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E - 5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D05 - 0000000000000080FF3F0A53697A652E57696474680500000000000000920540 - 0B53697A652E4865696768740500000000000000D003401453697A652E506C61 - 74666F726D44656661756C74080756697369626C6508085461624F7264657202 - 26000A5452656374616E676C650005416C69676E0708436F6E74656E74730A46 - 696C6C2E436F6C6F720709784646324138324532074869745465737408074F70 - 616369747905000000000017B7D1F13F0A53697A652E57696474680500000000 - 0000009205400B53697A652E4865696768740500000000000000D00340145369 - 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 - 044E6F6E65000F54466C6F6174416E696D6174696F6E00084475726174696F6E - 05000000000018B7D1F23F0C50726F70657274794E616D6506074F7061636974 - 790A537461727456616C756505000000000000000000000953746F7056616C75 - 65050000000000000080FF3F0754726967676572060F497353656C6563746564 - 3D747275650E54726967676572496E76657273650610497353656C6563746564 - 3D66616C73650000000A5452656374616E676C6500095374796C654E616D6506 - 0A6261636B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C - 2E436F6C6F720709784646324138324532074869745465737408074F70616369 - 747905000000000000000000000A53697A652E57696474680500000000000000 - 9205400B53697A652E4865696768740500000000000000D003401453697A652E - 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F - 6E65000F54466C6F6174416E696D6174696F6E00084475726174696F6E050000 - 00000018B7D1F23F07496E7665727365090C50726F70657274794E616D650607 - 4F7061636974790A537461727456616C75650500000000000000000000095374 - 6F7056616C7565050000000000000080FF3F0754726967676572061049734D6F - 7573654F7665723D747275650E54726967676572496E7665727365061149734D - 6F7573654F7665723D66616C736500000007544C61796F757400095374796C65 - 4E616D650605676C79706805416C69676E07044C6566740A53697A652E576964 - 74680500000000000000C803400B53697A652E48656967687405000000000000 - 00D003401453697A652E506C6174666F726D44656661756C74080007544C6179 - 6F757400095374796C654E616D650609636865636B6D61726B05416C69676E07 - 08436F6E74656E7473074F7061636974790500000000006F1283F53F0A53697A - 652E57696474680500000000000000C803400B53697A652E4865696768740500 - 000000000000D003401453697A652E506C6174666F726D44656661756C740800 - 0554506174680005416C69676E070643656E74657209446174612E506174680A - 58000000070000000000000056D9524391AE2C43010000009276664365021643 - 010000009F3983432B7C3C43010000009E9AA64382D2B442010000006F1CB043 - 75A4D1420100000026DF8243263F67430300000056D9524391AE2C430A46696C - 6C2E436F6C6F720708636C6157686974650748697454657374080A53697A652E - 57696474680500000000000000B002400B53697A652E48656967687405000000 - 00000000B002401453697A652E506C6174666F726D44656661756C74080B5374 - 726F6B652E4B696E6407044E6F6E6500000F54466C6F6174416E696D6174696F - 6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E - 616D6506074F7061636974790A537461727456616C7565050000000000000000 - 00000953746F7056616C7565050000000000000080FF3F075472696767657206 - 0E4973436865636B65643D747275650E54726967676572496E7665727365060F - 4973436865636B65643D66616C73650000000654476C79706800095374796C65 - 4E616D65060A676C7970687374796C650C4D617267696E732E4C656674050000 - 000000000080FF3F0B4D617267696E732E546F7005000000000000008000400D - 4D617267696E732E52696768740500000000000000C000400E4D617267696E73 - 2E426F74746F6D050000000000000080FF3F05416C69676E07044C6566740A50 - 6F736974696F6E2E58050000000000000080FF3F0A506F736974696F6E2E5905 - 000000000000008000400A53697A652E57696474680500000000000000800340 - 0B53697A652E4865696768740500000000000000B803401453697A652E506C61 - 74666F726D44656661756C740800000654496D61676500095374796C654E616D - 6506066269746D61700E4D756C74695265734269746D61700E01000005416C69 - 676E07044C6566740C4D617267696E732E4C6566740500000000000000800040 - 0B4D617267696E732E546F7005000000000000008000400D4D617267696E732E - 526967687405000000000000008000400E4D617267696E732E426F74746F6D05 - 000000000000008000400A506F736974696F6E2E580500000000000000B00340 - 0A506F736974696F6E2E5905000000000000008000400A53697A652E57696474 - 680500000000000000A803400B53697A652E4865696768740500000000000000 - B003401453697A652E506C6174666F726D44656661756C740800000005545465 - 787400095374796C654E616D6506047465787405416C69676E07044C65667406 - 4C6F636B6564090748697454657374080C4D617267696E732E4C656674050000 - 00000000008002400D4D617267696E732E526967687405000000000000008002 - 400A506F736974696F6E2E5805000000000000008404400A53697A652E576964 - 74680500000000000000C804400B53697A652E48656967687405000000000000 - 00D003401453697A652E506C6174666F726D44656661756C7408165465787453 - 657474696E67732E466F6E74436F6C6F720708636C6157686974651654657874 - 53657474696E67732E486F727A416C69676E07074C656164696E670000055454 - 65787400095374796C654E616D65060873686F727463757405416C69676E0705 - 5269676874064C6F636B6564090748697454657374080C4D617267696E732E4C - 6566740500000000000000C002400D4D617267696E732E526967687405000000 - 00000000C001400A506F736974696F6E2E580500000000000000C000C00A5369 - 7A652E57696474680500000000000000C804400B53697A652E48656967687405 - 00000000000000D003401453697A652E506C6174666F726D44656661756C7408 - 165465787453657474696E67732E466F6E74436F6C6F720708636C6157686974 - 65165465787453657474696E67732E486F727A416C69676E07074C656164696E - 67000007544C61796F757400095374796C654E616D6506077375626D61726B05 - 416C69676E070552696768740A506F736974696F6E2E580500000000000000D4 - 04400A53697A652E57696474680500000000000000A003400B53697A652E4865 - 696768740500000000000000D003401453697A652E506C6174666F726D446566 - 61756C7408000554506174680005416C69676E070643656E7465720944617461 - 2E506174680A3400000004000000000000000000000000000000010000000000 - 00000000803F010000000000803F0000003F0300000000000000000000000A46 - 696C6C2E436F6C6F720708636C615768697465064C6F636B6564090748697454 - 657374080A53697A652E57696474680500000000000000E001400B53697A652E - 48656967687405000000000000008002401453697A652E506C6174666F726D44 - 656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000000545046 - 3007544C61796F757400095374796C654E616D6506126D656E75736570617261 - 746F727374796C6505416C69676E070643656E7465720C4D617267696E732E4C - 656674050000000000000080FF3F0B4D617267696E732E546F70050000000000 - 000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D - 617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E5769 - 6474680500000000000000C804400B53697A652E486569676874050000000000 - 0000C804401453697A652E506C6174666F726D44656661756C74080756697369 - 626C6508085461624F7264657202270005544C696E650005416C69676E070354 - 6F70084C696E65547970650703546F700C4D617267696E732E4C656674050000 - 0000000000C000400B4D617267696E732E546F7005000000000000008000400D - 4D617267696E732E52696768740500000000000000C000400A506F736974696F - 6E2E580500000000000000C000400A506F736974696F6E2E5905000000000000 - 008000400A53697A652E57696474680500000000000000B004400B53697A652E - 486569676874050000000000000080FF3F1453697A652E506C6174666F726D44 - 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313500 - 0000545046300A5452656374616E676C6500095374796C654E616D65060D6D65 - 6E75766965777374796C6505416C69676E070643656E7465720A46696C6C2E43 - 6F6C6F7207097846463230323032300A53697A652E5769647468050000000000 + 000D54536861646F77456666656374000844697374616E636505000000000000 + 00C0004009446972656374696F6E0500000000000000B4054008536F66746E65 + 7373050000000000000080FE3F074F706163697479050000000000000080FE3F + 0B536861646F77436F6C6F720708636C61426C61636B00000007544C61796F75 + 7400095374796C654E616D650607636F6E74656E7405416C69676E0706436C69 + 656E740C4D617267696E732E4C656674050000000000000080FF3F0B4D617267 + 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 + 050000000000000080FF3F0E4D617267696E732E426F74746F6D050000000000 + 000080FF3F0A53697A652E57696474680500000000000000C004400B53697A65 + 2E4865696768740500000000000000C004401453697A652E506C6174666F726D + 44656661756C74080000005450463007544C61796F757400095374796C654E61 + 6D65061B7472656576696577657870616E646572627574746F6E7374796C6505 + 416C69676E070643656E7465720B4D617267696E732E546F7005000000000000 + 0080FF3F0A53697A652E57696474680500000000000000B003400B53697A652E + 4865696768740500000000000000B003401453697A652E506C6174666F726D44 + 656661756C74080756697369626C6508085461624F72646572023C0005545061 + 746800095374796C654E616D650605506174683105416C69676E070643656E74 + 657209446174612E506174680A3400000004000000000000000000C8420000C8 + 4201000000000096430000C842010000000000484300009643030000000000C8 + 420000C8420A46696C6C2E436F6C6F720708636C615768697465074869745465 + 7374080D526F746174696F6E416E676C650500000000000000B405C00A53697A + 652E57696474680500000000000000A002400B53697A652E4865696768740500 + 000000000000C001401453697A652E506C6174666F726D44656661756C74080B + 5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D617469 + 6F6E00095374796C654E616D650614466C6F6174416E696D6174696F6E315374 + 796C65084475726174696F6E05000000000000000000000D496E746572706F6C + 6174696F6E070843697263756C61720C50726F70657274794E616D65060D526F + 746174696F6E416E676C650A537461727456616C75650500000000000000B405 + C00953746F7056616C756505000000000000000000000754726967676572060F + 4973457870616E6465643D747275650E54726967676572496E76657273650610 + 4973457870616E6465643D66616C736500000000545046300A5452656374616E + 676C6500095374796C654E616D65061174726565766965776974656D7374796C + 6505416C69676E070643656E7465720946696C6C2E4B696E6407044E6F6E6507 + 48697454657374080553696465730B06426F74746F6D000A53697A652E576964 + 74680500000000000000AE05400B53697A652E48656967687405000000000000 + 00A004401453697A652E506C6174666F726D44656661756C74080C5374726F6B + 652E436F6C6F7207097846463135313531350B5374726F6B652E4A6F696E0705 + 526F756E640756697369626C6508000C545370656564427574746F6E00095374 + 796C654E616D650606627574746F6E05416C69676E07044C6566740A53697A65 + 2E57696474680500000000000000A003400B53697A652E486569676874050000 + 0000000000A004401453697A652E506C6174666F726D44656661756C74080B53 + 74796C654C6F6F6B7570061B7472656576696577657870616E64657262757474 + 6F6E7374796C65000007544C61796F75740005416C69676E0708436F6E74656E + 74730C4D617267696E732E4C6566740500000000000000A003400A53697A652E + 576964746805000000000000008605400B53697A652E48656967687405000000 + 00000000A004401453697A652E506C6174666F726D44656661756C7408000954 + 436865636B426F7800095374796C654E616D650605636865636B05416C69676E + 07044C6566740843616E466F637573081244697361626C65466F637573456666 + 656374090A53697A652E57696474680500000000000000A003400B53697A652E + 4865696768740500000000000000A004401453697A652E506C6174666F726D44 + 656661756C740800000654476C79706800095374796C654E616D65060A676C79 + 70687374796C650C4D617267696E732E4C65667405000000000000008000400B + 4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E52 + 6967687405000000000000008000400E4D617267696E732E426F74746F6D0500 + 00000000000080FF3F05416C69676E07044C6566740A506F736974696F6E2E58 + 0500000000000000B003400A506F736974696F6E2E59050000000000000080FF + 3F0A53697A652E576964746805000000000000008003400B53697A652E486569 + 67687405000000000000009804401453697A652E506C6174666F726D44656661 + 756C7408000005545465787400095374796C654E616D6506047465787405416C + 69676E0706436C69656E74064C6F636B6564090748697454657374080A53697A + 652E57696474680500000000000000BC04400B53697A652E4865696768740500 + 000000000000A004401453697A652E506C6174666F726D44656661756C740804 + 54657874060454657874165465787453657474696E67732E466F6E74436F6C6F + 720708636C615768697465155465787453657474696E67732E576F7264577261 + 7008165465787453657474696E67732E486F727A416C69676E07074C65616469 + 6E670000000A5452656374616E676C650005416C69676E0708436F6E74656E74 + 730946696C6C2E4B696E6407044E6F6E650748697454657374080E4D61726769 + 6E732E426F74746F6D050000000000000080FF3F0553696465730B044C656674 + 000A53697A652E57696474680500000000000000AE05400B53697A652E486569 + 67687405000000000000009C04401453697A652E506C6174666F726D44656661 + 756C74080C5374726F6B652E436F6C6F72070978464632413832453210537472 + 6F6B652E546869636B6E65737305000000000000008000400000005450463007 + 544C61796F757400095374796C654E616D65060D74726565766965777374796C + 6505416C69676E070643656E7465720A53697A652E5769647468050000000000 + 0000E106400B53697A652E48656967687405000000000000808107401453697A + 652E506C6174666F726D44656661756C74080756697369626C6508085461624F + 726465720241000C5442727573684F626A65637400095374796C654E616D6506 + 18416C7465726E6174696E67526F774261636B67726F756E640B42727573682E + 436F6C6F72070978304646464646464600000A5452656374616E676C65000953 + 74796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74 + 656E74730A46696C6C2E436F6C6F720709784646323032303230064C6F636B65 + 64090748697454657374080C50616464696E672E4C6566740500000000000000 + 80FF3F0D50616464696E672E5269676874050000000000000080FF3F0A53697A + 652E57696474680500000000000000E106400B53697A652E4865696768740500 + 0000000000808107401453697A652E506C6174666F726D44656661756C74080C + 5374726F6B652E436F6C6F7207097846463135313531350007544C61796F7574 + 00095374796C654E616D650607636F6E74656E7405416C69676E0706436C6965 + 6E740C436C69704368696C6472656E090B4D617267696E732E546F7005000000 + 0000000080FF3F0A53697A652E57696474680500000000000000CD06400B5369 + 7A652E4865696768740500000000000000F006401453697A652E506C6174666F + 726D44656661756C7408000A5452656374616E676C6500095374796C654E616D + 65060973656C656374696F6E0A46696C6C2E436F6C6F72070978464632413832 + 45320748697454657374080A53697A652E57696474680500000000000000C804 + 400B53697A652E4865696768740500000000000000C804401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 07585261646975730500000000000000C0004007595261646975730500000000 + 000000C0004000000A5452656374616E676C6500095374796C654E616D650610 + 666F637573656473656C656374696F6E0A46696C6C2E436F6C6F720709784646 + 3241383245320748697454657374080A53697A652E5769647468050000000000 0000C804400B53697A652E4865696768740500000000000000C804401453697A - 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 - 097846463135313531350756697369626C650807585261646975730500000000 - 000000C0004007595261646975730500000000000000C00040000A5452656374 - 616E676C650005416C69676E0706436C69656E740A46696C6C2E436F6C6F7207 - 097846463230323032300748697454657374080A53697A652E57696474680500 - 000000000000C804400B53697A652E4865696768740500000000000000C80440 - 1453697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F - 6C6F72070978464631353135313507585261646975730500000000000000C000 - 4007595261646975730500000000000000C00040000D54536861646F77456666 - 656374000844697374616E63650500000000000000C000400944697265637469 - 6F6E0500000000000000B4054008536F66746E657373050000000000000080FE - 3F074F706163697479050000000000000080FE3F0B536861646F77436F6C6F72 - 0708636C61426C61636B00000007544C61796F757400095374796C654E616D65 - 0607636F6E74656E7405416C69676E0706436C69656E740C4D617267696E732E - 4C656674050000000000000080FF3F0B4D617267696E732E546F700500000000 - 00000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E - 4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E57 - 696474680500000000000000C004400B53697A652E4865696768740500000000 - 000000C004401453697A652E506C6174666F726D44656661756C7408000000} + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E650B5374726F6B652E446173680703446F740758526164697573050000 + 0000000000C0004007595261646975730500000000000000C000400000000A54 + 5363726F6C6C42617200095374796C654E616D65060A767363726F6C6C626172 + 05416C69676E070552696768740B536D616C6C4368616E676505000000000000 + 000000000B4F7269656E746174696F6E0708566572746963616C0C4D61726769 + 6E732E4C65667405000000000000008000400A506F736974696F6E2E58050000 + 0000000000D006400A53697A652E576964746805000000000000008003400B53 + 697A652E4865696768740500000000000000F106401453697A652E506C617466 + 6F726D44656661756C740800000A545363726F6C6C42617200095374796C654E + 616D65060A687363726F6C6C62617205416C69676E0706426F74746F6D0B536D + 616C6C4368616E676505000000000000000000000B4F7269656E746174696F6E + 070A486F72697A6F6E74616C0B4D617267696E732E546F700500000000000000 + 8000400A506F736974696F6E2E58050000000000000080FF3F0A506F73697469 + 6F6E2E590500000000000000F306400A53697A652E5769647468050000000000 + 0000DF06400B53697A652E48656967687405000000000000008003401453697A + 652E506C6174666F726D44656661756C740800000F54536D616C6C5363726F6C + 6C42617200095374796C654E616D65060F76736D616C6C7363726F6C6C626172 + 05416C69676E070552696768740B536D616C6C4368616E676505000000000000 + 000000000B4F7269656E746174696F6E0708566572746963616C0C4D61726769 + 6E732E4C65667405000000000000008000400A506F736974696F6E2E58050000 + 0000000000C605400A506F736974696F6E2E5905000000000000008000400A53 + 697A652E576964746805000000000000008002400B53697A652E486569676874 + 05000000000000008002401453697A652E506C6174666F726D44656661756C74 + 080756697369626C650800000F54536D616C6C5363726F6C6C42617200095374 + 796C654E616D65060F68736D616C6C7363726F6C6C62617205416C69676E0706 + 426F74746F6D0B536D616C6C4368616E676505000000000000000000000B4F72 + 69656E746174696F6E070A486F72697A6F6E74616C0B4D617267696E732E546F + 7005000000000000008000400A506F736974696F6E2E58050000000000000080 + 00400A506F736974696F6E2E590500000000000000E205400A53697A652E5769 + 64746805000000000000009606400B53697A652E486569676874050000000000 + 00008002401453697A652E506C6174666F726D44656661756C74080756697369 + 626C6508000000005450463007544C61796F757400095374796C654E616D6506 + 1670726F677265737362617266696E6973687374796C6505416C69676E070643 + 656E7465720A53697A652E576964746805000000000033338505400B53697A65 + 2E4865696768740500000000009999E104401453697A652E506C6174666F726D + 44656661756C74080756697369626C6508085461624F726465720240000A5452 + 656374616E676C6500095374796C654E616D65060668747261636B05416C6967 + 6E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846463230323032 + 30064C6F636B6564090748697454657374080A53697A652E5769647468050000 + 00000033338505400B53697A652E4865696768740500000000009999E1044014 + 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C + 6F72070978464631353135313507585261646975730500000000000000C00040 + 07595261646975730500000000000000C00040000A5452656374616E676C6500 + 095374796C654E616D65060A68696E64696361746F7205416C69676E07044C65 + 66740A46696C6C2E436F6C6F720709784646324345323434064C6F636B656409 + 0748697454657374080C4D617267696E732E4C656674050000000000000080FF + 3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E73 + 2E5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D + 050000000000000080FF3F0A506F736974696F6E2E58050000000000000080FF + 3F0A506F736974696F6E2E59050000000000000080FF3F0A53697A652E576964 + 74680500000000000000C804400B53697A652E48656967687405000000000099 + 99D904401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E6507585261646975730500000000000000C0004007 + 595261646975730500000000000000C000400000000A5452656374616E676C65 + 00095374796C654E616D65060676747261636B05416C69676E0708436F6E7465 + 6E74730A46696C6C2E436F6C6F720709784646323032303230064C6F636B6564 + 090748697454657374080A53697A652E57696474680500000000003333850540 + 0B53697A652E4865696768740500000000009999E104401453697A652E506C61 + 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 + 353135313507585261646975730500000000000000C000400759526164697573 + 0500000000000000C00040000A5452656374616E676C6500095374796C654E61 + 6D65060A76696E64696361746F7205416C69676E0706426F74746F6D0A46696C + 6C2E436F6C6F720709784646324345323434064C6F636B656409074869745465 + 7374080C4D617267696E732E4C656674050000000000000080FF3F0B4D617267 + 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 + 050000000000000080FF3F0E4D617267696E732E426F74746F6D050000000000 + 000080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F7369 + 74696F6E2E5905000000000099998904400A53697A652E576964746805000000 + 000033338105400B53697A652E4865696768740500000000000000A803401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E6507585261646975730500000000000000C0004007595261646975 + 730500000000000000C00040000000005450463007544C61796F757400095374 + 796C654E616D65061A70726F67726573736261726D696E6966696E6973687374 + 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 + 000033338505400B53697A652E4865696768740500000000009999E104401453 + 697A652E506C6174666F726D44656661756C74080756697369626C6508085461 + 624F72646572024B000A5452656374616E676C6500095374796C654E616D6506 + 0668747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C + 6F720709784646343034303430064C6F636B6564090748697454657374080A53 + 697A652E576964746805000000000033338505400B53697A652E486569676874 + 0500000000009999E104401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E6507585261646975730500000000 + 00000080004007595261646975730500000000000000800040000A5452656374 + 616E676C6500095374796C654E616D65060A68696E64696361746F7205416C69 + 676E07044C6566740A46696C6C2E436F6C6F720709784646324345323434064C + 6F636B6564090748697454657374080A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000009999E104401453697A + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E6507585261646975730500000000000000800040075952616469757305 + 000000000000008000400000000A5452656374616E676C6500095374796C654E + 616D65060676747261636B05416C69676E0708436F6E74656E74730A46696C6C + 2E436F6C6F720709784646343034303430064C6F636B65640907486974546573 + 74080A53697A652E576964746805000000000033338505400B53697A652E4865 + 696768740500000000009999E104401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65075852616469757305 + 0000000000000080004007595261646975730500000000000000800040000A54 + 52656374616E676C6500095374796C654E616D65060A76696E64696361746F72 + 05416C69676E0706426F74746F6D0A46696C6C2E436F6C6F7207097846463243 + 45323434064C6F636B6564090748697454657374080A506F736974696F6E2E59 + 05000000000099998D04400A53697A652E576964746805000000000033338505 + 400B53697A652E4865696768740500000000000000A803401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 0758526164697573050000000000000080004007595261646975730500000000 + 000000800040000000005450463007544C61796F757400095374796C654E616D + 6506136172726F77646F776E746F6F6C627574746F6E05416C69676E07064365 + 6E7465720A53697A652E57696474680500000000000000C805400B53697A652E + 4865696768740500000000000000C803401453697A652E506C6174666F726D44 + 656661756C74080756697369626C6508085461624F726465720201000A545265 + 6374616E676C6500095374796C654E616D65060A6261636B67726F756E640541 + 6C69676E0706436C69656E740C436C69704368696C6472656E090A436C697050 + 6172656E740907436F726E6572730B07546F704C6566740A426F74746F6D4C65 + 6674000A46696C6C2E436F6C6F72070978303032303230323007486974546573 + 74080A53697A652E57696474680500000000000000C805400B53697A652E4865 + 696768740500000000000000C803401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65075852616469757305 + 00000000000000C0004007595261646975730500000000000000C00040000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F + 6E436F6C6F72416E696D6174696F6E31084475726174696F6E050000000000CD + CCCCFB3F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 + 61727456616C756507097830303230323032300953746F7056616C7565070978 + 46463430343034300754726967676572063049734D6F7573654F7665723D7472 + 75653B4973507265737365643D66616C73653B4973466F63757365643D66616C + 73650E54726967676572496E7665727365063149734D6F7573654F7665723D66 + 616C73653B4973507265737365643D66616C73653B4973466F63757365643D66 + 616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650615627574746F6E436F6C6F72416E696D6174696F6E32084475726174696F + 6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E + 436F6C6F720A537461727456616C756507097846463430343034300953746F70 + 56616C756507097846463137353739430754726967676572062F497350726573 + 7365643D747275653B49734D6F7573654F7665723D747275653B4973466F6375 + 7365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009537479 + 6C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E33084475 + 726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A + 46696C6C2E436F6C6F720A537461727456616C75650709784646324138324532 + 0953746F7056616C756507097846463137353739430754726967676572062E49 + 73507265737365643D747275653B49734D6F7573654F7665723D747275653B49 + 73466F63757365643D747275650E54726967676572496E7665727365062F4973 + 507265737365643D66616C73653B49734D6F7573654F7665723D747275653B49 + 73466F63757365643D7472756500000005545061746800095374796C654E616D + 6506047061746805416C69676E070643656E74657209446174612E506174680A + 3400000004000000000000000000C8420000C84201000000000096430000C842 + 010000000000484300009643030000000000C8420000C8420A46696C6C2E436F + 6C6F720708636C6157686974650748697454657374080A53697A652E57696474 + 680500000000000000A002400B53697A652E4865696768740500000000000000 + C001401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E65000005545465787400095374796C654E616D650604 + 7465787405416C69676E0706436C69656E740748697454657374080A53697A65 + 2E57696474680500000000000000C805400B53697A652E486569676874050000 + 0000000000C803401453697A652E506C6174666F726D44656661756C74080454 + 657874060454657874165465787453657474696E67732E466F6E74436F6C6F72 + 0708636C6157686974650756697369626C65080000005450463007544C61796F + 757400095374796C654E616D65060D706F707570626F787374796C6505416C69 + 676E070643656E7465720A53697A652E57696474680500000000000000C80540 + 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 + 74666F726D44656661756C7408085461624F726465720231000A545265637461 + 6E676C6500095374796C654E616D65060A6261636B67726F756E6405416C6967 + 6E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846463230323032 + 300748697454657374080A53697A652E57696474680500000000000000C80540 + 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 + 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6507 + 585261646975730500000000000000C000400759526164697573050000000000 + 0000C00040000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650614436F6C6F72416E696D6174696F6E315374796C65084475726174696F6E + 050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46696C6C2E43 + 6F6C6F720A537461727456616C756507097846463230323032300953746F7056 + 616C756507097846463430343034300754726967676572062049734D6F757365 + 4F7665723D747275653B4973507265737365643D66616C73650E547269676765 + 72496E7665727365062149734D6F7573654F7665723D66616C73653B49735072 + 65737365643D66616C736500000F54436F6C6F72416E696D6174696F6E000953 + 74796C654E616D650614436F6C6F72416E696D6174696F6E325374796C650844 + 75726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C756507097846463430343034 + 300953746F7056616C7565070978464632413832453207547269676765720620 + 49734D6F7573654F7665723D747275653B4973507265737365643D747275653B + 0E54726967676572496E7665727365062049734D6F7573654F7665723D747275 + 653B4973507265737365643D66616C736500000007544C61796F75740005416C + 69676E070846697452696768740A506F736974696F6E2E580500000000000000 + 9605400A53697A652E57696474680500000000000000C803400B53697A652E48 + 65696768740500000000000000C803401453697A652E506C6174666F726D4465 + 6661756C7408000554506174680005416C69676E070643656E74657209446174 + 612E506174680A400000000500000000000000000000000000803F0100000000 + 00803F0000803F010000000000003F0000000001000000000000000000803F03 + 00000000000000000000000A46696C6C2E436F6C6F720708636C615768697465 + 0748697454657374080B4D617267696E732E546F700500000000000000E001C0 + 0A53697A652E576964746805000000000000008002400B53697A652E48656967 + 687405000000000000008001401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E650000055450617468000541 + 6C69676E070643656E74657209446174612E506174680A340000000400000000 + 0000000000000000000000010000000000803F00000000010000000000003F00 + 00803F0300000000000000000000000A46696C6C2E436F6C6F720708636C6157 + 686974650748697454657374080B4D617267696E732E546F7005000000000000 + 00C001400A53697A652E576964746805000000000000008002400B53697A652E + 48656967687405000000000000008001401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000005545465 + 787400095374796C654E616D6506047465787405416C69676E0706436C69656E + 740748697454657374080C4D617267696E732E4C656674050000000000000080 + FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E + 732E5269676874050000000000000080FF3F0E4D617267696E732E426F74746F + 6D050000000000000080FF3F0A53697A652E5769647468050000000000000092 + 05400B53697A652E4865696768740500000000000000B803401453697A652E50 + 6C6174666F726D44656661756C74080454657874060454657874165465787453 + 657474696E67732E466F6E74436F6C6F720708636C615768697465000000} end> - Left = 8 - Top = 368 + Left = 64 + Top = 96 end object mainLayout: TLayout Align = Contents - Size.Width = 701.000000000000000000 - Size.Height = 561.000000000000000000 + Size.Width = 1280.000000000000000000 + Size.Height = 640.000000000000000000 Size.PlatformDefault = False TabOrder = 43 object bottomButtonsLayout: TLayout Align = Bottom - Position.Y = 515.000000000000000000 - Size.Width = 701.000000000000000000 - Size.Height = 46.000000000000000000 + Position.Y = 592.000000000000000000 + Size.Width = 1280.000000000000000000 + Size.Height = 48.000000000000000000 Size.PlatformDefault = False object launchButton: TButton Align = Center - ImageIndex = 0 - Size.Width = 127.000000000000000000 + Size.Width = 128.000000000000000000 Size.Height = 30.000000000000000000 Size.PlatformDefault = False StyleLookup = 'launchButtonStyle1' @@ -16981,19 +18526,32 @@ object MainForm: TMainForm Margins.Top = 5.000000000000000000 Margins.Right = 5.000000000000000000 Margins.Bottom = 5.000000000000000000 - Position.X = 102.000000000000000000 + Position.X = 103.000000000000000000 Position.Y = 5.000000000000000000 Size.Width = 20.000000000000000000 Size.Height = 20.000000000000000000 Size.PlatformDefault = False Stroke.Kind = None end + object launchPopupBox: TPopupBox + Align = Left + Enabled = False + Items.Strings = ( + 'Default' + 'Tiled' + 'All at once') + Size.Width = 24.000000000000000000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + TabOrder = 1 + Visible = False + end end object settingsButton: TButton Align = Center StyledSettings = [Family, FontColor] Hint = 'Settings' - Margins.Right = 175.000000000000000000 + Margins.Right = 176.000000000000000000 Size.Width = 30.000000000000000000 Size.Height = 30.000000000000000000 Size.PlatformDefault = False @@ -17001,527 +18559,6 @@ object MainForm: TMainForm ParentShowHint = False ShowHint = False OnClick = settingsButtonClick - object Image1: TImage - MultiResBitmap.Height = 512 - MultiResBitmap.Width = 512 - MultiResBitmap = < - item - Width = 512 - Height = 512 - PNG = { - 89504E470D0A1A0A0000000D4948445200000200000002000806000000F478D4 - FA000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 - 3D8749444154785EED9D07B82C559546311025235144502483620E2862401447 - C43CA0605614C5808E39674505D3987514945141C608E68818C90828418248CE - 599DFFEFAA96FBEE3BF7DEEEBE5D75D25ADFB7BE3A4D78AFBABAABCFAE13F65E - 0600000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000A04A6ED51E01A05F36926B37CDA2B9449ED534010000E070F9 - AF0A3C4A024082DCBA3D0240BF6CD11E4B67DBF6080089C1140040FF2C2BAF95 - B71DBC2A9F75E4454D13005281110080FED954D6D2F91B46010012840000A07F - 6A19FE1F4200009020040000FD43000000D1210000E89F2DDB632D1000002408 - 010040FFD43602E0808705C70089410000D03FB50500ABC88D9B2600A4020100 - 40BF6C28DD21D606D3000089410000D02FB53DFD0F210000480C0200807ED9BC - 3DD60601004062100000F4CB56EDB13608000012830000A05F6A1D01D84C2EDF - 34012005080000FAA5B61C00439CFAB8D6F70E9024040000FDB1AADCA0695609 - D3000009410000D01FB53F0113000024040100407FD43AFF3F84000020210800 - 00FAA3F61180ADDB230024000100407FD49A0468C81DE56A4D130062430000D0 - 1FB507008669008044200000E88765E5A64DB36A08000012810000A01FDCF97B - 2F7CED10000024020100403F30FCDF4000009008040000FD4000D04000009008 - 040000FD401ADC06EF02D8A86902404C080000FA8111805B6014002001080000 - FA8100E01608000012800000A07B3694AB344D1004000009400000D03D3CFD2F - 0901004002100000744FED458066B3992427024064080000BA67ABF6080DCB4B - 0701001011020080EE610A6069980600880C010040F710002C0D010040640800 - 00BA6555B941D3841910000044860000A05BC800188600002032040000DDC20E - 80301B4B72230044840000A05B180108732BB94DD3048018100000740B01C0DC - 300D0010110200806E610A606E08000022420000D01DCBCA4D9B260420000088 - 0801004077B8F327E5EDDC6CDD1E012002040000DD4102A0F9B9BD5CAF690240 - DF100000740701C0C2300D001009020080EEA008D0C210000044820000A03BD8 - 01B03004000091200000E80EA600168600002012040079F13EF946C9CAF2F4D9 - 5092EA76613C4D729BA60989B3BB3C5CDE6EF00A007AE303F25FADBF90CEA50E - E9F27039FCBC707E992A499B15E5C7E4F0F3FAA9240800E889999DFFD02BE41E - 12D2E44572F66786619F28214D3C4573A29CFD99110400F440A8F39FE9C1D235 - E7212D3E2A439F172EED5B24A4858B35BD505E27439F99250800E890853AFFA1 - 67CA074A48871FCAD067854B7B9884747082A62364E8B39A2D410040078CDAF9 - 0FBD49FA498A058269709E0C7D4EB8B4A749488387CA7365E8739A4B82008029 - 326EE73FD35FC93B4B8887A764429F0D86BD597AA119C4C385ABDE29FF21439F - D1421204004C81C574FE43BD40702F0971B8AF0C7D2E38B7F79410073F30FC5A - 863E97712408005804D3E8FC67FA65B9BA847E71F015FA3C706E9F21A17FF694 - 7E60087D26934810003001D3EEFC879E251F24A13FDE25439F05CEED0112FAC3 - 49AABE20439FC5622508001883AE3AFFA19E637DBB6481603F7C43863E079CDB - A324F4C3BDE5E932F4394C4B82008011E8BAF39FE931725309DD728A0C5D7F9C - DBBF49E816A77E7FA5BC51863E83694B1000300F7D76FE43AF94CF94D00D5E4D - ED2D99A16B8FF3BBB6846E585F7E5F86AE7B971204000488D1F9CFF450B98684 - E9B2A50C5D6F5C58EF4187E9B3ABBC5086AE791F120400CC2076E73FF4AF7247 - 09D3C315D342D71A17763F09D3630579A0FCA70C5DEF3E25080010A974FE439D - F8C309403C740D8BE73532749D71613F2D613A7824EA5819BACEB1240880AA49 - ADF39FE96FE4661216C71765E8FAE2C27A912A2C9EE7C96B64E81AC7962000AA - 24E5CE7FE855F2D91226C78154E8DAE2C27A81AAABD0C164784DCFD764E8DAA6 - 24410054450E9DFF4CBF2ED794303EEEC442D71447731309E3F36079B60C5DD3 - 142508802AC8ADF31F7A8E6455F6786C2843D71247F7B11246C7C9BDDE2C9DEC - 2B743D539620008A26D7CE7FA81708BE472E2761611E2E43D71147F7751246E3 - 4EF21732741D739120008A24F7CE7FA6BF939B4B989FFD65E8FAE1E81E265907 - B0304F9297C9D035CC4D8200288A923AFFA15E55ECD5C5700B6BC927CA8FC9D3 - 64E8BAE1F83A2DF097E4DE720309B7E08ED2DB2543D72D670902A0084AECFC67 - 7AB874C757239E6F7D887CAFFCBDF41449E81AE1743D41FABEF2144BCD05ADB6 - 9725D799200880AC29BDF31F7A9EF48F710D786BD57FCA43E42532743DB03F2F - 951E1DF0C8CBCAB2063C25F23279BD0C5D93922408802CA9A5F31FEAF4A2EF93 - CBCBD270E1947DE58F25857DD2F53AF92DE9A982556589AC23BF2343EFBF5409 - 02202B6AEBFC67FA07E9B4A3B9B3AE7CA174A7CFD07E7E5E2BBF2A1F274B094A - 1F29BD1E22F47E4B972000B2A0E6CE7FA81708EE2373C343C8CF903F9239EEA3 - C6B09E26F042B91D648E78DBAD47D75228E213538200481A3AFF253D42A65ED3 - DDF3A9CE9AF639E9D4C7A1F781E5E845739E3FCF65E1AAEB7178DB6DE8BDD428 - 410024099D7F580F59EE2C53633DE924337F96A1F3C6B2F502BA2F4B67B74C35 - CF8047A3084A979620009282CE7F7E3D74E96B94C25CEC03A557F0DF2043E78A - F579B2744E8B95640AAC261D9C84CE151B09022009E8FC47F738B9B5EC1BFFB0 - 3F47FE5186CE0BD15E2CDF29EF2063717F79860C9D1F2E2941004485CE7F7CBD - 3AFB45B28F61D7DB4B174661BF3E8EE38DD2A34477937D711BE92929B6998E27 - 41004481CE7F717E537A4F73176C240F9457CBD0DF8D388A9EBAF242D6FBC82E - 71D5486F370D9D032E2C4100F40A9DFF74BC40EE22A7C516F20BD24F70A1BF0F - 71528F923BCA69B3BBF4D443E8EFC4D12508805EA0F39FAE7ECA3A48AE2027E5 - CED21D3F7BF7B16BDDD17821E9625951BA6854E8EFC0C92408804EA1F3EFCEE3 - E5B6721C3C74FADF9215FDD8B79EC2DA4E4E82BFE727CAD09F8B8B9320003A81 - CEBF7B9DCBFDC572A105824EE2F241E90585A13F07B10F9D22DA8588EE2247C1 - DF6BA797F6F73CF4E7E174240880A942E7DFAFDF95CEC53F1B977EF50FE84532 - F4FF21C6D02350EF97ABCBB9F08E142F280CFDFF387D0902602AD0F9C7F1EFF2 - 317288170B9E2443FF2D620A3A307DBEBCB59C89B30D9E2B43FF0F762741002C - 0A3AFFB87A81A0E7F83D2210FAF78829EA8A980F91CB4A2716A29A643C0902C6 - 20D59CD831F0BC9E5384BA121700C0B8F8A9DF0B55212E7B48A756860570362A - 68B84C7A5BD9C307AF0000C663D5F608F1F8967486451801460096C401D10F65 - 1709400000A03BBC8EC8E99C7D841198BD78A5763C77E7929C570E5E0100400E - 78FEDF05C0E8FCC780006069CE92FB364D0000C8002F1EF6F03F8C016B00C238 - 4BDD96729BC12B0000489553E513A42B2BC218B006606ED6940E0462D60A0700 - 80B971A7EF5A0DBF1DBC82B1600A606E2E957B4BCF2D0100407ABC45D2F94F08 - 5300F373A6F4D69EFB0F5E0100402AFC427AE11F0F6913C214C0C22C2F7F2759 - 0F00009006DEA9E52D7F5EB40D13C214C0C2B8F0C79EED110000E2E39D5A74FE - 8B842980D1F0DE5297A27DE4E0150000C4E250F9C6A6098B812980D1F1B5FA81 - 74A52F0000E89F73A487FE9DBA1D160901C078DC511E27D718BC020080BE70B5 - 50D76AF9F1E0152C1AD6008C87A3CF7D9A260000F4C80192CE7F8AB006607C4E - 929BCAED06AF0000A06B8E952EF3EB7A2D30259802988CD5A5BF90771ABC0200 - 80AEB84EDE4B9E3C780553832980C9B85C3A4B20D1280040B7BC4AD2F9770023 - 008BE3DDF2BF9A2640342E9117B7C7A1374A3F395D2FCD55F2E6A63960B89075 - 59B9B2F4C3C05A01FDEF0162F15DB9AB24DB5F0710002C8EE5E431F2EE835700 - D3C7F927FE229DF4C4A9A97D1C7AAE7467EFD5D15DE154D81BC88DE526AD6EDB - 3B4B0709005D7091F45AAB0B06AF60EA10002C9EADA45305AF38780530197EC2 - 7107EF6DA627B4BAEDCEBFCB0E7EB1B85AE6B6D23FD4D66D97D266E40016CB6E - F2FF9A26740101C07478B13CA869028CC435F237F2E7F2E8D62B64097864CC8B - B65C44CBA55A1F20D79500A3F249F9FCA6095D4100301D7C1DBF27771EBC0258 - 1ACFC57B0FB3BF27BF947EBA9F39275F3A9B4907048F90BE4FD69600214E93F7 - 900E92A1430800A6C7FAD2C3B6CC89C2903F4B77F85EC8F413E9F97C68161CDE - 53EE221F25EF23C94902E626E951236AFC4376EC2E3D978BF5EAFC10AF957795 - 301A0E9A9F2D8F94EE0042D715EBF07512205B3E27435F6C2CD713E51BE4E612 - 16C7EDA5E77E7F243D4512BADE58A6BF928C0441D6AC22BD723BF405C772F4F6 - BB03A557BD4337AC279D67E37419FA0CB01CAF94DE560A903D5EECC4D34B797A - 3BDE4FE59E926D9FFDE1B54A3BC943A41753863E1BCCDB67488062789B0C7DD1 - 313FFD74F241B98584B8AC29F7974E8414FAAC303FBF2A018AC28950BCCF3BF4 - 85C73C3C4F7A08DAC59F202D6E2B9F2A9D842BF4D9611E3A9BA5833A80E2F0DE - E7AB65E88B8FE97ABC74B12727B481F4F1F4C0B7A4A768429F27A6A93FAF8749 - 806279810C7DF9313DDDF17B2B27F931F2647BF94D19FA6C313D0F900045E3CE - 841FA5B43D457A3899F2D865E0C442CE2910FAAC310D9D09737909503CCE83EE - 8A56A11B01E3E9ED9A7B49F61E97C90ED2BB36429F3DC6D365AAB79100D5F01F - 32743360FFBA36BE338EAD20A17C3CADE34A8BA1EF02F6EF7E12A03A3E214337 - 04F6E33FE467A4EB36405D386F83833E077FA1EF06F6A3A76658630355723B79 - AA0CDD18D8AD2EB7EB456250370EFE9CAE9B1D03FD7BB124F886AAB9B7A4E049 - 7FBAC6FE3E92A70E9889B70E9262B85F3D1503503D6F94A11B04A7EB11F20E12 - 2084A705DE2D09C8BBF7D3120084579DBBF255E846C1C5EB1D174F9100A37077 - 4946C1EEF448CBCA12005A5CF98A0549D3F7EBD2F5E501C6C1A9853D32C768C0 - 74F5F5BCAF0480593C5B866E1A1C5F0753BE9E008BE17E9272DED3D3411500CC - C1613274E3E0E8BAE8D25D25C03458557E5E86BE6B38BA9EE624C916C03C78B8 - FA7C19BA81707EBD95EB1DD2951701A6CD93A5779184BE7B38BF2EA1ED694E00 - 58804749F6258FE765D2D91501BA647379920C7D07716E9F250160443E2C4337 - 122EADABF631E40F7DE115EC87CAD0771197D6D39A003006DE93CC93C6C27E59 - B2A508FAC689A4F697EC12985F4F67B20B076002EE296F90A11BAB769DC7FF55 - 1220260F9397CAD077B4763D8DB9B304800979B50CDD5C357BAD7C820448812D - E51932F45DADD90F49C808F2A3A787B7CDFC50EE38780517CADDE4AF07AF2084 - A78FEE243DF47AFBF638D478CA64B853C2096F6E96FEC1BEDCFF403887C225D2 - D7DA477B9EF4424B08B3AEFC3F799FC12B3851BACEC9F583579005040069B2B1 - 3C4E7A3F72CDB872E2AED289596AC71DB7173E6ED7BAC90CDD197581B7C0F949 - F72CE97AFA5EA3E205983E5E276B6725F925597B911B4F5B3A10F2770300A6C0 - D3E5EC21B69A7412913565AD6C26F7969F90BF97EE7043D729861E4138451E22 - 5F2CBD76A5D6842F7EDF1F95A1EB548B2F97003065BE2243375CE9FE48D6B6D2 - DFA33E2F90AE65E06246A1EB92B24EFCF27DF91AB9BDAC6D74F13D32745D4AF7 - 07929164800E58439E2B43375EA97E477A4EBB74FCE4E815E51F907E9A0E5D8B - 9CFD9BFC9C7C92F450790DBC5E86AE45A97AAD08E5B6013AC49D442D5902FDF4 - BB9C2C955BCB074B0F19E7F8943FA9574BE76FF05CF90AB2645E266BB95F9F28 - 01A0630E90A11BB024DD41943A8FEC857A6F97B58DE684F4C2C24FC99257CF3F - 4F961E04787407007A607979820CDD8825E827FFD23A7F6FBBF313D291D2498C - 42EFBB768F95FBCAD56469BC4486DE73097A57CE2A12007AC255EF423763EE7A - CEBFA4617F6FDD74CAD8BFCAD0FBC5A5F502C20F4AE7322889D7C9D0FBCDDD07 - 4800E8092FB471B296D0CD98B35EED5FCA02B13B4A4FD5503E76729D67DF5341 - F790A55062E0FE5409003D71B00CDD8839EBCC7E250C23AE2F0F92D470989E9E - 3F3F423AE151091C2843EF3357CF96B5ECEC0088CAFD64690B8A4E976BCB9C71 - CA5D3FF1BB4E41E83DE2E2F5DA0997E175EEFD9CF13E79670C0CBDC75C7D9304 - 800EF1B6B1DFCAD00D98ABCE37BFA9CC15AF577885749EFCD0FBC3E9EBA9016F - 9D74D0952BDEFEE851AFD0FBCBD16BE44612003AE2993274F3E5AA7F34EE2B73 - C5FBD83D7A117A6FD8BD0EBABCBADE751172C4A35E257D7F9C0A1A003AC04F0C - 25AD24F734C6E3648E781FFF7765E87D61FFBA18D10E32473CFAE551B0D0FBCA - 4DDFD3F7970030655C602374D3E5EAAB656E780AE6A5D299EC42EF09E3E9F501 - 1F913956CC74A759CAA2D19F48009822FE51BB48866EB81CF542AEDCD8461E23 - 43EF07D3F11CF968991BFBC8D0FBC9D147490098126F91A11B2D479DC130A72D - 435EB1ED79E694CAEFE2C27E5CE6B635EDB332F45E72D3191D3D5A06008B641D - E9CC68A11B2D372F977795B9B09E64AE3F5F4F9639251172D5CBDFCBD07BC9CD - 3D24002C92520AFF7881D063642EEC224B599C55B39E5B7745BE5CD8585E2C43 - EF25275D1FC0F52F006042BC4DC85BE54237586E3A056A0E78C8DF39DB6F96A1 - F78179EA94C22BCB1CF01A8612927D3D4702C084BC4B866EACDCFC8DCCE169C0 - 8B2D9D7236F41E307FBDFE249729A80FC9D07BC8498F02E49AA301202A6BC812 - 0AC9B868D1663275EE224F95A1F780E5E875283BCBD471DE8F124A7EEF2D0160 - 4C9C5B3B7443E5E6B365EA781F7649DB2C717E6F94397C2FBDF534F7DD270EAA - 6F230160443C5779A90CDD503979984C9D274AB6F8D5E93BA5D77CA4CC7E3274 - EE39C98E00803178B10CDD4839F977B9964C19FFB896565911C7F38B32E5796A - 07283F90A173CFC51365EA811640123881460905429E2253E6353274DE589F1E - A97255C754F1FA94DC77033D5202C002EC264337504E7E53A68CB72486CE1BEB - D5099F52CE1CB8BF0C9D772E1E290160017E2C4337502E3A6BE18632554A49AC - 84D3D7856C520D02BC90EE773274DEB9B8BD048039F00D12BA7172F2853255DE - 2643E78C38D44FAAA94E07DC5DDE2443E79D835F900030079F97A11B27178F96 - A916017176BFD03923CEF61B32D5C455EF96A173CE41A7655E5F02C02C5697D7 - CAD08D9383AEC77E2F9922256CA5C27E3D44A6B87FDDD92AFF2643E79C836F96 - 00308B7D65E886C9458F5EA4887723B0D50F27F1BD32459E2543E79B83E74AD2 - 0303CCE27819BA6172D0E97E531CDABBAF2CA59812C6711F991A9E66FBAD0C9D - 6F0E3E4E02408B3BAAD08D928BDE539F1A9B4ACAF9E2627555C8C7CAD47890CC - 7564EB3B12005A3E2343374A0E9E295DB82425569314F6C169E951A4ED646A1C - 2A43E79BBA5E2FB4B104A89E55A487D043374A0EEE2553C229470F97A173459C - 5467E7746099122E6D9CEBB640D76100A89EA7CBD00D9283A7C8D4564ABF5E86 - CE1571B17E4BA696D3FEB33274AEA9FB5799EA966180DE700AD2D00D92834F95 - 29E17CE39EB30D9D2BE2347499EE94D8447A7F7DE85C53F7A112A05AD691B90E - E179D7424A11FC7A92457FD8B50E30779429F171193AD7D4F5E80540B5E4BCF7 - 7F77990A1E96F5CAE2D079224EDBB3E51A32155C7BE33A193AD794BD42AE2801 - AAE457327463A4EE1F654A73A164FAC3BEFD8A4C898FC8D079A66EEA65C3013A - C17377B9EEE34D69E5FF3632C7A71FCCDFBD652A38EF85B7D785CE3365532F1D - 0ED0092F95A11B2275CF97A9544BF30E845FCBD0792276EDA5D26B4F52E1EB32 - 749E297BBD4C6D7B65B5B02DA33F766B8FB9F1217963D38CCE8BA5B32802C4C0 - EB000E6A9A49F0BEF69813CBCB47354D803A584BE6B85DCD098B5CB530053C85 - 72B50C9D27629FA614CCBB2477E81C53D6190D21011801E887C7C8144B8D2EC4 - E7E4E54D333A1F93B76B9A0051F9A87446CF1478777BCC098F00782400224300 - D00F3956C372A4EE1FBA14F013D72E4D13203A7790AF6D9AD1F9B674C9DD9C70 - F0F4B0A609312100E81EEF7BDDB96966C5CFA50BECC4C64F0A39CE7542D9BC4C - 7A5A2A369E5AF4485D6EA49457A45A0800BAC7653C576A9A59F1C9F6181B2FFC - 73111480947060FA81A6191D67D8F316E39C60440FAAE0BD72F62298D4BD44A6 - 90B1CBA9939D3D2C748E8829F8109902DF93A1F34BD9AD2444841180EE79447B - CC892F4927DB89CD2BE5AA4D132049522973FBA9F69813394E8D028CCCDA32C7 - EC7FDBCAD8AC2FAF95A1F3434CC947CBD83859576EC5B1BC801122C20840B73C - 5CA6564F7C214E942734CDA878953585432007DE2A63DFE74ED6E5CC8039E12A - 8B6C078C08014077F80721C7852EFFDB1E637247F9DCA609903CF7942924074A - E1DE1D07E7F548ADD47255E4F6749A2A77925B4A0F9D7B61CBD6ED31C7C4359B - CBD39A6634BCED6FFFA6099005AE5171FFA6190D3FD09D2753AA57300A7F9327 - C993671D2F93D0210400E3E127D36147EFA32BD3B9A34F252BD86239566EDF34 - A3E1D4C3E7C89507AF601C2E96FEF1740067CF94CEE478A5F47A0AEB691507A6 - 5E5CE9A22CDECBBE99F4564B7FA7D7953019DEF2FB8BA6190DD72AF0D6D91220 - 30E8180280301B4877ECC30EDE4FF4B6F42A569E777F57D38C869FFC49FC331A - EEF07F247F2C7F22FF24178BCBCC7A6B9B7DA8F4624C188D2364ECAC9F0E427E - D6348B85C0604AD41E00F86967D8C9CFECEC5DF5AB46FC14F8E7A6198565A5FF - FE8D06AF2084B7671E2E0F96474AD784EF0A0F297B8EF6E9F2F19232AEF3E31D - 3F9E428B790FF933F3089A1F626A83C00082783BDE4EF285F2E3D24F4B7E7A0A - 6D4DA9D514D2FE3E4186CE0D9759E62CF922196BBAC953077B49EF12099D1F36 - 7E50C6C6990143E756ABE7CBEFCB03E5F3E40EB2D687BC25286D04C06577870B - F0663ED93B0080F9F1DCE17E4D331A7EA22539C892383073C5373FF1DFE47F10 - 19FF663C56BE5ADECFFF0096C059345D2CE886C1AB383C49E6B6232006D58F18 - E41A00387A9BDDD1FB756EAB5F53C2253A9D4E34165E8CE6A153B6A6365C25DF - 243F2C5DF025459E2ADF2FDDE1C12DEC290F699A51F0425A8F70E658823C0566 - 0706C376718141EA0180E71C879DFB4C6B9CDFEA12CF2B7BF42466FADF77C854 - 4AACC6E62BF2E5D23F44A9E3DD1A6F90AE8EE7351CD02CCAF402CA98B89AA787 - BA617A782A61F66841D681412A0180E735676EAF1B1EBDED0EBAE7BB32663A53 - 3FF59F2D371CBCAA176FD7F31CE5A1835779712FE9C0E52E835775E379675F07 - 6FC38CC5EBE4DB9B26744CB68141DF0180F71F0F9FE887C3F7EEE83796100F3F - BD7DA86946A186AD4B0BF147F91479FAE0559E38B7C07FCBFF1CBCAA1BAF9178 - 4FD38CC2BDE56F9A264422F9C0A0AB00C02B86DDC10F3BFBE13CBD3BFA5CD71D - 948C9FDE7EDF34A3F051E91D1AB5E227FEBD65CC8563D3E425D2B5F26B9E8376 - 40778FA619055F7B278122A1567A143795609C40C48930BC90CB7B93676FC5C0 - 34BD5ADE56C6C23F5417C8D0B9D5A0775F94B8F0D17903BCA624F49E6BD11916 - 63F203193A2F4C53A771F676C5DEA663A7F9C3E315F8DE1EE4B92F5672E7C331 - 32E62A73679CAB35FDECEBA59F969D40A6340E93AE8679C5E0559D3CB93DC6E2 - 97ED11F2C08BDB7DCF6C3778D50374D410FB4762D7F6581BDEDBEF9D0F25E3EF - D623A56B10D4C863DA632C62D72580C42100805FB5C75838FF406D78A15C2D5B - 1E3DC2B4BB74BDFADAF0423C6FAF8D85AF7D97A9A221730800EAC6F34E4737CD - 287851E8164DB31ABE29F795BEF6B570947CA6ACE93D1BFFBE7A042416DE56EA - D4CD00410800EAC6FB9463CED1D6F6F4EFEBED7CFA353E953933DE014DB32A76 - 698FB1F06E048020040075735C7B8CC523DA630D7808DCFBFCBD35AB565E236B - 9B97F6A2AE989CD01E01968200A06E62FF383CB03DD6803BBFDF36CD6AF16E13 - 0741CE535F0BEB4B6F918E050100CC090140DDC4FC71F08FE23A4DB3789C64C9 - A548A14982E23A07351133D0250080392100A89BE3DB630C6A2954E23DFECE72 - C86AEC5BF89274C19C5A88190038C9D6454D1360490800EAE51AE9AC8DB17840 - 7B2C9D4F4972B22F897703EC234B497DBC10B1A7BA8E6D8F004B4000502F67C8 - 9819E862E649EF0BA7C27D73D384599C2A1D1CD580B7BABA105A2C6206FA9030 - 0400F572567B8C816B0FB83854E97C4E7A0816C2381B620DA300FE9D7551B458 - C4BCD721610800EA25E68F828BA4B86264C978C5FB7B9B26CC818B9F7CB66916 - CFDDDA630C080020080140BDC4FC51D8B63D96CC57E4D94D13E6C1A300251643 - 9A4D6F055E021000401002807AF11A8058D410007CA13DC2FCFC55BA046AE96C - D31E6310F35E87842100A817A7A58D854B46978C87B67FD43461043EDF1E4BE6 - CEED31064EBC7455D304B80502807A7127150B17012A19E7BDAF61587B5A1C21 - 63D6A4E8830DE5724D330A31EF77481402803AF13EEC4B9B66144A0F00BED61E - 6134BC5DD255124BC6BFB51B35CD285CD21E01FE0D01409DF8C720D613AA57FF - AFD7348BC425589DFA17C6E387EDB16436698F31201B202C0501409DC47CFA8F - F914D4073F97A4FD1D9F1A028098DFFD98F73C240A01409DC41C0EBC7D7B2C15 - 16FF4DC639F2B4A6592C31BFFB4C01C0521000D449CCE1C0B5DB63A9FCAE3DC2 - F8945E2E39E6779F2900580A02803A89F934B0667B2C95D29F62BBE494F6582A - 31BFFB8C00C0521000D4C9F5ED31066BB5C712F1563672FF4F8E0B04954CCC00 - 20E63D0F89420050273117A9953C02507A07D6357F6A8FA51233F8756D0A8025 - 2000A893ABDB630C6ED51E4B84A7FFC5517AB29A98BFB7D7B447807F4300007D - B36A7B2C9198815509388742C9ACD21E01928000A04EE8A8BAA1F474B65DE3A9 - A96B9B264C99D2832B980002803A89B90660A5F6582204568BA7E4A235314700 - 9CFE1B60090800A06F6ED31E4B840C808BA7E46BC8EF2D24055F48E89B929FF0 - 566B8F303925CF93539217928200A04EE8A8BA61E5F6089353720010B34434DF - 4D580A0200E89B92B723F123BB384A0F4C632E702C79EA0D268400A04E5C9237 - 1625272429BDD051D7945E27E2A6F6188315DA23C0BF2100A893E5DA630C4A1E - 01B86B7B84C9D8BC3D964ACC5D22CBB747807F43005027CBB6C7185CD81E4B64 - 3DB97AD38409D8A23D964ACCEF7ECC7B1E128500A04EA84AD61D9BB547189FD2 - 03804BDB630C4AAFC2091340005027318B92C4FC11EC83BBB547189FEDDB63A9 - C40C7E4BAEC209134200502731175B5DD41E4B65A7F608E3E127D4D203808BDB - 630C4A5F60091340005027319F064AAFF8460030190F91A5FF1EC5FCEE330200 - 4B4100502731E7032F932517CDF142C02D9B268CC1C3DA63C99CD11E63C01A00 - 580A02803AF18AE098ABD5CF6C8FA5F2D8F608A3E1DFA11AAED959ED31064C01 - C0521000D4CBFAED3106A507004F6F8F301A0F971B36CD62F1DA9798393062DE - EF90280400F5B2717B8C41CCA1D03ED85A96BEA06D9AECDD1E4BE62FED3106AE - AFC01A00580A02807A8919009CD21E4B66AFF608F3E3A9A8C735CDA239A93DC6 - 20E6BD0E094300502F317F148E6D8F25F32C4956C085D957AED4348BE684F618 - 030200084200502F317F144E96FF689AC5B2AA74E70673E3A1E99735CDE28919 - 00DCB93D022C010140BDDCA53DC6E03AF9E7A65934FBC9DB354D08E000A996ED - 693103804DDA23C0121000D44BECA7823FB6C7927179E097364D9885B7A5EDDF - 348BE71C193303262300108400A05ED69077689A51F8557B2C9DD74AE66097E6 - 7DB296A7FFD8DFF56DDA23C0121000D4CDB6ED3106BF6C8FA5E3056E07364D68 - 71DADF9A7649FCA23DC6C0EB2C084021080140DDC4AC5C779CBCBA69168FB3DC - D5B0D56D141C10FDB7BCD5E0551DC40C761DE4D774AD610C0800EA66BBF61803 - EF02F875D3AC824FCB8D9A66D57C5C6EDE34ABE04A797CD38C02E5A9614E0800 - EA26E61480F9617BAC0167623B44DE76F0AA4E9E2B6B4B90F4331973CB6BEC7B - 1C128600A06EB690CB37CD281CD51E6BE181F2DD4DB33AEE2B0F6A9A55F19DF6 - 188B98A37C9038040075E3AA80F76C9A51F056C0F39B6635BC42EED334AB6153 - F94DB9C2E0555D1CD91E63B09C8C797F43E21000809F4A63F12FF9FDA659151F - 967B36CDE27195BF1FCB1ACBD1FE49C62C7C750F5963D0052332CD00E0EFF207 - ED11F2E101ED3116DF6A8F35711BF959F998C1AB72719E094FF3945EEA772EBE - D71E631133B887F171B9E863646F85A3BADA1EE268DF734F5E80E224145E89BA - 95ACA1E8476E3843D93A4D330A4E95EBA0B1C694B9374B170DFAE2E05559B824 - F277E51D07AFEAC41D70CC244087C9DD9B2624C65FA5D343BB309AB7445BA747 - FFA7EC8D3EF7877AB4C1F9E76707064E53C954445CBC18F0D4A61985AFC8A734 - CDEAF034C82BE501835765B0A33C5C3ADB64AD9C2D9D83DF9F6F2C2E94354EBD - A4C48DF244E9ADA0C38EDE5E2A417854E0DEF2D9F243D2D3087E2AF58D83FDE8 - A7D098F82925745E35F93999FB08991F285CDDEF7A197A8F35E954C73171AE85 - D07961773AE0F294D77BE5D3A41F72BDD03A5952CE10B59EF44881470C7C217D - F434028B5AA68FF7A7C75C94E6CFD4D3002EA15B335E34F624E92786DC70E1A3 - CFCB5D07AFC00F35BF6B9A51F04E938F354D98329EBA3B4DFA49DE43F87EBAF7 - F1029915B9A588F4E2296F291A4E230CF534426EEF25253C1CE575003113967C - 4A3EA76956CDB5F2F5D23B05FC4393038F973EDF0D06AFE064E9351031F1E25A - 82B1C573B974473FECE47D7480EE51AEEC29A5D35C59FA869BBDBEA0966A63D3 - E07ED22B5063E127A6DF344D105E20F44219B390CC4278ED8893FB3C62F00A86 - 781AC4D399B17072AF4B648D0B6B27C543F8DEB2E9DC24C3C579EEECCF929029 - 7E2279A4F422ABFF917F9037C8D97337B8CC326F95B171A41D3AB75AF58A604F - CFC47E9A9C8D6B1AB8E3E75E5A5A3F193AED734C7696A173C3C6ABA4EB90B828 - 95A74ABC15DA0F915001CEC5EEB5045E75FE0EF97FD2919F7F6C435F965A4CA1 - 308F9F7843E756BB9E9AF196AED859DDFCC4EFFC0574FC73EB802D36EF97A173 - AB51EFC6F074C8DBA5D7D76C26D975D6C2BCF92D7801DACC6984A1B56C657200 - B4BEF44AD658AC2ECF9144E373F35BE9D1ACFF957D7C56FE4C9E289F2E7790FC - 78CECF4EF2274D331AA748076B35C176BB0920005818273219EE42180605BEB9 - 9C67BB349E27BD182F269E3BDDAF69C23CDC24BD65D6B9E6DDE1F887CF4F3CD3 - C081B03BB287C947C99805A372C2C1D97D9A6634B6945E8458320E7CDDB9CF5C - 81EF3C26BE27600C080026C37B3B1D04CC0C0CDCBE93CC1997E77D78D38C86E7 - 97FF226B2E9B3B0917CB5F4A3FFDF9C7709887DEF5E8432B96DDA9AF269DACC6 - 7BC6ADBFD3CE5EB7AE84F1F1B4A2476662F226F9E6A6993DDE05E3EFF2B0931F - 1EB3DB6E972A0400D3C5C3A50E041C10383070829B9C7E4C3DD7ECFCEDB1EB39 - 1C2A9FDC34610AF887D40B9F1C0C78AA6B154980355DCE949E5F8EBD75D34FFF - 1E05C88DA2B7DB419D7891E1EC4529A9EB8578B17115B3DA1765625EBE48C6C6 - 0F1EA1734BD9D7C88D254480053DDDE2B490B991C293B7B76BBA7E3C400E9C2B - 3FD334A392DBA899471C9DAD90BDF650245E2878B50C45BEA93A9C06888D1339 - 310A8039F87C9902A7CBD0F9A5AAD7AC40441801E8166F4DF969D3CC067F27F6 - 6E9A51F17CE0579B2640B278EEDFB91162F320E934E939F1FDF608912000E81E - 6FD5CA0DE7E44FE1BBE1D5CCB9E4C3873A798B4C61FBD973DB634E100040F178 - 574068F82B75636F071CE239C2D0F921C6D6D5FE520894BDFBC845A442E798AA - 5EF5EFE26E10114600BAC75B599C8E32379C142805DE202F6B9A00C9E04ECC45 - 7FBC4E25367BC8159B663638E748CCEAA3200800FAE188F69813BBC9B59B6654 - 5CD5AC94C426500E4EF8F3F3A6199D5482F571C8F1371160221E2A670F81E5E0 - AB640A38698D139C84CE11B16FBDB3C7192B53C065BC43E798B25E1C5D4B8D15 - 8041EA603FC9866E8694F5FEE6546A1E3845AD870C43E789D8A7AF90A9E0AC99 - A1734C5916FF25025300FDE055C2DF6E9A59E17C004F6D9AD1F19E61D7EF0688 - C9EFA50B56A580B7FD3DBE6966C537DA2340353C4186A2E1D47556BE54700E7B - 970B0E9D2762D73A90BFBB4C858364E83C53D68B2653483406D02BB793B96505 - 1CFA48990ABBCAD0392276EDDB652AAC255DE029749E297BB48444600AA03FAE - 91B9AE7CF576A754F054CAC79B26406F78E8FFAD4D3309F6912B37CDAC38B83D - 025447AE4FAF1EB6BBB74C8595A4EBDE87CE1571DA7AE46E73990AEEF82F94A1 - 734D59AFFE4F616B314014BC1BE02219BA3952F7BB3225B69737C8D0B9224ED3 - D4F6D9BF5686CE3375A9F009D593736A5B6FC54B8997CAD079224E4B27FC4989 - D5E4A53274AEA9FB140950353BC8D0CD91833F92A991E33E68CCC393A4779EA4 - 84B36286CE3575AF90B9A52B06983AB792A7C9D04D92833BC994F0EE8A1364E8 - 5C1127D5C56A529AF7376B4A77A4A1F34DDD4F4B480C7601F48F6F86CF34CD2C - F156280731A9E0DD154E86E21F468069E07BF459F2D4C1AB74F82FB96AD3CC8E - 4FB64780EA5957E6BC80ED3F656AB8DE028B02711ABE5AA6C626F27A193ADFD4 - 4D29991840127C4D866E961C7479636FC54B0DEF8D0E9D2FE2A8A63A547D980C - 9D6F0EBE4002C00C7691A19B2517DF2453E45D3274BE880BE91AF5A914BF9A89 - D7DD84CE37079DAD30C78445009DE2F51767CAD04D93839E7B4FA524EA4CBC3E - E14B3274CE887379ACF416BBD4B88D3C4E86CE390729E0053007FBCBD04D938B - A9A6F5F48F66CE43A6D8AFCE2A996A86BADCA7B59CB00B0002AC2E732CE831D3 - 9D658A7828D7D90B43E78C38F42F72439922EBC95C93FED8A32400CC830BDB84 - 6E9E5C3C437A2F7E8A78A1E28F65E8BC115D5AFA2E32559C853074DEB9985215 - 518024D94ABAD84EE806CAC50FC854711070A40C9D37D6AB03576FAD4B95DD64 - E8BC73D1591453CA1702902CDF93A19B28176F9629550B9CCDF2F21B3274EE58 - 9F9EF3BF834C1527FB395786CE3D179F2B0160043C5416BA8972D22B955DED30 - 557C6E87C8D0B9633D3A29CD3A3265722E1866CF972B48001891DFC9D0CD9493 - EF9029E3AD9707C8D0B963F97A515A8A5BFD66E245B5B94F093A6531008CC1EE - 327433E5A4A7027694A9F322E9730DBD072C53D7DF487984CA782BA29F9E43E7 - 9F8B174B12FF008C8917CC1C2F4337554E9E25BDBD31751E2373DF82890BEBA7 - E9D7C91C384286DE434EE672AD0192C345764237556E7AAE3D07B695A7CBD07B - C0FC7585488FACE54009752C2E93A94FB100248B33D8B90469E8E6CACDA7CB1C - F068C53765E83D60BE9E2C53ABE73F175B48A7D60EBD8F9C7CB3048045B0B70C - DD5CB979B5DC5AE680A75F5CDCE81F32F45E302F9D402797796827D13A5186DE - 474E5E2ED79000B0083C0AE0241AA19B2C373D9A91D390A01730BAD471E8BD60 - FA3AE8CC6DFFF9A132F45E7293B97F802951C28E80A14EC0935346304F0994F2 - A35C93DE469BCB90FF9097C9D07BC94DEF5C70C64D009802EE307F2D43375B8E - BE5EE6C65E32E7422CB578937CA74C7D8BDF6C1E2C7DEEA1F7949B5EC0080053 - 642719BAD972D47BEE732C0CE26A6CB9176429D9DFCABBCBDC70F5C10B64E83D - E5A677D1E4167C01644149E56CBD48C8DBEE72C4855972CFCD5E925E31FF0A79 - 5B991B5E135342BE8FA14F9100D001EE304BCA58E7F2ABA9D65E5F08AF2A77AA - E31B64E8BD61F73AA98F734C6C2473C40B7C732FFC35D3A32515FF003A24F7C2 - 20B3F5D38FB73EE5CAA6F230197A6FD89D2EE2B383CC9992EE650763F79300D0 - 216BC9D216A339E5A99F8672E621F29732F4FE707ABA6EBF7363B89053CEBC5A - 86DE5FAEFE8F04801E78890CDD8439FB2959C2F0E1AEB2844A8EA9E9E9A2E7CB - E564EE382B66EE15FE66EA1A1A779000D0035EEC5442B6B0D97E4896800319E7 - 6E384686DE278EEE5FE4BE727959028F97A5559ECC715B2F40D6BC4D866EC6DC - F5FB2A8907494F719056783C7F239F24739F1A9AC92EB2C445A39B4900E88952 - 8A85CCA5E7474BC359E93E282F91A1F78CCB2C73BDF4AA7EAFA7280DA7952EF5 - 9EFDA92C2950034816CF81FE51866EC492F43A8712F150F61EF2C7B2A479E0C5 - E85A174E83BBA62C91FB4BE7BD08BDF7527C8304808E799F0CDD80A5E9CEF155 - B26436911EEDA821A09BED59D2DFE57BC992718ADF2B64E81A94A4D7353C4002 - 40473C4CD6F6D4F81659039E477505352F1C2C75BDC029F200E927E21A12C678 - CEBFE4A9BAD93AA873F12C009832DEFF7F9E0CDD78A5FB7E595386B1B5E59EF2 - 4BF26F32744D72F04AE9EA8F2F901BCB9AF02E901AB344BA7226004C99DAB3CD - 7D5CE69EFC6552EE229DFCE693F26499EA0881F7EA7F59BE58BA284FAD0BC39E - 264BDBEA378ECF929021E4714E93E7C94F34CDAA395CFAC9F8BAC1AB7A71EAE4 - ADE5DDE476721BE920C1C958FA08922E94674AE7A238A1F538E91D0EB5E3351D - 2E475CF36FA9A73DEE294F1DBC826C2000480F6F1FFBBDCC395FFE34F1FEF0FF - 90EE846049BC43C48571BCB8F08ED25309B76FF514920B18AD2A8DBF4FC3AC7A - 5E57E2856AE65A79B5BC58BA431FEAA77B77FA9EE7F50F3C2C8993737D543A58 - 876661AB6B03DC3878050063E31F68D2CA2EADF3C13B1702400AAC224B2AD53D - 2D3F20016042DE2D4337163605914A4C180379E172D6C7CAD077B4763DB2E49D - 100030263B49D2C7CEAF87174B4D1804E9E3EC7E17C8D077131B7D7DD6930030 - 22CE88E639D7D00D854B7BB05C4902F4C5CBE54D32F47DC425FD9E647D19C088 - 7C55866E249C5BAF42DF5402748917527E4586BE8338B7AF9000B000CF96A11B - 0817F632F95809D0055BCA12CB70F7A19322DD4302C01CDC555E254337108EA6 - 171E7D4C322500D3C4D90C6B4AEBDB85CE0BE011140098C5B2D27BDC43370E8E - AF33E66D2F01168373291C2143DF311CDFCF4A009885B387856E189C5CD797DF - 5FD69A421816C7CEF27C19FA6EE1E43E5502408BB713D59C3BBC6B7F225D6D0F - 60149C2DD1D348B555DEECCBCB656DC5A10082AC21CF96A11B05A7A753DCBE46 - 3A652BC05CEC26CF95A1EF104ECF5F49EE45A81EB614F5ABB3B6DD4B02CCC4C9 - 6AD87EDBAF6F9300D5F20C19BA31B05B9DC0C579CA579750377E0A7DA1746AE9 - D07705BBD3D39EA4F3862A71F9D62B65E8C6C07EBC48BA7A1B8B04EBC49DCF1F - 64E8BB81FDE88CA7CE7C0A500D7EEAF8B50CDD10D8BFEE047812A907678C3C4C - 86BE0BD8BF874B806A78BB0CDD081857770A9B4B28133F69BE4B3A2B5DE8F3C7 - 783AD11240F13C48B2E52F5DFDD97C41DE594219AC26DF2CAF90A1CF1CE3EB2C - 8B5B4B8062F1A2B3B364E806C0B474A9E14FCA8D24E489D3CEBE565E22439F31 - A6E5F1720509502487C8D0171FD3D5C3C59F904C0DE48387FADDF15F28439F29 - A6EB472440713C5D86BEF09887FF90CE09EF291C48134FDB1C24AF96A1CF10D3 - D7D917FF430214837F98987F2CC763E4932499CCD2E0BEF27F256B6BCAF062B9 - 8104C89EDB48A7BD0C7DD1316FCF93EF90CEE900FDE2857DFB4A67760C7D3698 - B73F94E4E780EC798B0C7DC1B11C3D3DF07DF964B9BC84EEF0148C7769B8B643 - E8B3C0727CB5841EB9557B84E9F000F933E95100A803A794FDBA3C54BA0AA183 - 03581CDBCAA748075877F53F802A70CA6E077C9E72831E2000981E2E297A9CA4 - EC65BDFC5D0E83815F482F7082D1D84A7A9D853B7DB7A14ECE90DB4BA74D878E - 2100981E5F927B364D804130F05DF93DE9E9028F14C02D78FFF783E52EF25172 - 0B09600E964F6B9AD0250400D3610FE92F2D40084F0BFC463A203852BA168157 - B0D786732B3C42BAC3772D8695244088BDE4179B26740501C0E2F190BF57267B - 9532C028380DEA6FA5D78B1C2DBD6BA4B421CF65E5BDA4D7C53C50EE20D79600 - A37095BC87FCF3E015740201C0E2F0623F2FFCF28F1BC0A47884E024E940F204 - E9B5243E5E2073C0EB5FB6915EBC7737B99DF48FF78A1260521C24FBB7D569BA - A103080016C71BA5B7FD0174C145D2F9D24F97AE2961CF6CF5BFEB9355A447BB - AC135D6D229D0FC1055DDC06E882F748B607760401C0E4DC4FFE5C921D0E62E0 - 698473A40BDFCCD4F9F09D85F272E9BDD57E7AF27F6B3CACEAB5076B0C5E3539 - 0C86F3F07E8AB76BB57AB8DEC7DBCBF5DB3640DFF83BBCB3FCC1E0154C150280 - C9F0D390876B29210B00D02D7F939E5AEA7BD4AB7848BD3819AE6045E70F00D0 - 3D1E81FAACE48175CA90B16E7C9CA1EC6D4D1300007A6033E9292E6FA7852941 - 44351E77921EFA5F7DF00A0000FAE206E94A90DE250353802980D1F168898B92 - D0F90300F48F17AD7E5992406A4A3005303AAF95CF6A9A00001001EF4EF1CE94 - 6F0D5EC1A2600A6034EE235DDCC5D9CD0000202E4F942EBC058B800060615696 - 7F949B0E5E0100406C2E9377977F1DBC8289600DC0C27C58D2F90300A4839359 - B95810D3D88B808B373FAE4FFE8EA609000009E15D59AEA3F1D3C12B181BA600 - E6E68ED2DB4D8669530100202D1C00EC287F39780563C11440188F8CFC8FA4F3 - 07004817FF561F2CD99E3D010400615E291FD234010020613C15F089A609E3C0 - 1A80A5B9B764710900403EB82CF579F20F83573012AC015892DB497F819C771A - 0000F2C165AFEF25FF3478050BC214C0921C28E9FC0100F2C30F7087C8E506AF - 604118E6BE85C7CB77374D0000C810970E5E451E397805F3C208C02DECD51E01 - 00205F9CBFC5A301B0000400B7B0A7FC59D384485C2DF90C2037AE93AF979BCB - 1FFA1F4034CE970F955E0F0030168E1A9D55EA5FD8BB47CB61CAE55DE44932F4 - DF21A6A4E79C379243FC50B5BFBC5E86FE7BEC4EEF02600D172C0A82807EBD49 - BE49DE56CEC40B795E215DF423F4FF21C6D4BB85E6CB15723779A20CFDBF387D - E9FC616A1004F4E3E9F27E723E5CFBFB23F20619FA3310FBD4D5E79E2547993E - 5D411E24FF29437F164E473A7F983A0401DDFA49E952CBA3B289FCBCF48841E8 - CF43ECD24BA53384AE28C76567E9B9E9D09F8B8B93CE1F3A832060FA5E287793 - 93E28556874A170109FDF988D3F45AE9EDC18BCD35EF91ACC365E8EFC0C9A4F3 - 87CE2108989EDF96EBCA69B09DFCBA2410C02EF42AF20FCA0DE434798EBC4A86 - FE4E1C5D3A7FE80D8280C5E91FD317CA2E524F7B44E033923502380DDD39BF4F - AE23BBC2BB5D8E91A1BF1F1796CE1F7A872060327F27B7905D7307F97E79A50C - 9D07E27C5E2EDF21D7927DE05D2F6F91AC69194F3A7F880641C0E8DE2CFD83BA - ACEC13CFD57A1FF65F64E8BC1067EAEFC94BA5D3C7C6E00192EFEA68D2F94374 - 080216F60CF94019136FD3DA557E4FB24E0067FB4BE994B129D44371F0F15919 - 3A4F6CA4F387642008985B6FD55B55A6C45DA517745D2243E78C75E815FD5F90 - 0BE59E88C51325DFD1A5A5F387E420085852FF70F9072C6596977EEAF36E044F - 5184DE0796A7D34AEF27D790A9E35D07DF97A1F751A374FE902C04018D47C969 - 6F97EA1A9FEFCBE4F132F49E306FBD9ADF4FFB3BC8DCF06E99974B17190ABDB7 - 5AA4F387E4A93908F00F949FACBAD8DED727DBCAB7CA5365E87D621E7A45BD47 - 775CD9D3F765EEF87B596B804AE70FD950631070ACDC5A96C6DDA5772FFC5986 - DE37A6A5F3ECBB92E48B65977BF763E17A021F9035D513A0F387ECA82508F08A - FAF74ACFA797CE56F2BFE4CF256B06D2F146E969A77D646E534F93F270E98E31 - 743D4A92CE1FB2A5F420E06CB993AC112788799AFC8ABC5886AE0F76A7CB427F - 557A787FB179F973C5DFC1AFC9D0F529413A7FC89E5283808365AD3FBCB3718E - 817BC857C923A5531D87AE194EAEE7F3BD57FF8DF2FE3285FDFAA9F04C595AC6 - CB73259D3F14414941809FBCF69030379E0E79A40C5D3F1CDFD7CAD524CCCD5D - E4AF64E8FAE5269D3F14470941C08FE4461246A38639DA3EDC58C2C2B89E8047 - 4872AE2740E70FC5926B1070BD7CA5F450378C0E095C16AF479C603C9CD9F074 - 19BA9E294BE70FC5935B1070A2BC9B84F1395086AE298EEE4F248CCFCAF2D332 - 744D5394CE1FAA218720C0FB8C3F24BDEF1826E37932746D71741D44C1E4EC2E - 2F92A16B9B8A74FE501D2907019EBB7E8484C5E1B4B3A1EB8BA3FB6C098B637D - E9DD29A1EB1B5B3A7FA896148300EFAD5E53C2E271B199D035C6D1BDA784C5E3 - F4DC2F9129D513A0F387EA492508B842EE2D61BAB0136072BD9A7D4509D3C3E9 - BA8F93A1EBDDA774FE002DB183805F48B65A75033B0126D7657B61FA384FC5FB - A4D37887AE7BD7D2F903CC224610E01CEA4EB24256B5EE6027C0E43ADB2474C7 - C3E4393274EDBB92CE1F600EFA0C024E91CCAF760F3B0126D7A995A15BBCDEE7 - 5019BAFED396CE1F6001BA0E02BCBDEFA3722509DDC34E80C9DD45423F78FD8F - D701853E876948E70F30225D050117C8474BE80F76024CEE7A12FA6313E9F540 - A1CF6231D2F9038CC9B483806FC8B525F40F3B01C6F7EF12FAC7EB815E2FA755 - 4F80CE1F6042A611045C259F2B211EEC0418DFA324C4E3DEF25419FA6C4695CE - 1F60912C2608385A6E2A212EEC0418DFF74A888B7F7B3E29439FCF42D2F9034C - 897183000FDFBD59BA3C28C4879D00E3FB340969F05879A10C7D4E21E9FC01A6 - CCA84180CB80BA1C28A4033B01C6775B09E9E00599DF91A1CF6AA674FE001DB1 - 5010E0E13A970185B46027C0785E2F19BD4A0FD7137891BC56863E373A7F808E - 0905011E9EDB4D42BAB0136074FF20215DB692FE8C667E6674FE003D313308F8 - B65C5742DAB01360743F27216D9693EF91AE2740E70FD0330E02F6901E9683F4 - 6127C0E8EE27210F769274FE0000F3C04E80D175A702003D73EBF60800D3E5E4 - F6080BE37AF500D033040000DD406DFBD17079DA4B9B2600F409010040375C26 - CF6F9A300F3CFD0344820000A03B9806581802008048100000740701C0C21000 - 0044820000A03B5807B03004000091200000E80E4600E6E71AF9E7A609007D43 - 0000D01D8C00CCCF09F29F4D1300FA860000A03BD809303FC7B7470088000100 - 40B7300D3037C7B647008800010040B71000CC0D0B000122420000D02DAC0308 - E3B97FAF01008048100000740B230061CE9057354D008801010040B730021086 - E17F80C8100000740B3B01C2B003002032040000DDC334C0D2B0030020320400 - 00DD4300B0348C000044860000A07B5807B02497CBB39A2600C4820000A07B18 - 0158121600022400010040F73002B02404000009400000D03DEC045812E6FF01 - 12800000A01F9806B80576000024000100403F300DD070B32418024800020080 - 7EA0D36B384D5ED734012026040000FD4000D0C0F03F4022100000F40353000D - EC000048040200807E602740033B000012810000A03F9806600A002019080000 - FAA3F669800BE5054D130062430000D01FB58F0030FF0F9010040000FD410000 - 00C9400000D01FB54F0110000024040100407FD4BE138000002021080000FAA5 - D669801BE4294D130052800000A05F6A9D0670E0E33A00009008040000FD52EB - 0800C3FF0089410000D02F0400009004040000FD52EB140001004062DCAA3D02 - 407F9C2737689AD5B096BCB46902400A300200D03FB54D039C23E9FC01128300 - 00A07F6A9B0660F81F2041080000FAA7B6110002008004210000E81F02000088 - 0E010040FF30050000D1611700401C6AD909708D5C55FE73F00A009281110080 - 38D4320D7082A4F3074810460000E2F028B95DD32C1A073ADF6C9A0000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000DCB2CF3FF06FB5A956F238E1F0000000049454E44AE426082} - FileName = 'E:\AErender CC 2018\icons8-settings-512.png' - end> - Align = Client - HitTest = False - MarginWrapMode = Fit - Margins.Left = 2.000000000000000000 - Margins.Top = 2.000000000000000000 - Margins.Right = 2.000000000000000000 - Margins.Bottom = 2.000000000000000000 - Size.Width = 26.000000000000000000 - Size.Height = 26.000000000000000000 - Size.PlatformDefault = False - Visible = False - WrapMode = Place - object settingsIconFill: TFillRGBEffect - Color = claWhite - end - end object SettingsIcon: TPath Align = Client Data.Path = { @@ -17592,336 +18629,11 @@ object MainForm: TMainForm end object infoButton: TButton Align = Center - Margins.Left = 175.000000000000000000 + Margins.Left = 176.000000000000000000 Size.Width = 30.000000000000000000 Size.Height = 30.000000000000000000 Size.PlatformDefault = False OnClick = infoButtonClick - object Image2: TImage - MultiResBitmap.Height = 512 - MultiResBitmap.Width = 512 - MultiResBitmap = < - item - Width = 512 - Height = 512 - PNG = { - 89504E470D0A1A0A0000000D4948445200000200000002000806000000F478D4 - FA000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 - 251A49444154785EEDDD09F86E555D2F700C5054440514079CD13015E7141145 - 51C129A7D44AADAE6975337BEE2D6FE3CDA6A7ECA64D5A6966A537B3D4343415 - 714264709ED112F42A084E80CC20F3FDFEF67E8F1CE07FCEF90FEFFBFEF7DAFB - F3799EEFB3D7FA53729EC3FFDDEBF7AEBDD6DA3B010000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000003030D79B5D8171D835D97DAB6BB97172FDBEB9D3CD92FADC6F - FDCF2F482E4BAE4ACEA91FC4A5C9857DF3FBFF7CCB15180105000CDB0D923B24 - B74DF6DE2A7B5D2B5B7EBE47B248E72567CE72D62CD76E574E4F4E492E498001 - 5200C0E6AA6FE2B74BEEB855EEB4556E9DB4FA39AD19856F245F9DE56BD7CAD7 - 13330AB0491400B01CBB24774BEE95DC7B76BD675283FFCEC9145D9E54117062 - F2F9E4B3B3EBC949FD3360811400307FFB2407CC52037DE51E494DE7B363DF4B - BE987C2EA982A0AE95EF24C09C28006063EA9B7D7DA37F487260F2D0A4BED533 - 7FA726C7271F4E8E4DAA38B82201D64101006B7393E4A0A406FB1AF41F34FB19 - CB777EF2D1E484A40A826AD7CF80555000C0F6DD283924393C795852CFEDA7FA - CC7EE86A36A0D6137C287977F2C1E4A20458810200AE6BFFE4B1C996417FB784 - F6D45A822A06DE99BC2BF97202CC2800A0FF96FFA864CBA05F5BF1189F2A006A - 66E0C8C4EC0093A70060AAF64C9E923C3D7978E25BFEB4D4EC4015016F4E8E48 - BE9BC0A4280098923A06F7C9C9339343933A8407EA30A2F7266F4CDE969C9BC0 - E8290018BB3A1AF749C933924727F6E2B33D7574F17B922A06DE9ED85500D090 - 1AE46B6AFFDF938B933A925664ADA935026F4DEA7769CBCB940018A05ABDFFA7 - 499D18B7D20D5D64BDF976F2D2A47EC70018801B26CF496ABBD74A376E9179E6 - CAE498E4D949FDEE01B06475CEFE2B92B393956ED4228B4EED1C787952EF7A00 - 6081EA396C7DF3FA48B2D20D5964B352EF27A8DF4D3B4B00E6A8B6EFFD5A727A - B2D2CD576428A91716BD28A9DF5900D6E90EC99F27E7252BDD6C45869AFA9DAD - DFDDFA1D0660951E98FC4B5207B4AC7473156925F53B5CBFCBF74F0058411D4A - F584C46A7E196B3E903C2E0160E6B0E463C94A374D91B1A516B1D6A9940093F5 - 88E4B864A59BA4C8D8736C522FA202988C83929A0E5DE9A62832B5D48B881E92 - 008C562DEEABF7B1AF741314997ADE993C2001188DBB27F566B5956E7A227275 - EAA8E1B724FB2500CDAAC3505E96D42B5657BAD989C8CAA9CF4C7D761C280434 - 6597E417923392956E6E22B2BAD467E867931F480006ED90E4C464A59B9988AC - 2F9F4AEAB3053038F5CCF2ADC94A372F11994FEA33769704366CE7D915D6EB46 - C91F26FF37B967FD0058985A50FBFC64B7A40E14BA3C8175A9E35761BDEA34B3 - 572577EE7AC0327D39A962E0835D0FD6C8C212D663CFE41F93A312833F6C8E7A - EC56076ABD26B15B80353303C05A3D33F9CB649FAE070CC1B7925F4CEA0C0158 - 150500ABB56FF2D7C98F743D60888E485E907CA3EBC1765804C88ED463A29F4F - FE3D39A07E000CD6FEC9F392B393DA3A08DB640680EDB95DF2BAA4DEDA07B4E5 - FDC94F27A7753DB8168B00D99667249F4D0CFED0A64393FA0C3FB5EBC1B52800 - B8B63D92D7266F4C6E5E3F009A553B766A6160ED14D8BD7E005B7804C0D61E9C - BC3E71D2188C4F9D1BF0ACE4635D8FC9B30890522FEFF9DF497DF3DFBB7E008C - 4ECD06FCB7E48AE484A48E1666C2CC005007F9FC53F290AE074CC1B1C9739253 - BA1E93A40098B6DAD35F67F8DFB4EB0153724EF2ECE49D5D8FC9F108609A6AF1 - E7EF277F93D44B4580E9A9CFFE8F25F545B066043C1298183300D3B357520BFD - 0EEF7A00FD2C40CD06D4AC0013A1009896FB24F53EF13B753D80AB7D25795A52 - 67073001CE01988E9F4C6AE5AFC11F58496DFFAD7BC44F743D46CF1A80F1DB35 - 7979F247B336C0B6D43DA266016ACB601D257C65C2487904306EB748EAED60B6 - F8016B550B03EB18E133BB1EA3A30018AFBB25EF4A9CEA07ACD7C9C9E3675746 - C61A80717A58F2E1C4E00F6CC45D935A177050D763541400E3530B78DE93D433 - 3C808DAAE3C1DF97D41B4219118B00C7E5B792BF4AEA6C7F8079A97BCA8F2697 - 24C7D50F689F02601C6AE5EEDF25BF9258D7012C42DD5B1E95DC363932B143A0 - 71068BF6D539FEFF96D4071360198E4A9E9E9CDFF5689202A06DB74CEA835827 - FC012CD3A792C312DB041BA50068D76D923AA863FFAE07B07C5F4C6AF6F19B5D - 8FA62800DA74C7E40389637D81CDF6E5A48A8053BA1ECDB00DB03D3F987C2831 - F80343B05F52F7A43A7C8C86980168CBBD92F726FB743D80E1F856F2E8E4C4AE - C7E0990168C703920F26067F60886E95D43DEAFE5D8FC15300B4E1A1492DF873 - BA1F30647B2575AFAA7B1603E711C0F0D507A9B6FADDA8EB010CDF85496D113C - BEEB31480A80617B6052CFFCEBB01F80969C9BD4EE804F743D064701305CB5E0 - EFE8A4A6D4005A74467268F2F9AEC7A0280086A9B6D31C9BD4497F002DABDD01 - 0727755E0003A200189EDADF5F7B6AF7ED7A00ED3B2D392839B5EB310876010C - 4B0DFAF5CCDFE00F8C49DDD36A77401D61CE40280086E316C97B92BB743D8071 - A91303EB1E57F73A064001300CB5CABFBEF9DFBDEB018CD33D92772776360D80 - 0260F35D3F796B72EFAE07306EF74BDE94ECDCF5D834FE036CBE57274FED9B00 - 93508F3AEB51C03BBB1E9B4201B0B97E3DF95F7D136052EAA0B34B92E3BA1E4B - A700D83CCF4AFE3AB1151398AA3A24A8CE077050D02630F86C8E47264726F5FC - 1F60CA2E4E1E917CB4EBB1340A80E5ABAD302724B6C200F4EAC8E087244E0B5C - 2205C072D5A05F837F1501005CAD06FF2A02AA1860096C035C9E9AEE3F2231F8 - 035C57DD1BDF92ECDAF558388B0097E72F93A7F54D00567087E426C9515D8F85 - 52002CC74F267FD43701D88E0727272776062C9835008B77DFA4F6B9DEA8EB01 - B023172507269FEB7A2C840260B1F64C3E91D42B7E0158BD5A14F880E4DCAEC7 - DC5904B838F578E59F13833FC0DAD5A2C03724BEA82E8835008BF3FBC973FB26 - 00EB70D7E4AAE498AEC75CA9AC16E34792DAF2E7EF176063AE4C9E90D4E9A9CC - 91016AFE6ACAFFD389F75D03CCC7D9492DA83EA5EB3117D600CCD796E7FE067F - 80F9B979F2BAC463EB39F297395FBF9D3CA76F023047774CEAF5C1C7763D36CC - 2380F9A93DAB1F4A76E97A00CCDB65C941C9C7BB1E1BA200988F3ABAF233C99D - BB1E008B52A704DE2FB9A0EBB16E1E01CCC7DF26F53E6B00166BAF649FE4ED5D - 8F753303B071CF48DED8370158927AB9DA5BFB26EBA100D898DB259F4D6A852A - 00CBF3DDE480E4F4AEC79AD906B87E553CD5B614833FC0F2D5BB56EA1EEC8BEC - 3A5903B07EFF3DF9C5BE09C026A885D7DF483ED9F5581395D3FAEC9B7C21D9A3 - EB01B059EA6D813F945421C01A7804B03E7F9D18FC01365F9DBCFA8ABEC95A28 - 00D6AE56FDD7CB7E001886A7CEC21A7804B036B5E8E48B49ED41056038EA11C0 - 3D9273BA1E3B6411E0DAD4D4FF43FB2600035227B2D62141FFD1F5D8213300AB - F7E8E4A8C4DF19C0305D953C32F960D763BB0C66AB73E3E47389B3FE0186EDA4 - E4DEC9F7BA1EDBE411C0EAFC41F2C4BE09C080D563809A0938BAEBB14D660076 - 6CBFE4C4E4065D0F80A1AB6FFF774FBED6F558916D803BF6D2C4E00FD08EDD92 - 3FE99B6C8B1980ED3B34795FDF04A0310F4F3ED437B93605C0B6D5FA88CF24F7 - EC7A305C5724C726C727DF4CBE932CC22D935B2707270725D61031749F4E1E90 - 5CD9F56095EA653FB5904464A8B928F9C364EF64D96E91BC24A93FC34A7F3691 - A1E479092B3003B0B29B25B595A46E723044F5CDE6C9C9A95D6FF3DC29796B72 - 9FAE07C3F3EDE46EC9795D8FEFB3087065BF9318FC19AA0F24350DBFD9837FF9 - 6A52A763D69F0986A88E6EFFEDBEC9D6CC005CD7FE491DFAB36BD78361F952F2 - A0A45E813A24F546B64F24B56D1686E692E45EC9C95D8F8E1980EBFAE3C4E0CF - 10D5F3CC9F4E8636F897FA33FD54DF84C1A9ADDC756F672B0A806BFAE1C4AB7E - 19AA23928FF4CD413A21A93F230CD15392FBF54D8A02E09A7E2FF15884A1FAFB - D975C85AF833324D756FAF7B3C3306BBABD5BEE6E3FA260CCE85496DF71BFA0B - 4E6E989C91D40BB460880E4C863C93B6346600AE562FFC81A1FA72D2C2DBCD2E - 4EBED2376190CC02CC28007A8F980586EA5BB36B0BEA344218AAC7240FEB9BD3 - A600E8F9F6CFD09D35BBB6A0A53F2BD3F4FBB3EBA4290076DAE9F0A49EFF0330 - 0DF592A047F5CDE99A7A01605528C0344D7E1660EA05C0E393DAFB0FC0B4D46E - 80C3FAE6344DBD00F895D91580E9F9F5D97592A65C003C3039A46F0230413506 - DCB76F4ECF940B8017CDAE004CD764C782A91600B74F9EDA370198B067243526 - 4CCE540B805F4E76E99B004C588D052FEC9BD332C502E066C9CFF44D00D8E9E7 - 921A1B26658A05C0F392DDFB2600EC7493A4C68649995A0170FDE47FF64D00F8 - BE7A0C5063C4644CAD00F8B1E4367D1300BEAF1602D6183119532B007E617605 - 806B9BD41831A502E080E4417D1300AEA3C6887BF5CDF19B5201F0FCD91500B6 - 65328B01A75200DC307976DF04806DAAB1A2C68CD19B4A01F0A3C9E4F67802B0 - 667B26933829762A0580E97F00566B1263C6140A80FD9383FB2600ECD0C392BB - F5CDF19A420130B9D39D00D890EB25A31F3BC65E00D4A94E3FD537A1692D2D4A - 9AC4022A46AFC68E519F0C38F602E0C9C9DE7D139A76DBD9B5052DFD59615B6E - 993CA16F8ED3D80B801F9F5DA175754C694D4B0E5DFD19EFD437A1793F31BB8E - 520B3794F5DA23F976B25BD783F6DD3FF954DF1CACFB259FEC9BD0BC8B937D92 - F3BBDEC88C7906E04712833F63F2F4D975C89E39BBC218D47A9627F6CDF11973 - 01E046C4D8FC6252DF4686EAD6C90BFA268CC63366D7D1196B0150A7FE3DA66F - C268EC9EFC65DF1C9C7A9CF817C98DBB1E8CC7E1493D521E9DB11600B5FA7FD4 - DB3798AC9AD9FAF5BE3928F5671AED372526ED06498D29A3B3F3EC3A367F94DC - B56FC2E81C9AD4FA96A393ABEA079BA8BE44BC24797132E645C54C5B7DA17C43 - DF1C8F317E60F74ABE99ECDAF560BC8E495E947CA2EB2DDF03939725756C2A8C - D9A5C9AD92B3BBDE488CF111404DD518FC998287271F4BDE97D402C1FB248B5C - 2458FFDBF5EFF8A5A4FE9D1F4D0CFE4C41CD003CA56F8EC7186700DE9D1CD637 - 01602E6A6C796CDF1C87B11500B54AFACCA4166D00C0BC7C2FD933A9C3814661 - 6C8F006A4AD4E00FC0BCD5C2DB47F6CD71185B01F0F8D91500E66D548F97C7F6 - 08E02BC99DFB2600CC558D31FBF5CDF68D690660FFC4E00FC0A2DC6596511853 - 0160E53F008BF6B8D9B579632A0046F31F0580C11ACD97CDB1AC01A857367E37 - F1FA5F0016A9B601D676C0DA16D8B4B1CC00D4D60C833F008B565F38477102E6 - 580A807A5D23002CC3284E041C4B0170F0EC0A008B368A31670C6B006E9A9C95 - 8CF5D5C6000CCBE5C9CD930BBA5EA3C63003F0A0C4E00FC0B2EC92D4D8D3B431 - 140007CDAE00B02CCD8F3D0A000058BBE6C79ED6D700D4D4FF3949BD06180096 - E5BCA4CE03B8A2EB35A8F51980FB24067F00966D8FE45E7DB34DAD170007CEAE - 00B06C4D3F0668BD00F0FC1F80CDA200D8440A0000364BD36350CB8B006F957C - B36F02C0A6B8657246DF6C4BCB33004D2FBE0060140E985D9BA3000080F5BBF7 - ECDA1C050000AC5FB36351CB0540B3D32E008C46B30540AB8B00EB450CF516A6 - 1B743D00D81C172737499A3B11B0D51980BB25067F0036DB0D93FDFA665B5A2D - 003CFF0760289A5C08A80000808D69724D5AAB05800580000C45935F4A150000 - B031F79C5D9BD2E22E805D935A75B973D70380CD7579528B01EBDA8C1667006E - 9718FC01188ADA9ABE6FDF6C478B05C01D675700188AE6C6A6160B803BCDAE00 - 30140A8025300300C0D034F7E5540100001B670660091400000C8D0260091400 - 000C4D738F005A3B07A05E007451D262E102C0785D99D459009776BD06B43690 - D6B77F833F00435363D3EDFB661B5A9B017864F2FEBE09ACC325C949C9B7930B - EB0771E3649FC46BB661636A8C3ABA6F0E5F6B05C0D39337F54D60156AC07FF7 - 2C75633A39A9A9CA95D437982A021E911C9E3C36A9A3B781D5F9D1E42D7D73F8 - 5A9B4EDF7B7605B6EFF4E45792DB244F4E5E957C29D9D6E05FEA9FFD57F2CAE4 - 49C9AD921725DF48801DDB6B766D820200C6E582E497933B277F967C3759AFFA - FFFDD3A4FEB77E35A9FF6D60DB6E31BB36A1B50260CFD915B8AE9AE2DF3FF9F3 - 649E2B91EB31C24B931F4A9A79BE099BC00CC00235F5970B4BF407C9A3929AFA - 5F94AF278F4E5ED2F5806B6BEA4B6A6B05C02D6757A07745F273C98B93ED3DDF - 9F97FAF7FD66F282591BB89A47000BE411005CD30B9357F7CDA5FA9BA4FEDDC0 - D53C02582005005CEDF7925AB1BF59EADFFD277D1388A60A80D6CE013837D9A3 - 6FC2A4D5815887259B3D0DBF73F2BEE490AE07D37676D2CC17D5960A80EB27B5 - 1A19A6EEFCE4EEC92217FCAD451D7FFA8564F7AE07D35687675DDE3787ADA547 - 00F5920560A79D7E3719CAE05F4E4D6A1702D01FADDD849666006E9B9CD63761 - B26AE0AF837986F6C6B12AD0BF92DCBAEBC174D5099AF5AE8DC16B6906A09E35 - C2D4D5E97E437CDDE8C5491D400453D7CC0BB55A2A006A0D004C590DFCAFEB9B - 83F4DAE4B2BE0993D5CC97556B00A01D472667F5CD413A23A9B70EC29435B318 - B6A502A0B52D8B306F55000CDD51B32B30702D1500F6FF3375C7CCAE43F681D9 - 15A6AA99B1AAA50200A6EC7BC9497D73D0EACF38C4458AB02CCDCC56B7540034 - B3B71216E0E464192FFBD9A83A99B085420516A599F56A2D1500BBCCAE3045B5 - C0AE1567CEAE3045CDEC586BA900A8E31561AA2E985D5B504715C35435335659 - 03006D50000073D55201E080110086AE99B1AAA502A089B72B013069CDEC8269 - A900B870760580A1AAF76234C11A0000989FAB66D7C16BA900386F760580A16A - 66AC6AA90068A6AA0280A16BA90068E6B90A0093D5CC96DD960A00E78B033074 - 751C76135A2A009AF94B0560B22E995D07AFA502A0A593D00098A67A7367135A - 2A002E9A5D0160A89A39B3A6A502A08E57B4151080A1FA6ED2CCA9B52D1500A5 - A557A202302D550034A3B502A0A9BF5C0026E5ACD9B509AD15004DFDE5023029 - 67CEAE4DF0080000E64301B040660000182A6B0016C81A000086CA1A8005F208 - 0080A1FACEECDA048F0000603E3C02582005000043A50058A053675700189AA6 - C6A8160B802BFB26000C46BDB15601B0409726DFE89B003018A727F5CE9A66B4 - 560094AFCDAE003014CD8D4D0A0000D83805C012280000181A05C01228000018 - 9AAFCEAECD68B10068EE2F1980D13303B004660000181A05C012D43ECBCBFB26 - 006CBA1A934EEB9BED68B100A8BF682702023014A724CD7D316DB1002827CEAE - 00B0D9BE30BB36A5D502E0F3B32B006CB6CFCEAE4D510000C0C67C6E766D8A02 - 000036A6C931A9D502E0A4E4E2BE09009BA6C6A22FF7CDB6B45A00D46ACB2FF6 - 4D00D8343516D5AB809BD36A01503C060060B3353B1629000060FD9ADC015014 - 0000B07E4DEE00282D1700CD565D008C8647009BE03B89238101D82C7504F019 - 7DB33D2D1700E584D9150096EDF8D9B549AD1700C7CDAE00B06C0A804D640600 - 80CDA200D844B5FAF282BE09004B736ED2F49B695B2F00EAF4A50FF74D00589A - 8F244D9E00B845EB0540F1180080656B7EEC194301D0F43318009AD4FC22F431 - 1400CD4FC300D0947A21DD47FB66BBC650009C9F3816188065F94C7261DF6CD7 - 180A8072CCEC0A008B368A31672C05C07B66570058B4518C396329008E4E2EEE - 9B00B0301725660006A4067F8F010058B4FAC27949DF6CDB580A8072E4EC0A00 - 8B329AB1664C05C0BB6757005894D18C35632A004E4ABED2370160EE4E4E4633 - CE8CA9002847CDAE00306FA37AD43CB602E05DB32B00CCDBA8BE648EAD0018CD - EA4C0006A5769BD518331A632B006A7FE607FB2600CCCDE8CE9B195B0150DE34 - BB02C0BCBC79761D8D311600FF9E5CD6370160C32E4D8EE89BE331C602E0ECE4 - BD7D130036ACCEFE3FA76F8EC7180B80E2310000F3F2C6D97554C65A00D4548D - DD00006CD4F792B7F7CD71196B01706EE215C1006C541DFE735EDF1C97B11600 - 65945336002CD5E856FF6F31E602A0A66C6AEA0600D6A3CE96F98FBE393E632E - 00CE4F1C0D0CC07AD5187241DF1C9F311700E55F67570058AB37CCAEA334F602 - E06DC9197D130056EDDBC93BFAE6388DBD00A8D39B5ED7370160D55E9B8CFA54 - D9B11700E535C9557D130076A8C68C7FE89BE3358502E04BC9717D130076A8DE - 2A7B52DF1CAF291400E56F675700D8919A391EBDA914006F4DEA254100B03DDF - 4D6ACC18BDA914001727AFEF9B00B04D35564CE210B9A91400E5EF665700D896 - C98C15532A003E9F7CB46F02C0757C3839B16F8EDF940A80F237B32B005CDB2B - 67D749985A015047037FBD6F02C0F79D9AFC4BDF9C86A915007532E0CBFB2634 - E506B36B0B769B5DA125AF482EEF9BD330B502A0D4FECED1BEDD89D1DA7D766D - C14D665768C539C9E4168A4FB100A8FFD00E06A235379B5D5B70D3D9155A515F - 0CCFED9BD371BDD9756A6E9F7C25D9A5EBC1F0D5E1247BF5CDC1AB43B75A2A58 - 98B69AF6BF4B526B0026658A3300A5FE434FE2A4274663CFE4967D73D0F6490C - FEB4A4DEF93FB9C1BF4CB500287F3CBB422B0E9E5D87ECE1B32BB4E22F66D7C9 - 997201F0E9A4DEF804AD3874761DB247CDAED082F72535164CD254D7006CF1F8 - E41D7D1306EF3BC9BEC9655D6F78AE9F9C9EECDDF560F81E93BCB76F4ECF9467 - 00CA3B938FF44D18BC5A035045EB50D59FCDE04F2B8E4F263BF897A91700E577 - 665768C18B66D721FAB5D9155AF0DBB3EB64290076DAE93DC9B17D1306EFA064 - 88CFD90F4F1ED43761F06AFDD7D17D73BAA6BE06608B5AB96C4120ADF8AFE480 - 64286B01EA98E27ADBE65DBB1E0CDF43937A04306966007AC724EFEF9B3078FB - 272FEE9B83508FD10CFEB4E2A864F2837F310370B5039313FA260CDE15C9E392 - 7A84B5996AEAFF5D897B092DB82A7970F2B1AE37716600AEF6E1E4C8BE0983B7 - 73F2A6E45E5D6F73D4BFBB5EB16DF0A715B5EDDBE03FE3837B4DF74F3E9EF87B - A115A7258F4E6A5DC032D56388DA4255E712400BEADBFFFD92CF743DCC005CCB - 2793B7F54D68420DC0C725CB5C815F8FCBEADF69F0A725FF9618FCB7E29BEE75 - D562A62F24BB763D68C325499D11F0575D6F31EA7EF13F92FF93F87CD092FA7C - FC50F2FFBA1E9D7A8EC835D56B57EB7DE60FE97AD0867AB5752D0AACED4DF58C - F3AC649EEE9EBC31F9F9C47D83D6BC2CA91900B66206606555009C9CDCA2EB41 - 5B2E4D5E9BD41B2FBF5A3FD8807A4FFA6F24CF49EAAC7F68CDB7921F4CCEEB7A - 7C9F0260DB9E9FBCBA6F42936AAB609D6FF1FAA4F63ED7CB8456A3DEE97F5852 - 83FE2312DFF869D973937FEC9B6C4D01B06D75D3FB44729FAE076DAB15D027CE - F2A5A4BE155D9094DD935B27774B6A6BDF3D12F706C6A0EEE1B540F6CAAEC735 - F8906F5F7DFBF940DF04A02155F43E2CA91D2BACC036C0EDAB9745BCA56F02D0 - 905AB46AF0DF0E33003B76A7E48BC96E5D0F80A1BB28A99D2BA7763D566471CF - 8E9D93DC3839B8EB0130747F98BCBD6FB22D660056E786C9E792FDBA1E004355 - C762D7E2ED3AFC87EDB00660752E4E7E36A94525000C53DDA36B0BB7C17F153C - 0258BDAF2575F679BD4C0280E17955F2CABEC98E7804B036374FEA3D01B5671A - 80E1383DA9F3FE9DF8B74A1E01ACCDD9C90BFB260003F282C4E0BF060A80B5AB - 73018EE89B000CC09B13AF725F238F00D6E736499D0D502F0D0260F3D4CC6C1D - 5FFDCDAEC7AA5904B83EE727F5DAE027763D0036CB2F251FEA9BAC851980F5AB - BFBBF72687763D0096ED3DC9E1892DDAEBA000D898DB267540D09E5D0F806539 - 2BA9B7579AFA5F278B0037A6B69DD40141002CD7CF2406FF0DB00660E3FE33B9 - 5DE2802080E57875F2B2BEC97A7904301FBB279F4EBC2B0060B1EAACFF072417 - 763DD6CD2380F9B82079567259D70360112E4D9E9D18FCE7C02380F9A9F50057 - 268FEC7A00CCDB6F2575E80F73E011C07C554175747270D703605EEADEFAA8A4 - BE6831070A80F9BB43F299E4665D0F808DAA2D7FF74DBEDEF5980B6B00E6EF94 - A4D60338980260E3AE48EA9E6AF09F336B0016E3E4D9F590D91580F5F99DE41F - FB26F3E411C0E2D4DFED3B92C7753D00D6AADEBCFAD4C48CEA02280016ABD601 - 7C22B94BD70360B54E4A7E3839B7EB3177D6002CD639C9D3928BBA1E00AB51FB - FCEB9BBFC17F8114008BF7D9E4F97D138055786EF285BEC9A25804B81C9F4F6E - 9E3CB8EB01B02D7F9EFC59DF6491AC01589EEB27EF4F1EDAF500B8B60F248F49 - 6AEB1F0BA60058AE5B2427245E1A04704D5F4E1E947CB7EBB170D6002CD719C9 - 636757007A5BEE8D06FF2552002C5F55B94F4C2EE97A00D356BBA4EA9E58F746 - 96C822C0CD516F0EFC6AF294C4631860AAEA809F6726B53E8A2553006C9EDA19 - 50B300F5762B8029FACDE4357D936553006CAEE3927D9207763D80E97865F21B - 7D93CD60FA79F355117664F2E8AE07307E6F4FEAA43FDBFD36910260186E9AD4 - FED7FB753D80F1FA78526F4A7544FA26B30B6018EABCEBC313475F0263566B9F - EA0DA906FF013003302CB7498E491C14048C4D6DF3AB9350BFDDF5D8740A80E1 - B97D727CB26FD70368DFA9C941C9695D8F41F0086078EA83F288E45B5D0FA06D - DF480E4D0CFE03A30018A69A2AAB17629CD9F500DA5447FC1E9638E56F801400 - C3558B65EA6CEC5A2008D09ABA77D53DECC4AEC7E0280086ED13C9E3930BBB1E - 401BEA9E55ABFD3FD9F5182405C0F0D582C0DA226826006841DDAB6ADABF5E7D - CE80D905D08EFB2747257B753D80E1A9754B35F87FAAEB31680A80B6DC33796F - 72ABAE07301CDF4CEA4873079A354201D09EBB26EF4BEABC0080213825A9379B - 5AEDDF106B00DA7372F2B0C4070D18829312F7A4062900DA54D5767DE0BED8F5 - 0036476D577E78520798D1180540BBEA795B7DF02CB60136436D53766A69C314 - 006DAB15B7F55ACDDA1D00B02CEF4A6AF03FABEBD1A49D6757DA7569F2AF49ED - 0CA8AD82008BF4CAE427934BBA1ECD52008CC395C93B92EF25F5D20DBB3B8079 - ABFBCCAF26BF955C553FA06D068AF17946F2BA64B7AE07B0711727CF49DED2F5 - 180505C038D57BB78F48F6EE7A00EBF79DE449C947BA1EA3A10018AFFD925AA8 - 53070701ACC797927A21D957BA1EA36217C078D5A11C07261FEA7A006BF3C1E4 - 2189C17FA42C021CB77A6EF7CFC91EC983EB0700ABF06749ADF4F72AF211F308 - 603A7E3C794D72A3AE07705D1724CF4BDED8F5183505C0B41C90D42ADE5A1F00 - B0B53AD3FFA989B7F94D843500D3F2B9E481499D1900B0C5DB93BA3718FC27C4 - 1A80E9A9C3826A7AAF0EF2A8170A990582E9BA227971F282C4C97E13E3E63F6D - 8F4B5E9FDCBCEB015352E7F83F2BF12E9189F20860DAEA9C80FB24B60AC2B41C - 9DDC3731F84F9847009C9BFC5352D37FF548C0EF048CD765C96F263F9FD4679F - 09F30880ADD522A03A37C0E981303E75AA5F4DF97FB2EB31791E01B0B58F27F7 - 4BFEBEEB0163F1EAA43EDB067FBECF0C00DB52FB81EBA6B157D7035A7466F2FC - A45E0E06D7A000607BF64D5E9B1CDAF58096BC37F9A9E49B5D0FAEC52300B6E7 - B4E4D1C9CF25E7D40F80C13B3BA9E37C0F4B0CFE6C93190056EB36C95F254FE9 - 7AC010FD5BF2C2E45B5D0FB64301C05AD5DA805724551000C3707A52A7F9BDAD - EBC12AD8F3CD5AFD67F20F492D0EAC55C58A48D83C5726AF4AAA30FF6CFD0056 - CBCD9B8D7878523B05EED6F58065FAAFA456F81FD7F5608DCC00B011A7247566 - 407D0BF9E164D70458AC8B93972475A8CF57EB07009BE9F6C99B927ACBA088CC - 3F5568BF21A9CF1AC0E01C927C2A59E9062622EB4B7DA60E4C0006ADCE97786E - 527B9057BA9989C8EAF28DA43E4BCE6C61EEAC016011EAC6F5E9A4D607D4BA80 - 07247ED760F52E4D5E9A3C23F968529F2980E6EC97D40125F50C73EB6F372272 - CDD467E4CD497D660046A3CE0DF88F64A51B9FC8D4F3F6E43E09C0683D38794F - B2D24D50646A7977F2C00460320E4E3E98AC745314197B3E901C94004CD6A392 - E393956E9222634B9DDCF788048099C726F5AD68A59BA648EBA9F7F33F260160 - 1BEE9FFC73525BA156BA918AB492FA1DFEA7C4E23E8035B85D527BA1CF4D56BA - B98A0C35F53B5BBFBBF53B0CC03AED91BC28393559E9662B3294D4EF68FDAED6 - EF2C007352A70A3E3BF970B2D2CD5764B3724252BF9BDE8809B060F74A5E9E9C - 95AC7443165974EA77EF2F92FA5D0460C96E98D47BD18F491C352C8B4EFD8E1D - 9DD4EFDC0D120006E007933F49BE9DAC74F316596FEA77EA8F93BB26000C543D - 877D5AF296E4A264A51BBAC88E52BF3BF5629E27279EED333AD79B5D61AC6E92 - 3C217966727862DA96EDF95E7264F2A6E41DC905098C92028029B969F2A4E4E9 - 499DC876FD042E49EA94BE1AF4DF969C97C0E8290098AA9B274F49AA183824D9 - 2D613AEA9B7E2DE6AB41FF88E49C04264501003BED74A3A48A807A17413D26D8 - 2F617CBE9CD4AB776B8ABFDE4259CFF861B21400705D55005421500541150655 - 20D09E1AE06BA0AF01BF06FE2A00801905006C5F3D1A78585205415DEF9DEC92 - 303C97279F4DEA4C88A3920F2535D50FAC4001006B73E3E4C0E4215BA5761AB0 - 7CB558AF8EE0ADA3A18F4D3E965C9800ABA000808DD939B967F2D0E4A0596E9F - 307FF5A29DE392E3673931B92201D6410100F377CBA4CE873F60ABEB3D123B0D - 56E7E2E40BC9E767F9DC2C6724C09C280060396AA6A08E91DD52146C49CD164C - 754DC165497DABAF6FF25B0FF4B558CF377B583005006CAE1AFCF74DEEB855EE - B4556E93FC40D2A27A71CE69C9D766F9EA56ED4AFDB35AB8076C0205000C5B9D - 5658B304B74DF64E6E91ECB58DD43FBB59B24867276726F52ADC6BA77E5ED3F4 - D53E3DA96FF79726C0002900605C6A46A17625D4677B4B31506B0FEAB5C9A58E - 43AE19852DFF77E5FCA4BE89D7B4FB966370EB39FC962D74754A5EBD1CA7FE99 - A979000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000008005D869A7FF0F9C4BF973 - 592608CB0000000049454E44AE426082} - FileName = 'E:\AErender CC 2018\icons8-info-512.png' - end> - Align = Client - HitTest = False - MarginWrapMode = Fit - Margins.Left = 2.000000000000000000 - Margins.Top = 2.000000000000000000 - Margins.Right = 2.000000000000000000 - Margins.Bottom = 2.000000000000000000 - Size.Width = 26.000000000000000000 - Size.Height = 26.000000000000000000 - Size.PlatformDefault = False - Visible = False - object infoIconFill: TFillRGBEffect - Color = claWhite - end - end object InfoIcon: TPath Align = Client Data.Path = { @@ -17990,680 +18702,647 @@ object MainForm: TMainForm Stroke.Kind = None end end - object XMLOpenDialog: TOpenDialog - Filter = - 'All compatible files|*.aer;*.xml|Launcher configuration|*.aer|XM' + - 'L Launcher configuration|*.xml|All Files|*.*' - Title = 'Launcher configuration' - Left = 72 - Top = 488 + end + object UpdateInfo: TStatusBar + Align = MostBottom + Position.Y = 604.000000000000000000 + ShowSizeGrip = False + Size.Width = 1280.000000000000000000 + Size.Height = 36.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'statusbarnogripstyle' + Visible = False + object downloadButton: TButton + Align = Client + Margins.Left = 8.000000000000000000 + Margins.Top = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Margins.Bottom = 8.000000000000000000 + Size.Width = 1093.000000000000000000 + Size.Height = 20.000000000000000000 + Size.PlatformDefault = False + Text = 'Download from GitHub' + OnClick = downloadButtonClick + end + object UpdateLabel: TLabel + Align = Left + AutoSize = True + StyledSettings = [Family, FontColor] + Margins.Left = 8.000000000000000000 + Position.X = 8.000000000000000000 + Size.Width = 163.000000000000000000 + Size.Height = 36.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 14.000000000000000000 + TextSettings.Font.StyleExt = {00070000000000000004000000} + TextSettings.WordWrap = False + Text = 'New version is available!' + end + end + object TasksToolbar: TToolBar + PopupMenu = ToolbarPopupMenu + Size.Width = 1280.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + object TasksLabel: TLabel + Align = Left + StyledSettings = [Family, FontColor] + Margins.Left = 16.000000000000000000 + Position.X = 16.000000000000000000 + Size.Width = 120.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 16.000000000000000000 + TextSettings.Font.StyleExt = {00070000000000000004000000} + Text = 'Tasks' end - object Button1: TButton - Align = MostRight - Enabled = False - Margins.Top = 8.000000000000000000 - Margins.Right = 8.000000000000000000 - Margins.Bottom = 8.000000000000000000 - Position.X = 584.000000000000000000 - Position.Y = 8.000000000000000000 - Size.Width = 109.000000000000000000 - Size.Height = 30.000000000000000000 + object RemoveTaskButton: TButton + Align = Right + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 1172.000000000000000000 + Position.Y = 4.000000000000000000 + Size.Width = 104.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'removebuttonstyle' + Text = 'Remove Task' + TextSettings.Font.Size = 18.000000000000000000 + ParentShowHint = False + ShowHint = False + OnClick = RemoveTaskButtonClick + end + object AddTaskButton: TButton + Align = Right + Hint = 'Settings' + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 1068.000000000000000000 + Position.Y = 4.000000000000000000 + Size.Width = 96.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False - Text = 'Test Notification' - Visible = False + StyleLookup = 'addbuttonstyle' + Text = 'New Task' + TextSettings.Font.Size = 18.000000000000000000 + ParentShowHint = False + ShowHint = False + OnClick = AddTaskButtonClick end end - object launcherLayout: TLayout + object TasksTreeView: TTreeView Align = Client - Size.Width = 701.000000000000000000 - Size.Height = 515.000000000000000000 + Margins.Left = -1.000000000000000000 + Margins.Top = -1.000000000000000000 + Margins.Right = -1.000000000000000000 + Margins.Bottom = -1.000000000000000000 + PopupMenu = TasksPopupMenu + Size.Width = 1282.000000000000000000 + Size.Height = 538.000000000000000000 Size.PlatformDefault = False - object inputFileLayout: TLayout - Align = Top - Margins.Left = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Position.X = 5.000000000000000000 - Size.Width = 691.000000000000000000 - Size.Height = 60.000000000000000000 + StyleLookup = 'treeviewstyle' + OnDragDrop = TasksTreeViewDragDrop + OnMouseMove = TasksTreeViewMouseMove + AllowDrag = True + AlternatingRowBackground = True + ItemHeight = 24.000000000000000000 + OnDragChange = TasksTreeViewDragChange + OnKeyDown = TasksTreeViewKeyDown + Viewport.Width = 1282.000000000000000000 + Viewport.Height = 538.000000000000000000 + object TasksIsEmpty: TLayout + Align = Client + Size.Width = 1280.000000000000000000 + Size.Height = 537.000000000000000000 Size.PlatformDefault = False - object InputLabels: TLayout - Align = Left - Size.Width = 113.000000000000000000 - Size.Height = 60.000000000000000000 + TabOrder = 0 + object TasksIsEmptyLabel: TLabel + Align = Center + AutoSize = True + StyledSettings = [Family, FontColor] + Margins.Right = 112.000000000000000000 + Size.Width = 177.000000000000000000 + Size.Height = 32.000000000000000000 Size.PlatformDefault = False - object projectPathLabel: TLabel - Align = Client - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 33.000000000000000000 - Size.Width = 108.000000000000000000 - Size.Height = 22.000000000000000000 - Size.PlatformDefault = False - Text = 'Project file path: ' - end - object outputPathLabel: TLabel - Align = Client - Margins.Top = 33.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 108.000000000000000000 - Size.Height = 22.000000000000000000 - Size.PlatformDefault = False - StyleLookup = 'Label2Style1' - Text = 'Output file path:' - end + TextSettings.Font.Size = 24.000000000000000000 + TextSettings.Font.StyleExt = {00070000000000000004000000} + TextSettings.HorzAlign = Center + TextSettings.WordWrap = False + Text = 'No active tasks.' end - object pathLayout: TLayout - Align = Client - Size.Width = 465.000000000000000000 - Size.Height = 60.000000000000000000 + object TeskIsEmptyAddLabel: TLabel + Align = Center + AutoSize = True + Cursor = crHandPoint + StyledSettings = [Family, FontColor] + HitTest = True + Margins.Left = 185.000000000000000000 + Size.Width = 106.000000000000000000 + Size.Height = 32.000000000000000000 Size.PlatformDefault = False - object outputPath: TEdit - Touch.InteractiveGestures = [LongTap, DoubleTap] - Align = Client - Margins.Left = 5.000000000000000000 - Margins.Top = 33.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 455.000000000000000000 - Size.Height = 22.000000000000000000 - Size.PlatformDefault = False - end - object projectPath: TEdit - Touch.InteractiveGestures = [LongTap, DoubleTap] - Align = Client - Margins.Left = 5.000000000000000000 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 33.000000000000000000 - Size.Width = 455.000000000000000000 - Size.Height = 22.000000000000000000 - Size.PlatformDefault = False - OnDragOver = projectPathDragOver - OnDragDrop = projectPathDragDrop - end + StyleLookup = 'linklabelstyle' + TextSettings.Font.Size = 24.000000000000000000 + TextSettings.Font.StyleExt = {04070000000000000004000000} + TextSettings.HorzAlign = Center + TextSettings.WordWrap = False + Text = 'Add one?' + OnClick = AddTaskButtonClick end - object fileChooseLayout: TLayout - Align = Right - Position.X = 578.000000000000000000 - Size.Width = 113.000000000000000000 - Size.Height = 60.000000000000000000 + object Label5: TLabel + Align = Center + AutoSize = True + Enabled = False + StyledSettings = [Family, FontColor] + Opacity = 0.500000000000000000 + Size.Width = 290.000000000000000000 + Size.Height = 32.000000000000000000 Size.PlatformDefault = False - object openFile: TButton - Align = Client - Margins.Left = 5.000000000000000000 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 33.000000000000000000 - Size.Width = 103.000000000000000000 - Size.Height = 22.000000000000000000 - Size.PlatformDefault = False - Text = 'Choose file...' - OnClick = openFileClick - end - object saveFile: TButton - Align = Client - Margins.Left = 5.000000000000000000 - Margins.Top = 33.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 103.000000000000000000 - Size.Height = 22.000000000000000000 - Size.PlatformDefault = False - Text = 'Choose file...' - OnClick = saveFileClick - end + TextSettings.Font.Size = 24.000000000000000000 + TextSettings.Font.StyleExt = {00070000000000000004000000} + TextSettings.HorzAlign = Center + TextSettings.WordWrap = False + Text = 'No active tasks. Add one?' + Visible = False end - end - object properties: TGroupBox - Align = Top - Margins.Left = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 5.000000000000000000 - Position.Y = 118.000000000000000000 - Size.Width = 691.000000000000000000 - Size.Height = 149.000000000000000000 - Size.PlatformDefault = False - Text = 'Properties' - object memUsageLayout: TLayout - Align = Bottom - Position.Y = 120.000000000000000000 - Size.Width = 691.000000000000000000 - Size.Height = 29.000000000000000000 + object DebugLabel: TLabel + Anchors = [akLeft, akBottom] + AutoSize = True + Position.X = 32.000000000000000000 + Position.Y = 495.000000000000000000 + Size.Width = 64.000000000000000000 + Size.Height = 16.000000000000000000 Size.PlatformDefault = False - object memUsageLabel: TLabel - Align = Left - Margins.Left = 15.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 15.000000000000000000 - Size.Width = 140.000000000000000000 - Size.Height = 24.000000000000000000 - Size.PlatformDefault = False - Text = 'Memory usage limit' - end - object memUsageTrackBar: TTrackBar - Align = Client - CanParentFocus = True - Orientation = Horizontal - Margins.Top = 5.000000000000000000 - Size.Width = 408.000000000000000000 - Size.Height = 17.000000000000000000 - Size.PlatformDefault = False - Value = 100.000000000000000000 - OnChange = memUsageTrackBarChange - end - object memUsageInfo: TLabel - Align = Right - Cursor = crHandPoint - HitTest = True - Margins.Right = 15.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 563.000000000000000000 - Size.Width = 113.000000000000000000 - Size.Height = 24.000000000000000000 - Size.PlatformDefault = False - StyleLookup = 'linklabelstyle' - TextSettings.FontColor = claWhite - TextSettings.HorzAlign = Trailing - Text = 'Unlimited' - OnClick = memUsageInfoClick - end - object memUsageInfoEdit: TEdit - Touch.InteractiveGestures = [LongTap, DoubleTap] - Align = Right - TextSettings.HorzAlign = Trailing - Position.X = 349.000000000000000000 - Enabled = False - Margins.Left = 13.000000000000000000 - Margins.Right = 15.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 100.000000000000000000 - Size.Height = 24.000000000000000000 - Size.PlatformDefault = False - Visible = False - KillFocusByReturn = True - OnValidate = memUsageInfoEditValidate - OnExit = memUsageInfoEditExit - end + TextSettings.WordWrap = False + Text = 'DebugLabel' + Visible = False end - object cacheUsageLayout: TLayout - Align = Bottom - Position.Y = 91.000000000000000000 - Size.Width = 691.000000000000000000 - Size.Height = 29.000000000000000000 - Size.PlatformDefault = False - object cacheUsageLimitLabel: TLabel - Align = Left - Margins.Left = 15.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 15.000000000000000000 - Size.Width = 140.000000000000000000 - Size.Height = 24.000000000000000000 - Size.PlatformDefault = False - Text = 'Cache usage limit' - end - object cacheUsageTrackBar: TTrackBar - Align = Client - CanParentFocus = True - Orientation = Horizontal - Margins.Top = 5.000000000000000000 - Size.Width = 408.000000000000000000 - Size.Height = 17.000000000000000000 - Size.PlatformDefault = False - Value = 100.000000000000000000 - OnChange = cacheUsageTrackBarChange - end - object cacheUsageInfo: TLabel - Align = Right - Cursor = crHandPoint - HitTest = True - Margins.Right = 15.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 563.000000000000000000 - Size.Width = 113.000000000000000000 - Size.Height = 24.000000000000000000 - Size.PlatformDefault = False - StyleLookup = 'linklabelstyle' - TextSettings.FontColor = claWhite - TextSettings.HorzAlign = Trailing - Text = 'Unlimited' - OnClick = cacheUsageInfoClick - end - object cacheUsageInfoEdit: TEdit - Touch.InteractiveGestures = [LongTap, DoubleTap] - Align = Right - TextSettings.HorzAlign = Trailing - Position.X = 357.000000000000000000 - Position.Y = 5.000000000000000000 - Enabled = False - Margins.Left = 13.000000000000000000 - Margins.Right = 15.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 100.000000000000000000 - Size.Height = 24.000000000000000000 - Size.PlatformDefault = False - Visible = False - KillFocusByReturn = True - OnValidate = cacheUsageInfoEditValidate - OnExit = cacheUsageInfoEditExit - end + end + end + object GridPanelLayout4: TGridPanelLayout + Align = Top + Position.Y = 32.000000000000000000 + Size.Width = 1280.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + ColumnCollection = < + item + Value = 100.000000000000000000 end - object GridPanelLayout3: TGridPanelLayout - Align = Client - Size.Width = 691.000000000000000000 - Size.Height = 91.000000000000000000 - Size.PlatformDefault = False - ColumnCollection = < - item - Value = 50.000000000000000000 - end - item - Value = 50.000000000000000000 - end> - ControlCollection = < - item - Column = 1 - Control = properiesLayout2 - Row = 0 - end - item - Column = 0 - Control = propertiesLayout1 - Row = 0 - end> - RowCollection = < - item - Value = 100.000000000000000000 - end - item - SizeStyle = Auto - end> - object properiesLayout2: TLayout - Align = Client - Anchors = [] - Margins.Top = 10.000000000000000000 - Size.Width = 345.500000000000000000 - Size.Height = 81.000000000000000000 - Size.PlatformDefault = False - object customProp: TEdit - Touch.InteractiveGestures = [LongTap, DoubleTap] - Align = Top - Position.X = 10.000000000000000000 - Position.Y = 34.000000000000000000 - Enabled = False - Margins.Left = 10.000000000000000000 - Margins.Top = 5.000000000000000000 - Margins.Right = 10.000000000000000000 - Size.Width = 325.500000000000000000 - Size.Height = 23.000000000000000000 - Size.PlatformDefault = False - TextPrompt = 'Separate flags with spaces!' - end - object customCheckbox: TCheckBox - Align = Top - Margins.Left = 10.000000000000000000 - Margins.Top = 10.000000000000000000 - Margins.Right = 10.000000000000000000 - Position.X = 10.000000000000000000 - Position.Y = 10.000000000000000000 - Size.Width = 325.500000000000000000 - Size.Height = 19.000000000000000000 - Size.PlatformDefault = False - Text = 'Custom Properies' - end - end - object propertiesLayout1: TLayout - Align = Client - Margins.Top = 10.000000000000000000 - Size.Width = 345.500000000000000000 - Size.Height = 81.000000000000000000 - Size.PlatformDefault = False - object missingFilesCheckbox: TCheckBox - Align = Top - Margins.Left = 15.000000000000000000 - Margins.Top = 10.000000000000000000 - Margins.Right = 15.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 15.000000000000000000 - Position.Y = 10.000000000000000000 - Size.Width = 315.500000000000000000 - Size.Height = 19.000000000000000000 - Size.PlatformDefault = False - Text = 'Render with missing files' - end - object threadedRender: TCheckBox - Align = Top - Margins.Left = 15.000000000000000000 - Margins.Right = 15.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 15.000000000000000000 - Position.Y = 58.000000000000000000 - Size.Width = 315.500000000000000000 - Size.Height = 19.000000000000000000 - Size.PlatformDefault = False - Text = 'Enable CPU Multithreading' - end - object soundCheckbox: TCheckBox - Align = Top - Margins.Left = 15.000000000000000000 - Margins.Right = 15.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 15.000000000000000000 - Position.Y = 34.000000000000000000 - Size.Width = 315.500000000000000000 - Size.Height = 19.000000000000000000 - Size.PlatformDefault = False - Text = 'Play sound when render finishes' - end - end + item + SizeStyle = Absolute + Value = 192.000000000000000000 end - end - object outputModuleLayout: TLayout - Align = Top - EnableDragHighlight = False - Margins.Left = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Position.X = 5.000000000000000000 - Position.Y = 60.000000000000000000 - Size.Width = 691.000000000000000000 - Size.Height = 29.000000000000000000 - Size.PlatformDefault = False - object outputModuleBox: TComboBox - Align = Client - DropDownKind = Custom - Margins.Left = 10.000000000000000000 - Margins.Top = 3.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 3.000000000000000000 - Size.Width = 548.000000000000000000 - Size.Height = 23.000000000000000000 - Size.PlatformDefault = False - OnChange = outputModuleBoxChange + item + SizeStyle = Absolute + Value = 96.000000000000000000 end - object outputModuleLabel: TLabel - Align = Left - Size.Width = 128.000000000000000000 - Size.Height = 29.000000000000000000 - Size.PlatformDefault = False - TextSettings.WordWrap = False - Text = 'Output Module Preset:' + item + SizeStyle = Absolute + Value = 96.000000000000000000 end - end - object renderSettingsLayout: TLayout - Align = Top - EnableDragHighlight = False - Margins.Left = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Position.X = 5.000000000000000000 - Position.Y = 89.000000000000000000 - Size.Width = 691.000000000000000000 - Size.Height = 29.000000000000000000 - Size.PlatformDefault = False - object renderSettingsBox: TComboBox - Align = Client - DropDownKind = Custom - Margins.Left = 10.000000000000000000 - Margins.Top = 3.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 3.000000000000000000 - Size.Width = 548.000000000000000000 - Size.Height = 23.000000000000000000 - Size.PlatformDefault = False - OnChange = renderSettingsBoxChange + item + SizeStyle = Absolute + Value = 64.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Label1 + Row = 0 end - object renderSettingsLabel: TLabel - Align = Left - Size.Width = 128.000000000000000000 - Size.Height = 29.000000000000000000 - Size.PlatformDefault = False - TextSettings.WordWrap = False - Text = 'Render Settings:' + item + Column = 2 + Control = Label2 + Row = 0 + end + item + Column = 3 + Control = Label3 + Row = 0 end + item + Column = 4 + Control = Label4 + Row = 0 + end + item + Column = 1 + Control = Label6 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end + item + SizeStyle = Auto + end> + object Label1: TLabel + Align = Contents + StyledSettings = [Family, Size, FontColor] + Margins.Left = 20.000000000000000000 + Size.Width = 812.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.StyleExt = {00070000000000000004000000} + Text = 'Composition' end - object GridPanelLayout1: TGridPanelLayout + object Label2: TLabel Align = Client - Size.Width = 701.000000000000000000 - Size.Height = 243.000000000000000000 + StyledSettings = [Family, Size, FontColor] + Size.Width = 96.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False - ColumnCollection = < - item - Value = 50.000000000000000000 - end - item - Value = 50.000000000000000000 - end> - ControlCollection = < - item - Column = 0 - Control = compLayout - Row = 0 - end - item - Column = 1 - Control = threadsLayout - Row = 0 - end> - RowCollection = < - item - Value = 100.000000000000000000 - end + TextSettings.Font.StyleExt = {00070000000000000004000000} + Text = 'Start Frame' + end + object Label3: TLabel + Align = Client + StyledSettings = [Family, Size, FontColor] + Size.Width = 96.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.StyleExt = {00070000000000000004000000} + Text = 'End Frame' + end + object Label4: TLabel + Align = Client + StyledSettings = [Family, Size, FontColor] + Size.Width = 64.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.StyleExt = {00070000000000000004000000} + Text = 'Split' + end + object Label6: TLabel + Align = Client + StyledSettings = [Family, Size, FontColor] + Size.Width = 192.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.StyleExt = {00070000000000000004000000} + Text = 'Progress' + TabOrder = 0 + end + end + end + object TasksPopupMenu: TPopupMenu + OnPopup = TasksPopupMenuPopup + Left = 224 + Top = 288 + object TaskItemDisplay: TMenuItem + Enabled = False + Text = '[item]' + end + object TasksPopupSeparator1: TMenuItem + Text = '-' + end + object AddTaskPopupItem: TMenuItem + Text = 'New Task' + OnClick = AddTaskButtonClick + end + object EditTaskPopupItem: TMenuItem + Text = 'Edit Task' + end + object DeleteTaskPopupItem: TMenuItem + Text = 'Delete Task' + end + object TasksPopupSeparator2: TMenuItem + Text = '-' + end + object ToTopPopupItem: TMenuItem + Text = 'ToTopPopupItem' + end + end + object ToolbarPopupMenu: TPopupMenu + Left = 224 + Top = 336 + object ToolbarIconsOnly: TMenuItem + AutoCheck = True + GroupIndex = 10 + RadioItem = True + Text = 'Icons Only' + end + object ToolbarIconsAndText: TMenuItem + AutoCheck = True + GroupIndex = 10 + RadioItem = True + IsChecked = True + Text = 'Icons and Text' + end + object ToolbarTextOnly: TMenuItem + AutoCheck = True + GroupIndex = 10 + RadioItem = True + Text = 'Text Only' + end + end + object XMLOpenDialog: TOpenDialog + Filter = + 'All compatible files|*.aer;*.xml|Launcher configuration|*.aer|XM' + + 'L Launcher configuration|*.xml|All Files|*.*' + Title = 'Launcher configuration' + Left = 224 + Top = 192 + end + object TaskEditorPopup: TPopup + ClipChildren = True + Placement = Center + PlacementTarget = TasksTreeView + Position.X = 290.000000000000000000 + Position.Y = 116.000000000000000000 + Size.Width = 640.000000000000000000 + Size.Height = 384.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'popupbackgroundstyle' + TabOrder = 55 + OnPopup = TaskEditorPopupPopup + object TaskEditorTabControl: TTabControl + Align = Contents + Margins.Left = -2.000000000000000000 + Margins.Top = -2.000000000000000000 + Margins.Right = -2.000000000000000000 + Margins.Bottom = -2.000000000000000000 + Size.Width = 644.000000000000000000 + Size.Height = 388.000000000000000000 + Size.PlatformDefault = False + TabIndex = 0 + TabPosition = Dots + OnChange = TaskEditorTabControlChange + Sizes = ( + 640s + 384s + 640s + 384s) + object TaskEditorStepOne: TTabItem + CustomIcon = < item - SizeStyle = Auto end> - object compLayout: TLayout + IsSelected = True + Size.Width = 8.000000000000000000 + Size.Height = 8.000000000000000000 + Size.PlatformDefault = False + StyleLookup = '' + TabOrder = 0 + Text = 'Basic properties' + ExplicitSize.cx = 8.000000000000000000 + ExplicitSize.cy = 8.000000000000000000 + object launcherLayout: TLayout Align = Client - Size.Width = 350.500000000000000000 - Size.Height = 243.000000000000000000 + Size.Width = 640.000000000000000000 + Size.Height = 322.000000000000000000 Size.PlatformDefault = False - object compGrid: TStringGrid - Align = Client - CanFocus = True - ClipChildren = True - Enabled = False - Locked = True - Margins.Left = 5.000000000000000000 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 303.000000000000000000 - Size.Height = 231.000000000000000000 - Size.PlatformDefault = False - Visible = False - RowCount = 1 - Options = [Editing, RowLines, RowSelect, Header] - OnEditingDone = compGridEditingDone - Viewport.Width = 299.000000000000000000 - Viewport.Height = 206.000000000000000000 - object StringColumn1: TStringColumn - Header = 'Compositions list' - end - end - object compTopLayout: TLayout + TabOrder = 0 + object inputFileLayout: TLayout Align = Top - Margins.Left = 5.000000000000000000 - Margins.Right = 5.000000000000000000 + Margins.Left = 8.000000000000000000 + Margins.Right = 8.000000000000000000 Position.X = 5.000000000000000000 - Size.Width = 340.500000000000000000 - Size.Height = 40.000000000000000000 + Size.Width = 630.000000000000000000 + Size.Height = 30.000000000000000000 Size.PlatformDefault = False - object compSwitch: TSwitch + Visible = False + object InputLabels: TLayout Align = Left - IsChecked = False - Margins.Top = 8.000000000000000000 - Margins.Right = 10.000000000000000000 - Margins.Bottom = 8.000000000000000000 - Position.Y = 8.000000000000000000 - Size.Width = 50.000000000000000000 - Size.Height = 24.000000000000000000 - Size.PlatformDefault = False - ParentShowHint = False - ShowHint = False - OnSwitch = compSwitchSwitch - end - object compSwitchLabel: TLabel - Align = Client - Margins.Top = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 280.500000000000000000 - Size.Height = 30.000000000000000000 - Size.PlatformDefault = False - Text = 'Single Composition' - end - object compCount: TSpinBox - Touch.InteractiveGestures = [LongTap, DoubleTap] - Align = Right - Cursor = crIBeam - Min = 2.000000000000000000 - Value = 2.000000000000000000 - Position.X = 208.000000000000000000 - Position.Y = 5.000000000000000000 - Enabled = False - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 74.000000000000000000 + Size.Width = 113.000000000000000000 Size.Height = 30.000000000000000000 Size.PlatformDefault = False - Visible = False - OnChange = compCountChange - end - end - object compName: TEdit - Touch.InteractiveGestures = [LongTap, DoubleTap] - Align = Top - Position.X = 5.000000000000000000 - Position.Y = 45.000000000000000000 - Margins.Left = 5.000000000000000000 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Size.Width = 340.500000000000000000 - Size.Height = 25.000000000000000000 - Size.PlatformDefault = False - TextPrompt = 'Compositon name...' - OnTyping = compNameTyping - end - end - object threadsLayout: TLayout - Align = Client - Anchors = [] - Size.Width = 350.500000000000000000 - Size.Height = 243.000000000000000000 - Size.PlatformDefault = False - object threadsTopLayout: TLayout - Align = Top - Margins.Left = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Position.X = 5.000000000000000000 - Size.Width = 340.500000000000000000 - Size.Height = 40.000000000000000000 - Size.PlatformDefault = False - object threadsSwitch: TSwitch - Align = Left - IsChecked = False - Margins.Top = 8.000000000000000000 - Margins.Right = 10.000000000000000000 - Margins.Bottom = 8.000000000000000000 - Position.Y = 8.000000000000000000 - Size.Width = 50.000000000000000000 - Size.Height = 24.000000000000000000 - Size.PlatformDefault = False - ParentShowHint = False - ShowHint = False - OnSwitch = threadsSwitchSwitch + object _projectPathLabel: TLabel + Align = Client + Enabled = False + Margins.Top = 5.000000000000000000 + Margins.Right = 5.000000000000000000 + Margins.Bottom = 33.000000000000000000 + Size.Width = 108.000000000000000000 + Size.Height = 22.000000000000000000 + Size.PlatformDefault = False + Text = 'Project file path: ' + Visible = False + end + object _outputPathLabel: TLabel + Align = Client + Margins.Top = 33.000000000000000000 + Margins.Right = 5.000000000000000000 + Margins.Bottom = 5.000000000000000000 + Size.Width = 108.000000000000000000 + Size.Height = 0.000000000000000000 + Size.PlatformDefault = False + Text = 'Output file path:' + end end - object threadsSwitchLabel: TLabel + object pathLayout: TLayout Align = Client - Margins.Top = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 280.500000000000000000 + Size.Width = 404.000000000000000000 Size.Height = 30.000000000000000000 Size.PlatformDefault = False - Text = 'Single Render' + object _outputPath: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Client + Margins.Left = 5.000000000000000000 + Margins.Top = 33.000000000000000000 + Margins.Right = 5.000000000000000000 + Margins.Bottom = 5.000000000000000000 + Size.Width = 394.000000000000000000 + Size.Height = 0.000000000000000000 + Size.PlatformDefault = False + end + object _projectPath: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Client + Enabled = False + Margins.Left = 5.000000000000000000 + Margins.Top = 5.000000000000000000 + Margins.Right = 5.000000000000000000 + Margins.Bottom = 33.000000000000000000 + Size.Width = 394.000000000000000000 + Size.Height = 22.000000000000000000 + Size.PlatformDefault = False + Visible = False + OnDragOver = _projectPathDragOver + OnDragDrop = _projectPathDragDrop + end end - object threadsCount: TComboEdit - Touch.InteractiveGestures = [LongTap, DoubleTap] + object fileChooseLayout: TLayout Align = Right - DropDownKind = Custom - ItemHeight = 19.000000000000000000 - Items.Strings = ( - '2' - '4' - '6' - '8' - '12' - '16' - '32' - '64' - '128') - ItemIndex = 0 - Text = '2' - Position.X = 280.500000000000000000 - Position.Y = 8.000000000000000000 - Enabled = False - Margins.Top = 8.000000000000000000 - Margins.Bottom = 8.000000000000000000 - Size.Width = 60.000000000000000000 - Size.Height = 24.000000000000000000 + Position.X = 517.000000000000000000 + Size.Width = 113.000000000000000000 + Size.Height = 30.000000000000000000 Size.PlatformDefault = False - Visible = False - KillFocusByReturn = True - OnChange = threadsCountChange - OnTyping = threadsCountTyping - end - end - object threadsGrid: TStringGrid - Align = Client - CanFocus = True - ClipChildren = True - Enabled = False - Margins.Left = 5.000000000000000000 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 293.000000000000000000 - Size.Height = 191.000000000000000000 - Size.PlatformDefault = False - Visible = False - RowCount = 2 - Options = [ColLines, RowLines, AutoDisplacement] - Viewport.Width = 289.000000000000000000 - Viewport.Height = 187.000000000000000000 - object StringColumn2: TStringColumn - Header = 'In' - Size.Width = 145.000000000000000000 - end - object StringColumn3: TStringColumn - Header = 'Out' - Size.Width = 143.000000000000000000 + object openFile: TButton + Align = Client + Enabled = False + Margins.Left = 5.000000000000000000 + Margins.Top = 5.000000000000000000 + Margins.Right = 5.000000000000000000 + Margins.Bottom = 33.000000000000000000 + Size.Width = 103.000000000000000000 + Size.Height = 22.000000000000000000 + Size.PlatformDefault = False + Text = 'Choose file...' + Visible = False + OnClick = openFileClick + end + object _saveFile: TButton + Align = Client + Margins.Left = 5.000000000000000000 + Margins.Top = 33.000000000000000000 + Margins.Right = 5.000000000000000000 + Margins.Bottom = 5.000000000000000000 + Size.Width = 103.000000000000000000 + Size.Height = 0.000000000000000000 + Size.PlatformDefault = False + Text = 'Choose file...' + OnClick = _saveFileClick + end end end - object calculateButton: TButton - Align = Top - Enabled = False - Margins.Left = 5.000000000000000000 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 5.000000000000000000 - Position.Y = 94.000000000000000000 - Size.Width = 293.000000000000000000 - Size.Height = 23.000000000000000000 - Size.PlatformDefault = False - Text = 'Calculate' - Visible = False - OnClick = calculateButtonClick - end - object framesLayout: TLayout + object properties: TGroupBox Align = Top - Position.Y = 40.000000000000000000 - Size.Width = 350.500000000000000000 - Size.Height = 33.000000000000000000 + Margins.Left = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Position.X = 8.000000000000000000 + Position.Y = 96.000000000000000000 + Size.Width = 624.000000000000000000 + Size.Height = 160.000000000000000000 Size.PlatformDefault = False - object GridPanelLayout2: TGridPanelLayout + Text = 'Properties' + object memUsageLayout: TLayout + Align = Bottom + Margins.Bottom = 8.000000000000000000 + Position.Y = 124.000000000000000000 + Size.Width = 624.000000000000000000 + Size.Height = 28.000000000000000000 + Size.PlatformDefault = False + object memUsageLabel: TLabel + Align = Left + Margins.Left = 16.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 16.000000000000000000 + Size.Width = 140.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Text = 'Memory usage limit' + end + object memUsageTrackBar: TTrackBar + Align = Client + CanParentFocus = True + Min = 1.000000000000000000 + Orientation = Horizontal + Margins.Top = 4.000000000000000000 + Size.Width = 339.000000000000000000 + Size.Height = 17.000000000000000000 + Size.PlatformDefault = False + Value = 100.000000000000000000 + OnChange = memUsageTrackBarChange + end + object memUsageInfo: TLabel + Align = Right + Cursor = crHandPoint + HitTest = True + Margins.Right = 16.000000000000000000 + Margins.Bottom = 5.000000000000000000 + Position.X = 495.000000000000000000 + Size.Width = 113.000000000000000000 + Size.Height = 23.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'linklabelstyle' + TextSettings.FontColor = claWhite + TextSettings.HorzAlign = Trailing + Text = 'Unlimited' + TabOrder = 10 + OnClick = memUsageInfoClick + end + object memUsageInfoEdit: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Right + TextSettings.HorzAlign = Trailing + Position.X = 349.000000000000000000 + Enabled = False + Margins.Left = 13.000000000000000000 + Margins.Right = 15.000000000000000000 + Margins.Bottom = 5.000000000000000000 + Size.Width = 100.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Visible = False + KillFocusByReturn = True + OnValidate = memUsageInfoEditValidate + OnExit = memUsageInfoEditExit + end + end + object cacheUsageLayout: TLayout + Align = Bottom + Position.Y = 96.000000000000000000 + Size.Width = 624.000000000000000000 + Size.Height = 28.000000000000000000 + Size.PlatformDefault = False + object cacheUsageLimitLabel: TLabel + Align = Left + Margins.Left = 16.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 16.000000000000000000 + Size.Width = 140.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Text = 'Cache usage limit' + end + object cacheUsageTrackBar: TTrackBar + Align = Client + CanParentFocus = True + Min = 1.000000000000000000 + Orientation = Horizontal + Margins.Top = 4.000000000000000000 + Size.Width = 339.000000000000000000 + Size.Height = 17.000000000000000000 + Size.PlatformDefault = False + TabOrder = 8 + Value = 100.000000000000000000 + OnChange = cacheUsageTrackBarChange + end + object cacheUsageInfo: TLabel + Align = Right + Cursor = crHandPoint + HitTest = True + Margins.Right = 16.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 495.000000000000000000 + Size.Width = 113.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'linklabelstyle' + TextSettings.FontColor = claWhite + TextSettings.HorzAlign = Trailing + Text = 'Unlimited' + TabOrder = 9 + OnClick = cacheUsageInfoClick + end + object cacheUsageInfoEdit: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Right + TextSettings.HorzAlign = Trailing + Position.X = 357.000000000000000000 + Position.Y = 5.000000000000000000 + Enabled = False + Margins.Left = 13.000000000000000000 + Margins.Right = 15.000000000000000000 + Margins.Bottom = 5.000000000000000000 + Size.Width = 100.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Visible = False + KillFocusByReturn = True + OnValidate = cacheUsageInfoEditValidate + OnExit = cacheUsageInfoEditExit + end + end + object GridPanelLayout3: TGridPanelLayout Align = Client - Size.Width = 350.500000000000000000 - Size.Height = 33.000000000000000000 + Size.Width = 624.000000000000000000 + Size.Height = 96.000000000000000000 Size.PlatformDefault = False ColumnCollection = < item @@ -18674,13 +19353,13 @@ object MainForm: TMainForm end> ControlCollection = < item - Column = 0 - Control = Layout1 + Column = 1 + Control = properiesLayout2 Row = 0 end item - Column = 1 - Control = Layout2 + Column = 0 + Control = propertiesLayout1 Row = 0 end> RowCollection = < @@ -18690,148 +19369,965 @@ object MainForm: TMainForm item SizeStyle = Auto end> - object Layout1: TLayout + object properiesLayout2: TLayout Align = Client - Size.Width = 175.250000000000000000 - Size.Height = 33.000000000000000000 + Anchors = [] + Margins.Top = 16.000000000000000000 + Size.Width = 312.000000000000000000 + Size.Height = 80.000000000000000000 Size.PlatformDefault = False - object inFrame: TEdit + object customProp: TEdit Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Top + TabOrder = 8 + Position.X = 16.000000000000000000 + Position.Y = 31.000000000000000000 + Enabled = False + Margins.Left = 16.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 16.000000000000000000 + Size.Width = 280.000000000000000000 + Size.Height = 23.000000000000000000 + Size.PlatformDefault = False + TextPrompt = 'Separate flags with spaces!' + end + object customCheckbox: TCheckBox + Align = Top + Margins.Left = 16.000000000000000000 + Margins.Top = 8.000000000000000000 + Margins.Right = 16.000000000000000000 + Position.X = 16.000000000000000000 + Position.Y = 8.000000000000000000 + Size.Width = 280.000000000000000000 + Size.Height = 19.000000000000000000 + Size.PlatformDefault = False + TabOrder = 7 + Text = 'Custom Properies' + end + end + object propertiesLayout1: TLayout + Align = Client + Margins.Top = 16.000000000000000000 + Size.Width = 312.000000000000000000 + Size.Height = 80.000000000000000000 + Size.PlatformDefault = False + object missingFilesCheckbox: TCheckBox + Align = Top + Margins.Left = 16.000000000000000000 + Margins.Top = 8.000000000000000000 + Margins.Right = 16.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 16.000000000000000000 + Position.Y = 8.000000000000000000 + Size.Width = 280.000000000000000000 + Size.Height = 19.000000000000000000 + Size.PlatformDefault = False + TabOrder = 4 + Text = 'Render with missing files' + end + object threadedRender: TCheckBox + Align = Top + Margins.Left = 16.000000000000000000 + Margins.Right = 16.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 16.000000000000000000 + Position.Y = 54.000000000000000000 + Size.Width = 280.000000000000000000 + Size.Height = 19.000000000000000000 + Size.PlatformDefault = False + TabOrder = 6 + Text = 'Enable CPU Multithreading' + end + object soundCheckbox: TCheckBox + Align = Top + Margins.Left = 16.000000000000000000 + Margins.Right = 16.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 16.000000000000000000 + Position.Y = 31.000000000000000000 + Size.Width = 280.000000000000000000 + Size.Height = 19.000000000000000000 + Size.PlatformDefault = False + TabOrder = 5 + Text = 'Play sound when render finishes' + end + end + end + end + object outputModuleLayout: TLayout + Align = Top + EnableDragHighlight = False + Margins.Left = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Position.X = 8.000000000000000000 + Position.Y = 32.000000000000000000 + Size.Width = 624.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + object outputModuleBox: TComboBox + Align = Client + DropDownKind = Custom + Margins.Left = 16.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 8.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 472.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + TabOrder = 2 + OnChange = outputModuleBoxChange + end + object outputModuleLabel: TLabel + Align = Left + Size.Width = 128.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextSettings.WordWrap = False + Text = 'Output Module Preset:' + end + end + object renderSettingsLayout: TLayout + Align = Top + EnableDragHighlight = False + Margins.Left = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Position.X = 8.000000000000000000 + Position.Y = 64.000000000000000000 + Size.Width = 624.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + object renderSettingsEdit: TComboEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Client + TabOrder = 0 + DropDownKind = Custom + ItemHeight = 20.000000000000000000 + Items.Strings = ( + 'Current Settings' + 'Best Settings' + 'DV Settings' + 'Multi-Machine Settings') + ItemIndex = -1 + Margins.Left = 16.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 8.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 472.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + KillFocusByReturn = True + end + object renderSettingsLabel: TLabel + Align = Left + Size.Width = 128.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextSettings.WordWrap = False + Text = 'Render Settings:' + end + end + object GridPanelLayout1: TGridPanelLayout + Align = Client + Size.Width = 640.000000000000000000 + Size.Height = 88.000000000000000000 + Size.PlatformDefault = False + Visible = False + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = compLayout + Row = 0 + end + item + Column = 1 + Control = threadsLayout + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end + item + SizeStyle = Auto + end> + object compLayout: TLayout + Align = Client + Size.Width = 320.000000000000000000 + Size.Height = 88.000000000000000000 + Size.PlatformDefault = False + object compGrid: TStringGrid + Align = Client + CanFocus = True + ClipChildren = True + Enabled = False + Locked = True + Margins.Left = 5.000000000000000000 + Margins.Top = 5.000000000000000000 + Margins.Right = 5.000000000000000000 + Margins.Bottom = 5.000000000000000000 + Size.Width = 303.000000000000000000 + Size.Height = 231.000000000000000000 + Size.PlatformDefault = False + Visible = False + RowCount = 1 + Options = [Editing, RowLines, RowSelect, Header] + OnEditingDone = compGridEditingDone + Viewport.Width = 303.000000000000000000 + Viewport.Height = 231.000000000000000000 + object StringColumn1: TStringColumn + Header = 'Compositions list' + end + end + object compTopLayout: TLayout + Align = Top + Margins.Left = 5.000000000000000000 + Margins.Right = 5.000000000000000000 + Position.X = 5.000000000000000000 + Size.Width = 310.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object compSwitch: TSwitch + Align = Left + IsChecked = False + Margins.Top = 8.000000000000000000 + Margins.Right = 10.000000000000000000 + Margins.Bottom = 8.000000000000000000 + Position.Y = 8.000000000000000000 + Size.Width = 50.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + ParentShowHint = False + ShowHint = False + OnSwitch = compSwitchSwitch + end + object compSwitchLabel: TLabel Align = Client - Margins.Left = 5.000000000000000000 + Margins.Top = 5.000000000000000000 + Margins.Bottom = 5.000000000000000000 + Size.Width = 250.000000000000000000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + Text = 'Single Composition' + end + object compCount: TSpinBox + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Right + StyleLookup = 'spinboxstyle' + Cursor = crIBeam + Min = 2.000000000000000000 + Value = 2.000000000000000000 + Position.X = 208.000000000000000000 + Position.Y = 5.000000000000000000 + Enabled = False Margins.Top = 5.000000000000000000 Margins.Right = 5.000000000000000000 Margins.Bottom = 5.000000000000000000 - Size.Width = 96.250000000000000000 - Size.Height = 23.000000000000000000 + Size.Width = 74.000000000000000000 + Size.Height = 30.000000000000000000 Size.PlatformDefault = False - OnValidate = inFrameValidate + Visible = False + OnChange = compCountChange end - object startFrameLabel: TLabel + end + object compName: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Top + Position.X = 5.000000000000000000 + Position.Y = 45.000000000000000000 + Margins.Left = 5.000000000000000000 + Margins.Top = 5.000000000000000000 + Margins.Right = 5.000000000000000000 + Size.Width = 310.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + TextPrompt = 'Compositon name...' + OnTyping = compNameTyping + end + end + object threadsLayout: TLayout + Align = Client + Anchors = [] + Size.Width = 320.000000000000000000 + Size.Height = 88.000000000000000000 + Size.PlatformDefault = False + object threadsTopLayout: TLayout + Align = Top + Margins.Left = 5.000000000000000000 + Margins.Right = 5.000000000000000000 + Position.X = 5.000000000000000000 + Size.Width = 310.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object threadsSwitch: TSwitch Align = Left - AutoSize = True - Margins.Left = 5.000000000000000000 - Position.X = 5.000000000000000000 - Size.Width = 64.000000000000000000 - Size.Height = 33.000000000000000000 + IsChecked = False + Margins.Top = 8.000000000000000000 + Margins.Right = 10.000000000000000000 + Margins.Bottom = 8.000000000000000000 + Position.Y = 8.000000000000000000 + Size.Width = 50.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + ParentShowHint = False + ShowHint = False + OnSwitch = threadsSwitchSwitch + end + object threadsSwitchLabel: TLabel + Align = Client + Margins.Top = 5.000000000000000000 + Margins.Bottom = 5.000000000000000000 + Size.Width = 250.000000000000000000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + Text = 'Single Render' + end + object threadsCount: TComboEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Right + DropDownKind = Custom + ItemHeight = 19.000000000000000000 + Items.Strings = ( + '2' + '4' + '6' + '8' + '12' + '16' + '32' + '64' + '128') + ItemIndex = 0 + Text = '2' + Position.X = 280.500000000000000000 + Position.Y = 8.000000000000000000 + Enabled = False + Margins.Top = 8.000000000000000000 + Margins.Bottom = 8.000000000000000000 + Size.Width = 60.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False - TextSettings.WordWrap = False - Text = 'Start Frame:' + Visible = False + KillFocusByReturn = True + OnChange = threadsCountChange + OnTyping = threadsCountTyping end end - object Layout2: TLayout + object threadsGrid: TStringGrid Align = Client - Size.Width = 175.250000000000000000 + CanFocus = True + ClipChildren = True + Enabled = False + Margins.Left = 5.000000000000000000 + Margins.Top = 5.000000000000000000 + Margins.Right = 5.000000000000000000 + Margins.Bottom = 5.000000000000000000 + Size.Width = 293.000000000000000000 + Size.Height = 191.000000000000000000 + Size.PlatformDefault = False + Visible = False + RowCount = 2 + Options = [ColLines, RowLines, AutoDisplacement] + Viewport.Width = 293.000000000000000000 + Viewport.Height = 191.000000000000000000 + object StringColumn2: TStringColumn + Header = 'In' + Size.Width = 145.000000000000000000 + end + object StringColumn3: TStringColumn + Header = 'Out' + Size.Width = 143.000000000000000000 + end + end + object calculateButton: TButton + Align = Top + Enabled = False + Margins.Left = 5.000000000000000000 + Margins.Top = 5.000000000000000000 + Margins.Right = 5.000000000000000000 + Margins.Bottom = 5.000000000000000000 + Position.X = 5.000000000000000000 + Position.Y = 94.000000000000000000 + Size.Width = 293.000000000000000000 + Size.Height = 23.000000000000000000 + Size.PlatformDefault = False + Text = 'Calculate' + Visible = False + OnClick = calculateButtonClick + end + object framesLayout: TLayout + Align = Top + Position.Y = 40.000000000000000000 + Size.Width = 320.000000000000000000 Size.Height = 33.000000000000000000 Size.PlatformDefault = False - object endFrameLabel: TLabel - Align = Left - AutoSize = True - Margins.Left = 5.000000000000000000 - Position.X = 5.000000000000000000 - Size.Width = 59.000000000000000000 + object GridPanelLayout2: TGridPanelLayout + Align = Client + Size.Width = 320.000000000000000000 Size.Height = 33.000000000000000000 Size.PlatformDefault = False - TextSettings.WordWrap = False - Text = 'End Frame:' + ColumnCollection = < + item + Value = 50.000000000000000000 + end + item + Value = 50.000000000000000000 + end> + ControlCollection = < + item + Column = 0 + Control = Layout1 + Row = 0 + end + item + Column = 1 + Control = Layout2 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end + item + SizeStyle = Auto + end> + object Layout1: TLayout + Align = Client + Size.Width = 160.000000000000000000 + Size.Height = 33.000000000000000000 + Size.PlatformDefault = False + object inFrame: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Client + Margins.Left = 5.000000000000000000 + Margins.Top = 5.000000000000000000 + Margins.Right = 5.000000000000000000 + Margins.Bottom = 5.000000000000000000 + Size.Width = 81.000000000000000000 + Size.Height = 23.000000000000000000 + Size.PlatformDefault = False + OnValidate = inFrameValidate + end + object startFrameLabel: TLabel + Align = Left + AutoSize = True + Margins.Left = 5.000000000000000000 + Position.X = 5.000000000000000000 + Size.Width = 64.000000000000000000 + Size.Height = 33.000000000000000000 + Size.PlatformDefault = False + TextSettings.WordWrap = False + Text = 'Start Frame:' + end + end + object Layout2: TLayout + Align = Client + Size.Width = 160.000000000000000000 + Size.Height = 33.000000000000000000 + Size.PlatformDefault = False + object endFrameLabel: TLabel + Align = Left + AutoSize = True + Margins.Left = 5.000000000000000000 + Position.X = 5.000000000000000000 + Size.Width = 59.000000000000000000 + Size.Height = 33.000000000000000000 + Size.PlatformDefault = False + TextSettings.WordWrap = False + Text = 'End Frame:' + end + object outFrame: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Client + Margins.Left = 5.000000000000000000 + Margins.Top = 5.000000000000000000 + Margins.Right = 5.000000000000000000 + Margins.Bottom = 5.000000000000000000 + Size.Width = 86.000000000000000000 + Size.Height = 23.000000000000000000 + Size.PlatformDefault = False + KillFocusByReturn = True + OnValidate = outFrameValidate + end + end end - object outFrame: TEdit - Touch.InteractiveGestures = [LongTap, DoubleTap] - Align = Client + end + object ffmpegConcateLayout: TLayout + Align = Bottom + Enabled = False + Position.Y = 242.000000000000000000 + Size.Width = 350.500000000000000000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + Visible = False + object ffmpegCheckBox: TCheckBox + Align = Bottom Margins.Left = 5.000000000000000000 Margins.Top = 5.000000000000000000 Margins.Right = 5.000000000000000000 Margins.Bottom = 5.000000000000000000 - Size.Width = 101.250000000000000000 - Size.Height = 23.000000000000000000 + Position.X = 5.000000000000000000 + Position.Y = 6.000000000000000000 + Size.Width = 255.500000000000000000 + Size.Height = 19.000000000000000000 Size.PlatformDefault = False - KillFocusByReturn = True - OnValidate = outFrameValidate + Text = 'Concate using FFMPEG' + end + object ffmpegConfigButton: TButton + Align = MostRight + Enabled = False + Margins.Top = 5.000000000000000000 + Margins.Right = 5.000000000000000000 + Margins.Bottom = 5.000000000000000000 + Position.X = 265.500000000000000000 + Position.Y = 5.000000000000000000 + Size.Width = 80.000000000000000000 + Size.Height = 20.000000000000000000 + Size.PlatformDefault = False + Text = 'Config' + OnClick = ffmpegConfigButtonClick end end end end - object ffmpegConcateLayout: TLayout - Align = Bottom - Enabled = False - Position.Y = 242.000000000000000000 - Size.Width = 350.500000000000000000 - Size.Height = 30.000000000000000000 + object Layout3: TLayout + Align = Top + EnableDragHighlight = False + Margins.Left = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Position.X = 8.000000000000000000 + Size.Width = 624.000000000000000000 + Size.Height = 32.000000000000000000 Size.PlatformDefault = False - Visible = False - object ffmpegCheckBox: TCheckBox - Align = Bottom - Margins.Left = 5.000000000000000000 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 5.000000000000000000 - Position.Y = 6.000000000000000000 - Size.Width = 255.500000000000000000 - Size.Height = 19.000000000000000000 + object outputPathLabel: TLabel + Align = Left + Size.Width = 128.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextSettings.WordWrap = False + Text = 'Output file path:' + end + object outputPath: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Client + TabOrder = 0 + Margins.Left = 16.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 372.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False - Text = 'Concate using FFMPEG' end - object ffmpegConfigButton: TButton - Align = MostRight - Enabled = False - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 265.500000000000000000 - Position.Y = 5.000000000000000000 - Size.Width = 80.000000000000000000 - Size.Height = 20.000000000000000000 + object saveFile: TButton + Align = Right + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 8.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 520.000000000000000000 + Position.Y = 4.000000000000000000 + Size.Width = 96.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False - Text = 'Config' - OnClick = ffmpegConfigButtonClick + Text = 'Choose file...' + OnClick = _saveFileClick end end end + object TaskEditorStepOneToolbar: TToolBar + Cursor = crSizeAll + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + PopupMenu = ToolbarPopupMenu + Position.X = 1.000000000000000000 + Position.Y = 1.000000000000000000 + Size.Width = 638.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TabOrder = 1 + OnMouseDown = TaskEditorToolbarMouseDown + object TaskEditorStepOneLabel: TLabel + Align = Left + AutoSize = True + StyledSettings = [Family, FontColor] + Margins.Left = 16.000000000000000000 + Position.X = 16.000000000000000000 + Size.Width = 101.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 16.000000000000000000 + TextSettings.Font.StyleExt = {00070000000000000004000000} + TextSettings.WordWrap = False + Text = 'Project Setup' + end + object projectPath: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Client + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 16.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 347.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + OnDragOver = _projectPathDragOver + OnDragDrop = _projectPathDragDrop + end + object projectPathLabel: TLabel + Align = Left + AutoSize = True + Margins.Left = 64.000000000000000000 + Position.X = 181.000000000000000000 + Size.Width = 90.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextSettings.WordWrap = False + Text = 'Project file path: ' + end + end + object TaskEditorStepOneStatusBar: TStatusBar + Margins.Left = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Position.X = 1.000000000000000000 + Position.Y = 355.000000000000000000 + ShowSizeGrip = True + Size.Width = 638.000000000000000000 + Size.Height = 28.000000000000000000 + Size.PlatformDefault = False + TabOrder = 2 + object TaskEditorCompButton: TButton + Align = Right + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 530.000000000000000000 + Position.Y = 4.000000000000000000 + Size.Width = 104.000000000000000000 + Size.Height = 20.000000000000000000 + Size.PlatformDefault = False + Text = 'Compositions >>' + OnClick = TaskEditorCompButtonClick + end + object TaskEditorCancelButton: TButton + Align = Left + ModalResult = 2 + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 4.000000000000000000 + Position.Y = 4.000000000000000000 + Size.Width = 64.000000000000000000 + Size.Height = 20.000000000000000000 + Size.PlatformDefault = False + Text = 'Cancel' + OnClick = TaskEditorCancelButtonClick + end + end + end + object TaskEditorStepTwo: TTabItem + CustomIcon = < + item + end> + IsSelected = False + Size.Width = 8.000000000000000000 + Size.Height = 8.000000000000000000 + Size.PlatformDefault = False + StyleLookup = '' + TabOrder = 0 + Text = 'Compositions' + ExplicitSize.cx = 8.000000000000000000 + ExplicitSize.cy = 8.000000000000000000 + object TaskEditorStepTwoStatusBar: TStatusBar + Margins.Left = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Position.X = 1.000000000000000000 + Position.Y = 355.000000000000000000 + ShowSizeGrip = True + Size.Width = 638.000000000000000000 + Size.Height = 28.000000000000000000 + Size.PlatformDefault = False + TabOrder = 0 + object TaskEditorSaveButton: TButton + Align = Right + ModalResult = 1 + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 434.000000000000000000 + Position.Y = 4.000000000000000000 + Size.Width = 96.000000000000000000 + Size.Height = 20.000000000000000000 + Size.PlatformDefault = False + Text = 'Save Task' + OnClick = TaskEditorSaveButtonClick + end + object Button3: TButton + Align = Left + ModalResult = 2 + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 4.000000000000000000 + Position.Y = 4.000000000000000000 + Size.Width = 64.000000000000000000 + Size.Height = 20.000000000000000000 + Size.PlatformDefault = False + Text = 'Cancel' + OnClick = TaskEditorCancelButtonClick + end + object TaskEditorProjectButton: TButton + Align = Left + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 76.000000000000000000 + Position.Y = 4.000000000000000000 + Size.Width = 104.000000000000000000 + Size.Height = 20.000000000000000000 + Size.PlatformDefault = False + Text = '<< Project Setup' + OnClick = TaskEditorProjectButtonClick + end + object TaskEditorCreateTaskButton: TButton + Align = Right + ModalResult = 1 + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 538.000000000000000000 + Position.Y = 4.000000000000000000 + Size.Width = 96.000000000000000000 + Size.Height = 20.000000000000000000 + Size.PlatformDefault = False + Text = 'Create Task' + OnClick = TaskEditorCreateTaskButtonClick + end + end + object TaskEditorStepTwoToolbar: TToolBar + Cursor = crSizeAll + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + PopupMenu = ToolbarPopupMenu + Position.X = 1.000000000000000000 + Position.Y = 1.000000000000000000 + Size.Width = 638.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TabOrder = 1 + OnMouseDown = TaskEditorToolbarMouseDown + object NewTaskStepTwoLabel: TLabel + Align = Left + StyledSettings = [Family, FontColor] + Margins.Left = 16.000000000000000000 + Position.X = 16.000000000000000000 + Size.Width = 120.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 16.000000000000000000 + TextSettings.Font.StyleExt = {00070000000000000004000000} + Text = 'Compositions' + end + object TaskEditorCompCount: TSpinBox + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Right + Cursor = crIBeam + Min = 1.000000000000000000 + Max = 128.000000000000000000 + Value = 1.000000000000000000 + Position.X = 554.000000000000000000 + Position.Y = 4.000000000000000000 + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 80.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + OnChange = TaskEditorCompCountChange + end + object TaskEditorCompCountLabel: TLabel + Align = Right + AutoSize = True + Position.X = 515.000000000000000000 + Size.Width = 35.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextSettings.HorzAlign = Trailing + TextSettings.WordWrap = False + Text = 'Count:' + end + end + object TaskEditorCompGrid: TStringGrid + Align = Client + CanFocus = True + ClipChildren = True + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 632.000000000000000000 + Size.Height = 314.000000000000000000 + Size.PlatformDefault = False + TabOrder = 2 + RowCount = 1 + Options = [Editing, AlwaysShowEditor, ColumnResize, ColLines, RowLines, RowSelect, Tabs, Header, CancelEditingByDefault, AutoDisplacement] + OnEditingDone = TaskEditorCompGridEditingDone + Viewport.Width = 632.000000000000000000 + Viewport.Height = 314.000000000000000000 + object CompNumCol: TIntegerColumn + Header = '#' + ReadOnly = True + Size.Width = 20.000000000000000000 + end + object CompositionCol: TStringColumn + Header = 'Composition title' + Size.Width = 300.000000000000000000 + end + object StartFrameCol: TIntegerColumn + Header = 'Start Frame' + end + object EndFrameCol: TIntegerColumn + Header = 'End Frame' + end + object SplitCol: TIntegerColumn + Header = 'Split' + end + end end end - object UpdateInfo: TStatusBar - Align = MostBottom - Position.Y = 526.000000000000000000 - ShowSizeGrip = False - Size.Width = 701.000000000000000000 - Size.Height = 35.000000000000000000 + object PopupAniOpenHeight: TFloatAnimation + AnimationType = InOut + Duration = 0.500000000000000000 + Interpolation = Circular + OnFinish = PopupAniOpenFinish + PropertyName = 'Height' + StartValue = 1.000000000000000000 + StopValue = 384.000000000000000000 + end + object PopupAniCloseHeight: TFloatAnimation + AnimationType = InOut + Duration = 0.500000000000000000 + Interpolation = Circular + OnFinish = PopupAniCloseFinish + PropertyName = 'Height' + StartValue = 384.000000000000000000 + StopValue = 1.000000000000000000 + end + object PopupAniCloseWidth: TFloatAnimation + AnimationType = InOut + Duration = 0.500000000000000000 + Interpolation = Circular + OnFinish = PopupAniCloseFinish + PropertyName = 'Width' + StartValue = 640.000000000000000000 + StopValue = 1.000000000000000000 + end + object PopupAniOpenWidth: TFloatAnimation + AnimationType = InOut + Duration = 0.500000000000000000 + Interpolation = Circular + OnFinish = PopupAniOpenFinish + PropertyName = 'Width' + StartValue = 1.000000000000000000 + StopValue = 640.000000000000000000 + end + end + object ProjectAwait: TLayout + Align = Contents + Enabled = False + HitTest = True + Size.Width = 1220.000000000000000000 + Size.Height = 617.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 68 + object ProjectAwaitMessage: TPanel + Align = Center + HitTest = False + Size.Width = 320.000000000000000000 + Size.Height = 64.000000000000000000 Size.PlatformDefault = False - StyleLookup = 'statusbarnogripstyle' - Visible = False - object downloadButton: TButton + TabOrder = 0 + object ProjectAwaitIndicator: TAniIndicator + Align = MostLeft + Enabled = True + Margins.Left = 16.000000000000000000 + Margins.Top = 16.000000000000000000 + Margins.Right = 16.000000000000000000 + Margins.Bottom = 16.000000000000000000 + Position.X = 16.000000000000000000 + Position.Y = 16.000000000000000000 + Size.Width = 32.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + end + object ShadowEffect1: TShadowEffect + Distance = 3.000000000000000000 + Direction = 90.000000000000000000 + Softness = 1.000000000000000000 + Opacity = 0.500000000000000000 + ShadowColor = claBlack + end + object ProjectAwaitLabel: TLabel Align = Client - Margins.Left = 10.000000000000000000 - Margins.Top = 7.000000000000000000 - Margins.Right = 10.000000000000000000 - Margins.Bottom = 7.000000000000000000 - Size.Width = 508.000000000000000000 - Size.Height = 21.000000000000000000 + Size.Width = 256.000000000000000000 + Size.Height = 31.000000000000000000 Size.PlatformDefault = False - Text = 'Download from GitHub' - OnClick = downloadButtonClick + TextSettings.VertAlign = Trailing + Text = 'Trying to read After Effects project...' + TabOrder = 71 end - object UpdateLabel: TLabel - Align = Left - AutoSize = True - StyledSettings = [Family, FontColor] - Margins.Left = 10.000000000000000000 - Position.X = 10.000000000000000000 - Size.Width = 163.000000000000000000 - Size.Height = 35.000000000000000000 + object ProjectAwaitStatusLabel: TLabel + Align = Bottom + Margins.Bottom = 16.000000000000000000 + Position.X = 64.000000000000000000 + Position.Y = 31.000000000000000000 + Size.Width = 256.000000000000000000 + Size.Height = 17.000000000000000000 Size.PlatformDefault = False - TextSettings.Font.Size = 14.000000000000000000 - TextSettings.Font.StyleExt = {00070000000000000004000000} - TextSettings.WordWrap = False - Text = 'New version is available!' + Text = 'Elapsed %d seconds of %d' + TabOrder = 72 end end end + object ProjectReaderAwait: TTimer + Enabled = False + Interval = 5 + OnTimer = ProjectReaderAwaitTimer + Left = 64 + Top = 384 + end + object UpdateNetHTTPClient: TNetHTTPClient + Asynchronous = True + ConnectionTimeout = 10000 + ResponseTimeout = 10000 + UserAgent = 'Embarcadero URI Client/1.0' + OnRequestCompleted = UpdateNetHTTPClientRequestCompleted + OnRequestError = UpdateNetHTTPClientRequestError + Left = 64 + Top = 288 + end object BindingsList1: TBindingsList Methods = <> OutputConverters = <> - Left = 136 - Top = 488 + Left = 64 + Top = 336 object LinkControlToPropertyEnabled: TLinkControlToProperty Category = 'Quick Bindings' Control = customCheckbox @@ -18962,14 +20458,4 @@ object MainForm: TMainForm InitializeControlValue = False end end - object UpdateNetHTTPClient: TNetHTTPClient - Asynchronous = True - ConnectionTimeout = 10000 - ResponseTimeout = 10000 - UserAgent = 'Embarcadero URI Client/1.0' - OnRequestCompleted = UpdateNetHTTPClientRequestCompleted - OnRequestError = UpdateNetHTTPClientRequestError - Left = 136 - Top = 448 - end end diff --git a/src/MainUnit.pas b/src/MainUnit.pas index 19a3040..591ac46 100644 --- a/src/MainUnit.pas +++ b/src/MainUnit.pas @@ -2,10 +2,10 @@ (* AErender Launcher *) (* MainUnit.pas *) -(* Lily Stilson // 2019 - 2020 *) +(* Lily Stilson // 2019 - 2021 *) (* MIT License *) (* *) -(* Copyright (c) 2019 - 2020 Alice Romanets *) +(* Copyright (c) 2019 - 2021 Alice Romanets *) (* *) (* Permission is hereby granted, free of charge, to any person obtaining a copy *) (* of this software and associated documentation files (the "Software"), to deal *) @@ -27,6 +27,8 @@ interface +{$DEFINE DEBUG_MODE} + uses {$REGION ' System Namespaces '} System.SysUtils, @@ -41,6 +43,7 @@ interface System.Threading, System.Rtti, System.Bindings.Outputs, + System.Math, System.Notification, System.ImageList, System.Net.URLClient, @@ -81,6 +84,9 @@ interface FMX.ComboEdit, FMX.Text, FMX.BufferedLayout, + FMX.CompLabel, + FMX.TreeView, + FMX.TabControl, {$ENDREGION} {$REGION ' Data Lib Namespaces '} @@ -89,13 +95,18 @@ interface Xml.XMLIntf, Xml.adomxmldom, Xml.XMLDoc, - Data.Bind.Components, Xml.omnixmldom, + Data.Bind.Components, {$ENDREGION} {$REGION ' Additional Liraries '} - MathExpParser, - AErenderLauncherLocalization, + AErenderLauncher.Types, + AErenderLauncher.Localization, + AErenderLauncher.IO, + AErenderLauncher.Rendering, + AErenderLauncher.Math, + AErenderLauncher.Math.ExpParser, + AErenderLauncher.SysUtils, {$ENDREGION} {$REGION ' Windows Only Libraries '}{$IFDEF MSWINDOWS} @@ -109,103 +120,28 @@ interface {$ENDIF MACOS}{$ENDREGION} type - // This won't be required in the next RAD Studio version - TComboEdit = class(TCustomComboEdit) - procedure OnValidateEvent(Sender: TObject; var Text: string); - procedure OnValidatingEvent(Sender: TObject; var Text: string); - published - property CanFocus default True; - property CanParentFocus; - property Cursor default crIBeam; - property DisableFocusEffect; - property DropDownCount default TComboEditModel.DefaultDropDownCount; - property DropDownKind default TComboEditModel.DefaultDropDownKind; - property KeyboardType; - property ReadOnly; - property ItemHeight; - property ItemWidth; - property Items; - property ItemIndex; - property ListBoxResource; - property Text; - property TextSettings; - property Position; - property Width; - property Height; - property HelpContext; - property HelpKeyword; - property HelpType; - property Hint; - property StyledSettings; - property StyleLookup; - property ClipChildren default False; - property ClipParent default False; - property DragMode default TDragMode.dmManual; - property EnableDragHighlight default True; - property Enabled default True; - property Locked default False; - property HitTest default True; - property Padding; - property Opacity; - property Margins; - property PopupMenu; - property RotationAngle; - property RotationCenter; - property Scale; - property Size; - property TouchTargetExpansion; - property Visible default True; - property Caret; - property KillFocusByReturn; - property ParentShowHint; - property ShowHint; - { events } - property OnChange; - property OnChangeTracking; - property OnTyping; - property OnApplyStyleLookup; - property OnClosePopup; - property OnPopup; - { Drag and Drop events } - property OnDragEnter; - property OnDragLeave; - property OnDragOver; - property OnDragDrop; - property OnDragEnd; - { Keyboard events } - property OnKeyDown; - property OnKeyUp; - { Mouse events } - property OnCanFocus; - property OnClick; - property OnDblClick; - property OnEnter; - property OnExit; - property OnMouseDown; - property OnMouseMove; - property OnMouseUp; - property OnMouseWheel; - property OnMouseEnter; - property OnMouseLeave; - property OnPainting; - property OnPaint; - property OnResize; - property OnResized; - property OnPresentationNameChoosing; - property OnValidate; - property OnValidating; + SizeConstraints = record + private + const + MIN_WIDTH = 640; + + MIN_HEIGHT_NO_UPD = 540; + //EXP_HEIGHT_NO_UPD = 540; + + MIN_HEIGHT_UPD = 576; // 540 + 36 + //EXP_HEIGHT_UPD = 576; end; TMainForm = class(TForm) - projectPathLabel: TLabel; + _projectPathLabel: TLabel; inputFileLayout: TLayout; - outputPathLabel: TLabel; + _outputPathLabel: TLabel; InputLabels: TLayout; pathLayout: TLayout; - projectPath: TEdit; + _projectPath: TEdit; fileChooseLayout: TLayout; - outputPath: TEdit; + _outputPath: TEdit; openFile: TButton; - saveFile: TButton; + _saveFile: TButton; properties: TGroupBox; soundCheckbox: TCheckBox; missingFilesCheckbox: TCheckBox; @@ -256,15 +192,13 @@ TMainForm = class(TForm) LinkControlToPropertyEnabled9: TLinkControlToProperty; OnyxBlueStyle: TStyleBook; infoButton: TButton; - Image1: TImage; - Image2: TImage; launcherLayout: TLayout; outputModuleBox: TComboBox; outputModuleLabel: TLabel; outputModuleLayout: TLayout; renderSettingsLayout: TLayout; - renderSettingsBox: TComboBox; renderSettingsLabel: TLabel; + renderSettingsEdit: TComboEdit; MainMenu1: TMainMenu; launcherItem: TMenuItem; fileItem: TMenuItem; @@ -289,8 +223,6 @@ TMainForm = class(TForm) memUsageInfoEdit: TEdit; cacheUsageInfoEdit: TEdit; AERModernStyle: TStyleBook; - settingsIconFill: TFillRGBEffect; - infoIconFill: TFillRGBEffect; AERModernAnimatedStyle: TStyleBook; UpdateLabel: TLabel; downloadButton: TButton; @@ -316,9 +248,76 @@ TMainForm = class(TForm) LinkControlToPropertyVisible7: TLinkControlToProperty; LinkControlToPropertyEnabled10: TLinkControlToProperty; UpdateNetHTTPClient: TNetHTTPClient; - Button1: TButton; recentItem: TMenuItem; separatorItem3: TMenuItem; + TasksToolbar: TToolBar; + TasksLabel: TLabel; + RemoveTaskButton: TButton; + AddTaskButton: TButton; + TasksTreeView: TTreeView; + TasksPopupMenu: TPopupMenu; + AddTaskPopupItem: TMenuItem; + EditTaskPopupItem: TMenuItem; + DeleteTaskPopupItem: TMenuItem; + TaskEditorPopup: TPopup; + PopupAniOpenHeight: TFloatAnimation; + PopupAniCloseHeight: TFloatAnimation; + TaskEditorCompButton: TButton; + ToolbarPopupMenu: TPopupMenu; + ToolbarIconsOnly: TMenuItem; + ToolbarIconsAndText: TMenuItem; + ToolbarTextOnly: TMenuItem; + TaskEditorTabControl: TTabControl; + TaskEditorStepOne: TTabItem; + TaskEditorStepTwo: TTabItem; + TaskEditorStepOneStatusBar: TStatusBar; + TaskEditorCancelButton: TButton; + TaskEditorStepTwoStatusBar: TStatusBar; + TaskEditorSaveButton: TButton; + Button3: TButton; + TaskEditorProjectButton: TButton; + TaskEditorStepOneToolbar: TToolBar; + TaskEditorStepOneLabel: TLabel; + TaskEditorStepTwoToolbar: TToolBar; + NewTaskStepTwoLabel: TLabel; + TaskEditorCompGrid: TStringGrid; + CompositionCol: TStringColumn; + StartFrameCol: TIntegerColumn; + EndFrameCol: TIntegerColumn; + SplitCol: TIntegerColumn; + TaskEditorCompCount: TSpinBox; + TaskEditorCompCountLabel: TLabel; + CompNumCol: TIntegerColumn; + projectPath: TEdit; + projectPathLabel: TLabel; + Layout3: TLayout; + outputPathLabel: TLabel; + outputPath: TEdit; + saveFile: TButton; + GridPanelLayout4: TGridPanelLayout; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + TasksIsEmptyLabel: TLabel; + TasksIsEmpty: TLayout; + TeskIsEmptyAddLabel: TLabel; + Label5: TLabel; + DebugLabel: TLabel; + TaskEditorCreateTaskButton: TButton; + TasksPopupSeparator1: TMenuItem; + TaskItemDisplay: TMenuItem; + PopupAniCloseWidth: TFloatAnimation; + PopupAniOpenWidth: TFloatAnimation; + ProjectReaderAwait: TTimer; + ProjectAwaitMessage: TPanel; + ProjectAwaitIndicator: TAniIndicator; + ShadowEffect1: TShadowEffect; + ProjectAwaitLabel: TLabel; + ProjectAwait: TLayout; + ProjectAwaitStatusLabel: TLabel; + Label6: TLabel; + launchPopupBox: TPopupBox; procedure FormResize(Sender: TObject); procedure compSwitchSwitch(Sender: TObject); procedure FormCreate(Sender: TObject); @@ -330,7 +329,7 @@ TMainForm = class(TForm) procedure threadsCount1Change(Sender: TObject); procedure openFileClick(Sender: TObject); procedure launchButtonClick(Sender: TObject); - procedure saveFileClick(Sender: TObject); + procedure _saveFileClick(Sender: TObject); procedure infoButtonClick(Sender: TObject); procedure exitItemClick(Sender: TObject); procedure docsItemClick(Sender: TObject); @@ -341,17 +340,14 @@ TMainForm = class(TForm) procedure cacheUsageTrackBarChange(Sender: TObject); procedure memUsageInfoClick(Sender: TObject); procedure memUsageInfoEditValidate(Sender: TObject; var Text: string); - procedure cacheUsageInfoEditValidate(Sender: TObject; - var Text: string); + procedure cacheUsageInfoEditValidate(Sender: TObject; var Text: string); procedure cacheUsageInfoClick(Sender: TObject); procedure cacheUsageInfoEditExit(Sender: TObject); procedure memUsageInfoEditExit(Sender: TObject); procedure downloadButtonClick(Sender: TObject); procedure ffmpegConfigButtonClick(Sender: TObject); - procedure projectPathDragDrop(Sender: TObject; const Data: TDragObject; - const Point: TPointF); - procedure projectPathDragOver(Sender: TObject; const Data: TDragObject; - const Point: TPointF; var Operation: TDragOperation); + procedure _projectPathDragDrop(Sender: TObject; const Data: TDragObject; const Point: TPointF); + procedure _projectPathDragOver(Sender: TObject; const Data: TDragObject; const Point: TPointF; var Operation: TDragOperation); procedure outFrameValidate(Sender: TObject; var Text: string); procedure outputModuleBoxChange(Sender: TObject); procedure compNameTyping(Sender: TObject); @@ -359,91 +355,134 @@ TMainForm = class(TForm) procedure winOutModuleEditorItemClick(Sender: TObject); procedure inFrameValidate(Sender: TObject; var Text: string); procedure threadsCountChange(Sender: TObject); - procedure UpdateNetHTTPClientRequestError(const Sender: TObject; - const AError: string); - procedure UpdateNetHTTPClientRequestCompleted(const Sender: TObject; - const AResponse: IHTTPResponse); - procedure ReadAERQ(Path: String); + procedure UpdateNetHTTPClientRequestError(const Sender: TObject; const AError: string); + procedure UpdateNetHTTPClientRequestCompleted(const Sender: TObject; const AResponse: IHTTPResponse); + + function ReadAERQ(Path: String): TObjectList; + function ReadAER(Path: String): TRenderTask; + procedure SetLanguage(LanguageCode: Integer); procedure UpdateOutputModules; - procedure UpdateRenderSettings; + procedure threadsCountTyping(Sender: TObject); procedure threadsCountExit(Sender: TObject); + procedure AddToRecents(Item: String); procedure RecentProjectSelected(Sender: TObject); + procedure InflateRecents; procedure ReInflateRecents; - procedure compGridEditingDone(Sender: TObject; const ACol, - ARow: Integer); - procedure renderSettingsBoxChange(Sender: TObject); + + procedure compGridEditingDone(Sender: TObject; const ACol, ARow: Integer); + procedure TasksTreeViewDragChange(SourceItem, DestItem: TTreeViewItem; var Allow: Boolean); + procedure TasksTreeViewKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); + procedure TasksTreeViewMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); + procedure TasksPopupMenuPopup(Sender: TObject); + + procedure CheckAndPopup(const APath: String; const TryParse: Boolean); + + //procedure TaskAddProcess; + procedure ExtractParserToAppDir; + + procedure BeginTryParseAEP(const APath: String); + + procedure AddTaskButtonClick(Sender: TObject); + procedure RemoveTaskButtonClick(Sender: TObject); + procedure PopupAniOpenFinish(Sender: TObject); + procedure TaskEditorCancelButtonClick(Sender: TObject); + procedure PopupAniCloseFinish(Sender: TObject); + procedure TaskEditorPopupPopup(Sender: TObject); + procedure TaskEditorCompButtonClick(Sender: TObject); + procedure TaskEditorProjectButtonClick(Sender: TObject); + procedure TaskEditorCreateTaskButtonClick(Sender: TObject); + procedure TaskEditorCompCountChange(Sender: TObject); + procedure TaskEditorTabControlChange(Sender: TObject); + procedure TaskEditorCompGridEditingDone(Sender: TObject; const ACol, ARow: Integer); + + procedure UpdateTasksList; + + procedure RenderTasksOnNotify(Sender: TObject; const Item: TRenderTask; Action: TCollectionNotification); + + procedure TasksTreeViewDragDrop(Sender: TObject; const Data: TDragObject; const Point: TPointF); + + procedure TasksTreeViewItemDblClick(Sender: TObject); + procedure TaskEditorSaveButtonClick(Sender: TObject); + procedure ProjectReaderAwaitTimer(Sender: TObject); + procedure TaskEditorToolbarMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); private { Private declarations } + FCurrentItem: String; + //Settings: TSettings; + TMathParser: TExpressionParser; + //{$IFDEF MSWINDOWS}procedure CreateHandle; override;{$ENDIF MSWINDOWS} {$IFDEF MSWINDOWS}procedure WMNCPaint(var AMessage: TMessage); message WM_NCPAINT;{$ENDIF} public { Public declarations } + ImportableProjectPath: String; + ProjectJson: String; + ProjectJsonPath: String; + procedure DragEnter(const Data: TDragObject; const Point: TPointF); override; procedure DragOver(const Data: TDragObject; const Point: TPointF; var Operation: TDragOperation); override; procedure DragDrop(const Data: TDragObject; const Point: TPointF); override; end; - OutputModule = record - Module, - Mask: String; - Imported: Boolean; - end; - RenderSetting = record - Setting: String; - Imported: Boolean; - end; + function GetPlatformMemorySize: Int64; function GetFFMPEGPath: WideString; - function GetDirectoryFiles(Directory: String): TArray; function KillProcess(ProcessName: String): Integer; - procedure InitOutputModules; - procedure InitRenderSettings; - procedure InitConfiguration(Path: String); - procedure LoadConfiguration(Path: String); - procedure LoadLegacyConfiguration(Path: String); - procedure SaveConfiguration(Path: String); - function Open(Path: String): Integer; - function Execute(Path: String): Integer; - function BackgroundExecute(Path: String): Integer; +// procedure InitOutputModules; +// procedure InitConfiguration(Path: String); +// procedure LoadConfiguration(Path: String); +// procedure LoadLegacyConfiguration(Path: String); +// procedure SaveConfiguration(Path: String); procedure ChangeLanguage(LanguageCode: Integer); procedure InitLanguage(PATH: String); const - APPVERSION = 'v0.8.5-beta'; - //APPVERSION_DEMO = 'v0.8.5-beta'; + APPVERSION = 'v0.8.9-beta'; AERL_REPO_RELEASES = 'https://api.github.com/repos/lilystilson/aerender-launcher/releases'; - PLATFORMPATHSEPARATOR = {$IFDEF MSWINDOWS}'\'{$ENDIF MSWINDOWS} - {$IFDEF MACOS}'/'{$ENDIF MACOS}; + AWAIT_TIMEOUT = 10000; + //MAX_SIMULTANEOUS_THREADS = 8; var MainForm: TMainForm; (* Main Form Declaration *) - APPFOLDER, VER, AERPATH, DEFPRGPATH, DEFOUTPATH, - ERR, gitResponse, gitVersion, gitDownload, ffmpegPath, - AERH, tempSavePath, DelTempFiles: String; (* Required variables for configuration file *) +// APPFOLDER, VER, AERPATH, DEFPRGPATH, DEFOUTPATH, +// ERR, +// AERH, tempSavePath, DelTempFiles: String; (* Required variables for configuration file *) + gitResponse, gitVersion, gitDownload, ffmpegPath: String; gitRelease: TJsonValue; (* GitHub API's returning JSON file *) UpdateAvailable: Boolean = False; (* Represents app updates availability *) FFMPEG: Boolean = False; (* Represents FFMPEG availability *) + AEParser: String = ''; RenderWindowSender: TButton; (* Who opened Rendering window? *) - LANG, STYLE, ONRENDERSTART: Integer; (* Language, Theme and OnRenderStart values *) - LogFiles: TArray; (* All the aerender log files here *) - OutputModules: TArray; (* All the After Effects output modules here *) - RenderSettings: TArray; - OMCount: Cardinal; +// Settings.Language, STYLE, ONRENDERSTART: Integer; (* Language, Theme and OnRenderStart values *) +// LogFiles: TArray; (* All the aerender log files here *) +// Settings.OutputModules: TArray; (* All the After Effects output modules here *) +// RenderSettings: TArray; +// OMCount: Cardinal; //TempOutputModule: OutputModule; (* Temporary Output Module used from import *) - TMathParser: MathExpParser.TExpressionParser; (* Mathematical parser for frames calculation *) + //TMathParser: TExpressionParser; (* Mathematical parser for frames calculation *) + FHandleDragDirectly: Boolean = False; (* For implementation of DragDrop functional *) + PARAMSTART: Boolean = False; + isRendering: Boolean = False; + + TryParseAEP: Boolean = True; + Language: TArray; + Recents: array [0..9] of String; RecentsMenuItems: TArray; + TempThreadsStr: String = ''; ImportedPath: String = ''; + AwaitElapsedTime: Cardinal = 0; + implementation uses @@ -460,19 +499,6 @@ implementation {$R *.fmx} -procedure TComboEdit.OnValidateEvent(Sender: TObject; var Text: string); -begin - TempThreadsStr := Text; -end; - -procedure TComboEdit.OnValidatingEvent(Sender: TObject; var Text: string); -begin - if (TempThreadsStr <> '') then begin - Text := TempThreadsStr; - TempThreadsStr := ''; - end; -end; - {$REGION ' Routines '} /// @@ -484,7 +510,9 @@ procedure TMainForm.WMNCPaint(var AMessage: TMessage); begin var hWnd: HWND := FormToHWND(Self); - SetClassLong(hWnd, GCL_STYLE, GetClassLong(hWnd, GCL_STYLE) or CS_DROPSHADOW); + SetClassLong(hWnd, GCL_STYLE, GetClassLong(hWnd, GCL_STYLE) or CS_DROPSHADOW); + + SystemParametersInfo(SPI_SETDROPSHADOW, 0, PVOID(True), 0); {var v: Integer := 2; @@ -501,24 +529,17 @@ procedure TMainForm.WMNCPaint(var AMessage: TMessage); {$ENDIF MSWINDOWS} function GetPlatformMemorySize: Int64; //BYTES, BLYAD -var - {$IFDEF MSWINDOWS} - MS_Ex: MemoryStatusEx; - {$ENDIF MSWINDOWS} - {$IFDEF MACOS} - res: Int64; - len: size_t; - {$ENDIF MACOS} begin {$IFDEF MSWINDOWS} - FillChar (MS_Ex, SizeOf (MemoryStatusEx), #0); - MS_Ex.dwLength := SizeOf (MemoryStatusEx); - GlobalMemoryStatusEx (MS_Ex); + var MS_Ex: MemoryStatusEx; + FillChar(MS_Ex, SizeOf(MemoryStatusEx), #0); + MS_Ex.dwLength := SizeOf(MemoryStatusEx); + GlobalMemoryStatusEx(MS_Ex); Result := MS_Ex.ullTotalPhys; {$ENDIF MSWINDOWS} {$IFDEF MACOS} - len := SizeOf (Result); - res := SysCtlByName ('hw.memsize', @Result, @len, nil, 0); + var len: size_t := SizeOf (Result); + var res: Int64 := SysCtlByName ('hw.memsize', @Result, @len, nil, 0); if res <> 0 then RaiseLastOSError; {$ENDIF MACOS} @@ -532,7 +553,7 @@ function GetFFMPEGPath: WideString; {$IFDEF MSWINDOWS}AERenderDirectory := 'C:\ProgramData\AErender';{$ENDIF MSWINDOWS} {$IFDEF MACOS}AERenderDirectory := GetEnvironmentVariable('HOME') + '/Documents/AErender/';{$ENDIF} - Folders := TDirectory.GetDirectories(AErenderDirectory); + Folders := TDirectory.GetDirectories(APPFOLDER); for var i := 0 to High(Folders) do if Folders[i].Contains('ffmpeg') then begin Result := Folders[i]; @@ -541,18 +562,6 @@ function GetFFMPEGPath: WideString; Result := ''; end; -function GetDirectoryFiles(Directory: String): TArray; -var - Files: System.TArray; -begin - Files := TDirectory.GetFiles(Directory); - for var i := 0 to High(Files) do - begin - SetLength(Result, i+1); - Result[i] := Files[i]; - end; -end; - function KillProcess(ProcessName: String): Integer; {$IFDEF MSWINDOWS} const @@ -594,7 +603,7 @@ function KillProcess(ProcessName: String): Integer; procedure InitLanguage(PATH: String); begin - //LANG := 1; + //Settings.Language := 1; var ResourceEN: TResourceStream := TResourceStream.Create(HInstance, 'Language_EN', RT_RCDATA); var ResourceRU: TResourceStream := TResourceStream.Create(HInstance, 'Language_RU', RT_RCDATA); Language := [ @@ -602,377 +611,301 @@ procedure InitLanguage(PATH: String); LauncherText.InitFromResourceStream(ResourceRU) ]; - ChangeLanguage(LANG); + ChangeLanguage(Settings.Language); end; -procedure InitOutputModules; -begin - SetLength (OutputModules, 10); - - OutputModules[0].Module := 'Lossless'; - OutputModules[0].Mask := '[compName].[fileExtension]'; - OutputModules[0].Imported := False; - - OutputModules[1].Module := 'AIFF 48kHz'; - OutputModules[1].Mask := '[compName].[fileExtension]'; - OutputModules[1].Imported := False; - - OutputModules[2].Module := 'Alpha Only'; - OutputModules[2].Mask := '[compName].[fileExtension]'; - OutputModules[2].Imported := False; - - OutputModules[3].Module := 'AVI DV NTSC 48kHz'; - OutputModules[3].Mask := '[compName].[fileExtension]'; - OutputModules[3].Imported := False; - - OutputModules[4].Module := 'AVI DV PAL 48kHz'; - OutputModules[4].Mask := '[compName].[fileExtension]'; - OutputModules[4].Imported := False; - - OutputModules[5].Module := 'Lossless with Alpha'; - OutputModules[5].Mask := '[compName].[fileExtension]'; - OutputModules[5].Imported := False; - - OutputModules[6].Module := 'Multi-Machine Sequence'; - OutputModules[6].Mask := '[compName]_[#####].[fileExtension]'; - OutputModules[6].Imported := False; - - OutputModules[7].Module := 'Photoshop'; - OutputModules[7].Mask := '[compName]_[#####].[fileExtension]'; - OutputModules[7].Imported := False; - - OutputModules[8].Module := 'Save Current Preview'; - OutputModules[8].Mask := '[compName].[fileExtension]'; - OutputModules[8].Imported := False; - - OutputModules[9].Module := 'TIFF Sequence with Alpha'; - OutputModules[9].Mask := '[compName]_[#####].[fileExtension]'; - OutputModules[9].Imported := False; -end; - -procedure InitRenderSettings; -begin - SetLength (RenderSettings, 5); - - RenderSettings[0].Setting := 'Current Settings'; - RenderSettings[0].Imported := False; - - RenderSettings[1].Setting := 'Best Settings'; - RenderSettings[1].Imported := False; - - RenderSettings[2].Setting := 'DV Settings'; - RenderSettings[2].Imported := False; - - RenderSettings[3].Setting := 'Draft Settings'; - RenderSettings[3].Imported := False; - - RenderSettings[4].Setting := 'Multi-Machine Settings'; - RenderSettings[4].Imported := False; - - //RenderSettings[4].Setting := 'Custom'; - //RenderSettings[4].Imported := False; -end; - -procedure InitConfiguration(Path: String); -var - Config: IXMLDocument; - RootNode: IXMLNode; - ChildNode: IXMLNode; -begin - //InitLanguage; - InitOutputModules; - InitRenderSettings; - - Config := TXMLDocument.Create(nil); - Config.Active := True; - Config.Encoding := 'utf-8'; - Config.Options := [doNodeAutoIndent]; - - RootNode := Config.AddChild('launcherconfig'); - - RootNode.AddChild('lang').Text := '0'; - RootNode.AddChild('style').Text := '0'; - RootNode.AddChild('aerender').Text := ''; - RootNode.AddChild('onRenderStart').Text := '0'; - RootNode.AddChild('defprgpath').Text := ''; - RootNode.AddChild('defoutpath').Text := ''; - RootNode.AddChild('handle').Text := 'True'; - RootNode.AddChild('delTempFiles').Text := 'True'; - - RootNode.AddChild('projectPath').Text := ''; - RootNode.AddChild('outputPath').Text := ''; - RootNode.AddChild('tempSavePath').Text := ''; - - RootNode.AddChild('comp').Text := ''; - RootNode.AddChild('startFrame').Text := ''; - RootNode.AddChild('endFrame').Text := ''; - - RootNode.AddChild('missingFiles').Text := 'False'; - RootNode.AddChild('sound').Text := 'False'; - RootNode.AddChild('thread').Text := 'False'; - RootNode.AddChild('prop').Text := ''; - RootNode.ChildNodes['prop'].Attributes['enabled'] := 'False'; - - RootNode.AddChild('memoryLimit').Text := '100'; - RootNode.AddChild('cacheLimit').Text := '100'; - - ChildNode := RootNode.AddChild('outputModule'); - ChildNode.Attributes['selected'] := '0'; - - for var i := 0 to High(OutputModules) do begin - var ModuleNode: IXMLNode := RootNode.ChildNodes['outputModule'].AddChild('module'); - ModuleNode.AddChild('moduleName').Text := OutputModules[i].Module; - ModuleNode.Attributes['imported'] := 'False'; - ModuleNode.AddChild('filemask').Text := OutputModules[i].Mask; - end; - - MainForm.outputModuleBox.ItemIndex := 0; - - ChildNode := RootNode.AddChild('renderSettings'); - ChildNode.Attributes['selected'] := '0'; - - for var i := 0 to High(RenderSettings) do begin - var SettingNode: IXMLNode := RootNode.ChildNodes['renderSettings'].AddChild('setting'); - SettingNode.Text := RenderSettings[i].Setting; - SettingNode.Attributes['imported'] := 'False'; - end; - - MainForm.renderSettingsBox.ItemIndex := 0; - - ChildNode := RootNode.AddChild('recentProjects'); - for var i := 0 to 9 do - ChildNode.AddChild('project').Text := '(empty)'; - - Config.SaveToFile(Path); -end; - -procedure LoadLegacyConfiguration(Path: String); -var - Config: IXMLDocument; - RootNode: IXMLNode; -begin - Config := TXMLDocument.Create(nil); - Config.LoadFromFile(Path); - Config.Active := True; - RootNode := Config.DocumentElement; - - LANG := 0; - STYLE := RootNode.ChildNodes['style'].Text.ToInteger(); - AERPATH := RootNode.ChildNodes['aerender'].Text; - ONRENDERSTART := RootNode.ChildNodes['onRenderStart'].Text.ToInteger(); - DEFPRGPATH := RootNode.ChildNodes['defprgpath'].Text; - DEFOUTPATH := RootNode.ChildNodes['defoutpath'].Text; - AERH := RootNode.ChildNodes['handle'].Text; - DelTempFiles := RootNode.ChildNodes['delTempFiles'].Text; - - MainForm.projectPath.Text := RootNode.ChildNodes['projectPath'].Text; - MainForm.outputPath.Text := RootNode.ChildNodes['outputPath'].Text; - tempSavePath := RootNode.ChildNodes['tempSavePath'].Text; - - MainForm.compName.Text := RootNode.ChildNodes['comp'].Text; - MainForm.inFrame.Text := RootNode.ChildNodes['startFrame'].Text; - MainForm.outFrame.Text := RootNode.ChildNodes['endFrame'].Text; - - MainForm.missingFilesCheckbox.IsChecked := RootNode.ChildNodes['missingFiles'].Text.ToBoolean(); - MainForm.soundCheckbox.IsChecked := RootNode.ChildNodes['sound'].Text.ToBoolean(); - MainForm.threadedRender.IsChecked := RootNode.ChildNodes['thread'].Text.ToBoolean(); - MainForm.customCheckbox.IsChecked := StrToBool(RootNode.ChildNodes['prop'].Attributes['enabled']); - MainForm.customProp.Text := RootNode.ChildNodes['prop'].Text; - - MainForm.memUsageTrackBar.Value := RootNode.ChildNodes['memoryLimit'].Text.ToSingle(); - MainForm.cacheUsageTrackBar.Value := RootNode.ChildNodes['cacheLimit'].Text.ToSingle(); - - //MainUnit.OMCount := RootNode.ChildNodes['outputModule'].ChildNodes.Count; - SetLength (OutputModules, RootNode.ChildNodes['outputModule'].ChildNodes.Count); - for var i := 0 to High(OutputModules) do - begin - OutputModules[i].Module := RootNode.ChildNodes['outputModule'].ChildNodes[i].ChildNodes['moduleName'].Text; - OutputModules[i].Mask := RootNode.ChildNodes['outputModule'].ChildNodes[i].ChildNodes['filemask'].Text; - OutputModules[i].Imported := False; - end; - - InitRenderSettings; - - MainForm.outputModuleBox.ItemIndex := StrToInt(RootNode.ChildNodes['outputModule'].Attributes['selected']); - MainForm.renderSettingsBox.ItemIndex := 0; -end; - -procedure LoadConfiguration(Path: String); -var - Config: IXMLDocument; - RootNode: IXMLNode; -begin - Config := TXMLDocument.Create(nil); - Config.LoadFromFile(Path); - Config.Active := True; - RootNode := Config.DocumentElement; - - LANG := RootNode.ChildNodes['lang'].Text.ToInteger(); - STYLE := RootNode.ChildNodes['style'].Text.ToInteger(); - AERPATH := RootNode.ChildNodes['aerender'].Text; - ONRENDERSTART := RootNode.ChildNodes['onRenderStart'].Text.ToInteger(); - DEFPRGPATH := RootNode.ChildNodes['defprgpath'].Text; - DEFOUTPATH := RootNode.ChildNodes['defoutpath'].Text; - AERH := RootNode.ChildNodes['handle'].Text; - DelTempFiles := RootNode.ChildNodes['delTempFiles'].Text; - - MainForm.projectPath.Text := RootNode.ChildNodes['projectPath'].Text; - MainForm.outputPath.Text := RootNode.ChildNodes['outputPath'].Text; - tempSavePath := RootNode.ChildNodes['tempSavePath'].Text; - - MainForm.compName.Text := RootNode.ChildNodes['comp'].Text; - MainForm.inFrame.Text := RootNode.ChildNodes['startFrame'].Text; - MainForm.outFrame.Text := RootNode.ChildNodes['endFrame'].Text; - - MainForm.missingFilesCheckbox.IsChecked := RootNode.ChildNodes['missingFiles'].Text.ToBoolean(); - MainForm.soundCheckbox.IsChecked := RootNode.ChildNodes['sound'].Text.ToBoolean(); - MainForm.threadedRender.IsChecked := RootNode.ChildNodes['thread'].Text.ToBoolean(); - MainForm.customCheckbox.IsChecked := StrToBool(RootNode.ChildNodes['prop'].Attributes['enabled']); - MainForm.customProp.Text := RootNode.ChildNodes['prop'].Text; - - MainForm.memUsageTrackBar.Value := RootNode.ChildNodes['memoryLimit'].Text.ToSingle(); - MainForm.cacheUsageTrackBar.Value := RootNode.ChildNodes['cacheLimit'].Text.ToSingle(); - - if RootNode.ChildNodes['outputModule'].ChildNodes.Count <> 0 then begin - SetLength (OutputModules, RootNode.ChildNodes['outputModule'].ChildNodes.Count); - for var i := 0 to High(OutputModules) do begin - OutputModules[i].Module := RootNode.ChildNodes['outputModule'].ChildNodes[i].ChildNodes['moduleName'].Text; - OutputModules[i].Mask := RootNode.ChildNodes['outputModule'].ChildNodes[i].ChildNodes['filemask'].Text; - OutputModules[i].Imported := StrToBool(RootNode.ChildNodes['outputModule'].ChildNodes[i].Attributes['imported']); - end; - MainForm.outputModuleBox.ItemIndex := StrToInt(RootNode.ChildNodes['outputModule'].Attributes['selected']); - end else - InitOutputModules; - - if RootNode.ChildNodes['renderSettings'].ChildNodes.Count <> 0 then begin - SetLength (RenderSettings, RootNode.ChildNodes['renderSettings'].ChildNodes.Count); - for var i := 0 to High(RenderSettings) do begin - RenderSettings[i].Setting := RootNode.ChildNodes['renderSettings'].ChildNodes[i].Text; - RenderSettings[i].Imported := StrToBool(RootNode.ChildNodes['renderSettings'].ChildNodes[i].Attributes['imported']); - end; - MainForm.renderSettingsBox.ItemIndex := StrToInt(RootNode.ChildNodes['renderSettings'].Attributes['selected']); - end else - InitRenderSettings; - - for var i := 0 to 9 do begin - Recents[i] := RootNode.ChildNodes['recentProjects'].ChildNodes[i].Text; - end; -end; - -procedure SaveConfiguration(Path: String); -var - Config: IXMLDocument; - RootNode: IXMLNode; - ChildNode: IXMLNode; -begin - Config := TXMLDocument.Create(nil); - Config.Active := True; - Config.Encoding := 'utf-8'; - Config.Options := [doNodeAutoIndent]; - - RootNode := Config.AddChild('launcherconfig'); - - RootNode.AddChild('lang').Text := LANG.ToString; - RootNode.AddChild('style').Text := STYLE.ToString; - RootNode.AddChild('aerender').Text := AERPATH; - RootNode.AddChild('onRenderStart').Text := ONRENDERSTART.ToString; - RootNode.AddChild('defprgpath').Text := DEFPRGPATH; - RootNode.AddChild('defoutpath').Text := DEFOUTPATH; - RootNode.AddChild('handle').Text := AERH; - RootNode.AddChild('delTempFiles').Text := DelTempFiles; - - RootNode.AddChild('projectPath').Text := MainForm.projectPath.Text; - RootNode.AddChild('outputPath').Text := MainForm.outputPath.Text; - RootNode.AddChild('tempSavePath').Text := tempSavePath; - - RootNode.AddChild('comp').Text := MainForm.compName.Text; - RootNode.AddChild('startFrame').Text := MainForm.inFrame.Text; - RootNode.AddChild('endFrame').Text := MainForm.outFrame.Text; - RootNode.AddChild('missingFiles').Text := BoolToStr(MainForm.missingFilesCheckbox.IsChecked, True); - - RootNode.AddChild('sound').Text := BoolToStr(MainForm.soundCheckbox.IsChecked, True); - RootNode.AddChild('thread').Text := BoolToStr(MainForm.threadedRender.IsChecked, True); - RootNode.AddChild('prop').Text := MainForm.customProp.Text; - RootNode.ChildNodes['prop'].Attributes['enabled'] := BoolToStr(MainForm.customCheckbox.IsChecked, True); - - RootNode.AddChild('memoryLimit').Text := MainForm.memUsageTrackBar.Value.ToString; - RootNode.AddChild('cacheLimit').Text := MainForm.cacheUsageTrackBar.Value.ToString; - - ChildNode := RootNode.AddChild('outputModule'); - ChildNode.Attributes['selected'] := MainForm.outputModuleBox.ItemIndex.ToString; - for var i := 0 to High(OutputModules) do begin - var ModuleNode: IXMLNode := RootNode.ChildNodes['outputModule'].AddChild('module'); - ModuleNode.Attributes['imported'] := BoolToStr(OutputModules[i].Imported, True); - ModuleNode.AddChild('moduleName').Text := OutputModules[i].Module; - ModuleNode.AddChild('filemask').Text := OutputModules[i].Mask; - end; - - ChildNode := RootNode.AddChild('renderSettings'); - ChildNode.Attributes['selected'] := MainForm.renderSettingsBox.ItemIndex.ToString; - for var i := 0 to High(RenderSettings) do begin - var SettingNode: IXMLNode := RootNode.ChildNodes['renderSettings'].AddChild('setting'); - SettingNode.Text := RenderSettings[i].Setting; - SettingNode.Attributes['imported'] := RenderSettings[i].Imported; - end; - - ChildNode := RootNode.AddChild('recentProjects'); - for var i := 0 to 9 do begin - if Recents[i] = '' then - ChildNode.AddChild('project').Text := '(empty)' - else - ChildNode.AddChild('project').Text := Recents[i] - end; - - Config.SaveToFile(Path); -end; - -function Open(Path: String): Integer; -begin - {$IFDEF MSWINDOWS} - Result := ShellExecute(0, 'open', PWideChar(Path), nil, nil, SW_SHOW); - {$ENDIF MSWINDOWS} - {$IFDEF MACOS} - Result := _system(PAnsiChar('open ' + AnsiString('"' + Path + '"'))); - {$ENDIF MACOS} -end; - -function Execute(Path: String): Integer; -begin - {$IFDEF MSWINDOWS} - Result := ShellExecute(0, 'OPEN', PWideChar(Path), '', '', SW_SHOWNORMAL) - {$ENDIF MSWINDOWS} - {$IFDEF MACOS} - _system(PAnsiChar('chmox +x ' + AnsiString('"' + Path + '"'))); - Result := _system(PAnsiChar('command ' + AnsiString('"' + Path + '"'))); - {$ENDIF MACOS} -end; - -function BackgroundExecute(Path: String): Integer; -begin - {$IFDEF MSWINDOWS} - Result := ShellExecute(0, 'OPEN', PWideChar(Path), '', '', SW_HIDE) - {$ENDIF MSWINDOWS} - {$IFDEF MACOS} - _system(PAnsiChar('chmox +x ' + AnsiString('"' + Path + '"'))); - Result := _system(PAnsiChar('command ' + AnsiString('"' + Path + '" & disown'))); - {$ENDIF MACOS} -end; +//procedure InitOutputModules; +//begin +// SetLength (Settings.OutputModules, 10); +// +// Settings.OutputModules[0].Module := 'Lossless'; +// Settings.OutputModules[0].Mask := '[compName].[fileExtension]'; +// Settings.OutputModules[0].Imported := False; +// +// Settings.OutputModules[1].Module := 'AIFF 48kHz'; +// Settings.OutputModules[1].Mask := '[compName].[fileExtension]'; +// Settings.OutputModules[1].Imported := False; +// +// Settings.OutputModules[2].Module := 'Alpha Only'; +// Settings.OutputModules[2].Mask := '[compName].[fileExtension]'; +// Settings.OutputModules[2].Imported := False; +// +// Settings.OutputModules[3].Module := 'AVI DV NTSC 48kHz'; +// Settings.OutputModules[3].Mask := '[compName].[fileExtension]'; +// Settings.OutputModules[3].Imported := False; +// +// Settings.OutputModules[4].Module := 'AVI DV PAL 48kHz'; +// Settings.OutputModules[4].Mask := '[compName].[fileExtension]'; +// Settings.OutputModules[4].Imported := False; +// +// Settings.OutputModules[5].Module := 'Lossless with Alpha'; +// Settings.OutputModules[5].Mask := '[compName].[fileExtension]'; +// Settings.OutputModules[5].Imported := False; +// +// Settings.OutputModules[6].Module := 'Multi-Machine Sequence'; +// Settings.OutputModules[6].Mask := '[compName]_[#####].[fileExtension]'; +// Settings.OutputModules[6].Imported := False; +// +// Settings.OutputModules[7].Module := 'Photoshop'; +// Settings.OutputModules[7].Mask := '[compName]_[#####].[fileExtension]'; +// Settings.OutputModules[7].Imported := False; +// +// Settings.OutputModules[8].Module := 'Save Current Preview'; +// Settings.OutputModules[8].Mask := '[compName].[fileExtension]'; +// Settings.OutputModules[8].Imported := False; +// +// Settings.OutputModules[9].Module := 'TIFF Sequence with Alpha'; +// Settings.OutputModules[9].Mask := '[compName]_[#####].[fileExtension]'; +// Settings.OutputModules[9].Imported := False; +//end; +// +//procedure InitConfiguration(Path: String); +//var +// Config: IXMLDocument; +// RootNode: IXMLNode; +// ChildNode: IXMLNode; +//begin +// //InitLanguage; +// InitOutputModules; +// InitRenderSettings; +// +// Config := TXMLDocument.Create(nil); +// Config.Active := True; +// Config.Encoding := 'utf-8'; +// Config.Options := [doNodeAutoIndent]; +// +// RootNode := Config.AddChild('launcherconfig'); +// +// RootNode.AddChild('lang').Text := '0'; +// RootNode.AddChild('style').Text := '0'; +// RootNode.AddChild('aerender').Text := ''; +// RootNode.AddChild('onRenderStart').Text := '0'; +// RootNode.AddChild('defprgpath').Text := ''; +// RootNode.AddChild('defoutpath').Text := ''; +// RootNode.AddChild('handle').Text := 'True'; +// RootNode.AddChild('delTempFiles').Text := 'True'; +// +// RootNode.AddChild('projectPath').Text := ''; +// RootNode.AddChild('outputPath').Text := ''; +// RootNode.AddChild('tempSavePath').Text := ''; +// +// RootNode.AddChild('comp').Text := ''; +// RootNode.AddChild('startFrame').Text := ''; +// RootNode.AddChild('endFrame').Text := ''; +// +// RootNode.AddChild('missingFiles').Text := 'False'; +// RootNode.AddChild('sound').Text := 'False'; +// RootNode.AddChild('thread').Text := 'False'; +// RootNode.AddChild('prop').Text := ''; +// RootNode.ChildNodes['prop'].Attributes['enabled'] := 'False'; +// +// RootNode.AddChild('memoryLimit').Text := '100'; +// RootNode.AddChild('cacheLimit').Text := '100'; +// +// ChildNode := RootNode.AddChild('outputModule'); +// ChildNode.Attributes['selected'] := '0'; +// +// for var i := 0 to High(Settings.OutputModules) do begin +// var ModuleNode: IXMLNode := RootNode.ChildNodes['outputModule'].AddChild('module'); +// ModuleNode.AddChild('moduleName').Text := Settings.OutputModules[i].Module; +// ModuleNode.Attributes['imported'] := 'False'; +// ModuleNode.AddChild('filemask').Text := Settings.OutputModules[i].Mask; +// end; +// +// MainForm.outputModuleBox.ItemIndex := 0; +// +// ChildNode := RootNode.AddChild('renderSettings'); +// ChildNode.Attributes['selected'] := '0'; +// +// for var i := 0 to High(RenderSettings) do begin +// var SettingNode: IXMLNode := RootNode.ChildNodes['renderSettings'].AddChild('setting'); +// SettingNode.Text := RenderSettings[i].Setting; +// SettingNode.Attributes['imported'] := 'False'; +// end; +// +// MainForm.renderSettingsEdit.Text := 'Best Settings'; +// +// ChildNode := RootNode.AddChild('recentProjects'); +// for var i := 0 to 9 do +// ChildNode.AddChild('project').Text := '(empty)'; +// +// Config.SaveToFile(Path); +//end; +// +//procedure LoadLegacyConfiguration(Path: String); +//var +// Config: IXMLDocument; +// RootNode: IXMLNode; +//begin +// Config := TXMLDocument.Create(nil); +// Config.LoadFromFile(Path); +// Config.Active := True; +// RootNode := Config.DocumentElement; +// +// Settings.Language := 0; +// STYLE := RootNode.ChildNodes['style'].Text.ToInteger(); +// AErenderPath := RootNode.ChildNodes['aerender'].Text; +// ONRENDERSTART := RootNode.ChildNodes['onRenderStart'].Text.ToInteger(); +// DEFPRGPATH := RootNode.ChildNodes['defprgpath'].Text; +// DEFOUTPATH := RootNode.ChildNodes['defoutpath'].Text; +// AERH := RootNode.ChildNodes['handle'].Text; +// DelTempFiles := RootNode.ChildNodes['delTempFiles'].Text; +// +// MainForm.projectPath.Text := RootNode.ChildNodes['projectPath'].Text; +// MainForm.outputPath.Text := RootNode.ChildNodes['outputPath'].Text; +// tempSavePath := RootNode.ChildNodes['tempSavePath'].Text; +// +// MainForm.compName.Text := RootNode.ChildNodes['comp'].Text; +// MainForm.inFrame.Text := RootNode.ChildNodes['startFrame'].Text; +// MainForm.outFrame.Text := RootNode.ChildNodes['endFrame'].Text; +// +// MainForm.missingFilesCheckbox.IsChecked := RootNode.ChildNodes['missingFiles'].Text.ToBoolean(); +// MainForm.soundCheckbox.IsChecked := RootNode.ChildNodes['sound'].Text.ToBoolean(); +// MainForm.threadedRender.IsChecked := RootNode.ChildNodes['thread'].Text.ToBoolean(); +// MainForm.customCheckbox.IsChecked := StrToBool(RootNode.ChildNodes['prop'].Attributes['enabled']); +// MainForm.customProp.Enabled := StrToBool(RootNode.ChildNodes['prop'].Attributes['enabled']); +// MainForm.customProp.Text := RootNode.ChildNodes['prop'].Text; +// +// MainForm.memUsageTrackBar.Value := RootNode.ChildNodes['memoryLimit'].Text.ToSingle(); +// MainForm.cacheUsageTrackBar.Value := RootNode.ChildNodes['cacheLimit'].Text.ToSingle(); +// +// //MainUnit.OMCount := RootNode.ChildNodes['outputModule'].ChildNodes.Count; +// SetLength (Settings.OutputModules, RootNode.ChildNodes['outputModule'].ChildNodes.Count); +// for var i := 0 to High(Settings.OutputModules) do +// begin +// Settings.OutputModules[i].Module := RootNode.ChildNodes['outputModule'].ChildNodes[i].ChildNodes['moduleName'].Text; +// Settings.OutputModules[i].Mask := RootNode.ChildNodes['outputModule'].ChildNodes[i].ChildNodes['filemask'].Text; +// Settings.OutputModules[i].Imported := False; +// end; +// +// InitRenderSettings; +// +// MainForm.outputModuleBox.ItemIndex := StrToInt(RootNode.ChildNodes['outputModule'].Attributes['selected']); +// MainForm.renderSettingsEdit.Text := RootNode.ChildNodes['renderSettings'].ChildNodes[StrToInt(RootNode.ChildNodes['renderSettings'].Attributes['selected'])].Text; +//end; +// +//procedure LoadConfiguration(Path: String); +//var +// Config: IXMLDocument; +// RootNode: IXMLNode; +//begin +// Config := TXMLDocument.Create(nil); +// Config.LoadFromFile(Path); +// Config.Active := True; +// RootNode := Config.DocumentElement; +// +// Settings.Language := RootNode.ChildNodes['lang'].Text.ToInteger(); +// STYLE := RootNode.ChildNodes['style'].Text.ToInteger(); +// AErenderPath := RootNode.ChildNodes['aerender'].Text; +// ONRENDERSTART := RootNode.ChildNodes['onRenderStart'].Text.ToInteger(); +// DEFPRGPATH := RootNode.ChildNodes['defprgpath'].Text; +// DEFOUTPATH := RootNode.ChildNodes['defoutpath'].Text; +// AERH := RootNode.ChildNodes['handle'].Text; +// DelTempFiles := RootNode.ChildNodes['delTempFiles'].Text; +// +// MainForm.projectPath.Text := RootNode.ChildNodes['projectPath'].Text; +// MainForm.outputPath.Text := RootNode.ChildNodes['outputPath'].Text; +// tempSavePath := RootNode.ChildNodes['tempSavePath'].Text; +// +// MainForm.compName.Text := RootNode.ChildNodes['comp'].Text; +// MainForm.inFrame.Text := RootNode.ChildNodes['startFrame'].Text; +// MainForm.outFrame.Text := RootNode.ChildNodes['endFrame'].Text; +// +// MainForm.missingFilesCheckbox.IsChecked := RootNode.ChildNodes['missingFiles'].Text.ToBoolean(); +// MainForm.soundCheckbox.IsChecked := RootNode.ChildNodes['sound'].Text.ToBoolean(); +// MainForm.threadedRender.IsChecked := RootNode.ChildNodes['thread'].Text.ToBoolean(); +// MainForm.customCheckbox.IsChecked := StrToBool(RootNode.ChildNodes['prop'].Attributes['enabled']); +// MainForm.customProp.Enabled := StrToBool(RootNode.ChildNodes['prop'].Attributes['enabled']); +// MainForm.customProp.Text := RootNode.ChildNodes['prop'].Text; +// +// MainForm.memUsageTrackBar.Value := RootNode.ChildNodes['memoryLimit'].Text.ToSingle(); +// MainForm.cacheUsageTrackBar.Value := RootNode.ChildNodes['cacheLimit'].Text.ToSingle(); +// +// if RootNode.ChildNodes['outputModule'].ChildNodes.Count <> 0 then begin +// SetLength (Settings.OutputModules, RootNode.ChildNodes['outputModule'].ChildNodes.Count); +// for var i := 0 to High(Settings.OutputModules) do begin +// Settings.OutputModules[i].Module := RootNode.ChildNodes['outputModule'].ChildNodes[i].ChildNodes['moduleName'].Text; +// Settings.OutputModules[i].Mask := RootNode.ChildNodes['outputModule'].ChildNodes[i].ChildNodes['filemask'].Text; +// Settings.OutputModules[i].Imported := StrToBool(RootNode.ChildNodes['outputModule'].ChildNodes[i].Attributes['imported']); +// end; +// MainForm.outputModuleBox.ItemIndex := StrToInt(RootNode.ChildNodes['outputModule'].Attributes['selected']); +// end else +// InitOutputModules; +// +// MainForm.renderSettingsEdit.Text := RootNode.ChildNodes['renderSettings'].Text; +// +// for var i := 0 to 9 do begin +// Recents[i] := RootNode.ChildNodes['recentProjects'].ChildNodes[i].Text; +// end; +//end; +// +//procedure SaveConfiguration(Path: String); +//var +// Config: IXMLDocument; +// RootNode: IXMLNode; +// ChildNode: IXMLNode; +//begin +// Config := TXMLDocument.Create(nil); +// Config.Active := True; +// Config.Encoding := 'utf-8'; +// Config.Options := [doNodeAutoIndent]; +// +// RootNode := Config.AddChild('launcherconfig'); +// +// RootNode.AddChild('lang').Text := Settings.Language.ToString; +// RootNode.AddChild('style').Text := STYLE.ToString; +// RootNode.AddChild('aerender').Text := AErenderPath; +// RootNode.AddChild('onRenderStart').Text := ONRENDERSTART.ToString; +// RootNode.AddChild('defprgpath').Text := DEFPRGPATH; +// RootNode.AddChild('defoutpath').Text := DEFOUTPATH; +// RootNode.AddChild('handle').Text := AERH; +// RootNode.AddChild('delTempFiles').Text := DelTempFiles; +// +// RootNode.AddChild('projectPath').Text := MainForm.projectPath.Text; +// RootNode.AddChild('outputPath').Text := MainForm.outputPath.Text; +// RootNode.AddChild('tempSavePath').Text := tempSavePath; +// +// RootNode.AddChild('comp').Text := MainForm.compName.Text; +// RootNode.AddChild('startFrame').Text := MainForm.inFrame.Text; +// RootNode.AddChild('endFrame').Text := MainForm.outFrame.Text; +// RootNode.AddChild('missingFiles').Text := BoolToStr(MainForm.missingFilesCheckbox.IsChecked, True); +// +// RootNode.AddChild('sound').Text := BoolToStr(MainForm.soundCheckbox.IsChecked, True); +// RootNode.AddChild('thread').Text := BoolToStr(MainForm.threadedRender.IsChecked, True); +// RootNode.AddChild('prop').Text := MainForm.customProp.Text; +// RootNode.ChildNodes['prop'].Attributes['enabled'] := BoolToStr(MainForm.customCheckbox.IsChecked, True); +// +// RootNode.AddChild('memoryLimit').Text := MainForm.memUsageTrackBar.Value.ToString; +// RootNode.AddChild('cacheLimit').Text := MainForm.cacheUsageTrackBar.Value.ToString; +// +// ChildNode := RootNode.AddChild('outputModule'); +// ChildNode.Attributes['selected'] := MainForm.outputModuleBox.ItemIndex.ToString; +// for var i := 0 to High(Settings.OutputModules) do begin +// var ModuleNode: IXMLNode := RootNode.ChildNodes['outputModule'].AddChild('module'); +// ModuleNode.Attributes['imported'] := BoolToStr(Settings.OutputModules[i].Imported, True); +// ModuleNode.AddChild('moduleName').Text := Settings.OutputModules[i].Module; +// ModuleNode.AddChild('filemask').Text := Settings.OutputModules[i].Mask; +// end; +// +// ChildNode := RootNode.AddChild('renderSettings'); +// ChildNode.Text := MainForm.renderSettingsEdit.Text; +// +// ChildNode := RootNode.AddChild('recentProjects'); +// for var i := 0 to 9 do begin +// if Recents[i] = '' then +// ChildNode.AddChild('project').Text := '(empty)' +// else +// ChildNode.AddChild('project').Text := Recents[i] +// end; +// +// Config.SaveToFile(Path); +//end; function GetOMIndex(AOutputModule: OutputModule): Integer; begin Result := -1; - for var i := 0 to High(OutputModules) do - if (AOutputModule.Module = OutputModules[i].Module) and (AOutputModule.Mask = OutputModules[i].Mask) then begin - Result := i; - break; - end; -end; - -function GetRSIndex(ARenderSetting: RenderSetting): Integer; -begin - Result := -1; - for var i := 0 to High(RenderSettings) do - if ARenderSetting.Setting = RenderSettings[i].Setting then begin + for var i := 0 to High(Settings.OutputModules) do + if AOutputModule = Settings.OutputModules[i] then begin Result := i; break; end; @@ -1063,12 +996,239 @@ procedure TMainForm.ReInflateRecents; InflateRecents; end; -procedure TMainForm.renderSettingsBoxChange(Sender: TObject); +procedure TMainForm.RenderTasksOnNotify(Sender: TObject; const Item: TRenderTask; Action: TCollectionNotification); +begin + TasksIsEmpty.Visible := RenderTasks.Count = 0; + /// Because method [Clear()] calls [BeginUpdate()] and [EndUpdate()] + /// we call it first here + TasksTreeView.Clear; + + TasksTreeView.BeginUpdate; + for var Task: TRenderTask in RenderTasks do begin + var ProjectItem: TTreeViewItem := TTreeViewItem.Create(nil); + ProjectItem.Text := ExtractFileName(Task.Project); + ProjectItem.Parent := TasksTreeView; + ProjectItem.StyledSettings := [TStyledSetting.FontColor, TStyledSetting.Family, TStyledSetting.Size]; + ProjectItem.TextSettings.Font.Style := [TFontStyle.fsBold]; + ProjectItem.IsExpanded := True; + ProjectItem.OnDblClick := TasksTreeViewItemDblClick; + + for var Comp: TComposition in Task.Compositions do begin + var CompItem: TTreeViewItem := TTreeViewItem.Create(nil); + CompItem.Text := Comp.CompName; + CompItem.Parent := ProjectItem; + CompItem.OnDblClick := TasksTreeViewItemDblClick; + + var CompLabel: TCompLabel := TCompLabel.Create(nil); + CompLabel.Parent := CompItem; + CompLabel.Align := TAlignLayout.Client; + CompLabel.InFrame := Comp.Frames.StartFrame; + CompLabel.OutFrame := Comp.Frames.EndFrame; + CompLabel.Split := IntToStr(Comp.Split); + CompLabel.Value := -1;//Comp.Frames.StartFrame; + end; + end; + TasksTreeView.EndUpdate; + + TasksTreeView.AllowDrag := True; +end; + +procedure TMainForm.UpdateTasksList; +begin +// TasksTreeView.BeginUpdate; +// /// +// TasksTreeView.Clear; +// +// for var Task: TRenderTask in RenderTasks do begin +// var ProjectItem: TTreeViewItem := TTreeViewItem.Create(nil); +// ProjectItem.Text := ExtractFileName(Task.Project); +// ProjectItem.Parent := TasksTreeView; +// ProjectItem.StyledSettings := [TStyledSetting.FontColor, TStyledSetting.Family, TStyledSetting.Size]; +// ProjectItem.TextSettings.Font.Style := [TFontStyle.fsBold]; +// ProjectItem.IsExpanded := True; +// +// for var Comp: TComposition in Task.Compositions do begin +// var CompItem: TTreeViewItem := TTreeViewItem.Create(nil); +// CompItem.Text := Comp.CompName; +// CompItem.Parent := ProjectItem; +// +// var СompLabel: TCompLabel := TCompLabel.Create(nil); +// СompLabel.Parent := CompItem; +// СompLabel.Align := TAlignLayout.Client; +// СompLabel.InFrame := IntToStr(Comp.Frames.StartFrame); +// СompLabel.OutFrame := IntToStr(Comp.Frames.EndFrame); +// СompLabel.Split := IntToStr(Comp.Split); +// end; +// end; +// TasksTreeView.EndUpdate; +end; + +procedure TMainForm.RemoveTaskButtonClick(Sender: TObject); +begin + //Popup1.IsOpen := False; + RenderTasks.Clear; +end; + +procedure TMainForm.ExtractParserToAppDir; +begin + var ExtractPath: String := APPFOLDER + {$IFDEF MSWINDOWS}'aeparser_win.exe'{$ELSE MACOS}'aeparser_mac'{$ENDIF}; + + var ResStream: TResourceStream := TResourceStream.Create(HInstance, {$IFDEF MSWINDOWS}'AEPARSER_WIN'{$ELSE MACOS}'AEPARSER_MAC'{$ENDIF}, RT_RCDATA); + + try + ResStream.Position := 0; + ResStream.SaveToFile(ExtractPath); + finally + ResStream.Free; + end; + + {$IFDEF MACOS} + _system(PAnsiChar('chmod +x "' + AnsiString(ExtractPath) + '"')); + {$ENDIF} +end; + +procedure TMainForm.BeginTryParseAEP(const APath: String); +begin + //AwaitIndicator.Enabled := True; + + var ConverterPath: String := APPFOLDER + {$IFDEF MSWINDOWS}'aeparser_win.exe'{$ELSE MACOS}'aeparser_mac'{$ENDIF}; + +// {$IFDEF MSWINDOWS} +// var ConverterPath: String := 'Z:\YandexDisk\Development\Delphi\AErender Launcher\src\lib\plugins\AEP Parser\aeparser.exe'; +// {$ELSE MACOS} +// var ConverterPath: String := '////'; +// {$ENDIF} + //var Project: String := Data.Files[0]; + + ProjectJsonPath := Format('%s%s', [APPFOLDER, ExtractFileName(APath).Replace('aep', 'json')]);; + + //var FileDate := FileDateToDateTime(FileAge(ProjectJsonPath)); + //var ThisTime := Now; + + if FileExists(ProjectJsonPath) then + if (FileDateToDateTime(FileAge(ProjectJsonPath)) + EncodeTime(0, 0, 1, 0) >= Now) then + ProjectReaderAwait.Enabled := True + else begin + ProjectAwait.Visible := True; + ProjectAwait.Enabled := True; + + var Executable: TextFile; + AssignFile(Executable, APPFOLDER + {$IFDEF MSWINDOWS}'project.bat'{$ELSE MACOS}'project.command'{$ENDIF}); + Rewrite(Executable); + {$IFDEF MSWINDOWS} + Writeln(Executable, 'chcp 65001'); + {$ENDIF} + Writeln(Executable, Format('("%s" "%s") > "%s%s"', [ConverterPath, APath, APPFOLDER, ExtractFileName(APath).Replace('aep', 'json')])); + CloseFile(Executable); + + {$IFDEF MSWINDOWS} + ShellExecute(0, 'OPEN', PWideChar(APPFOLDER + 'project.bat'), '', '', SW_HIDE); + {$ELSE MACOS} + _system(PAnsiChar('chmod +x "' + AnsiString(APPFOLDER + 'project.command"'))); + _system(PAnsiChar('command "' + AnsiString(APPFOLDER + 'project.command" & disown'))); + {$ENDIF} + + //Status.Text := 'Executing...'; + + ProjectReaderAwait.Enabled := True; + end; +end; + +procedure TMainForm.CheckAndPopup(const APath: String; const TryParse: Boolean); +begin + if APath <> '' then begin + TaskEditorTabControl.TabIndex := 0; + if (TasksTreeView.ItemByText(ExtractFileName(APath)) <> nil) or (GetTaskByProject(ExtractFileName(APath)) <> nil) then + TasksTreeViewItemDblClick(TasksTreeView.ItemByText(ExtractFileName(APath))) + else begin + TaskEditorSaveButton.Visible := False; + TaskEditorCreateTaskButton.Visible := True; + projectPath.Text := APath; + + if TryParse then begin + BeginTryParseAEP(APath); + end else + TaskEditorPopup.PopupModal; + AddToRecents(APath); + end; + end; +end; + +procedure TMainForm.AddTaskButtonClick(Sender: TObject); begin - if (renderSettingsBox.ItemIndex = renderSettingsBox.Count - 1) and (renderSettingsBox.Count <> 0) then begin - //OutputModuleEditorForm.Show; - //renderSettingsBox.ItemIndex := 0; - end + var TempStr: String := ''; + +// var PathCheckThread: TThread := TThread.CreateAnonymousThread(procedure begin +// repeat +// if TempStr <> '' then begin +// TaskEditorTabControl.TabIndex := 0; +// if (TasksTreeView.ItemByText(ExtractFileName(TempStr)) <> nil) or (GetTaskByProject(ExtractFileName(TempStr)) <> nil) then +// TasksTreeViewItemDblClick(TasksTreeView.ItemByText(ExtractFileName(TempStr))) +// else begin +// TaskEditorSaveButton.Visible := False; +// TaskEditorCreateTaskButton.Visible := True; +// +// if TryParseAEP then begin +// ImportForm.ShowModal +// end else +// TaskEditorPopup.PopupModal; +// AddToRecents(TempStr); +// end; +// end; +// until TempStr <> ''; +// end); +// +{$IFDEF MACOS} + var NSWin: NSWindow := WindowHandleToPlatform(Screen.ActiveForm.Handle).Wnd; + + + + var FOpenFile: NSSavePanel := TNSOpenPanel.Wrap(TNSOpenPanel.OCClass.openPanel); + FOpenFile.setDirectory(StrToNSStr(DEFPRGPATH)); + FOpenFile.setAllowedFileTypes(ArrayToNSArray(['aep'])); + FOpenFile.setPrompt(StrToNSStr('Open After Effects project')); + + + objc_msgSendP2( // We are calling here method straight from MacApi + (FOpenFile as ILocalObject).GetObjectID, // Provide object with callable method + sel_getUid(PAnsiChar('beginSheetModalForWindow:completionHandler:')), // Provide method UID + (NSWin as ILocalObject).GetObjectID, // Provide first method parameter + TObjCBlock.CreateBlockWithProcedure(procedure (p1: NSInteger) begin // Provide callback procedure (thanks NightFlight!) + if p1 = 0 then + // Handle + else begin + TempStr := NSStrToStr(FOpenFile.URL.relativePath); + CheckAndPopup(TempStr, TryParseAEP); + //Sleep(200); + end; + end) + ); + +{$ELSE MSWINDOWS} + with AEPOpenDialog do + if Execute then begin + {TempStr := AEPOpenDialog.FileName; + + if TempStr <> '' then begin + TaskEditorTabControl.TabIndex := 0; + if (TasksTreeView.ItemByText(ExtractFileName(TempStr)) <> nil) or (GetTaskByProject(ExtractFileName(TempStr)) <> nil) then + TasksTreeViewItemDblClick(TasksTreeView.ItemByText(ExtractFileName(TempStr))) + else begin + TaskEditorSaveButton.Visible := False; + TaskEditorCreateTaskButton.Visible := True; + projectPath.Text := TempStr; + + if TryParseAEP then begin + //ImportForm.ShowModal + end else + TaskEditorPopup.PopupModal; + AddToRecents(TempStr); + end; + end; } + CheckAndPopup(AEPOpenDialog.FileName, TryParseAEP); + end; +{$ENDIF} +// PathCheckThread.Start; end; /// This will add instance to Recents[] and call @@ -1091,7 +1251,100 @@ procedure TMainForm.AddToRecents(Item: String); Recents[0] := Item; end; - ReInflateRecents; + ReInflateRecents; +end; + +procedure TMainForm.TaskEditorProjectButtonClick(Sender: TObject); +begin + TaskEditorTabControl.TabIndex := 0; +end; + +procedure TMainForm.TaskEditorSaveButtonClick(Sender: TObject); +begin + var ErrorStr: String := ''; + for var i := 0 to StrToInt(TaskEditorCompCount.Text) - 1 do begin + /// EC001 :: Composition name is empty + if TaskEditorCompGrid.Cells[1, i] = '' then + ErrorStr := ErrorStr + Format('Composition[%d]: (EC001) %s%s', [i + 1, 'Composition name is empty', #13#10]); + + /// EC002 :: [Start Frame] and [End Frame] can''t be empty with [Split] more than 1 + if (TaskEditorCompGrid.Cells[2, i] = '') and (TaskEditorCompGrid.Cells[3, i] = '') and (TaskEditorCompGrid.Cells[4, i] <> '1') then + ErrorStr := ErrorStr + Format('Composition[%d]: (EC002) %s%s', [i + 1, '[Start Frame] and [End Frame] can''t be empty with [Split] more than 1', #13#10]); + + /// New line for each comp + if ErrorStr <> '' then + ErrorStr := ErrorStr + #13#10; + end; + + if ErrorStr <> '' then begin + raise AERParamException.Create(Format('%s%s%s', [Language[Settings.Language].Errors.errorsOccured, #13#10, ErrorStr])); + end else begin + var TaskIndex: Integer := RenderTasks.IndexOf(GetTaskByProject(ExtractFileName(projectPath.Text))); + var Compositions: TList := TList.Create; + + for var i := 0 to Trunc(TaskEditorCompCount.Value) - 1 do begin + Compositions.Add(TComposition.Create( + TaskEditorCompGrid.Cells[1, i], + TFrameSpan.Create(TaskEditorCompGrid.Cells[2, i], TaskEditorCompGrid.Cells[3, i]), + StrToInt(TaskEditorCompGrid.Cells[4, i]) + )); + end; + + /// Instead of re-creating whole task, + /// it's faster to rewrite contents of existing one + RenderTasks.Items[TaskIndex].Project := projectPath.Text; + RenderTasks.Items[TaskIndex].Output := outputPath.Text; + RenderTasks.Items[TaskIndex].OutputModule := outputModuleBox.Items[outputModuleBox.ItemIndex]; + RenderTasks.Items[TaskIndex].RenderSettings := renderSettingsEdit.Text; + RenderTasks.Items[TaskIndex].MissingFiles := missingFilesCheckbox.IsChecked; + RenderTasks.Items[TaskIndex].Sound := soundCheckbox.IsChecked; + RenderTasks.Items[TaskIndex].Multiprocessing := threadedRender.IsChecked; + RenderTasks.Items[TaskIndex].CustomProperties := IfThenElse(customCheckbox.IsChecked = True, customProp.Text, ''); // yeet + RenderTasks.Items[TaskIndex].CacheLimit := cacheUsageTrackBar.Value; + RenderTasks.Items[TaskIndex].MemoryLimit := memUsageTrackBar.Value; + + RenderTasks.Items[TaskIndex].Compositions.Free; + RenderTasks.Items[TaskIndex].Compositions := TList.Create(Compositions); + + {$IFDEF DEBUG_MODE} + ShowMessage(RenderTasks.Items[TaskIndex].ToString); + {$ENDIF} + + Compositions.Free; + + RenderTasksOnNotify(Sender, RenderTasks.Items[TaskIndex], cnAdded); + + PopupAniCloseHeight.Enabled := True; + PopupAniCloseWidth.Enabled := True; + + TaskEditorCompCount.Value := 1; + TaskEditorCompGrid.Cells[0, 0] := '1'; + TaskEditorCompGrid.Cells[1, 0] := ''; + TaskEditorCompGrid.Cells[2, 0] := ''; + TaskEditorCompGrid.Cells[3, 0] := ''; + TaskEditorCompGrid.Cells[4, 0] := '1'; + + //UpdateTasksList; + + + + end; +end; + +procedure TMainForm.TaskEditorToolbarMouseDown(Sender: TObject; + Button: TMouseButton; Shift: TShiftState; X, Y: Single); +begin + //TPopupForm(TaskEditorPopup).StartWindowDrag; +end; + +procedure TMainForm.TaskEditorTabControlChange(Sender: TObject); +begin + + if (TaskEditorTabControl.TabIndex = 1) and (TaskEditorCompGrid.Cells[4, 0] = '') + and (TaskEditorCompGrid.Cells[0, 0] = '') then begin + TaskEditorCompGrid.Cells[0, 0] := '1'; + TaskEditorCompGrid.Cells[4, 0] := '1'; + end; end; procedure TMainForm.RecentProjectSelected(Sender: TObject); @@ -1180,81 +1433,123 @@ procedure TMainForm.UpdateOutputModules; if (outputModuleBox.Count <> 0) then outputModuleBox.Clear; - for var i := 0 to High(OutputModules) do - if OutputModules[i].Imported then - outputModuleBox.Items.Add(OutputModules[i].Module + ' ' + Language[LANG].OutputModuleConfiguratorForm.Imported) + for var i := 0 to High(Settings.OutputModules) do + if Settings.OutputModules[i].Imported then + outputModuleBox.Items.Add(Settings.OutputModules[i].Module + ' ' + Language[Settings.Language].OutputModuleConfiguratorForm.Imported) else - outputModuleBox.Items.Add(OutputModules[i].Module); - outputModuleBox.Items.Add(Language[LANG].MainForm.ConfigureOutputModules); + outputModuleBox.Items.Add(Settings.OutputModules[i].Module); + outputModuleBox.Items.Add(Language[Settings.Language].MainForm.ConfigureOutputModules); outputModuleBox.ItemIndex := Index; end; -procedure TMainForm.UpdateRenderSettings; +function TMainForm.ReadAERQ(Path: String): TObjectList; begin - var Index: Integer := renderSettingsBox.ItemIndex; - if (renderSettingsBox.Count <> 0) then - renderSettingsBox.Clear; - - for var i := 0 to High(RenderSettings) do - if RenderSettings[i].Imported then - renderSettingsBox.Items.Add(RenderSettings[i].Setting + ' ' + Language[LANG].OutputModuleConfiguratorForm.Imported) - else - renderSettingsBox.Items.Add(RenderSettings[i].Setting); - //renderSettingsBox.Items.Add(Language[LANG].MainForm.ConfigureRenderSettings); - renderSettingsBox.ItemIndex := Index; -end; + Result := TObjectList.Create; -procedure TMainForm.ReadAERQ(Path: String); -begin var AERQXMLDocument: IXMLDocument := TXMLDocument.Create(nil); AERQXMLDocument.LoadFromFile(Path); AERQXMLDocument.Encoding := 'utf-8'; AERQXMLDocument.Active := True; var RootNode: IXMLNode := AERQXMLDocument.DocumentElement; - projectPath.Text := RootNode.Attributes['project']; - outputPath.Text := RootNode.ChildNodes['queueItem'].Attributes['outputFolder']; - tempSavePath := RootNode.ChildNodes['queueItem'].Attributes['outputFolder'] + PLATFORMPATHSEPARATOR; - /// Add new Output Module to library if it don't exist - if StrToBool(RootNode.ChildNodes['queueItem'].ChildNodes['outputModule'].Attributes['use']) then begin - var TempOutputModule: OutputModule; - TempOutputModule.Module := RootNode.ChildNodes['queueItem'].ChildNodes['outputModule'].ChildNodes['module'].Text; - TempOutputModule.Mask := RootNode.ChildNodes['queueItem'].ChildNodes['outputModule'].ChildNodes['mask'].Text; - - if GetOMIndex(TempOutputModule) <> -1 then - outputModuleBox.ItemIndex := GetOMIndex(TempOutputModule) - else begin - SetLength(OutputModules, Length(OutputModules) + 1); - OutputModules[High(OutputModules)].Module := RootNode.ChildNodes['queueItem'].ChildNodes['outputModule'].ChildNodes['module'].Text; - OutputModules[High(OutputModules)].Mask := RootNode.ChildNodes['queueItem'].ChildNodes['outputModule'].ChildNodes['mask'].Text; - OutputModules[High(OutputModules)].Imported := True; + //projectPath.Text := RootNode.Attributes['project']; + + for var i := 0 to RootNode.ChildNodes.Count - 1 do begin + outputPath.Text := RootNode.ChildNodes[i].Attributes['outputFolder']; + Settings.TemporarySavePath := RootNode.ChildNodes[i].Attributes['outputFolder'] + PLATFORMPATHSEPARATOR; + + /// Add new Output Module to library if it don't exist + if StrToBool(RootNode.ChildNodes[i].ChildNodes['outputModule'].Attributes['use']) then begin + var TempOutputModule: OutputModule; + TempOutputModule.Module := RootNode.ChildNodes[i].ChildNodes['outputModule'].ChildNodes['module'].Text; + TempOutputModule.Mask := RootNode.ChildNodes[i].ChildNodes['outputModule'].ChildNodes['mask'].Text; + + if GetOMIndex(TempOutputModule) <> -1 then + outputModuleBox.ItemIndex := GetOMIndex(TempOutputModule) + else begin + SetLength(Settings.OutputModules, Length(Settings.OutputModules) + 1); + Settings.OutputModules[High(Settings.OutputModules)].Module := RootNode.ChildNodes[i].ChildNodes['outputModule'].ChildNodes['module'].Text; + Settings.OutputModules[High(Settings.OutputModules)].Mask := RootNode.ChildNodes[i].ChildNodes['outputModule'].ChildNodes['mask'].Text; + Settings.OutputModules[High(Settings.OutputModules)].Imported := True; + + outputModuleBox.Items.Insert(outputModuleBox.Items.Count - 1, Settings.OutputModules[High(Settings.OutputModules)].Module + ' ' + Language[Settings.Language].OutputModuleConfiguratorForm.Imported); + outputModuleBox.ItemIndex := outputModuleBox.Items.Count - 2; + end; + end; + outputModuleBoxChange(Self); - outputModuleBox.Items.Insert(outputModuleBox.Items.Count - 1, OutputModules[High(OutputModules)].Module + ' ' + Language[LANG].OutputModuleConfiguratorForm.Imported); - outputModuleBox.ItemIndex := outputModuleBox.Items.Count - 2; + if RootNode.ChildNodes['queueItem'].ChildNodes['renderSettings'].Text.IsEmpty <> True then begin + renderSettingsEdit.Text := RootNode.ChildNodes['queueItem'].ChildNodes['renderSettings'].Text; end; + + var Compositions: TList := TList.Create; + Compositions.Add(TComposition.Create( + RootNode.ChildNodes[i].ChildNodes['composition'].ChildNodes['name'].Text, + TFrameSpan.Create(StrToInt(RootNode.ChildNodes[i].ChildNodes['composition'].ChildNodes['rangeStart'].Text), + StrToInt(RootNode.ChildNodes[i].ChildNodes['composition'].ChildNodes['rangeEnd'].Text)), + 1 + )); + + //compName.Text := RootNode.ChildNodes['queueItem'].ChildNodes['composition'].ChildNodes['name'].Text; + //inFrame.Text := RootNode.ChildNodes['queueItem'].ChildNodes['composition'].ChildNodes['rangeStart'].Text; + //outFrame.Text := RootNode.ChildNodes['queueItem'].ChildNodes['composition'].ChildNodes['rangeEnd'].Text; + + Result.Add(TRenderTask.Create( + RootNode.Attributes['project'], + outputPath.Text, + outputModuleBox.Items[outputModuleBox.ItemIndex], + renderSettingsEdit.Text, + missingFilesCheckbox.IsChecked, + soundCheckbox.IsChecked, + threadedRender.IsChecked, + IfThenElse(customCheckbox.IsChecked = True, customProp.Text, ''), // yeet + cacheUsageTrackBar.Value, + memUsageTrackBar.Value, + TList.Create(Compositions) + )); end; - outputModuleBoxChange(Self); +end; - if RootNode.ChildNodes['queueItem'].ChildNodes['renderSettings'].Text.IsEmpty <> True then begin - var TempRenderSetting: RenderSetting; - TempRenderSetting.Setting := RootNode.ChildNodes['queueItem'].ChildNodes['renderSettings'].Text; +function TMainForm.ReadAER(Path: String): TRenderTask; +begin + var AERXMLDocument: IXMLDocument := TXMLDocument.Create(nil); + AERXMLDocument.LoadFromFile(Path); + AERXMLDocument.Encoding := 'utf-8'; - if GetRSIndex(TempRenderSetting) <> -1 then - renderSettingsBox.ItemIndex := GetRSIndex(TempRenderSetting) - else begin - SetLength(RenderSettings, Length(RenderSettings) + 1); - RenderSettings[High(RenderSettings)].Setting := RootNode.ChildNodes['queueItem'].ChildNodes['renderSettings'].Text; - RenderSettings[High(RenderSettings)].Imported := True; + AERXMLDocument.Active := True; - renderSettingsBox.Items.Insert(renderSettingsBox.Items.Count - 1, RenderSettings[High(RenderSettings)].Setting + ' ' + Language[LANG].OutputModuleConfiguratorForm.Imported); - renderSettingsBox.ItemIndex := renderSettingsBox.Items.Count - 2; - end; + var RootNode: IXMLNode := AERXMLDocument.DocumentElement; + + if Settings.DefaultOutputPath <> '' then begin + outputPath.Text := Settings.DefaultOutputPath; + Settings.TemporarySavePath := Settings.DefaultOutputPath + PLATFORMPATHSEPARATOR; + end; + outputModuleBoxChange(Self); + + var Compositions: TList := TList.Create; + + for var i := 0 to StrToInt(RootNode.ChildNodes['compositions'].Attributes['count']) - 1 do begin + Compositions.Add(TComposition.Create( + RootNode.ChildNodes['compositions'].ChildNodes[i].ChildNodes['name'].Text, + TFrameSpan.Create(StrToInt(RootNode.ChildNodes['compositions'].ChildNodes[i].ChildNodes['rangeStart'].Text), + StrToInt(RootNode.ChildNodes['compositions'].ChildNodes[i].ChildNodes['rangeEnd'].Text)), + 1 + )); end; - renderSettingsBoxChange(Self); - compName.Text := RootNode.ChildNodes['queueItem'].ChildNodes['composition'].ChildNodes['name'].Text; - inFrame.Text := RootNode.ChildNodes['queueItem'].ChildNodes['composition'].ChildNodes['rangeStart'].Text; - outFrame.Text := RootNode.ChildNodes['queueItem'].ChildNodes['composition'].ChildNodes['rangeEnd'].Text; + Result := TRenderTask.Create( + RootNode.Attributes['project'], + outputPath.Text, + outputModuleBox.Items[outputModuleBox.ItemIndex], + renderSettingsEdit.Text, + missingFilesCheckbox.IsChecked, + soundCheckbox.IsChecked, + threadedRender.IsChecked, + IfThenElse(customCheckbox.IsChecked = True, customProp.Text, ''), // yeet + cacheUsageTrackBar.Value, + memUsageTrackBar.Value, + TList.Create(Compositions) + ); end; procedure TMainForm.aboutItemClick(Sender: TObject); @@ -1287,9 +1582,9 @@ procedure TMainForm.calculateButtonClick(Sender: TObject); except on Exception do if outFrame.Text = '' then - TDialogServiceSync.MessageDialog(Language[LANG].Errors.CalculateFrameError, TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0) + TDialogServiceSync.MessageDialog(Language[Settings.Language].Errors.CalculateFrameError, TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0) else - TDialogServiceSync.MessageDialog(Language[LANG].Errors.CalculateUnknownError, TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0) + TDialogServiceSync.MessageDialog(Language[Settings.Language].Errors.CalculateUnknownError, TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0) end; end; @@ -1300,32 +1595,32 @@ procedure TMainForm.compNameTyping(Sender: TObject); procedure TMainForm.compSwitchSwitch(Sender: TObject); begin - if compSwitch.IsChecked then begin - if UpdateAvailable = True then - begin - if MainForm.Height <= 490 then - MainForm.Height := 630;//MainForm.Height + 130; - end - else - if MainForm.Height <= 450 then - MainForm.Height := 580;//MainForm.Height + 130; - - compSwitchLabel.Text := Language[LANG].MainForm.MultiComp; - - compGrid.RowCount := Round(compCount.Value); - compGrid.Cells[0, 0] := compName.Text; - compGrid.Model.ScrollDirections := TScrollDirections.Vertical; - end else begin - if UpdateAvailable = True then begin - if MainForm.WindowState <> TWindowState.wsMaximized then - MainForm.Height := 490//MainForm.Height - 130 - end else - if MainForm.WindowState <> TWindowState.wsMaximized then - MainForm.Height := 450;//MainForm.Height - 130; - - compSwitchLabel.Text := Language[LANG].MainForm.SingleComp; - compName.Text := compGrid.Cells[0, 0]; - end; +// if compSwitch.IsChecked then begin +// if UpdateAvailable = True then +// begin +// if MainForm.Height <= 490 then +// MainForm.Height := 630;//MainForm.Height + 130; +// end +// else +// if MainForm.Height <= 450 then +// MainForm.Height := 580;//MainForm.Height + 130; +// +// compSwitchLabel.Text := Language[Settings.Language].MainForm.MultiComp; +// +// compGrid.RowCount := Round(compCount.Value); +// compGrid.Cells[0, 0] := compName.Text; +// compGrid.Model.ScrollDirections := TScrollDirections.Vertical; +// end else begin +// if UpdateAvailable = True then begin +// if MainForm.WindowState <> TWindowState.wsMaximized then +// MainForm.Height := 490//MainForm.Height - 130 +// end else +// if MainForm.WindowState <> TWindowState.wsMaximized then +// MainForm.Height := 450;//MainForm.Height - 130; +// +// compSwitchLabel.Text := Language[Settings.Language].MainForm.SingleComp; +// compName.Text := compGrid.Cells[0, 0]; +// end; end; procedure TMainForm.docsItemClick(Sender: TObject); @@ -1356,22 +1651,23 @@ procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); {$IFDEF MACOS}KillProcess('aerendercore');{$ENDIF MACOS} end; - SaveConfiguration(APPFOLDER + 'AErenderConfiguration.xml'); - if StrToBool(DelTempFiles) = True then + //SaveConfiguration(APPFOLDER + 'AErenderConfiguration.xml'); + Settings.SaveToFile(APPFOLDER + 'AErenderConfiguration.xml'); + if Settings.DeleteTemporary then begin - var AerenderDirectory: TArray := GetDirectoryFiles(APPFOLDER); - for var i := 0 to High(AerenderDirectory) do + var LauncherDirectory: TArray := GetDirectoryFiles(APPFOLDER); + for var i := 0 to High(LauncherDirectory) do begin {$IFDEF MSWINDOWS} - if (AerenderDirectory[i].Contains('.bat')) then - System.SysUtils.DeleteFile(PWideChar(AerenderDirectory[i])); + if (LauncherDirectory[i].Contains('.bat')) then + System.SysUtils.DeleteFile(PWideChar(LauncherDirectory[i])); {$ENDIF MSWINDOWS} {$IFDEF MACOS} - if (AerenderDirectory[i].Contains('.command')) then - System.SysUtils.DeleteFile(PWideChar(AerenderDirectory[i])); + if (LauncherDirectory[i].Contains('.command')) then + System.SysUtils.DeleteFile(PWideChar(LauncherDirectory[i])); {$ENDIF MACOS} - if (AerenderDirectory[i].Contains('.log')) then - System.SysUtils.DeleteFile(PWideChar(AerenderDirectory[i])); + if (LauncherDirectory[i].Contains('.log')) then + System.SysUtils.DeleteFile(PWideChar(LauncherDirectory[i])); end; end; end; @@ -1380,24 +1676,25 @@ procedure TMainForm.FormCreate(Sender: TObject); var CFG: TextFile; begin - {$IFDEF MSWINDOWS}DwmCompositionEnabled();{$ENDIF MSWINDOWS} + {$IFDEF MSWINDOWS}DwmCompositionEnabled();{$ENDIF} FormatSettings := TFormatSettings.Invariant; - MainForm.Width := 600; - MainForm.Height := {$IFDEF MSWINDOWS}450{$ENDIF MSWINDOWS} {$IFDEF MACOS}430{$ENDIF MACOS}; - //MainForm.Caption := 'AErender Launcher (' + APPVERSION_DEMO + ')'; + MainForm.Width := 960; + MainForm.Height := 540; MainForm.Caption := 'AErender Launcher (' + APPVERSION + ')'; - APPFOLDER := {$IFDEF MSWINDOWS}'C:\ProgramData\AErender\'{$ENDIF MSWINDOWS} - {$IFDEF MACOS}GetEnvironmentVariable('HOME') + '/Documents/AErender/'{$ENDIF MACOS}; + APPFOLDER := {$IFDEF MSWINDOWS}'C:\ProgramData\AErender\' + {$ELSE MACOS}GetEnvironmentVariable('HOME') + '/Documents/AErender/'{$ENDIF}; {$IFDEF MSWINDOWS} - FreeAndNil(launcherItem); + //FreeAndNil(launcherItem); + launcherItem.Visible := False; exitItem.ShortCut := TextToShortCut('Alt+F4'); exportConfigItem.ShortCut := TextToShortCut('Ctrl+E'); importConfigItem.ShortCut := TextToShortCut('Ctrl+I'); - {$ENDIF MSWINDOWS} - {$IFDEF MACOS} - FreeAndNil(editItem); - FreeAndNil(exitItem); - {$ENDIF MACOS} + {$ELSE MACOS} + editItem.Visible := False; + exitItem.Visible := False; +// FreeAndNil(editItem); +// FreeAndNil(exitItem); + {$ENDIF} if DirectoryExists(APPFOLDER) then AssignFile(CFG, APPFOLDER + 'AErenderConfiguration.xml') @@ -1406,73 +1703,87 @@ procedure TMainForm.FormCreate(Sender: TObject); CreateDir(APPFOLDER); AssignFile(CFG, APPFOLDER + 'AErenderConfiguration.xml'); end; - if FileExists(APPFOLDER + 'AErenderConfiguration.xml') then - begin - try - LoadConfiguration(APPFOLDER + 'AErenderConfiguration.xml'); - except - on Exception do begin - try - LoadLegacyConfiguration(APPFOLDER + 'AErenderConfiguration.xml'); - except - on Exception do begin - if (TDialogServiceSync.MessageDialog(('Configuration file is corrupted! Press OK to renew configuration file. Application will be restarted.' + #13#10 + - {$IFDEF MSWINDOWS}'C:\ProgramData\AErender\AErenderConfiguration.xml'{$ENDIF MSWINDOWS} - {$IFDEF MACOS}'~/Documents/AErender/AErenderConfiguration.xml'{$ENDIF MACOS}), - TMsgDlgType.mtError, mbOKCancel, TMsgDlgBtn.mbOK, 0) = 1) then - begin - System.SysUtils.DeleteFile(APPFOLDER + 'AErenderConfiguration.xml'); - {$IFDEF MSWINDOWS}ShellExecute(0, 'OPEN', PChar(ParamStr(0)), '', '', SW_SHOWNORMAL);{$ENDIF MSWINDOWS} - {$IFDEF MACOS}_system(PAnsiChar('open -a "' + AnsiString(ParamStr(0)) + '" & disown'));{$ENDIF MACOS} - end; - Halt; + + if FileExists(APPFOLDER + 'AErenderConfiguration.xml') then begin + try + //LoadConfiguration(APPFOLDER + 'AErenderConfiguration.xml'); + Settings.LoadFromXMLFile(APPFOLDER + 'AErenderConfiguration.xml'); + except + on Exception do begin + try + //LoadLegacyConfiguration(APPFOLDER + 'AErenderConfiguration.xml'); + Settings.LoadFromXMLFileLegacy(APPFOLDER + 'AErenderConfiguration.xml'); + except + on Exception do begin + if (TDialogServiceSync.MessageDialog( + ('Configuration file is corrupted! Press OK to renew configuration file. Application will be restarted.' + #13#10 + + {$IFDEF MSWINDOWS}'C:\ProgramData\AErender\AErenderConfiguration.xml' + {$ELSE MACOS}'~/Documents/AErender/AErenderConfiguration.xml'{$ENDIF}), + TMsgDlgType.mtError, mbOKCancel, TMsgDlgBtn.mbOK, 0) = 1) then + begin + System.SysUtils.DeleteFile(APPFOLDER + 'AErenderConfiguration.xml'); + {$IFDEF MSWINDOWS}ShellExecute(0, 'OPEN', PChar(ParamStr(0)), '', '', SW_SHOWNORMAL); + {$ELSE MACOS}_system(PAnsiChar('open -a "' + AnsiString(ParamStr(0)) + '" & disown'));{$ENDIF} end; + Halt; end; end; end; - end - else - begin - InitConfiguration(APPFOLDER + 'AErenderConfiguration.xml'); - AERH := 'True'; - DelTempFiles := 'True'; end; - AEPOpenDialog.InitialDir := DEFPRGPATH; - SaveDialog1.InitialDir := DEFOUTPATH; + end else begin + //InitConfiguration(APPFOLDER + 'AErenderConfiguration.xml'); + Settings.ResetAndSave(APPFOLDER + 'AErenderConfiguration.xml'); + end; + AEPOpenDialog.InitialDir := Settings.DefaultProjectPath; + SaveDialog1.InitialDir := Settings.DefaultOutputPath; + + if not FileExists(APPFOLDER + {$IFDEF MSWINDOWS}'aeparser_win.exe'{$ELSE MACOS}'aeparser_mac'{$ENDIF}) then begin + ExtractParserToAppDir; + end; InflateRecents; - outputModuleBox.ListBox.AniCalculations.Animation := True; + var AnimSetupThread: TThread := TThread.CreateAnonymousThread(procedure begin + outputModuleBox.ListBox.AniCalculations.Animation := True; - compGrid.AniCalculations.AutoShowing := False; - compGrid.AniCalculations.Animation := True; + compGrid.AniCalculations.AutoShowing := False; + compGrid.AniCalculations.Animation := True; - threadsGrid.AniCalculations.Animation := True; + threadsGrid.AniCalculations.Animation := True; - threadsCount.OnValidate := threadsCount.OnValidateEvent; - threadsCount.OnValidating := threadsCount.OnValidatingEvent; + TaskEditorCompGrid.AniCalculations.Animation := True; + TaskEditorCompGrid.Model.ScrollDirections := (TScrollDirections.Vertical); + end); + +// threadsCount.OnValidate := threadsCount.OnValidateEvent; +// threadsCount.OnValidating := threadsCount.OnValidatingEvent; + + RenderTasks.OnNotify := MainForm.RenderTasksOnNotify; + + AnimSetupThread.Start; + //ShowMessage(AErenderPath); end; procedure TMainForm.FormResize(Sender: TObject); begin - // RU: Установка размеров для колонн в таблицах - StringColumn1.Width := compGrid.Width; - StringColumn2.Width := threadsGrid.Width * 0.5; - StringColumn3.Width := threadsGrid.Width * 0.5; + /// Composition grid collumns width +// StringColumn1.Width := compGrid.Width; +// StringColumn2.Width := threadsGrid.Width * 0.5; +// StringColumn3.Width := threadsGrid.Width * 0.5; - // RU: Ограничение ширины формы - if MainForm.Width < 600 then - MainForm.Width := 600; + /// Limit form's width + if MainForm.Width < SizeConstraints.MIN_WIDTH then + MainForm.Width := SizeConstraints.MIN_WIDTH; - // RU: Ограничение высоты формы в зависимости от платформы и видимости панели с обновлением + /// RU: Ограничение высоты формы в зависимости от платформы и видимости панели с обновлением if UpdateAvailable then begin - if MainForm.Height < {$IFDEF MSWINDOWS}490{$ENDIF MSWINDOWS} {$IFDEF MACOS}470{$ENDIF MACOS} then begin - MainForm.Height := {$IFDEF MSWINDOWS}490{$ENDIF MSWINDOWS} {$IFDEF MACOS}470{$ENDIF MACOS}; + if MainForm.Height < SizeConstraints.MIN_HEIGHT_UPD then begin + MainForm.Height := SizeConstraints.MIN_HEIGHT_UPD; {$IFDEF MSWINDOWS}Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);{$ENDIF MSWINDOWS} end; end else begin - if MainForm.Height < {$IFDEF MSWINDOWS}450{$ENDIF MSWINDOWS} {$IFDEF MACOS}430{$ENDIF MACOS} then begin - MainForm.Height := {$IFDEF MSWINDOWS}450{$ENDIF MSWINDOWS} {$IFDEF MACOS}430{$ENDIF MACOS}; + if MainForm.Height < SizeConstraints.MIN_HEIGHT_NO_UPD then begin + MainForm.Height := SizeConstraints.MIN_HEIGHT_NO_UPD; {$IFDEF MSWINDOWS}Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);{$ENDIF MSWINDOWS} end; end; @@ -1480,6 +1791,33 @@ procedure TMainForm.FormResize(Sender: TObject); procedure TMainForm.FormShow(Sender: TObject); begin + + /// To speed up startup we will check for FFMPEG in a separate thread + var FFMPEGCheckThread: TThread := TThread.CreateAnonymousThread(procedure begin + try + if GetFFMPEGPath <> '' then + begin + FFMPEG := True; + ffmpegPath := GetFFMPEGPath; + //ffmpegCheckBox.Enabled := True; + end + else + raise Exception.Create('FFMPEG not found'); + except + on Exception do + begin + FFMPEG := False; + //ffmpegCheckBox.Enabled := False; + //ffmpegCheckBox.Hint := 'FFMPEG is not found at' + {$IFDEF MSWINDOWS} 'C:\ProgramData\AErender\' {$ENDIF MSWINDOWS} + // {$IFDEF MACOS} '~/Documents/AErender/' {$ENDIF MACOS} + 'directory'; + end; + end; + end); + + var aeparserCheckThread: TThread := TThread.CreateAnonymousThread(procedure begin + // + end); + //// Check for available languages // It's better to do it in a Show thread, since OnCreate event of main form // don't have access to other forms that are not yet created @@ -1492,63 +1830,55 @@ procedure TMainForm.FormShow(Sender: TObject); end; UpdateOutputModules; - UpdateRenderSettings; - SettingsForm.styleBox.ItemIndex := STYLE; - SettingsForm.onRenderStartBox.ItemIndex := ONRENDERSTART; - SettingsForm.HandleCheckBox.IsChecked := StrToBool(AERH); - SettingsForm.delFilesCheckBox.IsChecked := StrToBool(DelTempFiles); + SettingsForm.styleBox.ItemIndex := Settings.Style; + SettingsForm.onRenderStartBox.ItemIndex := Settings.OnRenderStart; + SettingsForm.HandleCheckBox.IsChecked := Settings.AErenderHandle; + SettingsForm.delFilesCheckBox.IsChecked := Settings.DeleteTemporary; - {$IFDEF MACOS} - if LANG = 1 then begin - outputModuleLabel.Width := 148; - renderSettingsLabel.Width := 148; - end; - {$ENDIF MACOS} + var FormVisualUpdateThread: TThread :=TThread.CreateAnonymousThread(procedure begin - if memUsageTrackBar.Value = 100 then - memUsageInfo.Text := Language[LANG].MainForm.Unlimited - else - memUsageInfo.Text := Trunc(memUsageTrackBar.Value).ToString + '% (' + Trunc((GetPlatformMemorySize/1024/1024) * (memUsageTrackBar.Value / 100)).ToString + ' MB)'; - if cacheUsageTrackBar.Value = 100 then - cacheUsageInfo.Text := Language[LANG].MainForm.Unlimited - else - cacheUsageInfo.Text := Trunc(cacheUsageTrackBar.Value).ToString + '%'; + {$IFDEF MACOS} + if Settings.Language = 1 then begin + outputModuleLabel.Width := 148; + renderSettingsLabel.Width := 148; + end; + {$ENDIF MACOS} + + if memUsageTrackBar.Value = 100 then + memUsageInfo.Text := Language[Settings.Language].MainForm.Unlimited + else + memUsageInfo.Text := Trunc(memUsageTrackBar.Value).ToString + '% (' + Trunc((GetPlatformMemorySize/1024/1024) * (memUsageTrackBar.Value / 100)).ToString + ' MB)'; + if cacheUsageTrackBar.Value = 100 then + cacheUsageInfo.Text := Language[Settings.Language].MainForm.Unlimited + else + cacheUsageInfo.Text := Trunc(cacheUsageTrackBar.Value).ToString + '%'; - StringColumn1.Width := compGrid.Width - 5; - StringColumn2.Width := threadsGrid.Width * 0.5; - StringColumn3.Width := threadsGrid.Width * 0.5; + StringColumn1.Width := compGrid.Width - 5; + StringColumn2.Width := threadsGrid.Width * 0.5; + StringColumn3.Width := threadsGrid.Width * 0.5; + end); SplashScreenForm.Close; SplashScreenForm.Free; + FormVisualUpdateThread.Start; + + FFMPEGCheckThread.Start; + aeparserCheckThread.Start; + if (ParamCount > 0) and (ParamStr(1) = '-aer') then begin ImportUnit.PARAMSTART := True; ImportUnit.XMLPath := ParamStr(2); + ImportForm.FormSender := FS_XML; ImportForm.ShowModal; end else if (ParamStr(1) = '-aerq') then begin MainUnit.PARAMSTART := True; - ReadAERQ(ParamStr(2)); + RenderTasks.AddRange(ReadAERQ(ParamStr(2))); end; - try - if GetFFMPEGPath <> '' then - begin - FFMPEG := True; - ffmpegPath := GetFFMPEGPath; - //ffmpegCheckBox.Enabled := True; - end - else - raise Exception.Create('FFMPEG not found'); - except - on Exception do - begin - FFMPEG := False; - //ffmpegCheckBox.Enabled := False; - //ffmpegCheckBox.Hint := 'FFMPEG is not found at' + {$IFDEF MSWINDOWS} 'C:\ProgramData\AErender\' {$ENDIF MSWINDOWS} - // {$IFDEF MACOS} '~/Documents/AErender/' {$ENDIF MACOS} + 'directory'; - end; - end; + //ShowMessage(RenderTasks.Count.ToString); + //TasksIsEmpty.Visible := RenderTasks.Count = 0; // Check updates in separate thread to fasten startup MainForm.UpdateNetHTTPClient.Get(AERL_REPO_RELEASES); @@ -1610,6 +1940,12 @@ procedure TMainForm.inFrameValidate(Sender: TObject; var Text: string); end; procedure TMainForm.launchButtonClick(Sender: TObject); +/// So, we need some rendering modes +/// NORMAL MODE: It's the old Launcher's behaviour +/// Will render all the compositions one-by-one and render them +/// if Composition.Split > 1, then all the splits will be rendered with default method in settings +/// + type exec = record script: String; @@ -1617,238 +1953,51 @@ exec = record end; var threads, comps, emptyComps: Integer; - PATH, logPath{, prgPath}: String; + PATH, logPath: String; execFile: array [1..128] of exec; // Notification: TNotification; begin //Error Codes if not (SettingsForm.HandleCheckBox.IsChecked and isRendering) then begin - emptyComps := 0; - if AERPATH.IsEmpty then - ERR := ERR + #13#10 + '[Error 1]: ' + Language[LANG].Errors.aerenderIsEmpty; + {emptyComps := 0; + if AErenderPath.IsEmpty then + ERR := ERR + #13#10 + '[Error 1]: ' + Language[Settings.Language].Errors.aerenderIsEmpty; if projectPath.Text.IsEmpty then - ERR := ERR + #13#10 + '[Error 2]: ' + Language[LANG].Errors.projectIsEmpty; + ERR := ERR + #13#10 + '[Error 2]: ' + Language[Settings.Language].Errors.projectIsEmpty; if outputPath.Text.IsEmpty then - ERR := ERR + #13#10 + '[Error 3]: ' + Language[LANG].Errors.outputIsEmpty; + ERR := ERR + #13#10 + '[Error 3]: ' + Language[Settings.Language].Errors.outputIsEmpty; if compName.Text.IsEmpty then - ERR := ERR + #13#10 + '[Error 4]: ' + Language[LANG].Errors.compositionIsEmpty; + ERR := ERR + #13#10 + '[Error 4]: ' + Language[Settings.Language].Errors.compositionIsEmpty; if compSwitch.IsChecked then begin for var i := 0 to compCount.Value.ToString.ToInteger - 1 do if compGrid.Cells[0, i].IsEmpty then inc(emptyComps); if emptyComps > 0 then - ERR := ERR + #13#10 + '[Error 5]: ' + Language[LANG].Errors.multiCompIsEmpty; + ERR := ERR + #13#10 + '[Error 5]: ' + Language[Settings.Language].Errors.multiCompIsEmpty; end; if StrToInt(threadsCount.Text) > 128 then - ERR := ERR + #13#10 + '[Error 6]: ' + Language[LANG].Errors.tooManyThreads; + ERR := ERR + #13#10 + '[Error 6]: ' + Language[Settings.Language].Errors.tooManyThreads; //Proceed if no errors occured if not ERR.IsEmpty then begin - TDialogServiceSync.MessageDialog((Language[LANG].Errors.errorsOccured + ERR), TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0); + TDialogServiceSync.MessageDialog((Language[Settings.Language].Errors.errorsOccured + ERR), TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0); ERR := ''; end - else + else } begin - if threadsSwitch.IsChecked then - begin - threads := threadsCount.Text.ToInteger; - SetLength (LogFiles, threads); - end - else - begin - threads := 1; - if Length(LogFiles) = 0 then - SetLength (LogFiles, threads); - end; - if compSwitch.IsChecked then - begin - comps := StrToInt(compCount.Value.ToString); - SetLength (LogFiles, comps); - end - else - begin - comps := 1; - if Length(LogFiles) = 0 then - SetLength (LogFiles, comps); - end; + AbortRender := False; + ShowMessage(RenderTasks.Items[0].ToString); + + /// It would be really nice to have an await keyword here, but... + RenderTasks[0].Render(); + +// for var Task: TRenderTask in RenderTasks do begin +// Task.Render(4); +// end; - for var j := 0 to comps-1 do - for var i := 1 to threads do - begin - /// Script compiling section - - // Clear the string - execFile[i].script := ''; - - // Add encoding header to ensure that our CMD on Windows will use UTF-8 - {$IFDEF MSWINDOWS} - execFile[i].script := 'chcp 65001' + #13#10; - {$ENDIF MSWINDOWS} - - // Make console output data from it if progress display is enabled - // Made by using default in Shell and Bash ( command ) > data/output/path.log - // Open bracket here - if SettingsForm.HandleCheckBox.IsChecked then - execFile[i].script := execFile[i].script + '('; - - // Ensure that logs paths won't comflict with each other - if comps = 1 then - logPath := APPFOLDER + compName.Text + '_' + i.ToString - else - logPath := APPFOLDER + compGrid.Cells[0, j] + '_' + i.ToString; - - // Add Pass output path to temporary wariable - PATH := outputPath.Text; - - // Create folder if '[projectName]/' or '[projectName]\' is used - // Because aerender won't do it for you - if outputPath.Text.Contains('[projectName]' + PLATFORMPATHSEPARATOR) then - begin - PATH := StringReplace(PATH, '[projectName]', ExtractFileName(projectPath.Text), [rfReplaceAll, rfIgnoreCase]); - if not DirectoryExists(ExtractFilePath(PATH)) then - CreateDir(ExtractFilePath(PATH)); - end; - - // Adjust file output path if split render is enabled - // because they can conflict - if threadsSwitch.IsChecked then - begin - var FilePath: String := ExtractFilePath(PATH); - var FileName: String := StringReplace(ExtractFileName(PATH), ExtractFileExt(PATH), '', [rfReplaceAll, rfIgnoreCase]); - var FileExt: String := ExtractFileExt(PATH); - PATH := FilePath + FileName + '_' + i.ToString + FileExt; - end; - - // Adjust file output path if multi comp render is enabled - // because they can conflict - if compSwitch.IsChecked then - if not outputPath.Text.Contains('[compName]') then - begin - var FilePath: String := ExtractFilePath(PATH); - var FileName: String := StringReplace(ExtractFileName(PATH), ExtractFileExt(PATH), '', [rfReplaceAll, rfIgnoreCase]); - var FileExt: String := ExtractFileExt(PATH); - PATH := FilePath + FileName + '_' + compGrid.Cells[0, j] + FileExt; - end; - - /// Begin executable compiling section - // Add aerender path to script - execFile[i].script := execFile[i].script + '"' + AERPATH + '" ' + '-project "' + projectPath.Text + '" -output "' + PATH + '" '; - - // Add comp name to script - if compSwitch.IsChecked then - execFile[i].script := execFile[i].script + '-comp "' + compGrid.Cells[0, j] + '" ' - else - execFile[i].script := execFile[i].script + '-comp "' + compName.Text + '" '; - - // Add start and end ranges to script - if threadsSwitch.IsChecked then - begin - execFile[i].script := execFile[i].script + '-s "' + threadsGrid.Cells[0, i-1] + '" '; - execFile[i].script := execFile[i].script + '-e "' + threadsGrid.Cells[1, i-1] + '" '; - end - else - begin - if not inFrame.Text.IsEmpty then - execFile[i].script := execFile[i].script + '-s "' + inFrame.Text + '" '; - if not outFrame.Text.IsEmpty then - execFile[i].script := execFile[i].script + '-e "' + outFrame.Text + '" '; - end; - - // Add sound flag to script - if soundCheckbox.IsChecked then - execFile[i].script := execFile[i].script + '-sound ON '; - - // Add multiprocessing flag to script - if threadedRender.IsChecked then - execFile[i].script := execFile[i].script + '-mp '; - - // Add missing footage flag to script - if missingFilesCheckbox.IsChecked then - execFile[i].script := execFile[i].script + '-continueOnMissingFootage '; - - // Add output module flag to script - if outputModuleBox.ItemIndex <> -1 then - execFile[i].script := execFile[i].script + '-OMtemplate "' + OutputModules[outputModuleBox.ItemIndex].Module + '" '; - - if renderSettingsBox.ItemIndex <> -1 then - execFile[i].script := execFile[i].script + '-RStemplate "' + RenderSettings[outputModuleBox.ItemIndex].Setting + '" '; - - // Add memory usage flags to script - execFile[i].script := execFile[i].script + '-mem_usage "' + Trunc(memUsageTrackBar.Value).ToString + '" "' + Trunc(cacheUsageTrackBar.Value).ToString + '" '; - - // Add whatever user typed parameters to script - if customCheckbox.IsChecked then - execFile[i].script := execFile[i].script + customProp.Text; - - if SettingsForm.HandleCheckBox.IsChecked then - begin - execFile[i].script := execFile[i].script + ') > "' + logPath + '.log"'; - - if threadsSwitch.IsChecked then - LogFiles[i-1] := logPath + '.log' - else - LogFiles[j] := logPath + '.log'; - end; - - //File section - {$IFDEF MSWINDOWS} - if compSwitch.IsChecked then - AssignFile (execFile[i].F, 'C:\ProgramData\AErender\aerender' + i.ToString + '_' + compGrid.Cells[0, j] + '.bat', CP_UTF8) - else - AssignFile (execFile[i].F, 'C:\ProgramData\AErender\aerender' + i.ToString + '.bat', CP_UTF8); - Rewrite (execFile[i].F); - Writeln (execFile[i].F, execFile[i].script); - //Writeln (execFile[i].F, '@PAUSE'); - CloseFile (execFile[i].F); - if SettingsForm.HandleCheckBox.IsChecked then - if compSwitch.IsChecked then - ShellExecute(0, 'OPEN', PChar('C:\ProgramData\AErender\aerender' + i.ToString + '_' + compGrid.Cells[0, j] + '.bat'), '', '', SW_HIDE) - else - ShellExecute(0, 'OPEN', PChar('C:\ProgramData\AErender\aerender' + i.ToString + '.bat'), '', '', SW_HIDE) - else - if compSwitch.IsChecked then - ShellExecute(0, 'OPEN', PChar('C:\ProgramData\AErender\aerender' + i.ToString + '_' + compGrid.Cells[0, j] + '.bat'), '', '', SW_SHOWNORMAL) - else - ShellExecute(0, 'OPEN', PChar('C:\ProgramData\AErender\aerender' + i.ToString + '.bat'), '', '', SW_SHOWNORMAL) - //Execute('C:\ProgramData\AErender\aerender' + i.ToString + '.bat'); - {$ENDIF MSWINOWS} - {$IFDEF MACOS} - if compSwitch.IsChecked then - AssignFile (execFile[i].F, GetEnvironmentVariable('HOME') + '/Documents/AErender/aerender' + i.ToString + '_' + compGrid.Cells[0, j] + '.command', CP_UTF8) - else - AssignFile (execFile[i].F, GetEnvironmentVariable('HOME') + '/Documents/AErender/aerender' + i.ToString + '.command', CP_UTF8); - Rewrite (execFile[i].F); - Writeln (execFile[i].F, execFile[i].script); - //Writeln (execFile[i].F, 'read -p "Press any key to continue..."'); - CloseFile (execFile[i].F); - if SettingsForm.HandleCheckBox.IsChecked then - if compSwitch.IsChecked then - begin - _system(PAnsiChar('chmod +x "' + AnsiString(GetEnvironmentVariable('HOME') + '/Documents/AErender/aerender' + i.ToString + '_' + compGrid.Cells[0, j] + '.command"'))); - _system(PAnsiChar('command "' + AnsiString(GetEnvironmentVariable('HOME') + '/Documents/AErender/aerender' + i.ToString + '_' + compGrid.Cells[0, j] + '.command" & disown'))); - end - else - begin - _system(PAnsiChar('chmod +x "' + AnsiString(GetEnvironmentVariable('HOME') + '/Documents/AErender/aerender' + i.ToString + '.command"'))); - _system(PAnsiChar('command "' + AnsiString(GetEnvironmentVariable('HOME') + '/Documents/AErender/aerender' + i.ToString + '.command" & disown'))); - end - else - if compSwitch.IsChecked then - begin - _system(PAnsiChar('chmod +x "' + AnsiString(GetEnvironmentVariable('HOME') + '/Documents/AErender/aerender' + i.ToString + '_' + compGrid.Cells[0, j] + '.command"'))); - _system(PAnsiChar('open "' + AnsiString(GetEnvironmentVariable('HOME') + '/Documents/AErender/aerender' + i.ToString + '_' + compGrid.Cells[0, j] + '.command"'))); - end - else - begin - _system(PAnsiChar('chmod +x "' + AnsiString(GetEnvironmentVariable('HOME') + '/Documents/AErender/aerender' + i.ToString + '.command"'))); - _system(PAnsiChar('open "' + AnsiString(GetEnvironmentVariable('HOME') + '/Documents/AErender/aerender' + i.ToString + '.command"'))); - //Execute(GetEnvironmentVariable('HOME') + '/Documents/AErender/aerender' + i.ToString + '.command"'); - end - {$ENDIF MACOS} - end; // Wait untill aerender launches Sleep (200); if SettingsForm.HandleCheckBox.IsChecked then @@ -1872,7 +2021,7 @@ exec = record end end; end else begin - TDialogServiceSync.MessageDialog(Language[LANG].Errors.isCurrentlyRendering, TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0); + TDialogServiceSync.MessageDialog(Language[Settings.Language].Errors.isCurrentlyRendering, TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0); RenderWindowSender := infoButton; RenderingForm.ShowModal; end; @@ -1945,20 +2094,93 @@ procedure TMainForm.outputModuleBoxChange(Sender: TObject); end else if not outputPath.Text.IsEmpty then - if tempSavePath.Contains('Def') or tempSavePath.Contains('def') then - outputPath.Text := ExtractFilePath(tempSavePath) + OutputModules[outputModuleBox.ItemIndex].Mask + if Settings.TemporarySavePath.ToLower.Contains('def') then + outputPath.Text := ExtractFilePath(Settings.TemporarySavePath) + Settings.OutputModules[outputModuleBox.ItemIndex].Mask else - if ExtractFileName(tempSavePath).IsEmpty then - outputPath.Text := tempSavePath + OutputModules[outputModuleBox.ItemIndex].Mask + if ExtractFileName(Settings.TemporarySavePath).IsEmpty then + outputPath.Text := Settings.TemporarySavePath + Settings.OutputModules[outputModuleBox.ItemIndex].Mask else - if ExtractFileExt(tempSavePath).IsEmpty then - outputPath.Text := ExtractFilePath(tempSavePath) + ExtractFileName(tempSavePath) + '_' + OutputModules[outputModuleBox.ItemIndex].Mask + if ExtractFileExt(Settings.TemporarySavePath).IsEmpty then + outputPath.Text := ExtractFilePath(Settings.TemporarySavePath) + ExtractFileName(Settings.TemporarySavePath) + '_' + Settings.OutputModules[outputModuleBox.ItemIndex].Mask else - outputPath.Text := ExtractFilePath(tempSavePath) + StringReplace(ExtractFileName(tempSavePath), ExtractFileExt(tempSavePath), '', [rfReplaceAll, rfIgnoreCase]) - + '_' + OutputModules[outputModuleBox.ItemIndex].Mask; + outputPath.Text := ExtractFilePath(Settings.TemporarySavePath) + StringReplace(ExtractFileName(Settings.TemporarySavePath), ExtractFileExt(Settings.TemporarySavePath), '', [rfReplaceAll, rfIgnoreCase]) + + '_' + Settings.OutputModules[outputModuleBox.ItemIndex].Mask; +end; + +procedure TMainForm.TaskEditorPopupPopup(Sender: TObject); +begin + PopupAniOpenHeight.Enabled := True; + PopupAniOpenWidth.Enabled := True; +end; + +procedure TMainForm.PopupAniCloseFinish(Sender: TObject); +begin + PopupAniCloseHeight.Enabled := False; + PopupAniCloseWidth.Enabled := False; + TaskEditorPopup.IsOpen := False; + TaskEditorPopup.Height := 384; + TaskEditorTabControl.TabIndex := 0; +end; + +procedure TMainForm.PopupAniOpenFinish(Sender: TObject); +begin + PopupAniOpenHeight.Enabled := False; + PopupAniOpenWidth.Enabled := False; +end; + +procedure TMainForm.ProjectReaderAwaitTimer(Sender: TObject); +begin + AwaitElapsedTime := AwaitElapsedTime + 5; + ProjectAwaitStatusLabel.Text := Format('Elapsed %d seconds of %d', [Trunc(AwaitElapsedTime / 1000), Trunc(AWAIT_TIMEOUT / 1000)]); + {$IFDEF MSWINDOWS} + ProjectAwaitStatusLabel.Repaint; + {$ENDIF} + + if AwaitElapsedTime >= AWAIT_TIMEOUT then begin + //Status.Text := 'Timeout'; + ProjectAwait.Enabled := False; + ProjectAwait.Visible := False; + + ProjectReaderAwait.Enabled := False; + + TDialogServiceSync.MessageDialog('Reading timeout. Please, specify all project data manually.', TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0); + + end; + + if FileExists(ProjectJsonPath) then begin + var ProjectJsonFile: TStream := TFileStream.Create(ProjectJsonPath, fmOpenRead or fmShareDenyNone); + var ProjectString: TStringList := TStringList.Create; + ProjectString.DefaultEncoding := TEncoding.UTF8; + ProjectString.LoadFromStream(ProjectJsonFile); + ProjectJsonFile.Free; + + if ProjectString.Text <> '' then begin + //Status.Text := 'File is not empty'; + ProjectAwait.Enabled := False; + ProjectAwait.Visible := False; + //JsonContents.Text := ProjectString.Text; + + ProjectJson := ProjectString.Text; + + //Status.Text := 'Waiting...'; + AwaitElapsedTime := 0; + + ProjectReaderAwait.Enabled := False; + + ImportForm.FormSender := FS_JSON; + ImportForm.ShowModal; + end;// else + //Status.Text := 'File is empty, repeating...'; + end; +end; + +procedure TMainForm.TaskEditorCancelButtonClick(Sender: TObject); +begin + PopupAniCloseHeight.Enabled := True; + PopupAniCloseWidth.Enabled := True; end; -procedure TMainForm.projectPathDragDrop(Sender: TObject; +procedure TMainForm._projectPathDragDrop(Sender: TObject; const Data: TDragObject; const Point: TPointF); begin if Data.Source <> nil then @@ -1967,13 +2189,13 @@ procedure TMainForm.projectPathDragDrop(Sender: TObject; projectPath.Text := Data.Files[0]; end; -procedure TMainForm.projectPathDragOver(Sender: TObject; const Data: TDragObject; +procedure TMainForm._projectPathDragOver(Sender: TObject; const Data: TDragObject; const Point: TPointF; var Operation: TDragOperation); begin Operation := TDragOperation.Link; end; -procedure TMainForm.saveFileClick(Sender: TObject); +procedure TMainForm._saveFileClick(Sender: TObject); {$IFDEF MACOS} var FSaveFile: NSSavePanel; @@ -1982,7 +2204,7 @@ procedure TMainForm.saveFileClick(Sender: TObject); NSWin := WindowHandleToPlatform(Screen.ActiveForm.Handle).Wnd; FSaveFile :=TNSSavePanel.Wrap(TNSSavePanel.OCClass.savePanel); - FSaveFile.setAccessoryView(CreateMessageView(Language[LANG].MainForm.DarwinDialogTip)); + FSaveFile.setAccessoryView(CreateMessageView(Language[Settings.Language].MainForm.DarwinDialogTip)); //FSaveFile.setAccessoryView(); FSaveFile.setDirectory(StrToNSStr(DEFOUTPATH)); FSaveFile.setNameFieldLabel(StrToNSStr('Output file name:')); @@ -2000,13 +2222,13 @@ procedure TMainForm.saveFileClick(Sender: TObject); else tempSavePath := NSStrToStr(FSaveFile.URL.relativePath); if tempSavePath.Contains('Def') or tempSavePath.Contains('def') then - outputPath.Text := ExtractFilePath(tempSavePath) + OutputModules[outputModuleBox.ItemIndex].Mask + outputPath.Text := ExtractFilePath(tempSavePath) + Settings.OutputModules[outputModuleBox.ItemIndex].Mask else if ExtractFileExt(tempSavePath) = '' then - outputPath.Text := tempSavePath + '_' + OutputModules[outputModuleBox.ItemIndex].Mask + outputPath.Text := tempSavePath + '_' + Settings.OutputModules[outputModuleBox.ItemIndex].Mask else outputPath.Text := ExtractFilePath(tempSavePath) + StringReplace(ExtractFileName(tempSavePath), ExtractFileExt(tempSavePath), '', [rfReplaceAll, rfIgnoreCase]) - + ExtractFileExt(OutputModules[outputModuleBox.ItemIndex].Mask); + + ExtractFileExt(Settings.OutputModules[outputModuleBox.ItemIndex].Mask); end)); {$ENDIF MACOS} {$IFDEF MSWINDOWS} @@ -2014,32 +2236,239 @@ procedure TMainForm.saveFileClick(Sender: TObject); with SaveDialog1 do if Execute then begin - tempSavePath := SaveDialog1.FileName; + Settings.TemporarySavePath := SaveDialog1.FileName; - if tempSavePath.Contains('Def') or tempSavePath.Contains('def') then - outputPath.Text := ExtractFilePath(tempSavePath) + OutputModules[outputModuleBox.ItemIndex].Mask + if Settings.TemporarySavePath.ToLower.Contains('def') then + outputPath.Text := ExtractFilePath(Settings.TemporarySavePath) + Settings.OutputModules[outputModuleBox.ItemIndex].Mask else - if ExtractFileExt(tempSavePath) = '' then - outputPath.Text := tempSavePath + '_' + OutputModules[outputModuleBox.ItemIndex].Mask + if ExtractFileExt(Settings.TemporarySavePath) = '' then + outputPath.Text := Settings.TemporarySavePath + '_' + Settings.OutputModules[outputModuleBox.ItemIndex].Mask else - outputPath.Text := ExtractFilePath(tempSavePath) + StringReplace(ExtractFileName(tempSavePath), ExtractFileExt(tempSavePath), '', [rfReplaceAll, rfIgnoreCase]) - + ExtractFileExt(OutputModules[outputModuleBox.ItemIndex].Mask); + outputPath.Text := ExtractFilePath(Settings.TemporarySavePath) + StringReplace(ExtractFileName(Settings.TemporarySavePath), ExtractFileExt(Settings.TemporarySavePath), '', [rfReplaceAll, rfIgnoreCase]) + + ExtractFileExt(Settings.OutputModules[outputModuleBox.ItemIndex].Mask); end; {$ENDIF MSWINDOWS} end; +/// Settings button click procedure TMainForm.settingsButtonClick(Sender: TObject); begin SettingsForm.ShowModal; end; +procedure TMainForm.TaskEditorCompCountChange(Sender: TObject); +begin + TaskEditorCompGrid.RowCount := StrToInt(TaskEditorCompCount.Text); + for var i := 0 to TaskEditorCompGrid.RowCount - 1 do begin + TaskEditorCompGrid.Cells[0, i] := IntToStr(i + 1); + if TaskEditorCompGrid.Cells[4, i] = '' then + TaskEditorCompGrid.Cells[4, i] := '1'; + end; +end; + +procedure TMainForm.TaskEditorCompGridEditingDone(Sender: TObject; const ACol, ARow: Integer); +begin + {case ACol of + 3: begin + if StrToInt(TaskEditorCompGrid.Cells[ACol, ARow]) > 128 then + TaskEditorCompGrid.StylesData['selection.fill.color'] := $FFFF6157 + else + TaskEditorCompGrid.StylesData['selection.fill.color'] := $FF2A82E2; + end; + end; } +end; + +procedure TMainForm.TasksPopupMenuPopup(Sender: TObject); +begin + if (TasksTreeView.ItemByText(FCurrentItem) <> nil) and (FCurrentItem <> 'nil') {or (TasksTreeView.Selected <> nil)} then begin + TasksTreeView.ItemByText(FCurrentItem).IsSelected := True; + EditTaskPopupItem.Enabled := True; + DeleteTaskPopupItem.Enabled := True; + if TasksTreeView.ItemByText(FCurrentItem).ParentItem <> nil then // Composition + TaskItemDisplay.Text := Format('Composition: %s', [FCurrentItem]) + else // Project + TaskItemDisplay.Text := Format('Project: %s', [FCurrentItem]); + end else begin + TaskItemDisplay.Text := 'No task is selected!'; + EditTaskPopupItem.Enabled := False; + DeleteTaskPopupItem.Enabled := False; + end; +end; + +procedure TMainForm.TasksTreeViewItemDblClick(Sender: TObject); +begin + //TasksTreeView.AllowDrag := False; + + var ProjectItem: TTreeViewItem; + var Task: TRenderTask; + var SelectedComp: String := ''; + + if TTreeViewItem(Sender).ParentItem <> nil then begin // If composition item was dblclicked + ProjectItem := TTreeViewItem(Sender).ParentItem; + TaskEditorTabControl.TabIndex := 1; + SelectedComp := TTreeViewItem(Sender).Text; + end else begin // We know for sure that it's a project item + ProjectItem := TTreeViewItem(Sender); + TaskEditorTabControl.TabIndex := 0; + end; + + Task := GetTaskByProject(ProjectItem.Text); + + if ProjectItem <> nil then begin // Ensure, that we won't get an Access Violation + projectPath.Text := Task.Project; + outputPath.Text := Task.Output; + + outputModuleBox.Index := outputModuleBox.Items.IndexOf(Task.OutputModule); + renderSettingsEdit.Text := Task.RenderSettings; + + missingFilesCheckbox.IsChecked := Task.MissingFiles; + soundCheckbox.IsChecked := Task.Sound; + threadedRender.IsChecked := Task.Multiprocessing; + + customCheckbox.IsChecked := not Task.CustomProperties.IsEmpty; + customProp.Enabled := not Task.CustomProperties.IsEmpty; + customProp.Text := Task.CustomProperties; + + cacheUsageTrackBar.Value := Task.CacheLimit; + memUsageTrackBar.Value := Task.MemoryLimit; + + TaskEditorCompCount.Value := Task.Compositions.Count; + for var i := 0 to Task.Compositions.Count - 1 do begin + TaskEditorCompGrid.Cells[1, i] := Task.Compositions.Items[i].CompName; + TaskEditorCompGrid.Cells[2, i] := Task.Compositions.Items[i].Frames.StartFrame.ToString; + TaskEditorCompGrid.Cells[3, i] := Task.Compositions.Items[i].Frames.EndFrame.ToString; + TaskEditorCompGrid.Cells[4, i] := Task.Compositions.Items[i].Split.ToString; + end; + end; + + if SelectedComp <> '' then + TaskEditorCompGrid.SelectRow(GetCompIndexInTask(Task, SelectedComp)); + + TaskEditorSaveButton.Visible := True; + TaskEditorCreateTaskButton.Visible := False; + + TaskEditorPopup.PopupModal; //IsOpen := True;//PopupModal; +end; + +procedure TMainForm.TasksTreeViewDragChange(SourceItem, DestItem: TTreeViewItem; var Allow: Boolean); +begin + //if (SourceItem.Level = 1) and (DestItem.Level = 0) then // Comp -> Project + // ShowMessage('Comp -> Project'); + + //if (SourceItem.Level = 1) and (DestItem.Level = 1) then // Comp -> Comp + + try + if (SourceItem.Level = 1) and (DestItem.Level = 1) then // Project[0] -> Project[1] + Allow := False; + + if (SourceItem.Level = 2) and (DestItem.Level = 1) then // Project[0].Comp -> Project[1] + if SourceItem.ParentItem.Text <> DestItem.Text then + Allow := False; + + if (SourceItem.Level = 1) and (DestItem.Level = 2) then // Project[0].Comp -> Project[0].Comp + Allow := False; + + if (SourceItem.Level = 2) and (DestItem.Level = 2) then // Project[0].Comp -> Project[1].Comp + Allow := False; + //ShowMessage(Format('%d --> %d', [SourceItem.Level, DestItem.Level])); + except + if (SourceItem.Level = 1) and (RenderTasks.Count > 1) then begin + Allow := True; + RenderTasks.Move(RenderTasks.IndexOf(GetTaskByProject(SourceItem.Text)), RenderTasks.Count - 1); + //ShowMessage(Format('%d --> %d', [SourceItem.Level, -1])); + ShowMessage(Format('LastTask.Project = %s', [RenderTasks.Items[RenderTasks.Count - 1].Project])); + end else + Allow := False; + end; + +end; + +procedure TMainForm.TasksTreeViewDragDrop(Sender: TObject; const Data: TDragObject; const Point: TPointF); +begin + if Data.Source = nil then begin // Ensure that we're recieving drag from outside + if LowerCase(ExtractFileExt(Data.Files[0])) = LowerCase('.aep') then begin + BeginTryParseAEP(Data.Files[0]); + end; + + if LowerCase(ExtractFileExt(Data.Files[0])) = LowerCase('.aerq') then + ShowMessage('Queue dropped'); + + if LowerCase(ExtractFileExt(Data.Files[0])) = LowerCase('.aer') then + ShowMessage('Project configuration dropped'); + end; +end; + +/// Implements basic hot-keys for main treeview +/// [Ctrl + D] = Duplicate selected +/// [Del] = Delete selected +/// [Ctrl + N] = New task +procedure TMainForm.TasksTreeViewKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); +begin + if ssCtrl in Shift then + case Key of + 68: begin // [D] + case TasksTreeView.Selected.Level of + 2: begin + ShowMessage(Format('Duplicate comp %s', [TasksTreeView.Selected.Text])); + end; + 1: begin + ShowMessage(Format('Duplicate %s', [TasksTreeView.Selected.Text])); + end; + end; + end; + 90: begin // [Z] + {try + var NewItem: TTreeViewItem := (Temporary.Clone(nil) as TTreeViewItem); + NewItem.Parent := Temporary.Parent; + finally + FreeAndNil(Temporary); + end; } + end; + end + else + case Key of + 8, 46: begin // [Backspace], [Del] + if TasksTreeView.Selected <> nil then // We can only delete something selected, othewise - access violation + if TasksTreeView.Selected.ParentItem <> nil then begin // If composition item was deleted + var Task: TRenderTask := GetTaskByProject(TasksTreeView.Selected.ParentItem.Text); + RenderTasks.Items[RenderTasks.IndexOf(Task)].Compositions.Remove(GetCompByName(Task, TasksTreeView.Selected.Text)); + + RenderTasksOnNotify(Sender, Task, cnRemoved); + + //raise ENotImplemented.Create('Not implemented yet') + end else begin // We know for sure that it's a project item + RenderTasks.Remove(GetTaskByProject(TasksTreeView.Selected.Text)); + FreeAndNil(TasksTreeView.Selected); + end; + + //TasksIsEmpty.Visible := RenderTasks.Count = 0; + end; + 19: begin // [Pause/Break] + {$IFDEF DEBUG_MODE} + if DebugLabel.Visible then + DebugLabel.Visible := False + else + DebugLabel.Visible := True; + {$ENDIF} + end; + end; + {$IFDEF DEBUG_MODE}DebugLabel.Text := Format('key = %d', [Key]);{$ENDIF} +end; + +procedure TMainForm.TasksTreeViewMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); +begin + if TasksTreeView.ItemByPoint(X, Y) <> nil then + FCurrentItem := TasksTreeView.ItemByPoint(X, Y).Text + else + FCurrentItem := 'nil'; +end; + procedure TMainForm.compCountChange(Sender: TObject); begin compGrid.RowCount := Round(compCount.Value); end; -procedure TMainForm.compGridEditingDone(Sender: TObject; const ACol, - ARow: Integer); +procedure TMainForm.compGridEditingDone(Sender: TObject; const ACol, ARow: Integer); begin compName.Text := compGrid.Cells[0, 0]; end; @@ -2086,40 +2515,39 @@ procedure TMainForm.threadsCountTyping(Sender: TObject); procedure TMainForm.threadsSwitchSwitch(Sender: TObject); begin - if threadsSwitch.IsChecked then - begin - if UpdateAvailable = True then - begin - if MainForm.Height <= 490 then - MainForm.Height := 630; - end - else - if MainForm.Height <= 450 then - MainForm.Height := 580; - - threadsSwitchLabel.Text := Language[LANG].MainForm.SplitRender; - outFrame.TextPrompt := Language[LANG].MainForm.EndFrameHint; - threadsGrid.AniCalculations.AutoShowing := False; - threadsGrid.Model.ScrollDirections := TScrollDirections.Vertical; - end - else - begin - if UpdateAvailable = True then - begin - if MainForm.WindowState <> TWindowState.wsMaximized then - MainForm.Height := 490 - end - else - if MainForm.WindowState <> TWindowState.wsMaximized then - MainForm.Height := 450; - - threadsSwitchLabel.Text := Language[LANG].MainForm.SingleRener; - outFrame.TextPrompt := ''; - end; +// if threadsSwitch.IsChecked then +// begin +// if UpdateAvailable = True then +// begin +// if MainForm.Height <= 490 then +// MainForm.Height := 630; +// end +// else +// if MainForm.Height <= 450 then +// MainForm.Height := 580; +// +// threadsSwitchLabel.Text := Language[Settings.Language].MainForm.SplitRender; +// outFrame.TextPrompt := Language[Settings.Language].MainForm.EndFrameHint; +// threadsGrid.AniCalculations.AutoShowing := False; +// threadsGrid.Model.ScrollDirections := TScrollDirections.Vertical; +// end +// else +// begin +// if UpdateAvailable = True then +// begin +// if MainForm.WindowState <> TWindowState.wsMaximized then +// MainForm.Height := 490 +// end +// else +// if MainForm.WindowState <> TWindowState.wsMaximized then +// MainForm.Height := 450; +// +// threadsSwitchLabel.Text := Language[Settings.Language].MainForm.SingleRener; +// outFrame.TextPrompt := ''; +// end; end; -procedure TMainForm.UpdateNetHTTPClientRequestCompleted( - const Sender: TObject; const AResponse: IHTTPResponse); +procedure TMainForm.UpdateNetHTTPClientRequestCompleted(const Sender: TObject; const AResponse: IHTTPResponse); begin gitRelease := TJsonObject.ParseJSONValue(AResponse.ContentAsString(TEncoding.UTF8)); gitVersion := gitRelease.A[0].P['tag_name'].Value; @@ -2130,17 +2558,14 @@ procedure TMainForm.UpdateNetHTTPClientRequestCompleted( UpdateAvailable := True; if UpdateAvailable then begin - if threadsSwitch.IsChecked or compSwitch.IsChecked then - MainForm.Height := 630 - else - MainForm.Height := {$IFDEF MSWINDOWS}490{$ENDIF MSWINDOWS} {$IFDEF MACOS}470{$ENDIF MACOS}; + MainForm.Height := SizeConstraints.MIN_HEIGHT_UPD; MainForm.UpdateInfo.Visible := True; MainForm.UpdateInfo.Enabled := True; - MainForm.downloadButton.Text := Language[LANG].MainForm.Download + ' (' + gitVersion + ')'; + MainForm.downloadButton.Text := Language[Settings.Language].MainForm.Download + ' (' + gitVersion + ')'; {$IFDEF MSWINDOWS}gitDownload := gitRelease.A[0].P['assets'].A[1].P['browser_download_url'].Value;{$ENDIF MSWINDOWS} {$IFDEF MACOS}gitDownload := gitRelease.A[0].P['assets'].A[0].P['browser_download_url'].Value;{$ENDIF MACOS} end else begin - MainForm.Height := {$IFDEF MSWINDOWS}450{$ENDIF MSWINDOWS} {$IFDEF MACOS}430{$ENDIF MACOS}; + MainForm.Height := SizeConstraints.MIN_HEIGHT_NO_UPD; MainForm.UpdateInfo.Visible := False; MainForm.UpdateInfo.Enabled := False; end; @@ -2182,21 +2607,20 @@ procedure TMainForm.memUsageInfoEditValidate(Sender: TObject; tempText: String; begin tempText := memUsageInfoEdit.Text; - if (tempText.Contains ('unl') or tempText.Contains('max')) then + if (tempText.Contains('unl') or tempText.Contains('max')) then memUsageInfoEdit.Text := Trunc(GetPlatformMemorySize / 1024 / 1024 + 1).ToString else begin - if (((tempText.Contains ('mb')) or (tempText.Contains ('Mb')) or (tempText.Contains ('MB')) or (tempText.Contains ('mB'))) - or not (tempText[tempText.Length].IsDigit)) then + if ((tempText.ToLower.Contains('mb')) or not (tempText[tempText.Length].IsDigit)) then memUsageInfoEdit.Text := memUsageInfoEdit.Text.Remove(memUsageInfoEdit.Text.Length - 3); - if (tempText.Contains ('kb')) or (tempText.Contains ('Kb')) or (tempText.Contains ('KB')) or (tempText.Contains ('kB')) then + if tempText.ToLower.Contains('kb') then memUsageInfoEdit.Text := (memUsageInfoEdit.Text.ToInteger() / 1024).ToString; //KB -> MB - if (tempText.Contains ('gb')) or (tempText.Contains ('Gb')) or (tempText.Contains ('GB')) or (tempText.Contains ('gB')) then + if tempText.ToLower.Contains('gb') then memUsageInfoEdit.Text := (memUsageInfoEdit.Text.ToInteger() * 1024).ToString; //GB -> MB end; - if tempText.Contains ('%') then + if tempText.Contains('%') then begin if tempText[tempText.IndexOf('%') - 1] = ' ' then memUsageInfoEdit.Text := memUsageInfoEdit.Text.Remove(memUsageInfoEdit.Text.Length - 2) @@ -2210,7 +2634,7 @@ procedure TMainForm.memUsageInfoEditValidate(Sender: TObject; memUsageTrackBar.Value := (100 * memUsageInfoEdit.Text.ToInteger()) / (GetPlatformMemorySize / 1024 / 1024); except on Exception do - TDialogServiceSync.MessageDialog((Text + ' ' + Language[LANG].Errors.MemoryValueInvalid), TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0); + TDialogServiceSync.MessageDialog((Text + ' ' + Language[Settings.Language].Errors.MemoryValueInvalid), TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0); end; end; memUsageInfo.Visible := True; @@ -2222,11 +2646,87 @@ procedure TMainForm.memUsageInfoEditValidate(Sender: TObject; procedure TMainForm.memUsageTrackBarChange(Sender: TObject); begin if memUsageTrackBar.Value = 100 then - memUsageInfo.Text := Language[LANG].MainForm.Unlimited + memUsageInfo.Text := Language[Settings.Language].MainForm.Unlimited else memUsageInfo.Text := Trunc(memUsageTrackBar.Value).ToString + '% (' + Trunc((GetPlatformMemorySize/1024/1024) * (memUsageTrackBar.Value / 100)).ToString + ' MB)'; end; +procedure TMainForm.TaskEditorCompButtonClick(Sender: TObject); +begin + TaskEditorTabControl.TabIndex := 1; +end; + +procedure TMainForm.TaskEditorCreateTaskButtonClick(Sender: TObject); +begin + var ErrorStr: String := ''; + for var i := 0 to StrToInt(TaskEditorCompCount.Text) - 1 do begin + /// EC001 :: Composition name is empty + if TaskEditorCompGrid.Cells[1, i] = '' then + ErrorStr := ErrorStr + Format('%s[%d]: (EC001) %s%s', ['Composition', i + 1, 'Composition name is empty', #13#10]); + + /// EC002 :: [Start Frame] and [End Frame] can''t be empty with [Split] more than 1 + if (TaskEditorCompGrid.Cells[2, i] = '') and (TaskEditorCompGrid.Cells[3, i] = '') and (TaskEditorCompGrid.Cells[4, i] <> '1') then + ErrorStr := ErrorStr + Format('%s[%d]: (EC002) %s%s', ['Composition', i + 1, '[Start Frame] and [End Frame] can''t be empty with [Split] more than 1', #13#10]); + + /// New line for each comp + if ErrorStr <> '' then + ErrorStr := ErrorStr + #13#10; + end; + + if ErrorStr <> '' then begin + raise AERParamException.Create(Format('%s%s%s', [Language[Settings.Language].Errors.errorsOccured, #13#10, ErrorStr])); + end else begin + /// Create all the compositions beforehand + /// to append them to [Task] + /// Also, lists should be created on initialization + /// they are not TArray<> :c + var Compositions: TList := TList.Create; + + for var i := 0 to Trunc(TaskEditorCompCount.Value) - 1 do begin + Compositions.Add(TComposition.Create( + TaskEditorCompGrid.Cells[1, i], + TFrameSpan.Create(TaskEditorCompGrid.Cells[2, i], TaskEditorCompGrid.Cells[3, i]), + StrToInt(TaskEditorCompGrid.Cells[4, i]) + )); + end; + + var Task: TRenderTask := TRenderTask.Create( + projectPath.Text, + outputPath.Text, + outputModuleBox.Items[outputModuleBox.ItemIndex], + renderSettingsEdit.Text, + missingFilesCheckbox.IsChecked, + soundCheckbox.IsChecked, + threadedRender.IsChecked, + IfThenElse(customCheckbox.IsChecked = True, customProp.Text, ''), // yeet + cacheUsageTrackBar.Value, + memUsageTrackBar.Value, + TList.Create(Compositions) + ); + + RenderTasks.Add(Task); + {$IFDEF DEBUG_MODE} + ShowMessage(RenderTasks.Items[0].ToString); + {$ENDIF} + + Compositions.Free; + + PopupAniCloseHeight.Enabled := True; + PopupAniCloseWidth.Enabled := True; + + TaskEditorCompCount.Value := 1; + TaskEditorCompGrid.Cells[0, 0] := '1'; + TaskEditorCompGrid.Cells[1, 0] := ''; + TaskEditorCompGrid.Cells[2, 0] := ''; + TaskEditorCompGrid.Cells[3, 0] := ''; + TaskEditorCompGrid.Cells[4, 0] := '1'; + + //UpdateTasksList; + + //TasksIsEmpty.Visible := RenderTasks.Count = 0; + end; +end; + procedure TMainForm.cacheUsageInfoClick(Sender: TObject); begin cacheUsageInfoEdit.Text := Trunc(cacheUsageTrackBar.Value).ToString + '%'; @@ -2266,7 +2766,7 @@ procedure TMainForm.cacheUsageInfoEditValidate(Sender: TObject; cacheUsageInfoEdit.Text := '100'; except on Exception do - TDialogServiceSync.MessageDialog((Text + ' ' + Language[LANG].Errors.CacheValueInvalid), TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0); + TDialogServiceSync.MessageDialog((Text + ' ' + Language[Settings.Language].Errors.CacheValueInvalid), TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0); end; tempText := ''; cacheUsageTrackBar.Value := cacheUsageInfoEdit.Text.ToSingle(); @@ -2280,7 +2780,7 @@ procedure TMainForm.cacheUsageInfoEditValidate(Sender: TObject; procedure TMainForm.cacheUsageTrackBarChange(Sender: TObject); begin if cacheUsageTrackBar.Value = 100 then - cacheUsageInfo.Text := Language[LANG].MainForm.Unlimited + cacheUsageInfo.Text := Language[Settings.Language].MainForm.Unlimited else cacheUsageInfo.Text := Trunc(cacheUsageTrackBar.Value).ToString + '%'; end; diff --git a/src/MainUnit.vlb b/src/MainUnit.vlb index 28027d6..48748ef 100644 --- a/src/MainUnit.vlb +++ b/src/MainUnit.vlb @@ -19,9 +19,6 @@ Coordinates=1960,10,113,51 [memUsageLayout] Coordinates=799,1328,103,33 -[saveFile] -Coordinates=201,1120,54,51 - [properiesLayout2] Coordinates=659,1328,100,33 @@ -61,18 +58,12 @@ Coordinates=1812,1266,102,33 [soundCheckbox] Coordinates=1047,1036,94,51 -[Image1] -Coordinates=372,1036,49,51 - [customProp] Coordinates=881,10,74,69 [outModuleEditorItem0] Coordinates=1309,1266,123,33 -[projectPath] -Coordinates=1897,1036,70,51 - [memUsageInfoEdit] Coordinates=89,1036,107,51 @@ -104,9 +95,6 @@ Coordinates=638,1266,74,33 [compLayout] Coordinates=528,1266,75,33 -[infoIconFill] -Coordinates=422,928,69,33 - [threadsLayout] Coordinates=406,1266,85,33 @@ -125,9 +113,6 @@ Coordinates=2493,1204,81,33 [StringColumn3] Coordinates=2256,1204,88,33 -[Image2] -Coordinates=797,1036,49,51 - [mainLayout] Coordinates=2149,1204,72,33 @@ -210,9 +195,6 @@ Coordinates=1323,1,144,33 [OnyxBlueStyle] Coordinates=818,1002,87,33 -[outputPath] -Coordinates=553,1036,68,51 - [threadsSwitch] Coordinates=160,571,84,177 @@ -234,9 +216,6 @@ Coordinates=481,1002,97,33 [launcherLayout] Coordinates=2292,1120,91,33 -[settingsIconFill] -Coordinates=263,1002,89,33 - [cacheUsageTrackBar] Coordinates=2234,10,119,51 @@ -282,21 +261,12 @@ Coordinates=1024,1120,94,33 [helpItem] Coordinates=934,1120,56,33 -[openFile] -Coordinates=1518,1036,56,51 - [compGrid] Coordinates=513,172,62,87 [cacheUsageLimitLabel] Coordinates=2397,1036,125,51 -[projectPathLabel] -Coordinates=122,1120,97,51 - -[outputPathLabel] -Coordinates=10,1036,95,51 - [startFrameLabel] Coordinates=1179,1036,94,51 @@ -304,7 +274,7 @@ Coordinates=1179,1036,94,51 Coordinates=968,1036,90,51 [] -Coordinates=2124,1120,123,33 +Coordinates=797,1036,49,51 [threadsCount] Coordinates=400,580,81,123 @@ -314,3 +284,21 @@ ExplicitSubNodes=Enabled;Visible [renderSettingsBox] Coordinates=614,10,87,123 +[_projectPathLabel] +Coordinates=122,1120,97,51 + +[_projectPath] +Coordinates=1897,1036,70,51 + +[_outputPathLabel] +Coordinates=10,1036,95,51 + +[_outputPath] +Coordinates=553,1036,68,51 + +[openFile] +Coordinates=1518,1036,56,51 + +[_saveFile] +Coordinates=201,1120,54,51 + diff --git a/src/OutputModuleEditorUnit.fmx b/src/OutputModuleEditorUnit.fmx index e655c44..423742c 100644 --- a/src/OutputModuleEditorUnit.fmx +++ b/src/OutputModuleEditorUnit.fmx @@ -17,13 +17,13 @@ object OutputModuleEditorForm: TOutputModuleEditorForm DesignerMasterStyle = 0 object propertiesLayout: TLayout Align = Client - Size.Width = 491.000000000000000000 - Size.Height = 339.000000000000000000 + Size.Width = 493.000000000000000000 + Size.Height = 340.000000000000000000 Size.PlatformDefault = False TabOrder = 1 object outputModuleNameLayout: TLayout Align = Top - Size.Width = 491.000000000000000000 + Size.Width = 493.000000000000000000 Size.Height = 30.000000000000000000 Size.PlatformDefault = False TabOrder = 0 @@ -44,7 +44,7 @@ object OutputModuleEditorForm: TOutputModuleEditorForm Margins.Top = 4.000000000000000000 Margins.Right = 5.000000000000000000 Margins.Bottom = 4.000000000000000000 - Size.Width = 356.000000000000000000 + Size.Width = 358.000000000000000000 Size.Height = 22.000000000000000000 Size.PlatformDefault = False TextPrompt = 'Specify output module' @@ -53,8 +53,8 @@ object OutputModuleEditorForm: TOutputModuleEditorForm end object filenameBuilderLayout: TLayout Align = Client - Size.Width = 491.000000000000000000 - Size.Height = 309.000000000000000000 + Size.Width = 493.000000000000000000 + Size.Height = 310.000000000000000000 Size.PlatformDefault = False TabOrder = 1 object fileMaskLabel: TLabel @@ -65,7 +65,7 @@ object OutputModuleEditorForm: TOutputModuleEditorForm Margins.Bottom = 5.000000000000000000 Position.X = 5.000000000000000000 Position.Y = 5.000000000000000000 - Size.Width = 481.000000000000000000 + Size.Width = 483.000000000000000000 Size.Height = 17.000000000000000000 Size.PlatformDefault = False TextSettings.HorzAlign = Center @@ -78,23 +78,23 @@ object OutputModuleEditorForm: TOutputModuleEditorForm Margins.Top = 5.000000000000000000 Margins.Right = 5.000000000000000000 Margins.Bottom = 5.000000000000000000 - Size.Width = 481.000000000000000000 - Size.Height = 222.000000000000000000 + Size.Width = 483.000000000000000000 + Size.Height = 223.000000000000000000 Size.PlatformDefault = False TabIndex = 0 TabOrder = 2 TabPosition = PlatformDefault Sizes = ( - 477s - 196s - 477s - 196s - 477s - 196s - 477s - 196s - 477s - 196s) + 479s + 197s + 479s + 197s + 479s + 197s + 479s + 197s + 479s + 197s) object projectTab: TTabItem CanFocus = False CustomIcon = < @@ -115,8 +115,8 @@ object OutputModuleEditorForm: TOutputModuleEditorForm Margins.Top = 5.000000000000000000 Margins.Right = 5.000000000000000000 Margins.Bottom = 5.000000000000000000 - Size.Width = 467.000000000000000000 - Size.Height = 186.000000000000000000 + Size.Width = 469.000000000000000000 + Size.Height = 187.000000000000000000 Size.PlatformDefault = False TabOrder = 0 Justify = Center @@ -144,8 +144,8 @@ object OutputModuleEditorForm: TOutputModuleEditorForm Margins.Top = 5.000000000000000000 Margins.Right = 5.000000000000000000 Margins.Bottom = 5.000000000000000000 - Size.Width = 467.000000000000000000 - Size.Height = 186.000000000000000000 + Size.Width = 469.000000000000000000 + Size.Height = 187.000000000000000000 Size.PlatformDefault = False TabOrder = 0 Justify = Center @@ -173,8 +173,8 @@ object OutputModuleEditorForm: TOutputModuleEditorForm Margins.Top = 5.000000000000000000 Margins.Right = 5.000000000000000000 Margins.Bottom = 5.000000000000000000 - Size.Width = 467.000000000000000000 - Size.Height = 186.000000000000000000 + Size.Width = 469.000000000000000000 + Size.Height = 187.000000000000000000 Size.PlatformDefault = False TabOrder = 0 Justify = Center @@ -202,8 +202,8 @@ object OutputModuleEditorForm: TOutputModuleEditorForm Margins.Top = 5.000000000000000000 Margins.Right = 5.000000000000000000 Margins.Bottom = 5.000000000000000000 - Size.Width = 467.000000000000000000 - Size.Height = 186.000000000000000000 + Size.Width = 469.000000000000000000 + Size.Height = 187.000000000000000000 Size.PlatformDefault = False TabOrder = 0 Justify = Center @@ -231,8 +231,8 @@ object OutputModuleEditorForm: TOutputModuleEditorForm Margins.Top = 5.000000000000000000 Margins.Right = 5.000000000000000000 Margins.Bottom = 5.000000000000000000 - Size.Width = 467.000000000000000000 - Size.Height = 186.000000000000000000 + Size.Width = 469.000000000000000000 + Size.Height = 187.000000000000000000 Size.PlatformDefault = False TabOrder = 0 Justify = Center @@ -249,7 +249,7 @@ object OutputModuleEditorForm: TOutputModuleEditorForm Position.Y = 27.000000000000000000 Margins.Left = 5.000000000000000000 Margins.Right = 5.000000000000000000 - Size.Width = 481.000000000000000000 + Size.Width = 483.000000000000000000 Size.Height = 50.000000000000000000 Size.PlatformDefault = False TextPrompt = 'Type or drag from bottom panel available parameters' @@ -261,7 +261,7 @@ object OutputModuleEditorForm: TOutputModuleEditorForm end object PresetsConfiguratorToolbar: TToolBar Size.Width = 700.000000000000000000 - Size.Height = 33.000000000000000000 + Size.Height = 32.000000000000000000 Size.PlatformDefault = False TabOrder = 0 object WindowLabel: TLabel @@ -271,7 +271,7 @@ object OutputModuleEditorForm: TOutputModuleEditorForm Margins.Left = 20.000000000000000000 Position.X = 20.000000000000000000 Size.Width = 273.000000000000000000 - Size.Height = 33.000000000000000000 + Size.Height = 32.000000000000000000 Size.PlatformDefault = False TextSettings.Font.Size = 16.000000000000000000 TextSettings.Font.StyleExt = {00070000000000000004000000} @@ -282,9 +282,14 @@ object OutputModuleEditorForm: TOutputModuleEditorForm end object outputModulesBox: TListBox Align = Left - Position.Y = 33.000000000000000000 + Margins.Left = -1.000000000000000000 + Margins.Top = -1.000000000000000000 + Margins.Right = -1.000000000000000000 + Margins.Bottom = -1.000000000000000000 + Position.X = -1.000000000000000000 + Position.Y = 31.000000000000000000 Size.Width = 200.000000000000000000 - Size.Height = 339.000000000000000000 + Size.Height = 342.000000000000000000 Size.PlatformDefault = False TabOrder = 2 DisableFocusEffect = True @@ -293,16 +298,16 @@ object OutputModuleEditorForm: TOutputModuleEditorForm DefaultItemStyles.GroupFooterStyle = '' OnChange = outputModulesBoxChange Viewport.Width = 196.000000000000000000 - Viewport.Height = 335.000000000000000000 + Viewport.Height = 338.000000000000000000 end object Splitter1: TSplitter Align = Left Cursor = crHSplit MinSize = 20.000000000000000000 - Position.X = 200.000000000000000000 - Position.Y = 33.000000000000000000 + Position.X = 198.000000000000000000 + Position.Y = 32.000000000000000000 Size.Width = 9.000000000000000000 - Size.Height = 339.000000000000000000 + Size.Height = 340.000000000000000000 Size.PlatformDefault = False end object StatusBar1: TStatusBar @@ -371,12 +376,12 @@ object OutputModuleEditorForm: TOutputModuleEditorForm object addModuleButton: TButton Align = Client StyledSettings = [Family, FontColor] - Margins.Left = 3.000000000000000000 - Margins.Top = 3.000000000000000000 - Margins.Right = 3.000000000000000000 - Margins.Bottom = 3.000000000000000000 - Size.Width = 24.000000000000000000 - Size.Height = 24.000000000000000000 + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 22.000000000000000000 + Size.Height = 22.000000000000000000 Size.PlatformDefault = False TabOrder = 0 Text = '+' @@ -387,12 +392,12 @@ object OutputModuleEditorForm: TOutputModuleEditorForm object removeModuleButton: TButton Align = Client StyledSettings = [Family, FontColor] - Margins.Left = 3.000000000000000000 - Margins.Top = 3.000000000000000000 - Margins.Right = 3.000000000000000000 - Margins.Bottom = 3.000000000000000000 - Size.Width = 24.000000000000000000 - Size.Height = 24.000000000000000000 + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 22.000000000000000000 + Size.Height = 22.000000000000000000 Size.PlatformDefault = False TabOrder = 1 Text = '-' @@ -402,13 +407,12 @@ object OutputModuleEditorForm: TOutputModuleEditorForm end object saveModulesButton: TButton Align = Client - ModalResult = 8 - Margins.Left = 5.000000000000000000 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 80.000000000000000000 - Size.Height = 20.000000000000000000 + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 82.000000000000000000 + Size.Height = 22.000000000000000000 Size.PlatformDefault = False TabOrder = 2 Text = 'Save' @@ -416,12 +420,12 @@ object OutputModuleEditorForm: TOutputModuleEditorForm end object cancelButton: TButton Align = Client - Margins.Left = 5.000000000000000000 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 65.000000000000000000 - Size.Height = 20.000000000000000000 + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 67.000000000000000000 + Size.Height = 22.000000000000000000 Size.PlatformDefault = False TabOrder = 3 Text = 'Cancel' diff --git a/src/OutputModuleEditorUnit.pas b/src/OutputModuleEditorUnit.pas index 9bc9d08..98198fe 100644 --- a/src/OutputModuleEditorUnit.pas +++ b/src/OutputModuleEditorUnit.pas @@ -2,10 +2,10 @@ (* AErender Launcher *) (* OutputModuleEditorUnit.pas *) -(* Lily Stilson // 2019 - 2020 *) +(* Lily Stilson // 2019 - 2021 *) (* MIT License *) (* *) -(* Copyright (c) 2019 - 2020 Alice Romanets *) +(* Copyright (c) 2019 - 2021 Alice Romanets *) (* *) (* Permission is hereby granted, free of charge, to any person obtaining a copy *) (* of this software and associated documentation files (the "Software"), to deal *) @@ -52,6 +52,8 @@ interface FMX.Objects, FMX.Platform, + AErenderLauncher.Types, + MainUnit, {$IFDEF MSWINDOWS} @@ -109,9 +111,9 @@ TOutputModuleEditorForm = class(TForm) procedure SetLanguage(LanguageCode: Integer); private { Private declarations } - {$IFDEF MSWINDOWS}procedure CreateHandle; override;{$ENDIF MSWINDOWS} public { Public declarations } + {$IFDEF MSWINDOWS}procedure CreateHandle; override;{$ENDIF MSWINDOWS} end; //{$IFDEF MACOS}TOCLocalAccess = class(TOCLocal);{$ENDIF MACOS} {$IFDEF MACOS}procedure NSWindowEditStateChange (State: Boolean);{$ENDIF MACOS} @@ -128,7 +130,7 @@ //{$IFDEF MACOS}TOCLocalAccess = class(TOCLocal);{$ENDIF MACOS} var OutputModuleEditorForm: TOutputModuleEditorForm; FlagButton: TArray; - TempOutputModules: TArray; + TempOutputModules: TArray; implementation @@ -141,7 +143,7 @@ procedure TOutputModuleEditorForm.CreateHandle; var hWnd: HWND := FormToHWND(Self); SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) or WS_EX_APPWINDOW); - SetClassLong(hWnd, GCL_STYLE, GetClassLong(hWnd, GCL_STYLE) or CS_DROPSHADOW); + //SetClassLong(hWnd, GCL_STYLE, GetClassLong(hWnd, GCL_STYLE) or CS_DROPSHADOW); end; {$ENDIF MSWINDOWS} @@ -157,7 +159,7 @@ procedure NSWindowEditStateChange (State: Boolean); end; {$ENDIF MACOS} -function CompareOutputModules(a, b: TArray): Boolean; +function CompareOutputModules(a, b: TArray): Boolean; begin Result := False; if Length(a) = Length(b) then @@ -192,8 +194,8 @@ procedure TOutputModuleEditorForm.SetLanguage(LanguageCode: Integer); procedure TOutputModuleEditorForm.cancelButtonClick(Sender: TObject); begin - MainUnit.OutputModules := TempOutputModules; - SetLength(MainUnit.OutputModules, Length(TempOutputModules)); + Settings.OutputModules := TempOutputModules; + SetLength(Settings.OutputModules, Length(TempOutputModules)); OutputModuleEditorForm.Close; end; @@ -223,7 +225,7 @@ procedure TOutputModuleEditorForm.fileMaskDragOver(Sender: TObject; procedure TOutputModuleEditorForm.fileMaskTyping(Sender: TObject); begin - MainUnit.OutputModules[outputModulesBox.ItemIndex].Mask := fileMask.Text; + Settings.OutputModules[outputModulesBox.ItemIndex].Mask := fileMask.Text; {$IFDEF MACOS}NSWindowEditStateChange(True);{$ENDIF MACOS} end; @@ -237,8 +239,8 @@ procedure TOutputModuleEditorForm.FormClose(Sender: TObject; procedure TOutputModuleEditorForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin - if not CompareOutputModules(MainUnit.OutputModules, TempOutputModules) then - case TDialogServiceSync.MessageDialog(Language[LANG].OutputModuleConfiguratorForm.CloseDialog, TMsgDlgType.mtConfirmation, mbYesNoCancel, TMsgDlgBtn.mbYes, 0) of + if not CompareOutputModules(Settings.OutputModules, TempOutputModules) then + case TDialogServiceSync.MessageDialog(Language[Settings.Language].OutputModuleConfiguratorForm.CloseDialog, TMsgDlgType.mtConfirmation, mbYesNoCancel, TMsgDlgBtn.mbYes, 0) of 6: begin CanClose := True; saveModulesButtonClick(Sender); end; 7: begin CanClose := True; cancelButtonClick(Sender); end; 2: CanClose := False; @@ -286,13 +288,13 @@ procedure TOutputModuleEditorForm.FormCreate(Sender: TObject); procedure TOutputModuleEditorForm.FormShow(Sender: TObject); begin - TempOutputModules := MainUnit.OutputModules; - SetLength(TempOutputModules, Length(MainUnit.OutputModules)); - for var i := 0 to High(MainUnit.OutputModules) do - if MainUnit.OutputModules[i].Imported then - outputModulesBox.Items.Add(MainUnit.OutputModules[i].Module + ' ' + Language[LANG].OutputModuleConfiguratorForm.Imported) + TempOutputModules := Settings.OutputModules; + SetLength(TempOutputModules, Length(Settings.OutputModules)); + for var i := 0 to High(Settings.OutputModules) do + if Settings.OutputModules[i].Imported then + outputModulesBox.Items.Add(Settings.OutputModules[i].Module + ' ' + Language[Settings.Language].OutputModuleConfiguratorForm.Imported) else - outputModulesBox.Items.Add(MainUnit.OutputModules[i].Module); + outputModulesBox.Items.Add(Settings.OutputModules[i].Module); outputModulesBox.ItemIndex := 0; {$IFDEF MACOS}NSWindowEditStateChange(False);{$ENDIF MACOS} end; @@ -301,9 +303,9 @@ procedure TOutputModuleEditorForm.outputModulesBoxChange(Sender: TObject); begin if outputModulesBox.ItemIndex > -1 then begin - outputModule.Text := MainUnit.OutputModules[outputModulesBox.ItemIndex].Module; - fileMask.Text := MainUnit.OutputModules[outputModulesBox.ItemIndex].Mask; - if MainUnit.OutputModules[outputModulesBox.ItemIndex].Imported then + outputModule.Text := Settings.OutputModules[outputModulesBox.ItemIndex].Module; + fileMask.Text := Settings.OutputModules[outputModulesBox.ItemIndex].Mask; + if Settings.OutputModules[outputModulesBox.ItemIndex].Imported then outputModule.Enabled := False else outputModule.Enabled := True; @@ -313,7 +315,7 @@ procedure TOutputModuleEditorForm.outputModulesBoxChange(Sender: TObject); procedure TOutputModuleEditorForm.outputModuleTyping(Sender: TObject); begin outputModulesBox.Items[outputModulesBox.ItemIndex] := outputModule.Text; - MainUnit.OutputModules[outputModulesBox.ItemIndex].Module := outputModule.Text; + Settings.OutputModules[outputModulesBox.ItemIndex].Module := outputModule.Text; {$IFDEF MACOS}NSWindowEditStateChange(True);{$ENDIF MACOS} end; @@ -321,14 +323,14 @@ procedure TOutputModuleEditorForm.removeModuleButtonClick(Sender: TObject); begin var tempIndex: Integer := outputModulesBox.ItemIndex; - MainUnit.OutputModules[tempIndex].Module := ''; - MainUnit.OutputModules[tempIndex].Mask := ''; + Settings.OutputModules[tempIndex].Module := ''; + Settings.OutputModules[tempIndex].Mask := ''; - if tempIndex <> High(MainUnit.OutputModules) then - for var i := tempIndex + 1 to High(MainUnit.OutputModules) - 1 do - MainUnit.OutputModules[i - 1] := MainUnit.OutputModules[i]; + if tempIndex <> High(Settings.OutputModules) then + for var i := tempIndex + 1 to High(Settings.OutputModules) - 1 do + Settings.OutputModules[i - 1] := Settings.OutputModules[i]; - SetLength (MainUnit.OutputModules, Length(MainUnit.OutputModules) - 1); + SetLength (Settings.OutputModules, Length(Settings.OutputModules) - 1); outputModulesBox.Items.Delete(tempIndex); outputModulesBox.ItemIndex := tempIndex - 1; @@ -338,17 +340,17 @@ procedure TOutputModuleEditorForm.removeModuleButtonClick(Sender: TObject); procedure TOutputModuleEditorForm.saveModulesButtonClick(Sender: TObject); begin - TempOutputModules := MainUnit.OutputModules; - SetLength(TempOutputModules, Length(MainUnit.OutputModules)); + TempOutputModules := Settings.OutputModules; + SetLength(TempOutputModules, Length(Settings.OutputModules)); MainForm.UpdateOutputModules; OutputModuleEditorForm.Close; end; procedure TOutputModuleEditorForm.addModuleButtonClick(Sender: TObject); begin - SetLength (MainUnit.OutputModules, Length(MainUnit.OutputModules) + 1); - outputModulesBox.Items.Insert(High(MainUnit.OutputModules), 'Untitled'); - outputModulesBox.ItemIndex := High(MainUnit.OutputModules); + SetLength (Settings.OutputModules, Length(Settings.OutputModules) + 1); + outputModulesBox.Items.Insert(High(Settings.OutputModules), 'Untitled'); + outputModulesBox.ItemIndex := High(Settings.OutputModules); {$IFDEF MACOS}NSWindowEditStateChange(True);{$ENDIF MACOS} end; diff --git a/src/RenderingUnit.fmx b/src/RenderingUnit.fmx index 300e18a..b7c7a80 100644 --- a/src/RenderingUnit.fmx +++ b/src/RenderingUnit.fmx @@ -3,8 +3,8 @@ object RenderingForm: TRenderingForm Left = 0 Top = 0 Caption = 'Rendering Progress' - ClientHeight = 448 - ClientWidth = 512 + ClientHeight = 460 + ClientWidth = 480 Position = MainFormCenter Quality = HighQuality StyleBook = MainForm.AERModernStyle @@ -24,15 +24,15 @@ object RenderingForm: TRenderingForm end object AErenderLayout: TLayout Align = Contents - Size.Width = 512.000000000000000000 - Size.Height = 448.000000000000000000 + Size.Width = 480.000000000000000000 + Size.Height = 460.000000000000000000 Size.PlatformDefault = False TabOrder = 4 object RenderingStatusBar: TStatusBar Align = MostBottom - Position.Y = 320.000000000000000000 + Position.Y = 332.000000000000000000 ShowSizeGrip = True - Size.Width = 512.000000000000000000 + Size.Width = 480.000000000000000000 Size.Height = 128.000000000000000000 Size.PlatformDefault = False TabOrder = 0 @@ -44,7 +44,7 @@ object RenderingForm: TRenderingForm Margins.Right = 10.000000000000000000 Position.X = 5.000000000000000000 Position.Y = 86.000000000000000000 - Size.Width = 98.000000000000000000 + Size.Width = 97.000000000000000000 Size.Height = 24.000000000000000000 Size.PlatformDefault = False TextSettings.WordWrap = False @@ -55,7 +55,7 @@ object RenderingForm: TRenderingForm object statusBarSeparator1: TLine Align = Right LineType = Left - Position.X = 318.000000000000000000 + Position.X = 286.000000000000000000 Position.Y = 97.000000000000000000 Size.Width = 10.000000000000000000 Size.Height = 31.000000000000000000 @@ -67,7 +67,7 @@ object RenderingForm: TRenderingForm Margins.Top = 4.000000000000000000 Margins.Right = 24.000000000000000000 Margins.Bottom = 4.000000000000000000 - Position.X = 328.000000000000000000 + Position.X = 296.000000000000000000 Position.Y = 101.000000000000000000 Size.Width = 160.000000000000000000 Size.Height = 23.000000000000000000 @@ -78,7 +78,7 @@ object RenderingForm: TRenderingForm end object statusBarTopLayout: TLayout Align = Top - Size.Width = 512.000000000000000000 + Size.Width = 480.000000000000000000 Size.Height = 96.000000000000000000 Size.PlatformDefault = False TabOrder = 3 @@ -90,7 +90,7 @@ object RenderingForm: TRenderingForm Margins.Top = 8.000000000000000000 Margins.Right = 16.000000000000000000 Margins.Bottom = 8.000000000000000000 - Size.Width = 480.000000000000000000 + Size.Width = 448.000000000000000000 Size.Height = 23.000000000000000000 Size.PlatformDefault = False end @@ -102,7 +102,7 @@ object RenderingForm: TRenderingForm Margins.Bottom = 5.000000000000000000 Position.X = 15.000000000000000000 Position.Y = 69.000000000000000000 - Size.Width = 482.000000000000000000 + Size.Width = 450.000000000000000000 Size.Height = 22.000000000000000000 Size.PlatformDefault = False TextSettings.Font.Size = 16.000000000000000000 @@ -118,7 +118,7 @@ object RenderingForm: TRenderingForm Margins.Right = 16.000000000000000000 Position.X = 16.000000000000000000 Position.Y = 8.000000000000000000 - Size.Width = 480.000000000000000000 + Size.Width = 448.000000000000000000 Size.Height = 22.000000000000000000 Size.PlatformDefault = False TabOrder = 2 @@ -139,7 +139,7 @@ object RenderingForm: TRenderingForm Align = Right AutoSize = True StyledSettings = [Family, FontColor] - Position.X = 456.000000000000000000 + Position.X = 424.000000000000000000 Size.Width = 24.000000000000000000 Size.Height = 22.000000000000000000 Size.PlatformDefault = False @@ -157,7 +157,7 @@ object RenderingForm: TRenderingForm Align = Top LineType = Bottom Position.Y = 96.000000000000000000 - Size.Width = 512.000000000000000000 + Size.Width = 480.000000000000000000 Size.Height = 1.000000000000000000 Size.PlatformDefault = False Stroke.Color = xFF151515 @@ -188,7 +188,7 @@ object RenderingForm: TRenderingForm end end object RenderingToolBar: TToolBar - Size.Width = 512.000000000000000000 + Size.Width = 480.000000000000000000 Size.Height = 32.000000000000000000 Size.PlatformDefault = False TabOrder = 1 @@ -198,7 +198,7 @@ object RenderingForm: TRenderingForm StyledSettings = [Family, FontColor] Margins.Left = 20.000000000000000000 Position.X = 20.000000000000000000 - Size.Width = 148.000000000000000000 + Size.Width = 147.000000000000000000 Size.Height = 32.000000000000000000 Size.PlatformDefault = False TextSettings.Font.Size = 16.000000000000000000 @@ -214,7 +214,7 @@ object RenderingForm: TRenderingForm AutoSize = True StyledSettings = [Family, FontColor] Margins.Right = 20.000000000000000000 - Position.X = 492.000000000000000000 + Position.X = 460.000000000000000000 Size.Width = 0.000000000000000000 Size.Height = 32.000000000000000000 Size.PlatformDefault = False @@ -230,23 +230,24 @@ object RenderingForm: TRenderingForm Softness = 0.500000000000000000 Enabled = False end - object VertScrollBox1: TVertScrollBox + object ProgressScrollBox: TVertScrollBox Align = Client - Size.Width = 512.000000000000000000 - Size.Height = 288.000000000000000000 + Size.Width = 480.000000000000000000 + Size.Height = 300.000000000000000000 Size.PlatformDefault = False - Viewport.Width = 512.000000000000000000 - Viewport.Height = 288.000000000000000000 + Viewport.Width = 480.000000000000000000 + Viewport.Height = 300.000000000000000000 object emptyLabel: TLabel Align = Client StyledSettings = [Family, FontColor] - Size.Width = 512.000000000000000000 - Size.Height = 288.000000000000000000 + Size.Width = 480.000000000000000000 + Size.Height = 300.000000000000000000 Size.PlatformDefault = False TextSettings.Font.Size = 20.000000000000000000 TextSettings.Font.StyleExt = {00070000000000000004000000} TextSettings.HorzAlign = Center Text = 'Queue is empty' + TabOrder = 0 end end end diff --git a/src/RenderingUnit.pas b/src/RenderingUnit.pas index 5c03c37..347af9e 100644 --- a/src/RenderingUnit.pas +++ b/src/RenderingUnit.pas @@ -2,10 +2,10 @@ (* AErender Launcher *) (* RenderingUnit.pas *) -(* Lily Stilson // 2019 - 2020 *) +(* Lily Stilson // 2019 - 2021 *) (* MIT License *) (* *) -(* Copyright (c) 2019 - 2020 Alice Romanets *) +(* Copyright (c) 2019 - 2021 Alice Romanets *) (* *) (* Permission is hereby granted, free of charge, to any person obtaining a copy *) (* of this software and associated documentation files (the "Software"), to deal *) @@ -35,6 +35,7 @@ interface System.Variants, System.Diagnostics, System.Generics.Collections, + System.RegularExpressions, FMX.Types, FMX.Controls, @@ -50,8 +51,12 @@ interface FMX.Effects, FMX.BufferedLayout, FMX.BehaviorManager, + FMX.RenderProgress, - AErenderDataParser, + AErenderLauncher.AerenderParser, + AErenderLauncher.Rendering, + AErenderLauncher.Math, + AErenderLauncher.Types, {$IFDEF MSWINDOWS} System.Notification, FMX.TaskBar, FMX.Platform.Win, Winapi.Windows, Winapi.TlHelp32; @@ -78,7 +83,7 @@ TRenderingForm = class(TForm) totalProgressPercentage: TLabel; renderingTimer: TTimer; emptyLabel: TLabel; - VertScrollBox1: TVertScrollBox; + ProgressScrollBox: TVertScrollBox; AErenderLayout: TLayout; BlurEffect1: TBlurEffect; FFMPEGConcatLayout: TLayout; @@ -91,14 +96,16 @@ TRenderingForm = class(TForm) StopwatchTimer: TTimer; projectNameLabel: TLabel; totalFramesLabel: TLabel; - procedure ShowLogButtonClick (Sender: TObject); procedure renderingTimerTimer(Sender: TObject); procedure FormShow(Sender: TObject); procedure abortRenderingButtonClick(Sender: TObject); - procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure StopwatchTimerTimer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure SetLanguage(LanguageCode: Integer); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormHide(Sender: TObject); + + procedure RenderQueueNotify(Sender: TObject; const Item: String; Action: TCollectionNotification); private { Private declarations } public @@ -125,15 +132,12 @@ TRenderGroup = record RenderingForm: TRenderingForm; VISIBLE: Boolean = False; - /// We are using TArray<> here, because TList<> generates Access Violation error - /// when populated with non-existent items. We need a constructor for that, but duh... - /// Also, we can't use TObjectList<>, since TRenderGroup is a record, - /// not a class - also no constructor, duh... - /// So, it's easier to use simple TArray<>, that we'll have to reset when render finishes - RenderGroups: TArray; + RenderProgresses: TObjectList; CurrentTime: TDateTime; - { TODO -oLily Stilson -cRendering Unit - macOS : Add NSApplication.requestUserAttention for macOS when Rendering is finished } + CurrentlyRendering: Integer = 0; + + { DONE -oLily Stilson -cRendering Unit - macOS : Add NSApplication.requestUserAttention for macOS when Rendering is finished } implementation @@ -156,12 +160,51 @@ procedure TRenderingForm.CreateHandle; end; {$ENDIF MSWINDOWS} -function IntToCardinal (I: Integer): Cardinal; +procedure TRenderingForm.RenderQueueNotify(Sender: TObject; const Item: String; Action: TCollectionNotification); begin - if I < 0 then - Result := 0 - else - Result := I; + /// Stop the timer temporarely + renderingTimer.Enabled := False; + + var RegExMatch := TRegEx.Match(Item, '\[(.*?)\]\_\[(.*?)\]\_\[(.*?)\]\_\[(.*?)\]'); + + //ProgressScrollBox.BeginUpdate; + + case Action of + cnAdded: begin + var Progress: TRenderProgress := TRenderProgress.Create(nil); + Progress.Parent := ProgressScrollBox; + Progress.Align := TAlignLayout.Top; + Progress.Margins := TBounds.Create(TRectF.Create(8, 8, 8, 0)); + Progress.Composition := Format('%s[%s]', [RegExmatch.Groups[2].Value, (RenderQueue.IndexOf(Item) + 1).ToString]); + Progress.ST_WaitingForAErender := Language[Settings.Language].RenderingForm.WaitingForAerender; + Progress.ST_Rendering := Language[Settings.Language].RenderingForm.Rendering; + Progress.ST_FinishedRender := Language[Settings.Language].RenderingForm.RenderingFinished; + Progress.ST_RenderError := Language[Settings.Language].RenderingForm.RenderingError; + Progress.InFrame := -1; + Progress.OutFrame := 1; + Progress.Value := -1; + Progress.Log.Add('Launched ' + Item + #13#10); + + RenderProgresses.Add(Progress); + end; + cnRemoved: begin + var index: Integer := 0; + for var i := 0 to RenderProgresses.Count - 1 do + if (RenderProgresses[i].Composition = RegExmatch.Groups[2].Value) and (RenderProgresses[i].Value = RenderProgresses[i].OutFrame) then + index := i; + RenderProgresses.Delete(index); + end; + end; + + /// Clear scrollbox for progresses + //ProgressScrollBox.DeleteChildren; + //Finalize(RenderProgresses); + emptyLabel.Visible := RenderQueue.Count = 0; + + //ProgressScrollBox.EndUpdate; + + /// Enable timer back + renderingTimer.Enabled := True; end; procedure TRenderingForm.SetLanguage(LanguageCode: Integer); @@ -180,28 +223,23 @@ procedure TRenderingForm.abortRenderingButtonClick(Sender: TObject); begin try begin - // RU: Уничтожаем процесс After Effects'а + AbortRender := True; + if (TiledRenderThread <> nil) and (TiledRenderThread.Started) then + TiledRenderThread.Terminate; + /// Kill After Effects rendering process {$IFDEF MSWINDOWS}KillProcess('AfterFX.com');{$ENDIF MSWINDOWS} {$IFDEF MACOS}KillProcess('aerendercore');{$ENDIF MACOS} - // RU: Сброс состояния на панели задач + /// Reset taskbar's progress {$IFDEF MSWINDOWS}MainTaskBar.TaskBarState := 0;{$ENDIF MSWINDOWS} - // RU: Очищаем массив с путями к логам - Finalize(LogFiles); + /// Clear RenderQueue + RenderQueue.Clear; - // RU: Уничтожаем созданные в рантайме компоненты - for var i := 0 to High(RenderGroups) do begin - FreeAndNil(RenderGroups[i].RenderPanel); - end; - - // RU: Сбрасываем массив с группами прогресса - Finalize(RenderGroups); - - // RU: Отключаем ограничение на запуск рендеринга + /// Disable rendering start limitation isRendering := False; - // RU: Отключаем таймер и вовзращаем первые значения + /// Stop timer and reset progress values emptyLabel.Visible := True; emptyLabel.Enabled := True; renderingTimer.Enabled := False; @@ -220,27 +258,51 @@ procedure TRenderingForm.abortRenderingButtonClick(Sender: TObject); procedure TRenderingForm.FormClose(Sender: TObject; var Action: TCloseAction); begin + {$IFDEF MSWINDOWS} VISIBLE := False; - // RU: При закрытии формы, если рендеринг закончен - // очистить окно + /// If rendering is finished and there is still + /// something on the form while closing - clear it if TotalProgressBar.Value = TotalProgressBar.Max then begin abortRenderingButtonClick(Sender); TotalProgressBar.Value := 0; {$IFDEF MSWINDOWS}MainTaskBar.TaskBarState := 0;{$ENDIF MSWINDOWS} end; + {$ENDIF} +end; + +procedure TRenderingForm.FormHide(Sender: TObject); +begin + {$IFDEF MACOS} // Workaround + // Somehow after update to RAD 10.4.2 + // form can't get to the OnClose event on macOS + VISIBLE := False; + + // RU: При закрытии формы, если рендеринг закончен + // очистить окно + if Trunc(TotalProgressBar.Value) = Trunc(TotalProgressBar.Max) then begin + abortRenderingButtonClick(Sender); + TotalProgressBar.Value := 0; + end; + {$ENDIF} end; procedure TRenderingForm.FormCreate(Sender: TObject); begin - // RU: Сброс главного прогрессбара до нуля + /// Reset Total progressbar TotalProgressBar.Min := 0; TotalProgressBar.Max := 1; TotalProgressBar.Value := 0; - // RU: Активация плавного скроллинга списка потоков - VertScrollBox1.AniCalculations.Animation := True; + /// Activate smooth scrolling of ScrollBox + ProgressScrollBox.AniCalculations.Animation := True; + + /// Create list for storing out progress components + RenderProgresses := TObjectList.Create; + + /// Assign event for RenderQueue + RenderQueue.OnNotify := RenderQueueNotify; end; procedure TRenderingForm.FormShow(Sender: TObject); @@ -249,116 +311,8 @@ procedure TRenderingForm.FormShow(Sender: TObject); if MainUnit.RenderWindowSender = MainForm.launchButton then begin isRendering := True; - if Length(LogFiles) = 0 then - begin - emptyLabel.Visible := True; - emptyLabel.Enabled := True; - end - else - begin - emptyLabel.Visible := False; - emptyLabel.Enabled := False; - - projectNameLabel.Text := ExtractFileName(MainForm.projectPath.Text); - - // RU: Этот момент необходимо держать в голове - // Поскольку мы используем тут динамический массив TArray, - // то когда мы задаём ему какой-то размер, он будет сохранять - // все элементы внутри, даже если каждый из них будет FreeAndNil() - SetLength(RenderGroups, Length(MainUnit.LogFiles)); - - /// RU: Создание компонентов, демонстрирующих прогресс - for var i := 0 to High(RenderGroups) do begin - // RU: Создание фоновой TPanel - RenderGroups[i].RenderPanel := TPanel.Create(Self); - RenderGroups[i].RenderPanel.Parent := VertScrollBox1; - RenderGroups[i].RenderPanel.Margins := TBounds.Create(TRectF.Create(8, 8, 8, 0)); - RenderGroups[i].RenderPanel.Align := TAlignLayout.Top; - RenderGroups[i].RenderPanel.Height := 48; - RenderGroups[i].RenderPanel.EnableDragHighlight := True; - - // RU: Создание названия композиции - RenderGroups[i].CompNameLabel := TLabel.Create(Self); - RenderGroups[i].CompNameLabel.Parent := RenderGroups[i].RenderPanel; - RenderGroups[i].CompNameLabel.Align := TAlignLayout.MostLeft; - RenderGroups[i].CompNameLabel.Margins := TBounds.Create(TRectF.Create(16, 8, 0, 8)); - RenderGroups[i].CompNameLabel.Text := ExtractFileName(MainUnit.LogFiles[i]).Replace(ExtractFileExt(MainUnit.LogFiles[i]), ''); - RenderGroups[i].CompNameLabel.Font.Size := 16; - RenderGroups[i].CompNameLabel.StyledSettings := [TStyledSetting.Family, TStyledSetting.Style, TStyledSetting.FontColor]; - RenderGroups[i].CompNameLabel.WordWrap := False; - RenderGroups[i].CompNameLabel.AutoSize := True; - RenderGroups[i].CompNameLabel.HitTest := False; - - // RU: Создание лейбла с кол-вом кадров - RenderGroups[i].FramesLabel := TLabel.Create(Self); - RenderGroups[i].FramesLabel.Parent := RenderGroups[i].RenderPanel; - RenderGroups[i].FramesLabel.Margins := TBounds.Create(TRectF.Create(8, 0, 16, 0)); - RenderGroups[i].FramesLabel.AutoSize := True; - RenderGroups[i].FramesLabel.WordWrap := False; - RenderGroups[i].FramesLabel.Align := TAlignLayout.MostRight; - RenderGroups[i].FramesLabel.StyledSettings := [TStyledSetting.Family, TStyledSetting.FontColor]; - RenderGroups[i].FramesLabel.Font.Size := 16; - //RenderGroups[i].FramesLabel.Font.Style := [TFontStyle.fsBold]; - RenderGroups[i].FramesLabel.TextAlign := TTextAlign.Trailing; - RenderGroups[i].FramesLabel.Text := '...'; - RenderGroups[i].FramesLabel.HitTest := False; - - // RU: Создание кнопки отображения логов - RenderGroups[i].LogButton := TButton.Create(Self); - RenderGroups[i].LogButton.Parent := RenderGroups[i].RenderPanel; - RenderGroups[i].LogButton.Align := TAlignLayout.MostRight; - RenderGroups[i].LogButton.StyleLookup := 'logbuttonstyle'; - RenderGroups[i].LogButton.Width := 48; - RenderGroups[i].LogButton.Position.X := 9999; - RenderGroups[i].LogButton.Tag := i; - RenderGroups[i].LogButton.OnClick := ShowLogButtonClick; - - // RU: Создание надписи над прогрессбаром - RenderGroups[i].StatusLabel := TLabel.Create(Self); - RenderGroups[i].StatusLabel.Parent := RenderGroups[i].RenderPanel; - RenderGroups[i].StatusLabel.Align := TAlignLayout.Top; - RenderGroups[i].StatusLabel.Margins := TBounds.Create(TRectF.Create(16, 8, 0, 0)); - RenderGroups[i].StatusLabel.StyledSettings := [TStyledSetting.Family, TStyledSetting.FontColor]; - RenderGroups[i].StatusLabel.Font.Style := [TFontStyle.fsBold]; - RenderGroups[i].StatusLabel.Text := Language[LANG].RenderingForm.WaitingForAerender; - RenderGroups[i].StatusLabel.HitTest := False; - - // RU: Создание прогрессбара - RenderGroups[i].RenderingProgress := TProgressBar.Create(Self); - RenderGroups[i].RenderingProgress.Align := TAlignLayout.Client; - RenderGroups[i].RenderingProgress.Parent := RenderGroups[i].RenderPanel; - RenderGroups[i].RenderingProgress.Margins := TBounds.Create(TRectF.Create(16, 4, 0, 16)); - RenderGroups[i].RenderingProgress.Height := 4; - RenderGroups[i].RenderingProgress.Value := 0; - RenderGroups[i].RenderingProgress.Max := 1; - RenderGroups[i].RenderingProgress.StyleLookup := 'progressbarministyle'; - RenderGroups[i].RenderingProgress.HitTest := False; - - // RU: Создание "заглушки" - RenderGroups[i].WaitProgress := TAniIndicator.Create(Self); - RenderGroups[i].WaitProgress.Align := TAlignLayout.Client; - RenderGroups[i].WaitProgress.Parent := RenderGroups[i].RenderPanel; - RenderGroups[i].WaitProgress.Margins := TBounds.Create(TRectF.Create(16, 4, 0, 16)); - RenderGroups[i].WaitProgress.Height := 4; - RenderGroups[i].WaitProgress.StyleLookup := 'aniindicatorhorzstyle'; - RenderGroups[i].WaitProgress.Enabled := True; - RenderGroups[i].WaitProgress.HitTest := False; - - // RU: Создание Memo для отображения логов - RenderGroups[i].LogMemo := TMemo.Create(Self); - RenderGroups[i].LogMemo.Parent := RenderGroups[i].RenderPanel; - RenderGroups[i].LogMemo.Align := TAlignLayout.MostBottom; - RenderGroups[i].LogMemo.Height := 192; - RenderGroups[i].LogMemo.Visible := False; - RenderGroups[i].LogMemo.StyledSettings := [TStyledSetting.Style, TStyledSetting.FontColor]; - RenderGroups[i].LogMemo.Font.Family := 'Consolas'; - RenderGroups[i].LogMemo.Font.Size := 12; - RenderGroups[i].LogMemo.ScrollAnimation := TBehaviorBoolean.True; - RenderGroups[i].LogMemo.WordWrap := True; - end; - end; - // RU: Запуск таймера рендеринга и секундомера + /// Start timer, stopwatch and enable Windows's taskbar progress renderingTimer.Enabled := True; CurrentTime := Now; StopwatchTimer.Enabled := True; @@ -367,29 +321,26 @@ procedure TRenderingForm.FormShow(Sender: TObject); end; procedure TRenderingForm.renderingTimerTimer(Sender: TObject); -// RU: Нам нужно создать какой-то тип данных, где для -// каждого потока мы будем читать, хранить и отображать -// то, что творится в логах. -// TStringList является тем, где TMemo хранит весь текст, -// посему он и будет использоваться для хранилища логов внутри программы. +/// We need some data type for a thread to store, +/// read and display whatever is happening in logs type - TRenderData = record // Непосредственно тип - LogFile: TStringList; // Сюда считываем лог - //Data: TStringList; // Не ебу, нахуй это нужно, но почему-то я его тут обозначил. Далее в коде оно нигде не использовалось. - Stream: TStream; // Поток, даннве из котрого будут передаваться в переменную LogFile - State: Integer; // Обозначим для состояния рендеринга три цифры: -1 (ошибка), 0 (завершён), 1 (рендерится) + TRenderData = record /// The type itself + LogFile: TStringList; /// Logs will be stored here + //Data: TStringList; /// Have no fucking clue what it's doing here, but for whatever reason I put it here. And never used it anywhere in the code... + Stream: TStream; /// Reading thread. Data from here will be put in variable + State: Integer; /// Three states for rendering status: -1 (error), 0 (finished), 1 (rendering) end; var Render: TArray; begin - var Finished: Integer := 0; - var Error: Integer := 0; + //var Finished: Integer := 0; + //var Error: Integer := 0; var Completed: Integer := 0; - // RU: Создаём элементы в массиве с данными логов - SetLength(Render, Length(LogFiles)); + /// Create an array for logs + SetLength(Render, RenderQueue.Count); -// RU: Пока оставлю это в комментарии. Когда пойму, зачем это - восстановлю +/// Will be left commented, until I rememeber why I did this // for var j := 0 to High(Render) do // begin // Render[j].Data := TStringList.Create; @@ -397,118 +348,114 @@ TRenderData = record // Непосредственно тип // end; for var i := 0 to High(Render) do begin - // RU: Создаём хранилище для содержимого логов и устанавливаем ему кодировку + /// Create LogFile field and set it's encoding Render[i].LogFile := TStringList.Create; Render[i].LogFile.DefaultEncoding := TEncoding.UTF8; - try - // RU: Создаём поток, из которого потом перенесём данные в хранилище содержимого логов - // То есть, фактически, каждый раз файл лога считывается заново, - // держать в памяти всегда его не получится, да и смысла нет - он постоянно обновляется - Render[i].Stream := TFileStream.Create(LogFiles[i], fmOpenRead or fmShareDenyNone); + if FileExists(RenderQueue[i].Replace('.ext', '.log')) then try - Render[i].LogFile.LoadFromStream(Render[i].Stream); - finally - Render[i].Stream.Free; - end; + /// Create a stream here, from which we'll be copying data into + /// In fact, each time the log is read anew, we won't be able to hold it in memory + /// and we don't need to, since it's constantly updating - // RU: Если количество строк в файле лога оказалось больше, чем в LogMemo у конкретного - // потока, то нужно добавить эту строку в LogMemo и произвести её парсинг - if Render[i].LogFile.Count > RenderGroups[i].LogMemo.Lines.Count then begin - // RU: Добавляем строку и иттератор LogMemo посылаем в самый низ - RenderGroups[i].LogMemo.Lines.Add(Render[i].LogFile[RenderGroups[i].LogMemo.Lines.Count]); - RenderGroups[i].LogMemo.GoToTextEnd; - - // RU: При создании прогрессбара, мы обозначили его максимум как 1 - // Это поможет нам определить, какой поток уже узнал своё максимальное - // количество кадров, а какой ещё нет - // Тут, мы пытаемся получить какую-то базовую информацию о том, - // что мы сейчас будем рендерить - if RenderGroups[i].RenderingProgress.Max = 1 then begin - // RU: Если строка в конце лога содержит 'Duration: ', - // то мы пытаемся вытащить из неё длительность области рендеринга - if RenderGroups[i].LogMemo.Lines[RenderGroups[i].LogMemo.Lines.Count - 1].Contains('Duration: ') then - RenderGroups[i].Duration := ParseAErenderDurationLogString(RenderGroups[i].LogMemo.Lines[RenderGroups[i].LogMemo.Lines.Count - 1]); - - // RU: Если строка в конце лога содержит 'Frame Rate: ', - // то мы пытаемся вытащить из неё частоту кадров композиции - if RenderGroups[i].LogMemo.Lines[RenderGroups[i].LogMemo.Lines.Count - 1].Contains('Frame Rate: ') then - RenderGroups[i].FrameRate := ParseAErenderFrameRateLogString (RenderGroups[i].LogMemo.Lines[RenderGroups[i].LogMemo.Lines.Count - 1]); - - // RU: Если у нас есть длительность и частота кадров, - // То нам нужно вычислить конечное значение кадров для прогрессбара - // И ещё, нужно скрыть WaitProgress - if (RenderGroups[i].Duration.ToSingleString <> '0:00:00:00') and (RenderGroups[i].FrameRate <> 0) then begin - RenderGroups[i].RenderingProgress.Max := TimecodeToFrames(RenderGroups[i].Duration, RenderGroups[i].FrameRate); - RenderGroups[i].WaitProgress.Visible := False; - RenderGroups[i].WaitProgress.Enabled := False; - end; + Render[i].Stream := TFileStream.Create(RenderQueue[i].Replace('.ext', '.log'), fmOpenRead or fmShareDenyNone); + try + Render[i].LogFile.LoadFromStream(Render[i].Stream); + finally + Render[i].Stream.Free; end; - end; - // RU: Подсчитываем общее количество кадров - // Тип Single, потому что у прогрессбаров значения этого типа - var TotalFrames: Single := 1; - for var j := 0 to High(RenderGroups) do - if RenderGroups[j].RenderingProgress.Max <> 1 then - TotalFrames := TotalFrames + RenderGroups[j].RenderingProgress.Max; - - // RU: Начинаем отображение прогресса, только если у нас известно конечное значение кадров - if RenderGroups[i].RenderingProgress.Max <> 1 then begin - // RU: Пробуем парсить последнюю строку лога - // Пока в строке не появятся нужные данные, функция ParseAErenderFrameLogString - // будет выплёвывать исключения. Если мы ловим это исключение, - // то прогрессбару присваиваем ЕГО ЖЕ значение. Потому что, при окончании рендеринга, может быть - // выкинуто исключение и из-за этого общий прогрессбар обосрётся - // Таким образом, мы отсеиваем все строки, до момента как aerender начинает показывать прогресс - try - var AERP: TAErenderFrameData := ParseAErenderFrameLogString(RenderGroups[i].LogMemo.Lines[RenderGroups[i].LogMemo.Lines.Count - 1]); - RenderGroups[i].RenderingProgress.Value := AERP.Frame; - RenderGroups[i].StatusLabel.Text := Language[LANG].RenderingForm.Rendering; - RenderGroups[i].FramesLabel.Text := Format('%s / %s', [RenderGroups[i].RenderingProgress.Value.ToString, RenderGroups[i].RenderingProgress.Max.ToString]); - except - on Exception do - RenderGroups[i].RenderingProgress.Value := RenderGroups[i].RenderingProgress.Value; + /// If the ammount of lines in log file is more than out Memo has, then we + /// just need to append this line and parse it + if Render[i].LogFile.Count > RenderProgresses[i].Log.Count then begin + /// Append the last line to the log and scroll to Memo bottom + RenderProgresses[i].Log.Add(Render[i].LogFile[RenderProgresses[i].Log.Count]); + RenderProgresses[i].GoToTextEnd; + + /// The TRenderProgress component has it's default max value at 1 + /// This will help us to determine, which thread already has it's max + /// ammount of frames and which not yet. + /// Here we will read some basic information of what we're going to render + if RenderProgresses[i].OutFrame = 1 then begin + /// If log's last line contains 'Duration: ', then we're going to + /// parce that string and extract that information into a temporary variable + if RenderProgresses[i].Log[RenderProgresses[i].Log.Count - 1].Contains('Duration: ') then + RenderProgresses[i].Duration := ParseAErenderDurationLogString(RenderProgresses[i].Log[RenderProgresses[i].Log.Count - 1]); + + /// If log's last line contains 'Frame Rate: ', then we're going to + /// parce that string and extract that information into a temporary variable + if RenderProgresses[i].Log[RenderProgresses[i].Log.Count - 1].Contains('Frame Rate: ') then + RenderProgresses[i].FrameRate := ParseAErenderFrameRateLogString(RenderProgresses[i].Log[RenderProgresses[i].Log.Count - 1]); + + /// if we successfully got Duration and Framerate, + /// then we need to calculate max value for our progress bar. + /// + /// Doing it this way is much more accurate then extracting it with + /// RegEx from executable's file name + if (RenderProgresses[i].Duration.ToSingleString <> '0:00:00:00') and (RenderProgresses[i].FrameRate <> 0) then begin + RenderProgresses[i].OutFrame := TimecodeToFrames(RenderProgresses[i].Duration, RenderProgresses[i].FrameRate); + end; + end; end; - end; - // RU: Проверяем, закончен рендеринг или нет - if RenderGroups[i].LogMemo.Text.Contains('Finished composition') then begin - Render[i].State := 0; - RenderGroups[i].StatusLabel.Text := Language[LANG].RenderingForm.RenderingFinished; - RenderGroups[i].RenderingProgress.Value := RenderGroups[i].RenderingProgress.Max; - end; - // RU: Проверяем, была ошибка или нет - if RenderGroups[i].LogMemo.Text.Contains('aerender ERROR') or RenderGroups[i].LogMemo.Text.Contains('aerender Error') then begin - Render[i].State := -1; - RenderGroups[i].WaitProgress.Visible := False; - RenderGroups[i].WaitProgress.Enabled := False; - RenderGroups[i].StatusLabel.Text := Language[LANG].RenderingForm.RenderingError; - RenderGroups[i].RenderingProgress.Value := RenderGroups[i].RenderingProgress.Max; - RenderGroups[i].RenderingProgress.StyleLookup := 'progressbarminierrorstyle' - end; + /// Count total frames from all progresses + var TotalFrames: Single := 1; + for var j := 0 to RenderProgresses.Count - 1 do + if RenderProgresses[j].OutFrame <> 1 then + TotalFrames := TotalFrames + RenderProgresses[j].OutFrame; + + /// Start displaying progress only if we know the total ammount of frames + if RenderProgresses[i].OutFrame <> 1 then begin + /// Try to parce log's last line + /// Until we will get some data, the function + /// will be throwing exceptions. If we catch this exception, we'll just leave + /// progress' value unchanged. This saves us from exceptions at the end of rendering + /// Here we just ignoring all the useless for Parser lines + try + var AERP: TAErenderFrameData := ParseAErenderFrameLogString(RenderProgresses[i].Log[RenderProgresses[i].Log.Count - 1]); + RenderProgresses[i].Value := AERP.Frame; + //RenderProgresses[i].StatusLabel.Text := Language[LANG].RenderingForm.Rendering; + //RenderProgresses[i].FramesLabel.Text := Format('%s / %s', [RenderGroups[i].RenderingProgress.Value.ToString, RenderGroups[i].RenderingProgress.Max.ToString]); + except + on Exception do + RenderProgresses[i].Value := RenderProgresses[i].Value; + end; + end; + + /// Check if the rendering is finished yet or not + if RenderProgresses[i].Log.Text.Contains('Finished composition') then begin + Render[i].State := 0; + //RenderProgresses[i]..Text := Language[LANG].RenderingForm.RenderingFinished; + RenderProgresses[i].Value := RenderProgresses[i].OutFrame; + end; + /// Check if the rendering finished with an error + if RenderProgresses[i].Log.Text.Contains('ERROR:') or RenderProgresses[i].Log.Text.Contains('USAGE:') then begin + Render[i].State := -1; + RenderProgresses[i].Value := RenderProgresses[i].OutFrame; + RenderProgresses[i].IsError := True; + end; - // RU: Общему прогрессбару устанавливаем текущее значение - if TotalProgressBar.Max <> TotalFrames then begin - TotalProgressBar.Max := TotalFrames; - end else begin - // RU: Подсчитываем общее текущее значение и присваиваем его - var sum: Single := 0; - for var j := 0 to High(RenderGroups) do - if Render[j].State <> -1 then - sum := sum + RenderGroups[j].RenderingProgress.Value; - - TotalProgressBar.Value := sum; - totalProgressPercentage.Text := Trunc((TotalProgressBar.Value / TotalProgressBar.Max) * 100).ToString + '%'; - {$IFDEF MSWINDOWS}MainTaskBar.TaskBarProgress := Trunc((TotalProgressBar.Value / TotalProgressBar.Max) * 100);{$ENDIF MSWINDOWS} - if (TotalProgressBar.Max = 0) or (TotalProgressBar.Max = 1) then - framesLabel.Text := Language[LANG].RenderingForm.WaitingForAerender - else - framesLabel.Text := TotalProgressBar.Value.ToString + ' / ' + (TotalProgressBar.Max - 1).ToString; + /// Set TotalProgressBar's max value, if it's not updated + if TotalProgressBar.Max <> TotalFrames then begin + TotalProgressBar.Max := TotalFrames; + end else begin + /// Count total rendered frames + var sum: Single := 0; + for var j := 0 to RenderProgresses.Count - 1 do + if Render[j].State <> -1 then + sum := sum + RenderProgresses[j].Value; + + TotalProgressBar.Value := sum; + totalProgressPercentage.Text := Trunc((TotalProgressBar.Value / TotalProgressBar.Max) * 100).ToString + '%'; + {$IFDEF MSWINDOWS}MainTaskBar.TaskBarProgress := Trunc((TotalProgressBar.Value / TotalProgressBar.Max) * 100);{$ENDIF MSWINDOWS} + if (TotalProgressBar.Max = 0) or (TotalProgressBar.Max = 1) then + framesLabel.Text := Language[Settings.Language].RenderingForm.WaitingForAerender + else + framesLabel.Text := TotalProgressBar.Value.ToString + ' / ' + (TotalProgressBar.Max - 1).ToString; + end; + finally + FreeAndNil(Render[i].LogFile); // RU: Уничтожаем контейнер с логом, чтобы не было проблем end; - finally - FreeAndNil(Render[i].LogFile); // RU: Уничтожаем контейнер с логом, чтобы не было проблем - end; end; {for var i := 0 to High(Render) do @@ -519,57 +466,42 @@ TRenderData = record // Непосредственно тип if Render[i].State = -1 then inc (Error);} - // RU: Подсчитываем, сколько потоков завершили рендеринг - // Если рендеринг завершился с ошибкой, всё равно учитываем - // иначе таймер никогда не остановится - for var i := 0 to High(RenderGroups) do - if RenderGroups[i].RenderingProgress.Value = RenderGroups[i].RenderingProgress.Max then - inc (Completed); - - // RU: Если количество потоков, завершивших рендеринг совпадает - // с общим количеством потоков - всё окей, можно останавливать таймер - if (Completed = Length(LogFiles)) then - begin - // RU: Останавливаем секундомер - StopwatchTimer.Enabled := False; - - for var i := 0 to High(RenderGroups) do - if Render[i].State <> -1 then - RenderGroups[i].StatusLabel.Text := Language[LANG].RenderingForm.RenderingFinished; - - // RU: Полностью очищаем массив с данными логов - Finalize(Render); - - TotalProgressBar.Value := TotalProgressBar.Max; - totalProgressPercentage.Text := '100%'; - - {$IFDEF MSWINDOWS} - FlashWindow(ApplicationHWND, True); - //if Error = 0 then - MainTaskBar.TaskBarState := 0; - {if (Error > 0) and (Error <> Length(LogFiles)) then - MainTaskBar.TaskBarState := 4; - if Error = Length(LogFiles) then - MainTaskBar.TaskBarState := 3;} - {$ENDIF MSWINDOWS} - - {$IFDEF MACOS} - var Application: NSApplication := TNSApplication.Wrap(TNSApplication.OCClass.sharedApplication); - Application.requestUserAttention(NSCriticalRequest); - {$ENDIF MACOS} - - renderingTimer.Enabled := False; - end; -end; - -procedure TRenderingForm.ShowLogButtonClick (Sender: TObject); -begin - if RenderGroups[TButton(Sender).Tag].LogMemo.Visible = False then begin - RenderGroups[TButton(Sender).Tag].LogMemo.Visible := True; - RenderGroups[TButton(Sender).Tag].RenderPanel.Height := RenderGroups[TButton(Sender).Tag].RenderPanel.Height + 192; - end else begin - RenderGroups[TButton(Sender).Tag].LogMemo.Visible := False; - RenderGroups[TButton(Sender).Tag].RenderPanel.Height := RenderGroups[TButton(Sender).Tag].RenderPanel.Height - 192; + /// Count how many threads have already finished + /// Count even if it's errored, otherwise timer + /// will never stop + for var i := 0 to RenderProgresses.Count - 1 do + if RenderProgresses[i].Value = RenderProgresses[i].OutFrame then + inc(Completed); + + /// If completed threads count == total threads count + /// we can safely stop the timer + if (Completed = RenderQueue.Count) then begin + /// Stop the timer + StopwatchTimer.Enabled := False; + + {for var i := 0 to High(RenderGroups) do + if Render[i].State <> -1 then + RenderGroups[i].StatusLabel.Text := Language[LANG].RenderingForm.RenderingFinished;} + + /// Completely erase our array with logs' data + Finalize(Render); + + TotalProgressBar.Value := TotalProgressBar.Max; + totalProgressPercentage.Text := '100%'; + + {$IFDEF MSWINDOWS} + FlashWindow(ApplicationHWND, True); + MainTaskBar.TaskBarState := 0; + {if (Error > 0) and (Error <> Length(LogFiles)) then + MainTaskBar.TaskBarState := 4; + if Error = Length(LogFiles) then + MainTaskBar.TaskBarState := 3;} + {$ELSE MACOS} + var Application: NSApplication := TNSApplication.Wrap(TNSApplication.OCClass.sharedApplication); + Application.requestUserAttention(NSCriticalRequest); + {$ENDIF} + + renderingTimer.Enabled := False; end; end; @@ -578,7 +510,7 @@ procedure TRenderingForm.StopwatchTimerTimer(Sender: TObject); // This causes on macOS // [dccosx64 Fatal Error] RenderingUnit.pas(587): F2084 Internal Error: URW1237 // Workaround: Get string that is already in array and pass it through an inline variable - var TimeElapsed: String := Language[LANG].RenderingForm.TimeElapsed; + var TimeElapsed: String := Language[Settings.Language].RenderingForm.TimeElapsed; timeElapsedLabel.Text := TimeElapsed + FormatDateTime('hh:nn:ss', Now - CurrentTime); end; diff --git a/src/SettingsUnit.fmx b/src/SettingsUnit.fmx index 6dd63b9..491032f 100644 --- a/src/SettingsUnit.fmx +++ b/src/SettingsUnit.fmx @@ -5,8 +5,8 @@ object SettingsForm: TSettingsForm BorderIcons = [biSystemMenu] BorderStyle = SizeToolWin Caption = 'AErender Launcher Settings' - ClientHeight = 438 - ClientWidth = 552 + ClientHeight = 547 + ClientWidth = 574 Position = MainFormCenter Quality = HighQuality StyleBook = MainForm.AERModernStyle @@ -20,18 +20,18 @@ object SettingsForm: TSettingsForm DesignerMasterStyle = 0 object settingsFormLayout: TLayout Align = Contents - Size.Width = 552.000000000000000000 - Size.Height = 438.000000000000000000 + Size.Width = 574.000000000000000000 + Size.Height = 547.000000000000000000 Size.PlatformDefault = False TabOrder = 7 object OpenDialog1: TOpenDialog Filter = 'After Effects Render Engine|aerender.exe' Left = 24 - Top = 408 + Top = 488 end object SettingsToolbar: TToolBar PopupMenu = hiddenS - Size.Width = 552.000000000000000000 + Size.Width = 574.000000000000000000 Size.Height = 33.000000000000000000 Size.PlatformDefault = False TabOrder = 1 @@ -39,8 +39,8 @@ object SettingsForm: TSettingsForm Align = Left AutoSize = True StyledSettings = [Family, FontColor] - Margins.Left = 20.000000000000000000 - Position.X = 20.000000000000000000 + Margins.Left = 16.000000000000000000 + Position.X = 16.000000000000000000 Size.Width = 208.000000000000000000 Size.Height = 33.000000000000000000 Size.PlatformDefault = False @@ -65,150 +65,18 @@ object SettingsForm: TSettingsForm Visible = False end end - object aerenderPathLayout: TLayout - Align = Top - Position.Y = 33.000000000000000000 - Size.Width = 552.000000000000000000 - Size.Height = 55.000000000000000000 - Size.PlatformDefault = False - TabOrder = 2 - object aerenderPathLabel: TLabel - Align = Top - StyledSettings = [Family, Size, FontColor] - Margins.Left = 5.000000000000000000 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Position.X = 5.000000000000000000 - Position.Y = 5.000000000000000000 - Size.Width = 542.000000000000000000 - Size.Height = 17.000000000000000000 - Size.PlatformDefault = False - TextSettings.Font.StyleExt = {00070000000000000004000000} - TextSettings.HorzAlign = Center - Text = 'Aerender module path' - TabOrder = 0 - end - object aerenderPath: TEdit - Touch.InteractiveGestures = [LongTap, DoubleTap] - Align = Client - TabOrder = 1 - Margins.Left = 5.000000000000000000 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 486.000000000000000000 - Size.Height = 23.000000000000000000 - Size.PlatformDefault = False - end - object aerenderPathSelect: TButton - Align = Right - Hint = 'Choose aerender path' - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 496.000000000000000000 - Position.Y = 27.000000000000000000 - Size.Width = 23.000000000000000000 - Size.Height = 23.000000000000000000 - Size.PlatformDefault = False - TabOrder = 3 - Text = '...' - OnClick = aerenderPathSelectClick - end - object refreshAerender: TButton - Align = Right - StyledSettings = [Size, FontColor] - Hint = 'Detect aerender automatically' - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 524.000000000000000000 - Position.Y = 27.000000000000000000 - Size.Width = 23.000000000000000000 - Size.Height = 23.000000000000000000 - Size.PlatformDefault = False - TabOrder = 2 - TextSettings.Font.Family = 'Segoe MDL2 Assets' - OnClick = refreshAerenderClick - object RefreshIcon: TPath - Align = Contents - Data.Path = { - 81000000000000009A198742A470FD3F02000000B99E92423433634002000000 - 152E9D42295CBF400200000071BDA642C2F51441020000000B57B0428FC24941 - 020000009A99B842EB51844102000000E27ABF42D7A3A841020000006766C642 - 48E1CC410200000071BDCB42C2F5F441020000007C94CF425C8F104202000000 - 4961D3421E85264202000000CE4CD5421E853D4202000000CE4CD54266665542 - 02000000CE4CD542C2F56842020000002005D44247E17B42020000000180D142 - 3D0A874202000000E2FACE42D7239042020000004961CB42D7A3984202000000 - 90C2C6425C8FA04202000000D823C242A470A842020000009A99BC4214AEAF42 - 02000000B91EB642142EB64202000000B99EAF42F5A8BC42020000006766A842 - 3333C242020000000180A042EBD1C642020000007C949842A370CB4202000000 - 7C1490423D0ACF4202000000E2FA86425C8FD1420200000091C27B427B14D442 - 020000000CD76842295CD54202000000B0475542295CD5420200000054B84142 - 295CD54202000000CFCC2E427B14D442020000009C991C425C8FD14202000000 - 69660A423D0ACF4202000000D2CCF241A470CB4202000000BD1ED341EBD1C642 - 020000009E99B3413333C24202000000DCA39641F5A8BC4202000000B7477941 - 142EB64202000000AD70454114AEAF4202000000C11E1941C275A84202000000 - FE51E8405C8FA0420200000079669E40D7A3984202000000BE994940D7239042 - 02000000D0EBF13F5C0F8742020000004448213F00007C420200000080B123BC - 7A1469420200000080B123BC295C55420200000080B123BCC3F5414202000000 - 4448213F3E0A2F42020000002C7BF43F14AE1C4202000000C9704D40EB510A42 - 02000000C147A140703DF24102000000B770ED400AD7D14102000000E0A31C41 - 1E85B1410200000052E14A417B14944102000000DCA380413D0A734102000000 - 8AEB9B4185EB3D410200000057B8BA41D6A3104102000000D2CCDC41A270D540 - 01000000C31E5541A270D54001000000C31E5541000080B501000000C5F51F42 - 000080B501000000C5F51F42285CD54101000000B0470542285CD54101000000 - B0470542275C334102000000FA28EA41646652410200000056B8CC41AC477941 - 020000006A66B241703D944102000000743D984114AEAB410200000093C28141 - FFFFC54102000000783D5E41285CE34102000000CAF53841EB51004202000000 - E87A1C41B81E104202000000F35108417A14214202000000D2F5E840FFFF3142 - 02000000DCCCD440A370434202000000DCCCD440285C554202000000DCCCD440 - A3706642020000007666E64084EB764202000000C01E0541856B834202000000 - 5AB816410A578B4202000000FE283041AEC7924202000000E97A504152B89942 - 02000000CAF57041B89EA0420200000089EB8B4166E6A6420200000056B8A241 - D7A3AC42020000009E99B941EB51B24202000000D1CCD2413333B74202000000 - 6A66EE418F42BB42020000007D140542CC4CBF42020000004AE11342E17AC242 - 0200000054B8234214AEC44202000000E37A334285EBC642020000007D144442 - 1E05C84202000000B04755421E05C842020000002B5C66421E05C84202000000 - 0CD7764284EBC642020000004961834214AEC44202000000CE4C8B42E17AC242 - 0200000072BD9242CC4CBF420200000016AE99428F42BB42020000007C94A042 - 3333B742020000002ADCA6420A57B242020000009B99AC42D7A3AC4202000000 - AF47B24285EBA64202000000F728B742B89EA042020000005338BB4252B89942 - 020000009042BF42AEC7924202000000A570C24248618B4202000000D8A3C442 - C37583420200000049E1C642F728774202000000E2FAC7425D8F664202000000 - E2FAC7422A5C554202000000E2FAC7422085404202000000EC51C642E27A2C42 - 02000000A5F0C242B91E1942020000005D8FBF420BD70542020000002ADCBA42 - 5E8FE84102000000EDD1B44249E1C84102000000B0C7AE423433A94102000000 - 5E8FA7420CD78D410200000035339F42C5F56C41020000000CD796425E8F3E41 - 020000009B998D42E47A1C41020000003F8A8342733D0641010000009B198742 - 0829FC3F030000009A198742A470FD3F} - Fill.Color = claWhite - HitTest = False - Margins.Left = 4.000000000000000000 - Margins.Top = 4.000000000000000000 - Margins.Right = 4.000000000000000000 - Margins.Bottom = 4.000000000000000000 - Size.Width = 15.000000000000000000 - Size.Height = 15.000000000000000000 - Size.PlatformDefault = False - Stroke.Kind = None - Stroke.Thickness = 0.500000000000000000 - WrapMode = Fit - end - end - end object BehaviourExpander: TExpander Align = Top StyledSettings = [Family, Size, FontColor] TextSettings.Font.StyleExt = {00070000000000000004000000} - Margins.Left = 5.000000000000000000 - Margins.Top = 10.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 10.000000000000000000 - Position.X = 5.000000000000000000 - Position.Y = 268.000000000000000000 + Margins.Left = 8.000000000000000000 + Margins.Top = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Margins.Bottom = 8.000000000000000000 + Position.X = 8.000000000000000000 + Position.Y = 345.000000000000000000 ShowCheck = False - Size.Width = 542.000000000000000000 + Size.Width = 558.000000000000000000 Size.Height = 130.000000000000000000 Size.PlatformDefault = False Text = 'Behaviour' @@ -216,17 +84,16 @@ object SettingsForm: TSettingsForm ContentSize = '105' object Layout2: TLayout Align = Top - Size.Width = 542.000000000000000000 + Size.Width = 558.000000000000000000 Size.Height = 32.000000000000000000 Size.PlatformDefault = False TabOrder = 0 object HandleCheckBox: TCheckBox Align = Client - Hint = 'Not available on macOS now!' IsChecked = True - Margins.Left = 10.000000000000000000 - Margins.Right = 10.000000000000000000 - Size.Width = 522.000000000000000000 + Margins.Left = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Size.Width = 542.000000000000000000 Size.Height = 32.000000000000000000 Size.PlatformDefault = False TabOrder = 0 @@ -237,27 +104,39 @@ object SettingsForm: TSettingsForm object Layout3: TLayout Align = Top Position.Y = 32.000000000000000000 - Size.Width = 542.000000000000000000 + Size.Width = 558.000000000000000000 Size.Height = 32.000000000000000000 Size.PlatformDefault = False TabOrder = 1 object delFilesCheckBox: TCheckBox Align = Client IsChecked = True - Margins.Left = 10.000000000000000000 - Margins.Right = 10.000000000000000000 - Size.Width = 522.000000000000000000 + Margins.Left = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Size.Width = 414.000000000000000000 Size.Height = 32.000000000000000000 Size.PlatformDefault = False TabOrder = 0 Text = 'Delete temporary files on close' OnChange = delFilesCheckBoxChange end + object TempFilesLabel: TLabel + Align = Right + AutoSize = True + Enabled = False + Margins.Right = 16.000000000000000000 + Position.X = 430.000000000000000000 + Size.Width = 112.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextSettings.WordWrap = False + Text = 'XXXX Temporary files' + end end object onRenderStartLayout: TLayout Align = Top Position.Y = 64.000000000000000000 - Size.Width = 542.000000000000000000 + Size.Width = 558.000000000000000000 Size.Height = 32.000000000000000000 Size.PlatformDefault = False TabOrder = 2 @@ -268,19 +147,19 @@ object SettingsForm: TSettingsForm 'Minimize Launcher' 'Close Launcher') ItemIndex = 0 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 367.000000000000000000 - Size.Height = 22.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 8.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 382.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False TabOrder = 0 OnChange = onRenderStartBoxChange end object onRenderStartLabel: TLabel Align = Left - Margins.Left = 10.000000000000000000 - Position.X = 10.000000000000000000 + Margins.Left = 8.000000000000000000 + Position.X = 8.000000000000000000 Size.Width = 160.000000000000000000 Size.Height = 32.000000000000000000 Size.PlatformDefault = False @@ -289,111 +168,25 @@ object SettingsForm: TSettingsForm end end end - object defaultOutputLayout: TLayout - Align = Top - Position.Y = 120.000000000000000000 - Size.Width = 552.000000000000000000 - Size.Height = 32.000000000000000000 - Size.PlatformDefault = False - TabOrder = 4 - object defOutPathLabel: TLabel - Align = Left - Margins.Left = 10.000000000000000000 - Position.X = 10.000000000000000000 - Size.Width = 160.000000000000000000 - Size.Height = 32.000000000000000000 - Size.PlatformDefault = False - Text = 'Default output directory' - TabOrder = 0 - end - object defaultOutputPath: TEdit - Touch.InteractiveGestures = [LongTap, DoubleTap] - Align = Client - TabOrder = 1 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 349.000000000000000000 - Size.Height = 22.000000000000000000 - Size.PlatformDefault = False - end - object Button3: TButton - Align = Right - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 524.000000000000000000 - Position.Y = 5.000000000000000000 - Size.Width = 23.000000000000000000 - Size.Height = 22.000000000000000000 - Size.PlatformDefault = False - TabOrder = 2 - Text = '...' - OnClick = Button3Click - end - end - object defaultProjectsLayout: TLayout - Align = Top - Position.Y = 88.000000000000000000 - Size.Width = 552.000000000000000000 - Size.Height = 32.000000000000000000 - Size.PlatformDefault = False - TabOrder = 5 - object defProjPathLabel: TLabel - Align = Left - Margins.Left = 10.000000000000000000 - Position.X = 10.000000000000000000 - Size.Width = 160.000000000000000000 - Size.Height = 32.000000000000000000 - Size.PlatformDefault = False - Text = 'Default projects directory' - TabOrder = 0 - end - object defaultProjectsPath: TEdit - Touch.InteractiveGestures = [LongTap, DoubleTap] - Align = Client - TabOrder = 1 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 349.000000000000000000 - Size.Height = 22.000000000000000000 - Size.PlatformDefault = False - end - object Button2: TButton - Align = Right - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Position.X = 524.000000000000000000 - Position.Y = 5.000000000000000000 - Size.Width = 23.000000000000000000 - Size.Height = 22.000000000000000000 - Size.PlatformDefault = False - TabOrder = 2 - Text = '...' - OnClick = Button2Click - end - end object UIExpander: TExpander Align = Top StyledSettings = [Family, Size, FontColor] TextSettings.Font.StyleExt = {00070000000000000004000000} - Margins.Left = 5.000000000000000000 - Margins.Top = 10.000000000000000000 - Margins.Right = 5.000000000000000000 - Position.X = 5.000000000000000000 - Position.Y = 162.000000000000000000 + Margins.Left = 8.000000000000000000 + Margins.Top = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Position.X = 8.000000000000000000 + Position.Y = 241.000000000000000000 ShowCheck = False - Size.Width = 542.000000000000000000 + Size.Width = 558.000000000000000000 Size.Height = 96.000000000000000000 Size.PlatformDefault = False Text = 'User Interface' - TabOrder = 6 + TabOrder = 4 ContentSize = '71' object styleLayout: TLayout Align = Top - Size.Width = 542.000000000000000000 + Size.Width = 558.000000000000000000 Size.Height = 32.000000000000000000 Size.PlatformDefault = False TabOrder = 0 @@ -404,19 +197,19 @@ object SettingsForm: TSettingsForm 'AErender Modern Animated' 'Onyx Blue (Old Style)') ItemIndex = 0 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 367.000000000000000000 - Size.Height = 22.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 8.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 382.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False TabOrder = 0 OnChange = styleBoxChange end object styleLabel: TLabel Align = Left - Margins.Left = 10.000000000000000000 - Position.X = 10.000000000000000000 + Margins.Left = 8.000000000000000000 + Position.X = 8.000000000000000000 Size.Width = 160.000000000000000000 Size.Height = 32.000000000000000000 Size.PlatformDefault = False @@ -552,7 +345,7 @@ object SettingsForm: TSettingsForm object langLayout: TLayout Align = Top Position.Y = 32.000000000000000000 - Size.Width = 542.000000000000000000 + Size.Width = 558.000000000000000000 Size.Height = 32.000000000000000000 Size.PlatformDefault = False TabOrder = 2 @@ -562,19 +355,19 @@ object SettingsForm: TSettingsForm 'English' #1056#1091#1089#1089#1082#1080#1081' (Russian)') ItemIndex = 0 - Margins.Top = 5.000000000000000000 - Margins.Right = 5.000000000000000000 - Margins.Bottom = 5.000000000000000000 - Size.Width = 367.000000000000000000 - Size.Height = 22.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 8.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 382.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False TabOrder = 0 OnChange = langBoxChange end object langLabel: TLabel Align = Left - Margins.Left = 10.000000000000000000 - Position.X = 10.000000000000000000 + Margins.Left = 8.000000000000000000 + Position.X = 8.000000000000000000 Size.Width = 160.000000000000000000 Size.Height = 32.000000000000000000 Size.PlatformDefault = False @@ -596,12 +389,13 @@ object SettingsForm: TSettingsForm TextSettings.HorzAlign = Center Text = 'Changes will take effect after restarting the program' Visible = False + TabOrder = 3 end end object StatusBar1: TStatusBar - Position.Y = 406.000000000000000000 + Position.Y = 515.000000000000000000 ShowSizeGrip = True - Size.Width = 552.000000000000000000 + Size.Width = 574.000000000000000000 Size.Height = 32.000000000000000000 Size.PlatformDefault = False TabOrder = 0 @@ -612,10 +406,417 @@ object SettingsForm: TSettingsForm OnClick = Button1Click end end + object RenderingExpander: TExpander + Align = Top + StyledSettings = [Family, Size, FontColor] + TextSettings.Font.StyleExt = {00070000000000000004000000} + Margins.Left = 8.000000000000000000 + Margins.Top = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Position.X = 8.000000000000000000 + Position.Y = 41.000000000000000000 + ShowCheck = False + Size.Width = 558.000000000000000000 + Size.Height = 192.000000000000000000 + Size.PlatformDefault = False + Text = 'Rendering' + TabOrder = 2 + ContentSize = '167' + object aerenderPathLayout: TLayout + Align = Top + Size.Width = 558.000000000000000000 + Size.Height = 64.000000000000000000 + Size.PlatformDefault = False + TabOrder = 0 + object aerenderPathLabel: TLabel + Align = Top + StyledSettings = [Family, Size, FontColor] + Margins.Left = 8.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Position.X = 8.000000000000000000 + Position.Y = 4.000000000000000000 + Size.Width = 546.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.StyleExt = {00070000000000000004000000} + TextSettings.HorzAlign = Center + Text = 'Aerender module path' + end + object aerenderPath: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Client + Margins.Left = 8.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 8.000000000000000000 + Size.Width = 478.000000000000000000 + Size.Height = 28.000000000000000000 + Size.PlatformDefault = False + end + object aerenderPathSelect: TButton + Align = Right + Hint = 'Choose aerender path' + Margins.Right = 4.000000000000000000 + Margins.Bottom = 8.000000000000000000 + Position.X = 490.000000000000000000 + Position.Y = 28.000000000000000000 + Size.Width = 28.000000000000000000 + Size.Height = 28.000000000000000000 + Size.PlatformDefault = False + Text = '...' + OnClick = aerenderPathSelectClick + end + object refreshAerender: TButton + Align = Right + StyledSettings = [Size, FontColor] + Hint = 'Detect aerender automatically' + Margins.Right = 8.000000000000000000 + Margins.Bottom = 8.000000000000000000 + Position.X = 522.000000000000000000 + Position.Y = 28.000000000000000000 + Size.Width = 28.000000000000000000 + Size.Height = 28.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Family = 'Segoe MDL2 Assets' + OnClick = refreshAerenderClick + object RefreshIcon: TPath + Align = Contents + Data.Path = { + 81000000000000009A198742A470FD3F02000000B99E92423433634002000000 + 152E9D42295CBF400200000071BDA642C2F51441020000000B57B0428FC24941 + 020000009A99B842EB51844102000000E27ABF42D7A3A841020000006766C642 + 48E1CC410200000071BDCB42C2F5F441020000007C94CF425C8F104202000000 + 4961D3421E85264202000000CE4CD5421E853D4202000000CE4CD54266665542 + 02000000CE4CD542C2F56842020000002005D44247E17B42020000000180D142 + 3D0A874202000000E2FACE42D7239042020000004961CB42D7A3984202000000 + 90C2C6425C8FA04202000000D823C242A470A842020000009A99BC4214AEAF42 + 02000000B91EB642142EB64202000000B99EAF42F5A8BC42020000006766A842 + 3333C242020000000180A042EBD1C642020000007C949842A370CB4202000000 + 7C1490423D0ACF4202000000E2FA86425C8FD1420200000091C27B427B14D442 + 020000000CD76842295CD54202000000B0475542295CD5420200000054B84142 + 295CD54202000000CFCC2E427B14D442020000009C991C425C8FD14202000000 + 69660A423D0ACF4202000000D2CCF241A470CB4202000000BD1ED341EBD1C642 + 020000009E99B3413333C24202000000DCA39641F5A8BC4202000000B7477941 + 142EB64202000000AD70454114AEAF4202000000C11E1941C275A84202000000 + FE51E8405C8FA0420200000079669E40D7A3984202000000BE994940D7239042 + 02000000D0EBF13F5C0F8742020000004448213F00007C420200000080B123BC + 7A1469420200000080B123BC295C55420200000080B123BCC3F5414202000000 + 4448213F3E0A2F42020000002C7BF43F14AE1C4202000000C9704D40EB510A42 + 02000000C147A140703DF24102000000B770ED400AD7D14102000000E0A31C41 + 1E85B1410200000052E14A417B14944102000000DCA380413D0A734102000000 + 8AEB9B4185EB3D410200000057B8BA41D6A3104102000000D2CCDC41A270D540 + 01000000C31E5541A270D54001000000C31E5541000080B501000000C5F51F42 + 000080B501000000C5F51F42285CD54101000000B0470542285CD54101000000 + B0470542275C334102000000FA28EA41646652410200000056B8CC41AC477941 + 020000006A66B241703D944102000000743D984114AEAB410200000093C28141 + FFFFC54102000000783D5E41285CE34102000000CAF53841EB51004202000000 + E87A1C41B81E104202000000F35108417A14214202000000D2F5E840FFFF3142 + 02000000DCCCD440A370434202000000DCCCD440285C554202000000DCCCD440 + A3706642020000007666E64084EB764202000000C01E0541856B834202000000 + 5AB816410A578B4202000000FE283041AEC7924202000000E97A504152B89942 + 02000000CAF57041B89EA0420200000089EB8B4166E6A6420200000056B8A241 + D7A3AC42020000009E99B941EB51B24202000000D1CCD2413333B74202000000 + 6A66EE418F42BB42020000007D140542CC4CBF42020000004AE11342E17AC242 + 0200000054B8234214AEC44202000000E37A334285EBC642020000007D144442 + 1E05C84202000000B04755421E05C842020000002B5C66421E05C84202000000 + 0CD7764284EBC642020000004961834214AEC44202000000CE4C8B42E17AC242 + 0200000072BD9242CC4CBF420200000016AE99428F42BB42020000007C94A042 + 3333B742020000002ADCA6420A57B242020000009B99AC42D7A3AC4202000000 + AF47B24285EBA64202000000F728B742B89EA042020000005338BB4252B89942 + 020000009042BF42AEC7924202000000A570C24248618B4202000000D8A3C442 + C37583420200000049E1C642F728774202000000E2FAC7425D8F664202000000 + E2FAC7422A5C554202000000E2FAC7422085404202000000EC51C642E27A2C42 + 02000000A5F0C242B91E1942020000005D8FBF420BD70542020000002ADCBA42 + 5E8FE84102000000EDD1B44249E1C84102000000B0C7AE423433A94102000000 + 5E8FA7420CD78D410200000035339F42C5F56C41020000000CD796425E8F3E41 + 020000009B998D42E47A1C41020000003F8A8342733D0641010000009B198742 + 0829FC3F030000009A198742A470FD3F} + Fill.Color = claWhite + HitTest = False + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 20.000000000000000000 + Size.Height = 20.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + Stroke.Thickness = 0.500000000000000000 + WrapMode = Fit + end + end + end + object defaultProjectsLayout: TLayout + Align = Top + Position.Y = 64.000000000000000000 + Size.Width = 558.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TabOrder = 1 + object defProjPathLabel: TLabel + Align = Left + Margins.Left = 8.000000000000000000 + Position.X = 8.000000000000000000 + Size.Width = 160.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + Text = 'Default projects directory' + end + object defaultProjectsPath: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Client + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 354.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + end + object Button2: TButton + Align = Right + Margins.Top = 4.000000000000000000 + Margins.Right = 8.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 526.000000000000000000 + Position.Y = 4.000000000000000000 + Size.Width = 24.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Text = '...' + OnClick = Button2Click + end + end + object defaultOutputLayout: TLayout + Align = Top + Position.Y = 96.000000000000000000 + Size.Width = 558.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TabOrder = 3 + object defOutPathLabel: TLabel + Align = Left + Margins.Left = 8.000000000000000000 + Position.X = 8.000000000000000000 + Size.Width = 160.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + Text = 'Default output directory' + end + object defaultOutputPath: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Client + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 354.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + end + object Button3: TButton + Align = Right + Margins.Top = 4.000000000000000000 + Margins.Right = 8.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Position.X = 526.000000000000000000 + Position.Y = 4.000000000000000000 + Size.Width = 24.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Text = '...' + OnClick = Button3Click + end + end + object GridPanelLayout2: TGridPanelLayout + Align = Top + Enabled = False + Position.Y = 128.000000000000000000 + Size.Width = 558.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 4 + ColumnCollection = < + item + Value = 64.999999999999960000 + end + item + Value = 35.000000000000040000 + end> + ControlCollection = < + item + Column = 0 + Control = Layout1 + Row = 0 + end + item + Column = 1 + Control = Layout4 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end + item + SizeStyle = Auto + end> + object Layout1: TLayout + Align = Client + Size.Width = 362.700012207031300000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + object renderingModeLabel: TLabel + Align = Left + Anchors = [] + Margins.Left = 8.000000000000000000 + Position.X = 8.000000000000000000 + Size.Width = 160.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + Text = 'Multi rendering mode' + end + object GridPanelLayout3: TGridPanelLayout + Align = Client + Size.Width = 194.700012207031300000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + ColumnCollection = < + item + Value = 29.999999999999960000 + end + item + Value = 70.000000000000040000 + end> + ControlCollection = < + item + Column = 0 + Control = allAtOnce + Row = 0 + end + item + Column = 1 + Control = SpeedButton2 + Row = 0 + end> + RowCollection = < + item + Value = 100.000000000000000000 + end + item + SizeStyle = Auto + end> + object allAtOnce: TSpeedButton + StaysPressed = True + Align = Client + GroupName = 'renderingMode' + Size.Width = 58.410003662109380000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + Text = 'All at once' + end + object SpeedButton2: TSpeedButton + StaysPressed = True + Align = Client + GroupName = 'renderingMode' + IsPressed = True + Size.Width = 136.290008544921900000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + Text = 'Limit simultaneous threads' + end + end + end + object Layout4: TLayout + Align = Client + Size.Width = 195.299987792968800000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + object Label1: TLabel + Align = Left + Anchors = [] + AutoSize = True + Margins.Left = 10.000000000000000000 + Position.X = 10.000000000000000000 + Size.Width = 41.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextSettings.WordWrap = False + Text = 'Limit to' + end + object MaxThreadsCountEdit: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Left + KeyboardType = DecimalNumberPad + Position.X = 59.000000000000000000 + Position.Y = 6.000000000000000000 + Margins.Left = 8.000000000000000000 + Margins.Top = 6.000000000000000000 + Margins.Bottom = 6.000000000000000000 + Size.Width = 70.000000000000000000 + Size.Height = 20.000000000000000000 + Size.PlatformDefault = False + end + object Label2: TLabel + Align = Left + Margins.Left = 8.000000000000000000 + Position.X = 137.000000000000000000 + Size.Width = 120.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + Text = 'threads' + end + end + end + object limitRenderLayout: TLayout + Align = Top + Position.Y = 128.000000000000000000 + Size.Width = 558.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TabOrder = 2 + object limitRenderCheckbox: TCheckBox + Align = Left + IsChecked = True + Margins.Left = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Position.X = 8.000000000000000000 + Size.Width = 209.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TabOrder = 0 + Text = 'Limit render threads amount to' + OnChange = limitRenderCheckboxChange + end + object limitRenderEdit: TEdit + Touch.InteractiveGestures = [LongTap, DoubleTap] + Align = Client + TabOrder = 1 + KeyboardType = NumberPad + FilterChar = '1234567890' + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 91.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + KillFocusByReturn = True + end + object limitRenderSubLabel: TLabel + Align = Right + Margins.Left = 8.000000000000000000 + Position.X = 328.000000000000000000 + Size.Width = 230.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + Text = 'simultaneous renders' + TabOrder = 2 + end + end + end end object hiddenS: TPopupMenu - Left = 80 - Top = 408 + Left = 88 + Top = 488 object opSettingsLabel: TMenuItem Enabled = False Text = 'Optional Settings' diff --git a/src/SettingsUnit.pas b/src/SettingsUnit.pas index aba3d39..96cffa7 100644 --- a/src/SettingsUnit.pas +++ b/src/SettingsUnit.pas @@ -2,10 +2,10 @@ (* AErender Launcher *) (* SettingsUnit.pas *) -(* Lily Stilson // 2019 - 2020 *) +(* Lily Stilson // 2019 - 2021 *) (* MIT License *) (* *) -(* Copyright (c) 2019 - 2020 Alice Romanets *) +(* Copyright (c) 2019 - 2021 Alice Romanets *) (* *) (* Permission is hereby granted, free of charge, to any person obtaining a copy *) (* of this software and associated documentation files (the "Software"), to deal *) @@ -55,6 +55,9 @@ interface FMX.Menus, {$ENDREGION} + AErenderLauncher.SysUtils, + AErenderLauncher.Types, + {$REGION ' Windows Only Libraries '}{$IFDEF MSWINDOWS} Winapi.ShellAPI, Winapi.Windows, FMX.Platform.Win, Winapi.TlHelp32; {$ENDIF MSWINDOWS}{$ENDREGION} @@ -116,6 +119,22 @@ TSettingsForm = class(TForm) resetLanucher: TMenuItem; opSettingsLabel: TMenuItem; separatorItem5: TMenuItem; + RenderingExpander: TExpander; + renderingModeLabel: TLabel; + GridPanelLayout2: TGridPanelLayout; + Layout1: TLayout; + GridPanelLayout3: TGridPanelLayout; + allAtOnce: TSpeedButton; + SpeedButton2: TSpeedButton; + Layout4: TLayout; + Label1: TLabel; + MaxThreadsCountEdit: TEdit; + Label2: TLabel; + TempFilesLabel: TLabel; + limitRenderLayout: TLayout; + limitRenderCheckbox: TCheckBox; + limitRenderEdit: TEdit; + limitRenderSubLabel: TLabel; procedure langBoxChange(Sender: TObject); procedure FormShow(Sender: TObject); procedure aerenderPathSelectClick(Sender: TObject); @@ -138,11 +157,13 @@ TSettingsForm = class(TForm) procedure SetLanguage(LanguageCode: Integer); procedure openConfigClick(Sender: TObject); procedure resetLanucherClick(Sender: TObject); + procedure limitRenderCheckboxChange(Sender: TObject); private { Private declarations } - {$IFDEF MSWINDOWS}procedure CreateHandle; override;{$ENDIF MSWINDOWS} + public { Public declarations } + {$IFDEF MSWINDOWS}procedure CreateHandle; override;{$ENDIF MSWINDOWS} end; procedure ChangeDPI(DPI: Single); @@ -264,7 +285,7 @@ procedure TSettingsForm.SetLanguage(LanguageCode: Integer); Language[LanguageCode].SettingsForm.MinimizeLauncher, Language[LanguageCode].SettingsForm.CloseLauncher ]); - onRenderStartBox.ItemIndex := ONRENDERSTART; + onRenderStartBox.ItemIndex := Settings.OnRenderStart; end; @@ -304,7 +325,7 @@ procedure TSettingsForm.aerenderPathSelectClick(Sender: TObject); //AERPATH := OpenDialog1.FileName; end; {$ENDIF MSWINDOWS} - AERPATH := aerenderPath.Text; + Settings.AErenderPath := aerenderPath.Text; end; procedure TSettingsForm.Button1Click(Sender: TObject); @@ -389,7 +410,7 @@ procedure TSettingsForm.Button3Click(Sender: TObject); procedure TSettingsForm.delFilesCheckBoxChange(Sender: TObject); begin - MainUnit.DelTempFiles := BoolToStr(delFilesCheckBox.IsChecked, True); + Settings.DeleteTemporary := delFilesCheckBox.IsChecked; end; procedure TSettingsForm.dpi100Change(Sender: TObject); @@ -420,26 +441,31 @@ procedure TSettingsForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := True; SettingsForm.Close; - AERPATH := aerenderPath.Text; - LANG := langBox.ItemIndex; - DEFPRGPATH := defaultProjectsPath.Text; - DEFOUTPATH := defaultOutputPath.Text; - ONRENDERSTART := onRenderStartBox.ItemIndex; + Settings.AErenderPath := aerenderPath.Text; + Settings.Language := langBox.ItemIndex; + Settings.DefaultProjectPath := defaultProjectsPath.Text; + Settings.DefaultOutputPath := defaultOutputPath.Text; + Settings.OnRenderStart := onRenderStartBox.ItemIndex; end; procedure TSettingsForm.FormCreate(Sender: TObject); {var LangFiles: TArray;} begin - try - if AERPATH.IsEmpty then - AERPATH := DetectAerender + {$IFDEF MSWINDOWS}'\Support Files\aerender.exe'{$ENDIF MSWINDOWS} - {$IFDEF MACOS}'/aerender'{$ENDIF MACOS}; - except - on Exception do - AERPATH := ''; - end; - {$IFDEF MSWINDOWS}OpenDialog1.InitialDir := 'C:\Program Files\Adobe';{$ENDIF MSWINDOWS} + var AErenderDetectionThread: TThread := TThread.CreateAnonymousThread(procedure begin + try + if Settings.AErenderPath.IsEmpty then + Settings.AErenderPath := DetectAerender + {$IFDEF MSWINDOWS}'\Support Files\aerender.exe'{$ENDIF MSWINDOWS} + {$IFDEF MACOS}'/aerender'{$ENDIF MACOS}; + except + on Exception do + Settings.AErenderPath := ''; + end; + {$IFDEF MSWINDOWS}OpenDialog1.InitialDir := 'C:\Program Files\Adobe';{$ENDIF MSWINDOWS} + limitRenderEdit.Text := (GetPlatformThreadsCount / 2).ToString; + end); + + AErenderDetectionThread.Start; end; procedure TSettingsForm.FormKeyDown(Sender: TObject; var Key: Word; @@ -454,13 +480,13 @@ procedure TSettingsForm.FormKeyDown(Sender: TObject; var Key: Word; procedure TSettingsForm.FormShow(Sender: TObject); begin - aerenderPath.Text := AERPATH; - defaultProjectsPath.Text := DEFPRGPATH; - defaultOutputPath.Text := DEFOUTPATH; - HandleCheckBox.IsChecked := StrToBool(AERH); - delFilesCheckBox.IsChecked := StrToBool(DelTempFiles); - langBox.ItemIndex := LANG; - onRenderStartBox.ItemIndex := ONRENDERSTART; + aerenderPath.Text := Settings.AErenderPath; + defaultProjectsPath.Text := Settings.DefaultProjectPath; + defaultOutputPath.Text := Settings.DefaultOutputPath; + HandleCheckBox.IsChecked := Settings.AErenderHandle; + delFilesCheckBox.IsChecked := Settings.AErenderHandle; + langBox.ItemIndex := Settings.Language; + onRenderStartBox.ItemIndex := Settings.OnRenderStart; {$IFDEF MSWINDOWS} aerenderPath.TextPrompt := 'C:\Program Files\Adobe\Adobe After Effects CC\Support Files\aerender.exe'; OpenDialog1.Filter := 'After Effects Render Engine|aerender.exe'; @@ -469,20 +495,18 @@ procedure TSettingsForm.FormShow(Sender: TObject); aerenderPath.TextPrompt := '/Applications/Adobe After Effects CC/aerender'; OpenDialog1.Filter := 'After Effects Render Engine|aerender'; {$ENDIF MACOS} + TempFilesLabel.Text := Format('%d %s', [GetTempFilesCount, 'temporary files']); end; procedure TSettingsForm.HandleCheckBoxChange(Sender: TObject); begin - if HandleCheckBox.IsChecked then - begin - AERH := 'True'; - RenderingForm.emptyLabel.Text := Language[LANG].RenderingForm.QueueIsEmpty; - end - else - begin - AERH := 'False'; - RenderingForm.emptyLabel.Text := Language[LANG].RenderingForm.HandleDisabled; - end; + if HandleCheckBox.IsChecked then begin + Settings.AErenderHandle := True; + RenderingForm.emptyLabel.Text := Language[Settings.Language].RenderingForm.QueueIsEmpty; + end else begin + Settings.AErenderHandle := False; + RenderingForm.emptyLabel.Text := Language[Settings.Language].RenderingForm.HandleDisabled; + end; end; procedure TSettingsForm.langBoxChange(Sender: TObject); @@ -491,13 +515,18 @@ procedure TSettingsForm.langBoxChange(Sender: TObject); /// will be invoked by the OnShow event of the form if (not langChangeLabel.Visible) and (langBox.IsFocused) then begin UIExpander.Height := 112; - LANG := langBox.ItemIndex; - langChangeLabel.Text := Language[LANG].SettingsForm.LangChange; + Settings.Language := langBox.ItemIndex; + langChangeLabel.Text := Language[Settings.Language].SettingsForm.LangChange; langChangeLabel.Visible := True; end; //MainUnit.ChangeLanguage(langBox.ItemIndex); end; +procedure TSettingsForm.limitRenderCheckboxChange(Sender: TObject); +begin + limitRenderEdit.Enabled := limitRenderCheckbox.IsChecked; +end; + procedure TSettingsForm.onRenderStartBoxChange(Sender: TObject); begin //ONRENDERSTART := onRenderStartBox.ItemIndex; @@ -509,7 +538,7 @@ procedure TSettingsForm.refreshAerenderClick(Sender: TObject); aerenderPath.Text := DetectAerender + {$IFDEF MSWINDOWS}'\Support Files\aerender.exe'{$ENDIF MSWINDOWS} {$IFDEF MACOS}'/aerender'{$ENDIF MACOS}; except on E: Exception do begin - TDialogServiceSync.MessageDialog((Language[LANG].Errors.aerenderUndetectable + #13#10 + E.ToString()), TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0) + TDialogServiceSync.MessageDialog((Language[Settings.Language].Errors.aerenderUndetectable + #13#10 + E.ToString()), TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], TMsgDlgBtn.mbOK, 0) end; end; end; @@ -529,7 +558,7 @@ procedure TSettingsForm.resetLanucherClick(Sender: TObject); if (TDialogServiceSync.MessageDialog(('Launcher configuration will be renewed. This will delete all your setting and output modules. Application will be restarted' + #13#10 + 'This action is irreversible! Proceed?'), TMsgDlgType.mtWarning, mbOKCancel, TMsgDlgBtn.mbOK, 0) = 1) then begin - InitConfiguration(APPFOLDER + 'AErenderConfiguration.xml'); + Settings.ResetAndSave(APPFOLDER + 'AErenderConfiguration.xml'); {$IFDEF MSWINDOWS}ShellExecute(0, 'OPEN', PChar(ParamStr(0)), '', '', SW_SHOWNORMAL);{$ENDIF MSWINDOWS} {$IFDEF MACOS}_system(PAnsiChar('open "' + AnsiString(ParamStr(0)) + '" &'));{$ENDIF MACOS} Halt; @@ -540,7 +569,7 @@ procedure TSettingsForm.styleBoxChange(Sender: TObject); begin case styleBox.ItemIndex of 0:begin - STYLE := 0; + Settings.Style := 0; MainForm.SettingsIcon.Fill.Color := $FFFFFFFF; MainForm.InfoIcon.Fill.Color := $FFFFFFFF; @@ -561,7 +590,7 @@ procedure TSettingsForm.styleBoxChange(Sender: TObject); OutputModuleEditorForm.StyleBook := MainForm.AERModernStyle; end; 1:begin - STYLE := 1; + Settings.Style := 1; MainForm.SettingsIcon.Fill.Color := $FFFFFFFF; MainForm.InfoIcon.Fill.Color := $FFFFFFFF; @@ -582,7 +611,7 @@ procedure TSettingsForm.styleBoxChange(Sender: TObject); OutputModuleEditorForm.StyleBook := MainForm.AERModernAnimatedStyle; end; 2:begin - STYLE := 2; + Settings.Style := 2; MainForm.SettingsIcon.Fill.Color := $FF000000; MainForm.InfoIcon.Fill.Color := $FF000000; diff --git a/src/SplashScreenUnit.fmx b/src/SplashScreenUnit.fmx index 7194374..393d8b8 100644 --- a/src/SplashScreenUnit.fmx +++ b/src/SplashScreenUnit.fmx @@ -65,150 +65,150 @@ object SplashScreenForm: TSplashScreenForm PNG = { 89504E470D0A1A0A0000000D4948445200000080000000800806000000C33E61 CB000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 - 11D749444154785EED9D097415559AC72F84EC7B48C2128210C84242C8026421 - 2C0D08822DAE2D228BDDEAD0226833CDB881DAF6E0443DDA760FA3D8D0B68328 - 03B48E6D0B4454441C810EB2648F842490B08404921092909584CCFD57AAC27B - AFEA55D5CBC2AB4ADDDF39DF79756FBD9043BE7FDDEF7EB7EE3280F40CE1E7F1 - 39909A83C427C07DC118CA74981868A77643E253B82F7CDA4C771D22385370F2 - 206ACE26E6C41BEE0962107E1713813CA64E159C0D6BE5ADC5C4DAA8998AC166 - 21D8EA0CE1FBA64E77A5E64ECD73FAED8B437E36F791D97E01C1112EAEEEFE6E - AEAEBEED0EEEBE1DADADB8CFB091014E4E0D0EED0D358D4D4D35CD4D0D55572A - CF177CFFCD47FB7FF876FB197ABB9E5A03B5266AA66200AA85608B00F05D181C - EF42CD839AD7B4D98BC3E7DDB3E2C1A0611129DEFE01A3681DA38FA9ADAA2C2D - 2B2F38FCD5179B3E3DB87FFB295A5547ED1AB5666A1082EAD640AD00F03D34E3 - 68D6E1789F88F129A31E5DF9F68A3123421638780638D23AC62DA6BDBEF27AD1 - D9A2DD5B373FB7A920EF7029ADAAA1865601A1C2B48F60153502109E7A34F75E - 8E8E8E816B5FDDFD445468CA32273F0FD6B46B80D62BD71AF28B0E7FFCFACB0B - 365FBF7EFD32AD428B2084055911280940703EE2BC6F5050F8E8175277A58EB8 - 2D6C0A6E32B4C5C5F385875F5B7BF74B6565A74A6811AD01FA07B222901380A9 - F307A7CC5A14BBFCC90D7FF4F60F548CF32D2DCD24E7D8519275F408B95C7E91 - D4545771D6780D618AA18487A717F1F5F7273E7E83C99061C3496CD214121D3F - 893839A31196A7B6EA72E9A67756AD39F2C3FF66D16235355911581300EAD1D3 - EF74FECC87E29F7AEE830F5C5CDC7D70D31A2773B2C89E4F76909CE347C9F556 - 8421466FE1ECEC42264C4E240B1E7A98844545F3B5D2D08CA1E6DDB71EFF97C3 - 07FE96418B820890218844202500D4C1D0D3F7A3CD7E68EA3B3F6CF1F60DBC0D - 37A5B8505A42B6BFFF6792917E98AF61F42593A7CE200F2F5F4186078FE46BC4 - A02578F15FA73F46C341112D5EA1860C01023013819400D0DB47AFDE9B76F882 - FFF441EE3B41C1E1C9DC1D0B3A3A3AC8EE9DFF4376FC7533BD46A79371AB1838 - 702059FAE45364FEFD0BC98001526E24E45C4941FA334F4C789A760CCFD3622D - B5EBD4CC1C8566DE14FC4BA873A316B82E75CFD3E15149F7E0862568E237BDF5 - 1A49FB74272D59ED6330FA083C7CD9C77E24572A2F93988424E2E060E94AFA04 - FBFA078F0A8D1F7070FF76F4074CC708BAC0D36E0A0480A7DF2B747CF29871F1 - 539770B516C0F9A9CFAE2607F77DCDD730ECC581BD7BC81B2FFC1B696BC3C32D - 26266CC6E2D0718921F4D28B1A7C6BD65C98CA0637D0EBE79EFE352F6E7F3668 - 78E878DC3005CAFBF39BA924E3C83FF91A86BDA9AC2827B557AE90F8E4145138 - 707075720A1A19E1F1DDDE2DE9B4D848CDAC15306D0184E6DF2369FA03E32246 - 47CCE76A2DD8B5731B39F4ED377C89A115F6A7ED225FFFE333BE644EF8A8F03B - E1537A89515CF8B84B2596210043BD9E77DEBBEA1752C3BBE74BCE909D7FFD0B - 5F62688D8FDFFB2F525176812FDD04BE9C77F7AA07E8A52735F8B80B4100C2D3 - 8FD4CF2B38383209959620D563BD7DEDD2DEDE4EFEF6C166BE644E7008E753F4 - 03E0E3AE56402480E419BF08F5F11F12CCD59AF0537626C964715FF3A47FFF1D - 397DEA245FBA899FEF90910953EF0FA597920200DCB0EF8CDB97FDACB3684EDA - 273BF82B86D6E94CCDC5CC9CF7C80CFA81D15DF89AC3B40540A54BE0D0E030AE - C684E6A6266E7897A10F328FA44BA685014346C2B76801E06B5108E004E0EAEA - 3598AB31811BDBBF2E9D6732B44753630339998DB11F735C3A7D6B5500880B8E - CEEEAEA2173E5947914232F444E68F629F7938BBC1B7C8EE24FB005C2BE0ECEA - E9DD59BC496545057FC5D00B523E73F4F08000BA9E7E602A005C0F7273F6C448 - A019355595FC15432FD4548B7DE6E6C2F91602E8F2BB6908104C04267330F485 - 8CCFCC7C6DDA0200490134B0993CBAA3A11EB3C62531F3B1A50018068309C0E0 - 08CD015E1004508BFAFC4087E825FFA25929FC953618353694F80EF6E74BF214 - E6E71A3284B9B8BA920FD3BEE54B37B96FE6803BE8473E35F4125B7527800103 - 06920FBFDCC74D9254C3F1C307C91F5E7E812F1907B502D05D08F0F6F355ED7C - 103339D1A6EF1B0DDD092060C850FE4A1D8E4E4E24322E9E2F312CD19D00FC6D - 1400C054298634BA1340D048ABCB13AC3231698AD5A9D346477702C0EA185BF1 - 0B0824C1A3C7F0258629BA1200D6CC858E8BE44BB6119FCCD6B34AA12B014C98 - 9CC0A58152343562C6B375583F401A5D0920364172AE2A475EC63172EE4C315F - 12133A2E8A787A8BDE741B1EDD08004F7E6C82E412458E5379B9243F138B61A5 - 412750EEE78D8A6E04303A2C8C78F9585F9D7E2A2F87E4659EE04BD2B0302046 - 3702907B7AB156B1A4B09014E464C9AE5B88A17D088741980FC110D08F0012AD - C77FCC83C72C58BCF48110ACE1E6EE41C2C7CB6FAE6034742100A5F40FCDBF80 - 621848B26F181834C8910B6543470493B1119164C2A40432383090BF7BEBD185 - 00E4D23F800EA040BE06FA01E870C2A9C85AEE5EB484AC5AFB327963F316B2F5 - CB6FC9B66FBE277FF97B1AF9CF8F7692FF78EF7DB2EECD3F9195CFBFC4FFE4AD - 471702904BFF40A18900D01A608D9C35B0ADCAD0A0117CA9F740DF627CFC24F2 - CB55ABC9866D9F928D3B3F272FBCF13659FCEB9564DA9C79645468187176C1A2 - 1C31F6EC97685E009DE99F7501949D2D25D7EAB12D5E2758C5547C12AFBBAD13 - 97D43BA382EE9E9E2465F65CB2FAE5F5E4FDCFD3C84B7FD840E63FB090040E1B - C67F43FB685E009DE99F2F5F1263DAFC0B2886815E10C0ECBBEEA14EFF923CFD - E22B2479E66CAE83A947342F00A5C19B53F9373B80027203422032268EB8BA89 - 963FD844485838B75193DED1BE0064D23F909F217EDA0B7FCA935DCB88981B3D - 71325FEA1E0835FD014D0B4029FDABB8709E545DBEC4976E8281A14293D4508A - 9E66034A2F9FF482A605A094FEE5CAC47AA5301097982CFB6F2BD1DCD47B02B8 - 5456C65FDD7A342D00A5F42FEFC431FE4A8CD28090B7AF1F17C7BB8B9A1600C3 - D21768967270DF5764EBC60DE4F7AB5792D54B1792950BEF25CBEFBB93FCEAE7 - B79325736770FB2DDA0BCD0A4029FDC37675724F3986875B9AE5E3744FC2C00D - 99B10681E3870F91671E5D4236BEFE2AD9FBD927A420379B5CBA5846AE545592 - FADA5AAE1FD1DED6C6FD5FEC856605A094FE95149E32CBFF2DC11FB620279B2F - 49D35BE3017A46B302504AFFF2328EF357D6510A0308016A5718F557B42B0085 - F42F578500940684405C92B127896852004AE91F727CD33780D6282D2E525C17 - 68EFB783F6469302504AFF90E3B7B6E0481C796EDCB8414E6667F22569A2274E - E2560F19154D0A4029FDCB9549FF2C51EA07E00D1D86868D8AE604A094FE81DC - 13CAF15FE0A72CF9012160E4B9829A5B1E8E9EF96B9BFE9B2F4973E29F8768F3 - AE9C8703086A52CA34BE24CDE5F272B27AE98336E5E333E7DF459E78762D5F92 - E6D8A11FC8DBBF93FF4E5FA1DBE5E1B189CAB9F9C42953B97373D49892F301DE - DF7767CD617F408302906FFEFB0AA386014D09A0276BFF7A8A514705352500A5 - F4AF2F091F3F8113A0D1D09400947AFF7D0966F7603B19A3A11901A849FFFA1A - 238601CD08607468A8ECDBBF5B013AA052E7EFF56734330E70FFD25F91858F2D - E74B62EAEB6AC937FFF83B5FEA1E773DF4B0E28E61BF5FFD2429C8557ECFD05F - C601342380F5EF6E266191A2630ABBC021951B5F5FCF97BAC7F3AFBDA5D8CCEF - DAB18D3B1C4B093610D48BA849FFB001444FC151AB4A18AD1FA00901A849FF72 - 25A67FDB8A9A738F8247879080A1FA59D9D353342100A5DEFFC57367B943927B - 4AB99569E49618A915B0BB0054BDFD5331FB470DC289DB4AF4C6D231BD607701 - A849FFD4CCFF538B9A301015379138BB18637F61BB0B4069F227E6D6AB79A7AF - 168849E9F85B4747476EA9B711B0BF0014DEFE9D2E28E8D5FDFE71944AF149F1 - D1AA9618250CD855005CFA1719C597A4B165FA975AD48401BC1E36C2FEC27615 - 80BAF4AFF705A0A62388F502B78DC559CBFD1BBB0A40A9F78F99BF45F9797CA9 - F7385DF01377BCAA12F12A6627E91DBB09404DFA773227AB4FCE2CC61E426A32 - 0B23CC12B29B00D4A47FB6CCFEB595EC63CAFD803111E3B855C4FD19BB0940CD - BEBD79997D27809CE3CAFD006E7F613BCD51BC55D84D0063155EFE9C3D5D4CCE - 165BDFFDBBA7602A388E945362DC8458FECA9CD6D656FECA3AD8A944EBD8ED75 - 30366972F7F0E44B626AAFD6F4F91F107B05F9FAE1487DEB6009BAD47E40E8C3 - C42725CBEEF187790575F4FF610FFAEDB9810C75F4DB730319BD0B1380C16102 - 30384C00068709C0E03001181C260083C304607098000C0E1380C1B11480E426 - 397A3D0DC3C8E0381B2B98F95810002AADEE90E4EB6FECED54F588AF9FACCFBA - FC6DD902B437B6D48BF64137FA7EBA7AC467B0F82D676333E75BB3EDD54C0580 - C9F2ED0D8D75A22DB8F5740A16A313A9F58D2D4DF5B5F40302E85A18611A0250 - D976FD5AD355AEC60435B37718DA426ABE657363237CDB460DBE360B01284019 - AD4DCDF5A2190C38DE14AB6518FA00936D2263E3F9D24D9A1A6BE15BCCB281AF - 450280325A2E5D3C739AAB3101930BA2A90818FA20667292E4035B5E5602DF62 - 976DF8DA4C000095CD07BEDE7AB0B368CECF1F5CC45F31B48E355F7DF7D587F0 - 2DE6B7C1D71C9621A0E978FAEED33555E517B95A13A26893A2348F9F617F12A6 - CD905C6E57555D5E96F163DA197A09014886004E00D4EA4A4A7224E763E32064 - 23AC97D32BD8EB70D1E34FF02573CE1571FBE623C36BA62612004025E2436DDA - A71BF65CADAAEC6A260446868C210F3DF66BBEC4D01A7840874B6C7A0D5FA67D - F1EE6E7A893450100087A900A008ACC3BA96716CEFC9D273B907B85A0BEE59BC - 8CA4CC9AC397185A61FADCF956637F6949D6818C237BB1261EEBECE163EEE907 - 5202C0AAC9EA2DEFFCF6E3AA965AD1847884006C8F161615CDD730EC4D44F404 - B27CCD7392E1193EDCF2DE331FD3CB2BD4E0DBAE0C00586E8BD9F52FD45EBDD4 - 113626D677E4A8F1A2CDFBB0182265F61C7299F615CF97A05FC1B017D3E6DC41 - 7EFB4AAAD5738F320FEEFA6CEF171BF7D2CB726A104057FC079602C08DAE9B47 - 0FED3E9F90BC20DA67F0D0A17C551710017A9CF8C56A8E6763F42E5899B478F9 - 0AB274C5535657279D2ECECE7AF5F93BDEEEE8E8384F8B1805441FCF6C7F1C6B - 1BE37243851D1DED1D27D2F7144E9DB5688AAB9BF8FD229A9C88E8184E085597 - 2A4845D905FE0EA32FC136766BFE3D95FBBB5BCBCA2E55965D5CBF66D6EF1A1A - 6AB1C0B28A9AF0F49B21B7333244D0DED858D776AE24F74CE2D47BA73B3A3A3B - 77DE32074BA8A7DE3E9744C6C4737BFA420C38B28DD17B60642F363199C6FAE7 - C97D4B1EA17F73EB4BEB9B1AEBEB37A42E7EE54C7116CECEADA0564FCD2CF60B - C825F510071C8EDF343C267E4EC26FD67EB8CECF7FF870DC94038B29B10D4BD6 - D174525951416AAAAB484D5515696CE8BDCD9EFA339880833918780D1F40A36F - 5CE214EE7D0C86E495C093BFE9CD4753B38EEFC3DE3A18D0C3F83F9A7ED1D30F - E404807BC812B0619E0FB5E183034786AD5BFFC57321E1B11368D966EC794AB6 - 9EE8EE605B49515676EADA056F55575F28A445381F711F797FD7DB3F4B947E13 - EE0B2D8137B54007078711BF59B7ED9789F1F3EE72F6F131C66E8A1AA7E5EAD5 - E6A327F6EEDEF0FAB28FDADBDBD1E1C3CA5F0CFA084FBED5274F8DD484960022 - C0E440EC993264C4E8A8D0C79FFCE3E2E8B8D8E90E8302E5FA128C3EA2BDED72 - 7B7646C6FF6DD9F4CC8E0B25F945B40A1B21575343874FE8F1CB36BB6ADB1A7C - 0F8664134F3D4E57821002E226CE8D987FDF53778E0A8F8F0DF00F12A58B8CDE - A7B2AAACA2F45446D69ECF367C9993B9BF0055D4E07874F6D0E4E39D3F1CAF18 - 73D50A40002D019E7608013D12A486080DE8287AC74DBE2364DA9C65C941C3C6 - 8E76F3F2F271F7F0F56A7777F5F077F656EEBD30446014CFA1A1E95AC3B59ABA - C6BABAAB65E5C525DF7FBD353DE7C43E8CBEA18947070F711EBD6B8CDA0A933D - 54A760B60A0008AD01461F30EB002D021CEC460D21029F282364E0BE03193810 - DF8578BAF3FB8C089EDC1B349746EA068762881E4D3A9C8C899D70383E51C613 - 8FFB429AA7F8D49BD213870842408B0083B3D132C070DDE9FC4EC733E7DB4EA7 - 083A4D10010C4F390CD7A8173A7936395EA0379C22080126385B30C09CDF7D04 - 1100410C82094EEF96E3190C0683C16030180C863121E4FF0184240A537FCB10 - A70000000049454E44AE426082} + 11D649444154785EED9D097415559AC72F84907D25094B0886250B84AC4016C2 + D28020D8E2DA22B2D8AD0E2D8236D38C1BA86D0F4ED4A36DF7308A0D6D3B8832 + 40EBD8B6404445C411E8204BF64808818425242109210959E191B9FF4A5578EF + 55BDAA7A597855A9FB3BE73BAFEEAD1772C8F7AFFBDDEFD65DFA91EE21FC3C3E + FB537392F804B82F184399763303266A37243E85FBC2A7DD74D521823305270F + A0E662660379C33D410CC2EF622290C7DCA982B3616DBCB59AD9756AE662B05B + 08F63A43F8BEB9D3DDA87950F39A76FBA2513F9BF3C82CFFC0904857378F0077 + 37373F9393879FA9A505F71976E2E4EADAE8646AAC6D6A6EAE6D696EACBE5C75 + BEF0FB6F3EDAF7C3B7DBCED0DB0DD41AA93553331703502D047B0480EFC2E078 + 576A9ED4BCA7CE5A1431F79EE50F060F8D4CF509080CA5758C5EA6AEBAAAB4AC + BCF0D0575F6CFCF4C0BE6D2769553DB5ABD45AA84108AA5B03B502C0F7D08CA3 + 5987E37D23C7A7863EBAE2EDE5A38787CE77F21AEC4CEB18B7185343E5B55367 + 4FEFDAB2E9B98D85F9874A69552D35B40A0815E67D049BA81180F0D4A3B9F776 + 76760E5AF3EAAE27A2C252970EF4F7644DBB0668BB7CB5B1E0D4A18F5F7F79FE + A66BD7AE5DA255681184B0202B02250108CE479CF70B0E8E18F942DACEB4E1B7 + 854FC64D86B6B878BEE8D06B6BEE7EA9ACEC64092DA23540FF40560472023077 + FEA0D4990BE3963DB9FE8F3E01418A71BEB5B585E41E3D42B28F1C2697CA2F92 + DA9A6ACE9AAE224C3194F0F4F2267E0101C4D77F10193C7418894B9E4CA21326 + 92812E6884E5A9ABBE54BAF19D95AB0FFFF0BFD9B458434D5604B604807AF4F4 + 3B9C3FE3A184A79EFBE00357570F5FDCB4C589DC6CB2FB93ED24F7D81172AD0D + 6188D153B8B8B89298494964FE430F93F0A868BE561A9A31D4BEFBD6E3FF7268 + FFDF326951100132049108A404803A187AFAFEB4D90F4B7BE787CD3E7E41B7E1 + A614174A4BC8B6F7FF4C32330EF1358CDE64D294E9E4E165CBC9B090117C8D18 + B4042FFEEBB4C7683838458B97A9214380002C44202500F4F6D1ABF7A11DBE90 + 3F7D90F74E7048440A77C78AF6F676B26BC7FF90ED7FDD44AFD1E964DC2AFAF7 + EF4F963CF9149977FF02D2AF9F941B0939575298F1CC13314FD38EE1795AACA3 + 768D9A85A3D0CC9B837F0975EED482D6A6ED7E3A222AF91EDCB0064DFCC6B75E + 23E99FEEA0259B7D0C462F81872FE7E88FE472D525129B984C9C9CAC5D499F60 + BF8090D0B0847E07F66D437FC07C8CA0133CEDE6400078FABDC3C6A78C1E9B30 + 6531576B059C9FF6EC2A7260EFD77C0DC351ECDFB39BBCF1C2BF91EBD7F1708B + 890D9FBE286C6CD2287AE94D0DBEB5682ECC65831BE8F5734FFFEA17B73D1B3C + 2C6C3C6E9803E5FDF9CD349279F89F7C0DC3D154559493BACB9749424AAA281C + 38B90D1C183C22D2F3BB3D9B3368B1899A452B60DE0208CDBF67F2B407C6468E + 0C9FC7D55AB173C75672F0DB6FF812432BEC4BDF49BEFEC7677CC99288D0B03B + E1537A89515CF8B85325D6210043BD5E77DEBBF21752C3BBE74BCE901D7FFD0B + 5F62688D8FDFFB2F525176812FDD04BE9C7BF7CA07E8A51735F8B8134100C2D3 + 8FD4CF3B24645C322AAD41AAC77AFBDAC5643291BF7DB0892F5912328AF329FA + 01F071672B201240CAF45F84F9060C0EE16ACDF829278B64B1B8AF7932BEFF8E + 9C3E79822FDDC4DF6FF088C429F787D14B4901006ED877FAED4B7FD651B424FD + 93EDFC1543EB74A4E66266CC7D643AFDC0E82E7CCD61DE02A0D2356848483857 + 63464B733337BCCBD00759873324D3C2C0C123E05BB400F0B5280470027073F3 + 1EC4D598C18DED5F93CE3319DAA3B9A9919CC8C1D88F25AE1DBEB52900C40567 + 170F37D10B9FEC234821197A22EB47B1CF3C5DDCE15B6477927D00AE157071F3 + F2E928DEA4AAA282BF62E805299F397B7A42009D4F3F301700AE07B8BB786124 + D082DAEA2AFE8AA1176A6BC43E7377E57C0B0174FADD3C04082602933918FA42 + C66716BE366F0180A4001AD94C1EDDD1D88059E39258F8D85A000C83C1046070 + 84E6002F0802A9457DBEBF5DF4927FE1CC54FE4A1B848E09237E8302F8923C45 + 0579860C61AE6E6EE4C3F46FF9D24DEE9BD1EF0EFA51400DBDC436DD09A05FBF + FEE4C32FF7729324D570ECD001F287975FE04BC641AD007417027CFCFD543B1F + C44E4AB2EBFB46437702081C3C84BF5287F3C081645C7C025F6258A33B0104D8 + 290080A9520C69742780E011369727D86442F2649B53A78D8EEE0480D531F6E2 + 1F184442468EE64B0C73742500AC990B1B3B8E2FD947420A5BCF2A85AE041033 + 29914B03A5686EC28C67DBB07E8034BA12405CA2E45C558EFCCCA3E4DC9962BE + 24266C6C14F1F211BDE9363CBA11009EFCB844C9258A1C27F3F348411616C34A + 834EA0DCCF1B15DD0860647838F1F6B5BD3AFD647E2EC9CF3ACE97A46161408C + 6E0420F7F462AD6249511129CCCD965DB7104BFB104E03301F8221A01F0124D9 + 8EFF98078F59B078E90321D8C2DDC393448C97DF5CC168E842004AE91F9A7F01 + C53090ECD8303060803317CA860C0F216322C791988989645050107FF7D6A30B + 01C8A57F001D4081020DF403D0E1845391B5DCBD703159B9E665F2C6A6CD64CB + 97DF92ADDF7C4FFEF2F774F29F1FED20FFF1DEFB64ED9B7F222B9E7F89FFC95B + 8F2E042097FE81223301A035C01A395B605B9521C1C3F952CF81BEC5F88489E4 + 972B5791F55B3F251B767C4E5E78E36DB2E8D72BC8D4D973496858387171C5A2 + 1C318EEC97685E001DE99F6D01949D2D25571BB02D5E0758C5547C02AFBB6D13 + 9FDC33A3821E5E5E2475D61CB2EAE575E4FDCFD3C94B7F584FE63DB080040D1D + CA7F43FB685E001DE99F1F5F1263DEFC0B2886811E10C0ACBBEEA14EFF923CFD + E22B2465C62CAE83A947342F00A5C19B9305373B8002720342605C6C3C717317 + 2D7FB08B51E111DC464D7A47FB029049FF4041A6F8692FFA295F762D23626EF4 + 84497CA96B20D4F405342D00A5F4AFE2C279527DA9922FDD0403434566A9A114 + DDCD06945E3EE9054D0B4029FDCB9389F54A61203E2945F6DF56A2A5B9E70450 + 5956C65FDD7A342D00A5F42FFFF851FE4A8CD280908F9F3F17C7BB8A9A1600C3 + D21768967260EF5764CB86F5E4F7AB5690554B1690150BEE25CBEEBB93FCEAE7 + B793C573A673FB2D3A0ACD0A4029FDC37675724F3986875B5BE4E37477C2C00D + 99B1068163870E92671E5D4C36BCFE2AD9F3D927A4302F87545E2C2397ABAB48 + 435D1DD78F305DBFCEFD5F1C856605A094FE95149DB4C8FFADC11FB63037872F + 49D353E3017A46B302504AFFF2338FF157B6510A0308016A5718F555B42B0085 + F42F4F8500940684407CB2B127896852004AE91F727CF33780B6282D3EA5B82E + D0D16F071D8D2605A094FE21C76F6BC59138F2DCB871839CC8C9E24BD2444F98 + C8AD1E322A9A148052FA972793FE59A3D40FC01B3A0C0D1B15CD094029FD0379 + C795E3BFC04FD9F20342C0C8730535B73C1C3DF3D736FE375F92E6F83F0FD2E6 + 5D390F0710D4C4D4A97C499A4BE5E564D59207EDCAC767CCBB8B3CF1EC1ABE24 + CDD1833F90B77F27FF9DDE42B7CBC3E3929473F30993A770E7E6A83125E703BC + BFEFCA9AC3BE80060520DFFCF716460D039A124077D6FE7517A38E0A6A4A004A + E95F6F12313E8613A0D1D09400947AFFBD0966F7603B19A3A11901A849FF7A1B + 238601CD0860645898ECDBBF5B013AA052E7EFF56534330E70FF925F91058F2D + E34B621AEAEBC837FFF83B5FEA1A773DF4B0E28E61BF5FF52429CC537ECFD057 + C60134238075EF6E22E1E344C7147682432A37BCBE8E2F758DE75F7B4BB199DF + B97D2B773896126C20A8075193FE610388EE82A35695305A3F4013025093FEE5 + 494CFFB61735E71E858C1C450287E867654F77D18400947AFF17CF9DE50E49EE + 2EE536A6915B63A456C0E10250F5F64FC5EC1F3508276E2BD1134BC7F482C305 + A026FD5333FF4F2D6AC24054FC04E2E26A8CFD851D2E00A5C99F985BAFE69DBE + 5A2026A5E36F9D9D9DB9A5DE46C0F1025078FB77BAB0B047F7FBC7512AC527C4 + 47AB5A639430E0500170E9DFB828BE248D3DD3BFD4A2260CE0F5B011F61776A8 + 00D4A57F3D2F00351D41AC17B86D0CCE5AEEDB3854004ABD7FCCFC3D5590CF97 + 7A8ED3853F71C7AB2A91A0627692DE719800D4A47F2772B37BE5CC62EC21A426 + B330C22C218709404DFA67CFEC5F7BC939AADC0F181D39965B45DC97719800D4 + ECDB9B9FD57B02C83DA6DC0FE0F61776D01CC55B85C3043046E1E5CFD9D3C5E4 + 6CB1EDDDBFBB0BA682E3483925C6C6C4F15796B4B5B5F157B6C14E255AC761AF + 83B1499387A7175F125377A5B6D7FF80D82BC8CF1F47EADB064BD0A5F603421F + 26213945768F3FCC2BA8A7FF0F47D067CF0D64A8A3CF9E1BC8E85998000C0E13 + 80C1610230384C00068709C0E03001181C260083C304607098000C8EB5002437 + C9D1EB69184606C7D9D8C0C2C782005069738724BF00636FA7AA47FCFC657DD6 + E96FEB16C0D4D4DA20DA07DDE8FBE9EA11DF41E2B79C4D2D9C6F2DB657331700 + 26CB9B1A9BEA455B70EBE9142C460752EB1B5B9B1BEAE80704D0B930C23C04A0 + F2FAB5ABCD57B81A33D4CCDE61680BA9F9962D4D4DF0ED756AF0B545084001CA + 686B6E6910CD60C0F1A6582DC3D007986C332E2E812FDDA4B9A90EBEC52C1BF8 + 5A240028A3B5F2E299D35C8D19985C104D45C0D007B19392251FD8F2B212F816 + BB6CC3D7160200A86CD9FFF596031D454B7EFEE042FE8AA1756CF9EABBAF3E84 + 6F31BF0DBEE6B00E01CDC732769DAEAD2EBFC8D59A11459B14A579FC0CC79338 + 75BAE472BBEA9AF2B2CC1FD3CFD04B084032047002A0565F52922B391F1B0721 + 1B61BD9C5EC15E870B1F7F822F5972EE14B76F3E32BC166A22010054223ED4A5 + 7FBA7EF7954B959DCD84C08851A3C9438FFD9A2F31B4061ED061129B5EC397E9 + 5FBCBB8B5E220D1404C0612E002802EBB0AE661EDD73A2F442C17EAED68A7B16 + 2D25A93367F32586569836679ECDD85F7A36777FE6E13D58138F75F6F031F7F4 + 03290160D564CDE6777EFB71756B9D68423C4200B6470B8F8AE66B188E26323A + 862C5BFD9C6478860F37BFF7CCC7F4F23235F8B6330300D6DB6276FE0B75572A + DBC347C7F98D081D2FDABC0F8B215267CD2697685FF17C09FA150C473175F61D + E4B7AFA4D93CF728EBC0CECFF67CB1610FBD2CA7060174C67F602D00DCE8BC79 + E4E0AEF38929F3A37D070D19C257750211A0C7895FACE6783646CF8295498B96 + 2D274B963F657375D2E9E29CEC579FBFE3EDF6F6F6F3B4885140F4F12CF6C7B1 + B5312E3754D8DE6E6A3F9EB1BB68CACC8593DDDCC5EF17D1E44446C77242A8AE + AC20156517F83B8CDE04DBD8ADFEF734EEEF6E2B2BABAC2ABBB86EF5CCDF3536 + D66181653535E1E9B7406E676488C0D4D4547FFD5C49DE99A429F74E73767671 + E9B8650996504FB97D0E19179BC0EDE90B31E0C83646CF8191BDB8A4141AEB9F + 27F72D7E84FECD6D2FAD6F6E6A68589FB6E89533C5D9383BB7825A03358BD82F + 2097D4431C70387ED3B0D884D989BF59F3E15AFF8061C370530E2CA6C4362CD9 + 473248554505A9ADA926B5D5D5A4A9B1E7367BEACB60020EE660E0357C208DBE + F14993B9F731189257024FFEC6371F4DCB3EB6177BEB60400FE3FF68FA454F3F + 901300EE214BC08679BED4860D0A1A11BE76DD17CF8D8A888BA165BB71E429D9 + 7AA2AB836D25A7B273D2D6CC7FABA6E642112DC2F988FBC8FB3BDFFE59A3F49B + 705F68097CA8053939390DFFCDDAADBF4C4A987B978BAFAF317653D438AD57AE + B41C39BE67D7FAD7977E643299D0E1C3CA5F0CFA084FBECD274F8DD484960022 + C0E440EC993278F8C8A8B0C79FFCE3A2E8F898694E0386C8F52518BD84E97A85 + 292733FBFF366F7C66FB85928253B40A1B21D75043874FE8F1CB36BB6ADB1A7C + 0F8664134F3D4E57821002E327CC899C77DF5377864624C40506048BD24546CF + 53555D56517A32337BF767EBBFCCCDDA57882A6A703C3A7B68F2F1CE1F8E578C + B96A05208096004F3B84801E095243840674147DE227DD316AEAECA529C143C7 + 8C74F7F6F6F5F0F4F33679B87906B8F828F75E1822308AE7D4D87CB5F16A6D7D + 537DFD95B2F2E292EFBFDE92917B7C2F46DFD0C4A38387388FDE35466D85C91E + AA53307B050084D600A30F98758016010E76A78610814F94113270DF89F4EF8F + EF423C5DF97D46044FEE0D9A4B2375834331448F261D4EC6C44E381C9F28E389 + C77D21CD537CEACDE98E430421A04580C1D9681960B8EE707E87E399F3EDA743 + 041D26880086A71C866BD40B9D3CBB1C2FD0134E118400139C2D1860CEEF3A82 + 08802006C104A777C9F10C0683C16030180C06C39810F2FF64A80A533637E0C4 + 0000000049454E44AE426082} FileName = 'E:\YandexDisk\Development\Delphi\AErender Launcher\src\AErender ' + 'CC\icon_128.png' @@ -220,310 +220,310 @@ object SplashScreenForm: TSplashScreenForm PNG = { 89504E470D0A1A0A0000000D49484452000001000000010008060000005C72A8 66000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 - 25E249444154785EED9D077C5455DAFF4F1AE9994C12020124104A28A1242414 - 290151545E9445DDF5B5EDEBAAABEBA28BAEF2BA2EB8C515FDAB6B6F58B0ADBA - BE9645855DBB08882E9D9046127A27BDF7F23FCFF51CF6322433F7CEBD9364E6 - FEBE9FCFF9DCF3DC994926CAF33BCF739E73CFF163BD1B7F7195C8EFEB7895F4 - F6BF07F8061DE22A91B6E355D22EAEBD8EDEE8306AA7A73E7D476AF27E577DA2 - 37FE3DC0F7503B3839B7B43BEB53530B40AF1283DEE2308E0E2DAF01E22A9BB4 - E975EACBF711EA3E009EA433476F1357B2A94F57D9A42D5F577FB64721A7E929 - D4CEAA7666EA078A6B90E8CB265F93EFA3ABBAC9BFA727FF2EE0BB48C7958EAC - 6ED2C95B459FAEB2B5A8EEA9C580FA12BAD7EDF484A390A3126A87978E4D8D9C - BE8FAA05279C3322E2DC593F4BEADB3FB17F4C74FFBE11D1317DC3C26DB12121 - 91B1A1A1E1B17DFA84C53436D4DB6C317EF26703E031AACA3BDA4342C3AA9A9B - EBCB1B1AEACA1A1B6BCAEAEBAACA6A2BCB4BCA2B4F96949C3C74F2FB0DEFED3F - 71A4A886BFBDD9A1911848612001500B02D1AD42D09D0240BF4B36E9F86A870F - 56B590096973FB5DBCE8B6CC21C3526786C747A44604C4D27D00BC82DAB6B2A6 - FA92DA1D07F6EEFC6EED074FADCFC9FAF614BFDDC85B93AAA905412D04B2799C - EE1000E9F4847AB4974E1FC25B286F61E75D74C3F059175C3D67F090B1333A58 - D0E89898D8EEF87E007894F2F2B20ED6D19877E4D09E4D1BBE7C67DD379FBDBA - 97DFAEE7AD8137290A2406EAA880F0B81078DAC164484E4E4F7DE9F8A79D3EC2 - DE37FACE7BFE7645F2D8298BC223A207F37B00F83475B595870B7237AF7EE2E1 - EB3EA8AD28A9E4B7D462208580A20129041E4B0B3C2900E4F0F4F3D5A1BE74FC - 88C0C0C0C8C54B5FBD386DFAA5374685DB06F07B00588AEABAAAE33B367DB2EA - B9476FF8B4B5B595E60B6A799342A04E0D280AF08808784200E8675293233EB5 - D38E4FED17B73C3A23F3A26B6EB545278CE0360096A6BCF264E1FACFDE5CF9E6 - 8BF77CC74D12823ADEA4109008C888C0F494C06C015087FC32DC27C70FE72D6A - E195774FF8AF458B17F7ED37249DDB00001525A70E6E5BF3E1B3CFAE79FFB1DD - DCACE64D0A817A7E80302D1A305300D421BF9CD90FE32D2A2424D2BEE2A97577 - 46C70DB91C137B00740D4D1856961EFC70D992394F3436D654F05B2404344720 - 2B06A6A604E4AC66E0E8FC34EA47F2169D34327DF0034F6F786CD0E051734343 - C3E0FC0038817CC41E3B60CCEC79D7A6E6EEDEB8A3A2EC38393D219D5EA601E4 - 4B86D3013304403A3F85FC54D693CE6F9FFB5F374D58B2FCADA763ECF123B90D - 00D04858B82D61E67957CEAEAA2ACD3B50B483E605A4E313A68980D11159EDFC - 32E4A7893EFB8D8B9FBAE0BC85BF581E161449F74CA7B2AC8CED2FDCC32ACA4A - 7F6CA5A5AC5CD5AFADAE621D1D86FEDB00A0E0E7EFCFA26CD1CC1E1BCB5B1CB3 - C7F5FDF1AAF4E3D8B0E4D12C2A3A5ABCDB5C5A5A6AEB3EFF64D503AB9EBDE32B - 6E524A4095029912D0BC00FD23773B1D3022009D397F54606060CCEF1F587BFD - C4C9E937FBF9C5D27B4CE3F8E1436CEBA60D6CEB771BD8DEFC3C7117809EC5CF - CF9F25A78C63E9D3672AADFFC041E21573E8E8286BDFBE65CB4B0F2FBFF4F5D6 - D6D6327E8B22025344C05D01A0CF9173530A41CE4FB3FC91DCF9E31E7961EBBD - 43874FBC94DB86A1119C1C7DEB77EB15A73F71F488780580DECBA0214359C68C - 59BC65B2A491C9E2AE71F6EDDDF5F1EF6ECD7848250254252011A08941393FA0 - 0B7704803E434D3ABF32F2F31673DF83FFBC316DDAFC5B78DF30E4F86FBFF81C - CBDFBD4BDC01C0FB989031855D7DF3AF59E2B0E1E28E31B66DFE74E58ADFCD7F - 9577CB795357086475409708B8330928477EF56CBFFD86DB9E9C9779C1FCBBFD - FC8CCDF49FE4A3FCCB4F3CCAFEF6FCD3ACF4D449711700EFE4D4F163ECEBB51F - 2B578A06C222688ACC7D1206C6A48586F73FB46BEBE7C7B8291708A9AB031E15 - 00727E6A72759F32E137F7A21B522FBFFEDE87FA04445344E016D59515ECED97 - 5E602B1F79901D39B05FDC05C03738BC7F2FFBE2E3D5ACBEAE9625258F627D82 - DD7BB89506D8C12353A6559C3AB9FDE0BE5D34294823BF6CD2F9358B801E0150 - E7FDF4ED29EF8F1E969C3EE4CE656F3D1E1E6A8BE1B65B7CFFCD57EC81BB97B0 - 829CDD98B9073E4B7B7B3B2BCCCD512282418943D98073DC7BF62D2820386874 - 6A6646D6D62F3754969FA095827295A05A0434A155001CF37E727E5B444474FC - 5FFEBAEE91E8B87E6E25381D1DEDECBDD75E666F3CFB246B6DA5BF0100DFA7A5 - B999FDB0EE6B16D4278825A78CE7A3BAFEAC39B84F48E484C9178FF9FA9FAFAC - 6F6D6D962B04A9E99A0CD42A0032F497793F85FE312B9EDE78F7394347CFE67D - DD343634B0A7FFF247AE869F883B00588B9C1DDBD8A9E34759EA94735940809E - 60FC4722226CFD2766CC8BFE72EDCBDBB8A91601CDA98096DFDA59E86F5F70C5 - 928C495317DD1D1A1AAA5BBE4A4E9E602B962E61F95998E107D6E6F0FE7D2C7B - FB569636753A0B097363CD9C7FF0A8D696FAED457BB694704BAE0BD09C0A9063 - BB420A008DFE5200A2162CFCCD2D76BB5DB7F35379EFF7B7DEA8FCE10000633E - 410FD72DB8E2CE9B7997AA71E49BE4A3E4ABE4B32EFDD35504A01EFD29F75766 - FDAFB971C5ECC9332EBD96F7754123FFFDBFBD8DD55455893B0000A2A1BE9EED - F8F7263663EE3C16124A59B6762223ED09FEFE814539BBD61DE5264501EAA706 - 9DE22A02900220CB7EE13C57B1CDB9E8FA9B785F17F4073EBAFC1E383F005D50 - 565CCC1EBBEF5ED6D2221F00D4CEDCF937DC44BEC9BB140590AF92CFBA8C029C - 4500EAD19FC20A65F4BFF5EE972F4D99907909EF6B8666FB9FFACB1FB0AA0F00 - 17949514B3F2D262967EEE4C5DD581B0B0C8187BEC80935BBF5F4379046D32AA - 290A701501C8D19F04202C2C2AC63E79D665FF432FE8E1FF5E7D996DDBB45158 - 000067ACFFEC5FECD30FDF13967626675E7E3DF928EFD26C22F9AC8C02BAC4D9 - 8B243FD4A40084DFF1BFAF5D668BB0F7E37DCD6CFAE64BF6D1DB6F0A0B00A085 - BFBDF02CCBDABA5958DA20DF5CB2F4B545BC2B2703C977A51F774A5702203F44 - E13FCD282AF9FFE8313317F0AB66AA2ACAD9CB8F3D2C2C008056286D7EEEA1FB - 95B9333D8C1E3B83D273390F40BE4B3EDCA5083813007A4DCEFE87669E7FCD88 - 08BB7D20EF6BE6C3375F5316FC0000F4535D59C9FEF9FEDF85A58D487BCCC099 - E75D45BB6D5329817C977C987C59970010F49AACFD87CE9C7BF52CBAA9157A76 - 9FD63C0300DC67CDFFBDC32ACBE9F17FEDCC3C4FF1551200F25DB926A0533A7B - 41860BF41AE510144A84250E9D30955F35F3EE2B2B595B1B4D420200DCA5A9B1 - 5189A4F5903472DC147EA18940C772E059514057CA40F765FE1F9C3C6E7A7FFF - A010CD0FFC14E5E5B2CD1BBE151600C0081449EBD90DCB2F2062C4A831D368B2 - 5E4600320D388BCE6E4AA590F97FC845972E9EAE753F7F7A9C9776F201009803 - 3D46FCEEAA1785E51AF2D58B7F72DB74DEA50840CE03688A00E41BE83E850EF4 - E1E0E4D1933587FF4579396C4F7696B0000066B079FD3A65B72CAD8C1839691A - BF5004403E2CD300E20C11E82A0220C55004203E7E882D3E2A721CBDA0852D1B - 37881E00C04CB67DBF51F45C131F631F47BECBBB5200641470069D0900DD9322 - 1094317D615240643CE5112EA1F09F76F00500988F9ED5B4E4B319332E1DCABB - 720E807CFA2C7F77BC211582EE936A04C52724C62B773470ECD04165F3430080 - F914E4E4287B676A252E7E304D049200E84E01E8BE920644DBFBF7A59B5AC07A - 7F003C07AD0EDCFEC32661B9C61E9710C72F32FC279F3EC3F909970210618BD5 - BCD9271DDE0100F01C7A06595B441CF9AE4101888AD62400E525C56C5F41BEB0 - 00009E80B60F6B6A6A149673226C76B70480382D0211E1767ABCD025FB0B0B44 - 0F00E0299A9B9A349F9B11161E4DBEDBA5F3138E02406F524700012161919A04 - 804EE50500781E3A195B0BA1E18AEF2A7ECC9B14813384C0510008F906450802 - 8322A996E8123A921B00E079B40EB60141117466B97AF43FC3F989AE0440717E - BA464634D26EA32E41040040F7A075B08D8C6822DF3DEDCBA29D81A300C837C8 - 37FB6B3DE3BF1C020040B7A075B015BEEBE8FCF2AAD09573CB0F9CF166672005 - 00A07BD039D83AF5E5CE0440FD46ED025046079300003C8DCEC1D6A93F3B0BEF - E9CD9A05A0B6BA5AF400009EA4A6AA52F434E1D48F9D09802E70AC3700DD4387 - B663FF34619A000000BC0F08000016060200808581000060612000005818C7F2 - 003D3A483B8946F1D69FB7C1ABD775ACE65797FCF779B40929E88AC93333594A - 5ABAB0CCA3F8C409E5F4185461AC43746C2C5BF9FE27C272CEA2397E7456E061 - DE4EF246B57A7A96B8953705084037F1F4DBEFB3F88401C232973FDFB11847AF - 5B0833050029403761D3B6AD825BA44F9F297A00E80302D00D040505B1E0103A - AACD33A44D43F405DC0302D00D84475246E53912069DC3FAF306805E2000DD40 - 44A4A62D150C9136E55CD103403B10806E20D2461BB37896B4691000A01F0840 - 3770CED024D1F31CA3C74F64A161E1C202401B10806E60D8A831A2E739020203 - D9F8F40C6101A00D0840373062B4E70580489B8A6A00D00704C0C3C4C6C7B301 - 831385E55952A74E637E7EF85F0AB4837F2D1E66E2643AA6BD7B888AB6B361C9 - A38405806B20001E66E2E4A9A2D73DA01A00F40001F0208181416CDCA4EE9D98 - C33C00D00304C08324A78C6321A19E5B02DC1943468C6431719A4F7407160702 - E041264EE9BEFC5F4D6A0FFD5EE07D40003C88BBF9FFDEFC3CD6D6D6262CFDE0 - E120A015088087A0F29FBB2B00B7FFF01DDB57902F2CFDA44C4A67417DFA080B - 80AE8100780823E5BF829CDD2C6FD74E61E9273838848D9998262C00BA0602E0 - 21DC0DFF29F4DF979FCFF2B3DC170062D2549403816B20001EC048F9EFE0DE42 - D6D4D4A84401EDEDEDE2AE7E52B900F8F9693ED90D58140880073052FE2BC8DE - AD5C1B1B1AD8BE3DEECF03F4ED9FC006260E1116009D0301F00046CA7F34F24B - 8CA601A806005740003C8091E5BF0539D9A2C758AE5101C0AA40E0020880C918 - 29FF159F38CE2ACBCB84C558A1C17980E4941416E1E1FD08817703013019A3E5 - 3F350DF5F56C7FE11E61E9871E0D9ED0CD0F2301EF020260326685FF1223EB01 - 083C1D089C01013011A34FFFEDC9CE12BDFF6074227062C654161010202C00CE - 0402602246CA7F75B5B5ECD8A143C2FA0F7BB277B38E0EF7E701C22323D98831 - 29C2B21E247E340F42C7B20D1D91CCC6A64E625366CD6673E62F600B7E7615FB - D90DBF64BFF8CD6FD90D4BEE52CE57B01A381BD044AEB96531BBE4CAAB85A58F - 9D9B7F600FDF7BB7B0CEE4C11756B124033BFD7CF2EEDBEC9D979E1796EF4191 - 176DBB4693AF839392D8394392D8A0214395EDD843C3C2C4BB5CF3C11BAFF2B6 - 4A58BD179C0DD84B3196FF9F3901A8262F6B87E8B9479A8F2C0BA6958DFD060C - 64193366B1CBAEBD9E2DB9EF7EF6D7D7DE666F7CFA357BE49537D8EDCBFEC816 - 5E759DB2FE81467C3DCE4F0406D2F8672D20002661A4FC471476320128C93538 - 1148A3617C4282B0BC0BDADC24F3C28BD9E27BFFC05E78FF63F6D45BEFB1BBEE - 7F4809DDA7CD99CB06250EC11C870120002661A4FCA73C00E464D92F2D0F3632 - 0F40A47AC9D16174B8C9243E825F7FFB9DEC313EBA3FFFDE47ECD67B96B39917 - 5CC8A26362C5BB805940004CC248F87FA0B0407900A82BEAEB6AD981A22261B9 - 476F5E161C69B3B10B2EF909FBE393CFB1559F7CC696AE78845DB4E80A3CCBD0 - 0D40004CC068F9CF59FE2FC9DB656C1E606C6A5AB7EF4FE88CE0901036FDBC0B - D8FF72675FF9C11A76E39D4B95E3CDFCFDF14FB23BC17F6D1330BAF9A7160130 - BA1E80442A252D5D583D07ED5444CEFED23FD6B2DB97FF49894C90C3F71C1000 - 1330BAF967672B001DA145421D1D1DC2728FDEF070D0D0E12395703F38A4F744 - 23560602600246F2FF53C78FB1AA8A7261750D2D143AB4D7E03C003609010E40 - 000C62B4FC472BFDB49267300DA0052443F808DC933434D48B1EE80D40000C62 - F4ECBF9C1DDB44CF35B9062702899E7E38889E7004BD070880418C84FF841E01 - F8711EC0D87A809E2E073642007A15100003182DFF1D3B74905594950ACB3575 - 35356C7F6181B0DC6358F26866B3C708ABFB410AD0BB800018C068F92F5BC7E8 - 2FC9DEAEFF338EF4E4D1616DADADACA5A54558A0A7810018C068F92F7BFB56D1 - D38E3B9F710469009040000C6024FFA75C3E3F6B97B0B453989BCD5A9A9B85E5 - 1EE3D3272BE94B4FD11B27029B9B9AD8418365566F04FB01B80995FF9E7B57D3 - 7F9A4E29CACB65F7DD76B3B0F4B1ECD1270DCD3D102B96DE614A34E10EF4E8EE - E0A4E1C2328F9AAA2A76F2D851A59D3A4EED18ABADAE66CD5C305B79DAD1D2DC - 74BAFFE3B55911D396E616D6D6D66A78A1557781FD007A01B4D59611F4CCFE3B - E2CEDC81233DB947001D7A62060DF5756CCBC6F5ECE5C71F61B75D7539FBE5A2 - F98AA83EF7D0FDCAE61E1BBFFC5CD9682577E77665B9354DA01E3D78401188F2 - 9262565D59A94423ADAD2D5EE3FC6603017013C3F9FF0EF747DF1C93E6017A6A - 55607BBB39CEF6FA334FB0C7FFF87BF6F5DA8F59E9291AE0805E20006E60B4FC - 47F966516E8EB0F443B96A6D0D4573EE433BEB58710F3C7026100037305AFEA3 - 053D464A61745848EE4E3356055A6BDE069C0D04C00D7AA2FCE7882969008E0E - B33C10003730BEFC77BBE8B98F191381C9E3C6B3F0880861012B0201D089D1A7 - FF287737A3DE4C252EA3135FB41107AD0900D60502A01333CA7F461FE821A86C - 65C6B260CC03581B08804E8CE6FF6684FF12236B0924F43833F6E1B32EF83FAF - 03A3E53FC2CCD577393B8D8B09EDC83B7CD4186101AB0101D081D1F25FC9C913 - ACF8C471611987B6123BBC7FAFB0DC076980758100E8C08CF0DFEC25A7A63C1E - EC23478701FD40007460B4FC6764F96F5798310F90386CB852DD00D60302A011 - A3E53FC2CC094049FEEE5DCAD1624649F392A3C380B940003462B4FC47B97A75 - 6585B0CC839EAC2BCA73FFB90209E601AC09044023C697FF1A0FD5BBC28CCA02 - 9D1A141C4C5B41002B0101D08019E53F3372F5AE30435CE8C8AE31A969C20256 - 013B026960ECC43476DFE3CF08CB3D563DF1286B6CD4B71186D68A41406020FB - D5D2DF1B7EBEFFCB351F29DFD3D3FCE9A917D8A871E385E53E2F3CFC005BFFF9 - A7C2B20E66EE080401D0C035B72C66975C79B5B07C97B2E26276DB5597797C77 - 1C088031B025583763B4FCE72DFC58E918262C600520002E30A3FCE74DF4F4D1 - 61A07B8100B8C068F9CFDBE8C9CD4241F703017081D1F29FB731624C8AF28010 - B0061000279851FEF336A89260F4C463E03D40009C60F4E93F6F05AB02AD0304 - C009560BFF251332262B6B0B80EF0301708255CA7F8E84854728D10FF07D2000 - 5D60B5F29F23D832DC1A4000BAC06AE53F47500EB40610802EB06AFE2F193038 - 91F51F384858C0578100748215CB7F9D81ADC27C1F08402758B5FCE708D200DF - 0702D009560FFF256326A4B2D0B03061015F0402D009562DFF39426B01900AF9 - 36D80FC0012AFF3DF7AEA63FB94BB66C5CCF9EF8D3B21F8D1EE2E1975F678393 - 860BCB7DBEFDEC9F6CE5230F0ACB1CB01F8031B01F800731A3FC97BD6D8BB2A9 - 464FB6ACAD5BC4B731462A4F87FCFCF0CFC457C1FF5907264E3141003CB8FF9F - 5676731132039B3D86258D4C1616F03520002A7E2CFF193B2E9B8EECA6A3BB7B - 9A3DD959ACB9A94958C6C0C341BE0B04408519E53FDAA19742F09EA6A5B999E5 - 67ED149631B01EC0778100A830A3FCE789E3BFDC25CBA4348052007B6C9CB080 - 2F0101506146F9CF13C77FB98B59F30044EA54AC8DF045200002339EFEF3D4F1 - 5FEE72ECD041565E5A222C63A4E2EC409F04022030A5FCE7C1E3BFDC81E622CC - 8A02C6A76728A70701DF02022030A5FC67C2197D666396000487842A4B83816F - 0101E09851FE6B6B6D554A6FBD0D1225B3AA122807FA1E10008E19E5BFC2BC1C - E5A8EEDE464D55153B5058202C63D03C80D1F30741EF0202C031A5FCD7CBF27F - 3566A501F109096CE0E04461015F0002C031A5FCD70BF37F49D6D6CDA2671CA4 - 01BE85E505C08CF25F437D3DDB57902FACDE47515EAE69E9095605FA16961700 - 33CA7F79BB76B0B6B63661F53E5A5B5B582EFF8E66909C329E4544D2D3E2C017 - 8000F8C8D37FAED86D521AE0EFEFCF26644C1116F0762C2D006694FF88DE9CFF - 4BCC7A2E80401AE03B585A00CC28FF559695B163870F09ABF772EAD8515672F2 - 84B08C415153404080B0803763690130EBE9BFDEF0F8AF2BCC5C164C730023C6 - 8C1516F066AC2D002694FF7A73FDDF1153CB81383ACC27B0AC009875F65F8E17 - 4C004A72776EE79140BBB08C817900DFC0B2026046F9CFCCC76DBB83BADA5A56 - 949F272C639078F6ED9F202CE0AD5857002C52FE73C4AC72208128C0FBB1A400 - 9855FEEB8D8FFFBA62B749DB8513383ACCFBB1A4009851FE6B6F6F67F959BB84 - E53DD092E5FABA5A6119636CEA24161C42E7C8006FC592026046F96FDF1EF31C - A93BA125CB66552E828282584A5ABAB08037624D0130A3FCD78B76FFD58B999B - 85220DF06E2C2700A695FFBCA8FEEF88A902306D3A3609F1622C2700E34D98FC - 6B6A6A64457939C2F23E6849F089A34784650C3A2F2071F80861016FC3720210 - 141C2C7AEEF3EF75DFB0969616617927EBFEB546F48C13658B163D6D34730135 - 83A646738E3EB332963B1E9C4EBA4D1C36CCED2A006DFE71E4C07EA50AE0CD50 - D8DE7FE02066B3DBC51DF7A8AFAB6387F7EF139636468F9FC8322F9AAF9463DD - A5B2BC8CAD7EEB75657193D530F37870CB090000DE8E990260C92A0000E04720 - 0000581808000016060200808581000060612000005818080000160602008085 - 8100006061200000581808000016060200808581000060612000005818080000 - 1606020080858100006061200000581808000016060200808581000060614C13 - 009C0E0340F7E077D666DEEE639A004444D14EE200004F1315ADEF2016679826 - 00F6D8BEA20700F024D1B171A2671C6702D0219A26EC71E67D290040D744C7C4 - 889E269CFA71670220DFAC7CB0BCBC4C9308C498A84A0080AEB1C7C48A9E733A - 3ACAE8FC3AB5009CE5CB5D4500F2431D612CB846B9E3023AAE0800E079B4A600 - 35B58AEF9EF665BAE788A300C837C90FB4D7B3DA4AE58E0BE898680080E7D11A - 01B436D754F18BD328A0AB1440717EDEDA1A6BABE987B804020040F760D32800 - 75F5353478B7F1E62802A7E94A00E8034AABABA9D41401248D1C257A00004F41 - 47AA270E1B2E2CE734D49693EF9EF665DE5C0A80540929026DB57515E5FCEA92 - D8F8782E02C9C202007882B1699358685898B09C53535D51C12F8E1100B5D374 - 35092815A3ADAAAA44930010E93366891E00C013A44F9F297AAEA9AA507C570A - 00B5B3703607401F6C2D2F3D5E4637B590311D0200802799346DBAE8B9A6A2FC - 4429BFB4F246BE7CD6E84F389B035004A0E4D461FA219A183464288B4F18202C - 00809924258F623171DA57DC96141F520B00F9B46E0168D9F6C3DAC39525C5F4 - 435C420F0465200D00C023E809FFC967B7FFF0AF23BCDBC29B6601A037480120 - A76F292D3E545DD75091CFFB9AC89891297A000033493F57BB00D43494E691EF - F22E0900F9B214803344C05904A008006F4DF9B9DF6FE7574D24A78C6323C78E - 131600C00C52A79ECB06270D13966B0AB33793CF36F1E6280067E06C12903ED4 - CC5BC3976B5EDC52515171D6873B83D2806B7FB558580000A3904F5D75D3AF84 - E51AF2D5CFD6BCB085771B78231F265F967E7D069DA50004E50CD4E8C38D85F9 - 9B4F3636D61CA417B4401100E60200308759F32ED235FAB734571CD85BB0F514 - EF36F2463E2CFD993843049C4500F4012505E0ADE160C1B61DFCAA19522C7FFF - CE7E3C00402B414141ECA7BFF8A5B0B4B12F7FFB4E7EA9E74DA600E4CBD2AFCF - A02B0F950240A103FD90FA8DEBFEFE03BF6A66C0E0443667FE25C20200B8C385 - 8BAE6071F1FD84A58DF5EBDE255FA5F09F7C977C580AC059388B0068D2E07404 - F0C3860FF65595965258A1999FFECF8D2C3838445800003D848547B085575F27 - 2C6D5457969EDCBCE11FFB78570A00F970A71500C2598C4E6F3E1D01F0569795 - F5D537FCAA19DA23E0A6DF2E151600400FB72CBD974546D984A58DAC1D5F908F - D6F12653003901D82901E2DA15B4FD28BD2788B73ED9DBBF2E9E77C98DB3FB04 - 876B7B1A81434F2E353735B1829C6C710700E08A2B78F43C6FE1226169A3B6A6 - A4ECCF775FFC744B4B630937E9317E12023909D8A908389B03A026E7016836B1 - AEAEAEB27CDD17EFACE67D5DFCF74DBF52EA980000D74C99359B5DFEF3EB85A5 - 9D6F3E7FE71FE4A3BC4B8E4F3EABCEFF750900411F50CF03D00FAD79FDF9A55F - 979F3A7E94F73543D580DF2CFF131B943844DC0100740645CCBFFEDD72E6E7E7 - CC35CFA6B8F4F891375E584AE13F6D0346BEEA98FF778AABDF421F2415511604 - F156DBDEDE52B9F6A3A7DFE37D5D848685B3A52B1E611191383F0080CEA0FDFE - 973EF0300B0E091577B4F3E9074FBD47BEC9BBB5BC392E00EA12577300129A0B - 20B1A016B8276753F5ACB9D78C8BB4E9DB078C9C3F79DC78B6EDBB8DACB99904 - 0A004044DA6CEC9E07FFAA3C51AB9763470AF73CFEC0557FE35DCAFD69131075 - 0A4002D0A5086899049448115026051BEAAB2B468ECD9C1D1A1AAAEB9C22AA69 - 4EC99CC3B2B76F6535559A761B03C0A7A1557E7F78FC1976CED02471473BB4EC - F79D55BF7FE6D0FEDD54FAA3BD3B2805A00A00450014FE3B456B0420391D091C - DC97559F3EF5C2FEF1FD87EA962C8A046879E3E1FDFBD8C9A3F4C42200D664D2 - B9339491DF66D775D8C769F615FCFBDBD79EBFEB13DE9533FF94025078ED74F2 - 4FA245001C47F8D391C077EB3FD83763CE4F5322A3F41F0A1014D4879D3BE77C - A54458988B1221B01E3FB9FA3A76F35DF7B0A03E7DC41D7D9C385A5478EF92CC - 27DB5B5B68811E85FE34FA53FE4FA1BFCBD19FD01B0148942880FF62BFACEDDF - 14CD3CEFA7538375AC0D90D0534EE3D3272BBB08EDDEBA85B5B5D1F706C0B7A1 - D5B1B7DEB38CCDBFE24AC507DCA1B2ACB4F4FEA5F3FE5F65F9090AA1A9F447CF - FE3BD6FD9D8EFE84560170FC96F4839548A0BAAAA4F5F8B1BD87274E3FFFDC3E - 016181CAAB3A491C3682CDB978016B68A86787F616B18E0E97DF1B00AF83CAE1 - E72F58C87E7BFF8386F6CC68A9AC6C7CE6C95F3E9A9FB3710F3729EF97A3BFCB - 957F8EB81B014814213876784F43907F70E5C0C4F119A1A1616E495A485898B2 - E1E1B4D973597969093B7EF890780500EF8776CABAEBFE8758E685F35948A8EE - 60F9347456E747AB1F7FF1CB352F6DE626E5FD34FACBD29FD375FF9DE1AE00C8 - 1F2EAF7EB9591B4A878F4C0D4A4C4A192DEEB945A42D5A991B183729831D3F74 - 889595148B5700F03E68A4FFCD7D7F66975C79B552EA33CAD6EF3E5EFDEA7377 - ACE55D720C19FACBBABF2EE727DC19AD29FFA7CFD1F301C1BC85F366E72D8EC7 - 38092B9E58B778CCF85933B86D184A05F66467F13F7A03DBB669032B3E7142BC - 0240EF253E2181A54F9FA56C8A336ADC04B7F37C47F2766FF86ED99D739E63ED - EDE408B4E3AFACF9CB557FE4F89A26FF24EE7C33FA0C351202CAF969D952046F - D1BC9108F4BBF3776F5D993269DEC298985873FE720E89C19103FBB8106CE482 - B0911D282A10AF00D0F30C1D91CC1D7EA6E2F854CF37CBE9090AFB77EFFCFCA3 - A71EBCEE3DEEFC34E3AF767EF5ACBFAED19F70F75BAA458022017AE8FF3F22C0 - 58DFCBAF593EFB273FBFE386883EB11425984E69F129B6BF600FCD86B272DE2A - A895FEE75A5B43911100E6406B57EC7171CA21B8F21AC31B1DD54DFBF5EBDDB4 - 432BB5CD654D1FBDF9F8AB1FBEFDE0B7DCA49C9F9C5F2EF9A5D57EBAF37E3546 - 644A8A00CD23C874804480121D5A17D077CACC4529BFBE6BE5ED51B678F75639 - 18A0A3435724048053F43E9C6306D555C5E5CF3E7AF3335B377D9CC34D727E9A - F1978B7D343DEDE70A230240A84580D201190944F2A6CC0B0C1C3C3A71D98AD5 - B7270C4AD676A42900801D3F5AB0F7C1658B9E3976389FCA6132E4A7529F69CE - 4F182D034AE417A06197BED4E9565355DAF8D5BFDED83E72CCD498F8FE4312CD - CC8D00F03568AE2B7BE7B71B962FC97CBAA2FC043D762F4B7D72A18FACF51B76 - 7EC22C0120E497711481D6B6B6E6D66FBF7823FBE4D17D4583868CE91F658BD3 - BD7418005FE7E8E13D45AB9EBD63E51B2BEF5EDBD6D642653E727E1AF9C9F9D5 - 5B7CB99DF33B62E6702CD301591D9015022A13524A4073039416D817FEECAEC9 - 0B2EBBE3B2B87E8312B80D80A5395572F4F8A71F3CB9FAE3F71EA3C33CC8E1A9 - 51AE2F37F79033FDA63A3F61763C2E45809A7A72500A01ED06422DDADF3FC87E - ED4D2B3233E7FD7C414C6C3F1206002C4579D9A98AF55FBCB9F6AD5796AD6F6F - 6F21A7A7D97D1AED65B84F8E2F6BFCEA90DF14E727CC1600420A0021270765A9 - 90D64052A3888084C01616668BB9E9F6672E4CCDB86856746C5F5D1B8C00E08D - 54969594EEDCFAD986579EB9FDF3FAFA2ACAEF69B427A797CFF25393253E99EF - 13A63A3FE10901904821A09440AE17A0E71ED51181AC189018444C9A764952E6 - 9CABD293474D1BD77750E239983004BE004DEC151F3D78A470CFBFB3D7AFFBFB - B6ED3FACA1CD3B6884974E4F33FBEA119F96F5CAFABEA921BF239EF630290204 - 45033222904240D1801403D9947B4386A7F69B77C94D6963C7674E1838A8EFF0 - 80C07833272C01F0286DADC56DC78E14EFCDCDDE90F5C59A57761CDCBB9356F0 - 9183D3E84ECE2E9BBC271D5F8EF81E1BF5D574C7102B7F8714038A061C854046 - 059426C85481AE742F34B6EFA0C80969E79FD3B75F62AC2D2E21C66EEF1B1D16 - 1967B345C644850547474584DA2243EC11E18818407740237A63456D5D6D4355 - 4D7D5365755D4D7975754D69554545496555E989F2925387CAB2767C75A4ACE4 - 288DEEE4E0D428A497A1BDB4C9E91D1DDF71C4F798F313DDE931CE8480D203BA - 9210A845814440DA7495EF934D46157EFEFE41FCDA217FB6FC5D009889704CBF - 8EF6F616392927476B394B4F8DC277726AE9DC8ECE4E57F9BE1E717C494F388A - FC9DD251E51C81140379950E2FE70ED44EAF767EF9796AF26702E029A493CAFC - 9C9A14014721206727279782209D5DEDF43DE2F8929E7416F9BBE5553AB01403 - E9DC6AC777747869D3E7E46701F0346AA7558B80BAAF1603F53DEACBCF113DE2 - F812E97C3D8D746089A3534B9B1C5EDE97AFA96D6A00781AE9FCEA261D9B1A39 - BABCA7BE2F9D9E90F77A94DEE830F23BA9BF1BF5E5E8AE7EBDB3F7128E360066 - E0E8B0D2563BB3BC4AC79738BEDE2BE8ED8EA2FE7ECEBE2B1C1EF404CE9CB933 - E707000000000000000000000000000000000000000000000000000000000030 - 0063FF1FAB803D3AE7B2ABCC0000000049454E44AE426082} + 25E549444154785EED9D077C5455DAFF4F1A492665326924B44028A184929050 + A40444117D511675D7D7B6AFABAEAE8B2EBACAEBBAE01657F4AFAEBD612FABAE + AF652DB06B1701D1A504086990D0420DE9BD97FF7D2EE7B0972199B977EE9D49 + 66EEEFFBF99CCF3DCF9D9964A23CBFF33CE739F71C3FD6BFF1E75781F8BEF657 + 417FFF7B806FD0CDAF0261DB5F055DFCDAEFE88F0EA3747AEAD377A426EEF7D6 + 27FAE3DF037C0FA58393730BBBA73E35A500F42B31E82F0E63EFD0E21AC0AFA2 + 099B5EA7BE781FA1EC03E04E7A72F44E7E259BFA74154DD8E275E567FB14729A + BE42E9AC4A67A67E20BF06F1BE68E235F13EBA2A9BF87BFAF2EF02BE8B705CE1 + C8CA269CBC83F7E92A5ABBE29E520CA82FA07B1EA72F1C851C95503ABC706C6A + E4F403142D3871E8E8F073E6FE2C392E2129213A2A212E3C2A3ACE12668D0909 + 8988090D0D8B1930C012DDD2D860B5C6FA899F0D80DBA8ADE8EE0A090BAF6D6B + 6BAA6A6E6EAC6C69A9AF6C6AACAD6CA8A92AAFAA292D2F2F2D29FD61E37B074E + 1C29AE97DEDE66D7480C84309000280581F0A810785200E87789261C5FE9F0C1 + 8A1632397DC1C00B97DE9A357C64DA9CB0F8F0B4F08018BA0F8057D0D059D9DA + 54DEB0E3E0BE9DDFAFFBE0C90D7939DF9D946EB748AD55D19482A01402D1DC8E + 270440383DA11CED85D387482D546A9673175D3F6AEEF957CD1F367CC2ECCEAE + 8071B1B1719EF87E00B8958A8AF26E7FBFB68223257B366FFCEA9DF5DF7EFEEA + 3EE97693D49AA5264481C4401915106E1702773B9808C9C9E9A92F1CFFB4D387 + DBE2A2EEB8FB6F97A74C98BE342C3C6A98740F009FA6B1A1E6F0DEFC2D1F3DFE + D0B51F345497D748B79462208480A20121046E4B0BDC2900E4F0F4F395A1BE70 + FCF0C0C0C088652B5EBD307DD625374486590749F7003015758DB5C7776CFEF4 + 95671FB9FEB38E8E0E9A2F68909A1002656A4051805B44C01D02403F939A18F1 + A99D767C6ABFB8F991D9598BAEBEC51A95385AB20130355535A5451B3E7F73CD + 9B2FDCFDBD649210344A4D0801898088080C4F098C160065C82FC27D72FC30A9 + 452EB9E2AEC9FFB574D9B2B881C333241B00A0A0FCE4A1ED6B3F7CE699B5EF3F + BA5B32EBA4268440393F4018160D182900CA905FCCEC5BA416191212615BFDE4 + FA3B22A3875D86893D007A87260CEBAA0E7FB872F9FCC75B5AEAABA55B240434 + 47202A0686A604E4AC4660EFFC34EA47482D2A794CC6B0FB9FDAF8E890616317 + 582C61707E001C403E628B19347EDEC26BD2F2776FDA515D799C9C9E104E2FD2 + 00F225DDE9801102209C9F427E2AEB09E7B72DF8AF1B272F5FF5D653D1B6F831 + 920D00508925CC9A38E7DC2BE6D5D656141C2CDE41F302C2F109C34440EF88AC + 747E11F2D3449FED86654F9E7FEE925FACB20445D03DC3A9A9AC64078AF6B0EA + CA8A53ADA2825529FA0D75B5ACBB5BD77F1B0064FCFCFD59A4358AD96262A416 + CB6CB171A7AE723F968D4C19C722A3A2F8BB8DA5BDBDA1F18B4F5FB9FF95676E + FF5A322925A04A814809685E80FE91BB9C0EE811809E9C3F32303030FAF7F7AF + BB6ECAB4F49BFCFCE2E83D8671FC7009DBB67923DBF6FD46B6AFB080DF05A06F + F1F3F36729A91359C6AC39724B183C84BF620CDDDDE55DD95BB7BFF8D0AA4B5E + EFE8E8A8946E5144608808B82A00F439726E4A21C8F969963F4272FED8879FDF + 76CF8851532E916CDDD0084E8EBEEDFB0DB2D39F387A84BF0240FF65C8F0112C + 73F65CA965B1E43129FCAE7EF6EFDBF5C9EF6EC97C50210254252011A0894131 + 3FA0095704803E434D38BF3CF24B2DFADE07FE7943FACC8B6E96FABA21C77FFB + 856759E1EE5DFC0E00DEC7E4CCE9ECAA9B7ECD92468EE277F4B17DCB676B56FF + EEA257A56E95D4941502511DD02402AE4C028A915F39DB6FBBFED62716669DBF + E82E3F3F7D33FDA5D228FFD2E38FB0BF3DF714AB3859CAEF02E09D9C3C7E8C7D + B3EE13F94AD180259CA6C85C277170547A685862C9AE6D5F1C934CB14048591D + 70AB0090F35313ABFBE409BF058BAE4FBBECBA7B1E1C1060A388C025EA6AAAD9 + DB2F3ECFD63CFC003B72F000BF0B806F70F8C03EF6E5271FB1A6C606969C3296 + 0D0876EDE1561A60878D499D597DB234FBD0FE5D34294823BF68C2F9558B8016 + 0150E6FDF4ED29EF8F1A999231FC8E956F3D16166A8D966C97F8E1DBAFD9FD77 + 2D677BF37663E61EF82C5D5D5DAC283F4F8E0886248D608386BAF6EC5B504070 + D0B8B4ACCC9C6D5F6DACA93A412B05C52A41A508A842AD00D8E7FDE4FCD6F0F0 + A8F8BFFC75FDC351B1035D4A70BABBBBD87BAFBDC4DE78E609D6D1417F0300BE + 4F7B5B1BFB71FD372C6840104B499D248DEADAB3E6E001211193A75D38FE9B7F + BEBCA1A3A34DAC10A4A6693250AD0088D05FE4FD14FA47AF7E6AD35D43478C9B + 27F535D3D2DCCC9EFACB1F2535FC94DF01C05CE4EDD8CE4E1E3FCAD2A69FC302 + 02B404E3A7080FB7264CC95C18F5D5BA97B64BA6520454A7026A7E6B4FA1BF6D + F1E5CB33D3A62DB9CB62B16896AFF2D2136CF58AE5AC300733FCC0DC1C3EB09F + E5666F63E93366B1108BF635735D2C686C67477376F19EADE59229D605A84E05 + C8B19D210480467F2100918B97FCE6E6989818CDCE4FE5BDDFDF7283FC870300 + F4F9043D5CB7F8F23B6E92BA548D23DF241F255F259F75EA9FCE2200E5E84FB9 + BF3CEB7FF50DABE74D9B7DC935525F1334F2DFF7DB5B597D6D2DBF0300209A9B + 9AD88E7F6F66B3172C6421A19465AB2722C296E8EF1F589CB76BFD51C9A42840 + F9D4A0439C4500420044D92F4CCA55ACF3175D77A3D4D704FD818FACBA1BCE0F + 402F549695B147EFBD87B5B78B0700D5B3E0A2EB6F24DF94BA140590AF92CF3A + 8D021C4500CAD19FC20A79F4BFE5AE972E499D9C75B1D4570DCDF63FF9973F60 + 551F004EA82C2F635515652CE39C399AAA03164B44B42D6650E9B61FD6521E41 + 9B8CAA8A029C450062F42701B05822A36DD3E65EFA3FF48216FEEFD597D8F6CD + 9BB8050070C486CFFFC53EFBF03D6EA9675AD665D7918F4A5D9A4D249F155140 + AF387A91E4879A1080B0DBFFF7B54BADE1B681525F359BBFFD8A7DFCF69BDC02 + 00A8E16FCF3FC372B66DE1963AC83797AF786DA9D4159381E4BBC28F7BA43701 + 101FA2F09F6614E5FC7FDCF8398BA5AB6A6AABABD84B8F3EC42D00805A286D7E + F6C1FBE4B9332D8C9B309BD273310F40BE4B3EDCAB083812007A4DCCFE87669D + 77F5E8709B6DB0D457CD876FBE262FF8010068A7AEA686FDF3FDBF734B1D11B6 + E8C173CEBD9276DBA65202F92EF930F9B2260120E83551FB0F9DB3E0AAB97453 + 2DF4EC3EAD790600B8CEDAFF7B87D554D1E3FFEA9973AEECAB2400E4BB624D40 + 8FF4F4820817E835CA212894B0248D983C43BAAAE6DD97D7B0CE4E9A840400B8 + 4A6B4B8B1C496B2179CCC4E9D2852602EDCB81674501BD2903DD17F97F70CAC4 + 59092C6080EA077E8A0BF2D9968DDF710B00A0078AA4B5EC86D5ED67193D76FC + 4C9AAC1711804803CEA2A79B422944FE1FB2E89265B3D4EEE74F8FF3D24E3E00 + 0063A0C788DF7DE5056E39877CF5C29FDC3A4BEA520420E601544500E20D749F + 4207FA7070CAB869AAC3FFE2823CB62737875B000023D8B261BDBC5B965A468F + 993A53BA5004403E2CD200E20C11E82D0220C59005203E7EB8353E326C22BDA0 + 86AD9B36F21E00C048B6FFB089F79C131F6D9D48BE2B7585008828E00C7A1200 + BA2744202873D692E4808804CA239C42E13FEDE00B00301E2DAB69C96733675F + 3242EA8A3900F2E9B3FCDDFE865008BA4FAA11149F98142FDF51C1B19243F2E6 + 870000E3D99B9727EF9DA996D8F86134114802A03905A0FB721A10654B88A39B + 6AC07A7F00DC07AD0ECCFE7133B79C638B4D8C952E22FC279F3EC3F909A70210 + 6E8D51BDD9271DDE0100701F5A06596B782CF9AE4E01888C52250055E5656CFF + DE426E0100DC016D1FD6DADAC22DC7845B6D2E0900715A04C2C36CF478A1530E + 14EDE53D0080BB686B6D557D6E86252C8A7CB757E727EC0580DEA48C0002422C + 11AA04804EE50500B81F3A195B0DA161B2EFCA7E2C352102670881BD0010E20D + B210040645502DD12974243700C0FDA81D6C0382C2E9CC72E5E87F86F313BD09 + 80ECFC748D086FA2DD469D82080000CFA076B08D086F26DF3DEDCBBC9D81BD00 + 88378837FBAB3DE3BF0A02008047503BD872DFB5777E7195E9CDB9C507CE78B3 + 23900200E019340EB60E7DB9270150BE51BD0054D2C124000077A371B075E8CF + 8EC27B7AB36A0168A8ABE33D00803BA9AFADE13D5538F4634702A0091CEB0D80 + 67E85677EC9F2A0C13000080F7010100C0C440000030311000004C0C04000013 + 635F1EA047076927D148A925486DD847EBBB3F92AE4EF9EF73691352D01BD3E6 + 64B1D4F40C6E1947D98913F2E931A8C29887A89818B6E6FD4FB9E598A5F3FDE8 + ACC0C3522B951AD5EAE959E20EA9C940003CC4536FBFCFE2130771CB58FE7CFB + 321CBD6E228C1400A4001EC2AA6E5B0597C8983587F700D00604C003040505B1 + E0103AAACD3DA4CF44F4055C0302E001C22228A3721F894386B204A901A01508 + 8007088F50B5A5822ED2A79FC37B00A80702E00122ACB4318B7B499F090100DA + 81007880A1239279CF7D8C9B3485855AC2B805803A20001E60E4D8F1BCE73E02 + 0203D9A48C4C6E01A00E088007183DCEFD0240A4CF403500680302E06662E2E3 + D9A06149DC722F693366323F3FFC2F05EAC1BF163733651A1DD3EE1922A36C6C + 64CA586E01E01C08809B99326D06EF79065403801620006E243030884D9CEAD9 + 8939CC03002D4000DC484AEA441612EABE25C03D317CF418161DABFA44776072 + 20006E64CA74CFE5FF4AD2FAE8F702EF0302E0465CCDFFF71516B0CECE4E6E69 + 070F0701B54000DC0495FF5C5D0198FDE3F76CFFDE426E6927756A060B1A3080 + 5B00F40E04C04DE829FFEDCDDBCD0A76EDE49676828343D8F829E9DC02A07720 + 006EC2D5F09F42FFFD8585AC30C7750120A6CE403910380702E006F494FF0EED + 2B62ADAD2D7214D0D5D5C5EF6A274D12003F3FD527BB0193020170037ACA7F7B + 7377CBD796E666B67F8FEBF3007109896C70D2706E01D033100037A0A7FC4723 + BF406F1A806A00700604C00DE859FEBB372F97F718CBD72B005815089C000130 + 183DE5BFB213C7594D5525B7182BD2390F90929ACAC2DDBC1F21F06E200006A3 + B7FCA7A4B9A9891D28DAC32DEDD0A3C1933DFC3012F02E2000066354F82FD0B3 + 1E80C0D381C011100003D1FBF4DF9EDC1CDEFB0F7A2702A764CE60010101DC02 + E04C200006A2A7FCD7D8D0C08E959470EB3FECC9DDCDBABB5D9F07088B8860A3 + C7A772CB7C90F8D13C081DCB3662740A9B9036954D9F3B8FCDBF68315BFCB32B + D9CFAEFF25FBC56F7ECBAE5F7EA77CBE82D9C0D9800672F5CDCBD8C5575CC52D + 6DECDCF2237BE89EBBB875260F3CFF0A4BD6B1D3CFA7EFBECDDE79F1396EF91E + 1479D1B66B34F93A2C39990D1D9ECC860C1F216FC71E6AB1F07739E783375E95 + DA2BDCEABFE06CC07E8ABEFCFFCC09402505393B78CF35D27D645930AD6C1C38 + 6830CB9C3D975D7ACD756CF9BDF7B1BFBEF6367BE3B36FD8C32FBFC16E5BF947 + B6E4CA6BE5F50F34E26B717E223090C63F73010130083DE53FA2A887094041BE + CE89401A0DE31313B9E55DD0E62659175CC896DDF307F6FCFB9FB027DF7A8FDD + 79DF8372E83E73FE0236246938E63874000130083DE53FF9012007CB7E6979B0 + 9E790022CD4B8E0EA3C34DA64A23F875B7DDC11E9546F7E7DEFB98DD72F72A36 + E7FC0B5854740C7F17300A088041E809FF0F16ED951F00EA8DA6C60676B0B898 + 5BAED19F97054758ADECFC8B7FC2FEF8C4B3EC954F3F672B563FCC162DBD1CCF + 327800088001E82DFF39CAFF0505BBF4CD034C484BF7F8FE848E080E0961B3CE + 3D9FFDAFE4EC6B3E58CB6EB863857CBC99BF3FFE497A12FCD73600BD9B7FAA11 + 00BDEB0148A452D333B8D577D04E45E4EC2FFE631DBB6DD59FE4C804397CDF01 + 013000BD9B7FF6B402D01E5A24D4DDDDCD2DD7E80F0F078D1835460EF78343FA + 4F346266200006A027FF3F79FC18ABADAEE256EFD042A1927D3AE701B04908B0 + 0302A013BDE53F5AE9A796029D69002D20192E8DC07D49737313EF81FE000440 + 277ACFFECBDBB19DF79C93AF732290E8EB8783E80947D07F8000E8444FF84F68 + 118053F300FAD603F47539B00502D0AF8000E8406FF9EF58C921565D59C12DE7 + 34D6D7B303457BB9E51A2353C631AB2D9A5B9E072940FF0202A003BDE5BF5C0D + A3BF20375BFB67ECE9CBA3C33A3B3A587B7B3BB7405F0301D081DEF25F6EF636 + DE538F2B9FB107690010400074A027FFA75CBE306717B7D453949FCBDADBDAB8 + E51A9332A6C9E94B5FD11F2702DB5A5BD9219D65566F04FB01B80895FF9E7D57 + D57F9A1E292EC867F7DE7A13B7B4B1F2912774CD3D10AB57DC6E4834E10AF4E8 + EEB0E451DC328EFADA5A567AECA8DC4E1EA7768C35D4D5B13649303BA4B4A3BD + ADF574FFD4B54D16D3F6B676D6D9D9A17BA195A7C07E00FD00DA6A4B0F5A66FF + ED7165EEC09EBEDC23800E3D3182E6A646B675D306F6D2630FB35BAFBC8CFD72 + E945B2A83EFBE07DF2E61E9BBEFA42DE68257F67B6BCDC9A26508F1E3A280B44 + 557919ABABA991A3918E8E76AF717EA38100B888EEFC7F87EBA36F9E41F3007D + B52AB0ABCB18677BFDE9C7D9637FFC3DFB66DD27ACE2240D70402B100017D05B + FEA37CB3383F8F5BDAA15CB5A19EA239D7A19D75CCB8071E381308800BE82DFF + D1821E3DA5303A2C247FA711AB02CD356F03CE0602E0027D51FEB3C790340047 + 87991E08800BE85FFE9BCD7BAE63C44460CAC4492C2C3C9C5BC08C400034A2F7 + E93FCADD8DA83753894BEFC4176DC4416B028079810068C488F29FDE077A082A + 5B19B12C18F300E60602A011BDF9BF11E1BF40CF5A02013DCE8C7DF8CC0BFECF + 6B406FF98F3072F55DDE4EFD62423BF28E1A3B9E5BC06C400034A0B7FC575E7A + 82959D38CE2DFDD05662870FECE396EB200D302F10000D1811FE1BBDE4D490C7 + 837DE4E830A01D088006F496FFF42CFFED0D23E60192468E92AB1BC07C400054 + A2B7FC471839012828DCBD4B3E5A4C2FE95E727418301608804AF496FF2857AF + ABA9E69671D09375C505AE3F5720C03C80398100A844FFF25FFDA17A6F185159 + A053838283692B08602620002A30A2FC6744AEDE1B46880B1DD9353E2D9D5BC0 + 2C604720154C9892CEEE7DEC696EB9C62B8F3FC25A5AB46D84A1B662101018C8 + 7EB5E2F7BA9FEFFF6AEDC7F2F774377F7AF2793676E2246EB9CEF30FDDCF367C + F119B7CC83913B0241005470F5CDCBD8C5575CC52DDFA5B2AC8CDD7AE5A56EDF + 1D0702A00F6C09E661F496FFBC8553958E91DC02660002E00423CA7FDE445F1F + 1D063C0B04C0097ACB7FDE465F6E160A3C0F04C0097ACB7FDEC6E8F1A9F20342 + C01C40001C6044F9CFDBA04A82DE138F81F700017080DEA7FFBC15AC0A340F10 + 0007982DFC174CCE9C26AF2D00BE0F04C0016629FFD963090B97A31FE0FB4000 + 7AC16CE53F7BB065B8398000F482D9CA7FF6A01C680E2000BD60D6FC5F306858 + 124B183C845BC0578100F48019CB7F3D81ADC27C1F08400F98B5FC670FD200DF + 0702D003660FFF05E327A7B1508B855BC0178100F48059CB7FF6D05A00A442BE + 0DF603B083CA7FCFBEABEA4FEE95AD9B36B0C7FFB4F294D1473CF4D2EB6C58F2 + 286EB9CE779FFF93AD79F8016E1903F603D007F60370234694FF72B76F9537D5 + E8CB96B36D2BFF36FA4893D2213F3FFC33F155F07FD68E29D30D100037EEFFA7 + 96DD92081981D516CD92C7A4700BF81A100005A7CA7FFA8ECBA623BBE9E8EEBE + 664F6E0E6B6B6DE5963EF07090EF0201506044F98F76E8A510BCAF696F6B6385 + 393BB9A50FAC07F05D20000A8C28FFB9E3F82F57C931280DA014C01613CB2DE0 + 4B4000141851FE73C7F15FAE62D43C009136036B237C110800C788A7FFDC75FC + 97AB1C2B39C4AA2ACAB9A58F349C1DE8934000388694FFDC78FC972BD05C8451 + 51C0A48C4CF9F420E05B4000388694FF0C38A3CF688C1280E09050796930F02D + 2000124694FF3A3B3AE4D25B7F8344C9A8AA04CA81BE070440C288F25F51419E + 7C54777FA3BEB6961D2CDACB2D7DD03C80DEF30741FF0202206148F9AF9FE5FF + 4A8C4A03E21313D9E06149DC02BE000440C290F25F3FCCFF0539DBB6F09E7E90 + 06F816A6170023CA7FCD4D4D6CFFDE426EF53F8A0BF20D4B4FB02AD0B730BD00 + 1851FE2BD8B58375767672ABFFD1D1D1CEF2A5EF680429A9935878043D2D0E7C + 0108808F3CFDE78CDD06A501FEFEFE6C72E6746E016FC7D4026044F98FE8CFF9 + BFC0A8E70208A401BE83A905C088F25F4D65253B76B8845BFD9793C78EB2F2D2 + 13DCD207454D010101DC02DE8CA905C0A8A7FFFAC3E3BFCE30725930CD018C1E + 3F815BC09B31B7001850FEEBCFF57F7B0C2D07E2E8309FC0B40260D4D97F795E + 300128C8DF992D45025DDCD207E6017C03D30A8011E53F231FB7F5048D0D0DAC + B8B0805BFA20F18C4B48E416F056CC2B002629FFD9635439904014E0FD985200 + 8C2AFFF5C7C77F9DB1DBA0EDC2091C1DE6FD9852008C28FF757575B1C29C5DDC + F21E68C972536303B7F431216D2A0B0EA1736480B7624A0130A2FCB77F8F718E + E44968C9B251958BA0A020969A9EC12DE08D9853008C28FFF5A3DD7FB562E466 + A14803BC1BD3098061E53F2FAAFFDB63A800CC9C854D42BC18D309C0240326FF + 5A5B5B5871411EB7BC0F5A127CE2E8116EE983CE0B481A359A5BC0DB309D0004 + 0507F39EEBFC7BFDB7ACBDBD9D5BDEC9FA7FADE53DFD445AA3784F1D6D92801A + 416B8B31479F9919D31D0F4E27DD268D1CE972158036FF3872F0805C05F06628 + 6C4F183C84596D367EC7359A1A1BD9E103FBB9A58E7193A6B0AC4517C9E55857 + A9A9AA641FBDF5BABCB8C96C18793CB8E90400006FC748013065150000700A08 + 0000260602008089810000606220000098180800002606020080898100006062 + 2000009818080000260602008089810000606220000098180800002606020080 + 898100006062200000981808000026060200808981000060622000009818C304 + 00A7C300E019FCCEDACCDB750C1380F048DA491C00E06E22A3B41DC4E208C304 + C01613C77B000077121513CB7BFA712400DDBCA9C2166BDC970200F44E547434 + EFA9C2A11FF72400E2CDF2072B2ACA558940B481AA0400E81D5B740CEF39A6BB + BB9CCEAF530AC059BEDC5B04203ED41DEE1F5A2FDF71021D570400703F6A5380 + FA06D9774FFB32DDB3C75E00C49BC407BA9A58438D7CC709744C3400C0FDA88D + 003ADAEA6BA58BC328A0B71440767EA975B634D4D10F710A040000CF60552900 + 8D4DF53478774ACD5E044ED39B00D007E4D6585FA32A02481E3396F70000EE82 + 8E544F1A398A5B8E696EA822DF3DEDCB52732A004225840874363456574957A7 + C4C4C74B2290C22D00803B98903E95855A2CDC724C7D5D75B574B18F00A89DA6 + B74940A1189DB5B5E5AA0480C8983D97F70000EE2063D61CDE734E6DB5ECBB42 + 00A89D85A33900FA604755C5F14ABAA986CC59100000DCC9D499B378CF39D555 + 272AA44B87D4C897CF1AFD09477300B200949F3C4C3F441543868F60F18983B8 + 05003092E494B12C3A56FD8ADBF2B212A500904F6B1680F6ED3FAE3B5C73B294 + 7E8853E881A04CA40100B8052DE13FF96CF68FFF3A2275DBA5A65A00E80D4200 + C8E9DB2BCA4AEA1A5B6B0BA5BE2A326767F11E00C04832CE512F00F5AD5505E4 + BB529704807C5908C01922E028029005406AAD85F93F644B5755A4A44E646326 + 4CE41600C008D2669CC386258FE496738A72B790CFB64ACD5E00CEC0D124207D + A84D6ACD5FAD7D616B6565E5591FEE094A03AEF9D5326E0100F4423E75E58DBF + E29673C8573F5FFBFC56A9DB2C35F261F265E1D767D0530A4050CE408D3EDC52 + 54B8A5B4ADADF110BDA0068A003017008031CC5DB848D3E8DFD9517B70DFDE6D + 27A56E8BD4C887853F13678880A308803E20A700526B3EB477FB0EE9AA1A522C + 7FFF9E7E3C00402D414141ECA7BFF825B7D4B1BF307BA77469929A4801C89785 + 5F9F416F1E2A04804207FA214D9BD6FFFD47E9AA9A41C392D8FC8B2EE61600C0 + 152E587A398B8D1FC82D756C58FF2EF92A85FFE4BBE4C34200CEC25104409306 + A723801F377EB0BFB6A282C20AD5FCF47F6E60C1C121DC020068C11216CE965C + 752DB7D451575351BA65E33FF64B5D2100E4C33D56000847313ABDF9740420B5 + C69C9CAFBF95AEAAA13D026EFCED0A6E0100B470F38A7B5844A4955BEAC8D9F1 + 25F968A3D4440A2026007B24805F7B83B61FA5F704496D406EF637650B2FBE61 + DE80E030754F2348D0934B6DADAD6C6F5E2EBF030070C6E552F4BC70C9526EA9 + A3A1BEBCF2CF775DF8547B7B4BB964D263FC24046212B04711703407404DCC03 + D06C626363634DD5FA2FDFF948EA6BE2BF6FFC955CC704003867FADC79ECB29F + 5FC72DF57CFBC53BFF201F95BAE4F8E4B3CAFC5F930010F401E53C00FDD0FAD7 + 9F5BF14DD5C9E347A5BE6AA81AF09B557F62439286F33B00809EA088F9D7BF5B + C5FCFC1CB9E6D994551C3FF2C6F32B28FCA76DC0C857EDF3FF1E71F65BE883A4 + 22F28220A9357475B5D7ACFBF8A9F7A4BE26422D616CC5EA87597804CE0F00A0 + 2768BFFF15F73FC4824342F91DF57CF6C193EF916F4ADD06A9D92F00EA156773 + 00029A0B20B1A016B8276F73DDDC05574F8CB06ADB078C9C3F65E224B6FDFB4D + ACAD8D040A00404458ADECEE07FE2A3F51AB9563478AF63C76FF957F93BA94FB + D32620CA148004A05711503309281022204F0A3637D5558F1A37679EC562D174 + 4E11D534A767CD67B9D9DB587DADAADDC600F0696895DF1F1E7B9A0D1D91CCEF + A88796FDFEFDD5954F971CD84DA53FDABB835200AA00500440E1BF43D4460082 + D391C0A1FD394D99331725C4278CD02C591409D0F2C6C307F6B3D2A3F4C42200 + E664EA39B3E591DF6AD374D8C7690E146DF9EEB5E7EEFC54EA8A997F4A0128BC + 7638F927502300F623FCE948E0FB0D1FEC9F3DFFA7A91191DA0F05080A1AC0CE + 997F9E5C222CCA478910988F9F5C752DBBE9CEBB59D08001FC8E364E1C2D2EBA + 6779D6135D1DEDB4408F427F1AFD29FFA7D0DFE9E84F688D0004721420FD62BF + 9CEC6F8BE79CFBD319C11AD60608E829A74919D3E45D84766FDBCA3A3BE97B03 + E0DBD0EAD85BEE5EC92EBAFC0AD9075CA1A6B2A2E2BE150BFF5F4DD5090AA1A9 + F447CFFEDBD7FD1D8EFE845A01B0FF96F483E548A0AEB6BCE3F8B17D87A7CC3A + EF9C01019640F9558D248D1CCDE65FB898353737B1927DC5ACBBDBE9F706C0EB + A072F8798B97B0DFDEF780AE3D33DA6B6A5A9E7EE2978F14E66DDA239994F78B + D1DFE9CA3F7B5C8D0004B2101C3BBCA739C83FB82671686AA6C512E692A48558 + 2CF2868733E72D605515E5ECF8E112FE0A00DE0FED9475E77D0FB2AC0B2E6221 + A19A83E5D3D0599D9F7CFCF80B5FAD7D718B6452DE4FA3BF28FD395CF7DF13AE + 0A80F8E1E2EA979FB3B162744A7A505272EA387ECF2522AC51F2DCC0C4A999EC + 784909AB2C2FE3AF00E07DD048FF9B7BFFCC2EBEE22AB9D4A797ED9B3FFDE8D5 + 676F5F2775C93144E82FEAFE9A9C9F7065B4A6FC9F3E47CF07044B2D4C6A36A9 + C54A314EE2EAC7D72F1B3F69EE6CC9D60DA5027B7273D8B6EF374A7FF8465676 + E2047F0580FE4B7C6222CB983557DE1467ECC4C92EE7F9F614ECDEF8FDCA3BE6 + 3FCBBABAC81168C75F51F317ABFEC8F1554DFE095CF966F4196A240494F3D3B2 + A570A945498D4460E01DBF7BEB8AF169E72D898D8D33E62F972031387270BF24 + 049B2441D8C40E16EFE5AF00D0F78C189D2239FC1CD9F1A99E6F94D31314F6E7 + E57CF5F1930F5CFB9EE4FC34E3AF747EE5ACBFA6D19F70F55B2A458022017AE8 + FF3F22C058DC6557AF9AF7939FDF7E7DF880188A120CA7A2EC243BB0770FCD86 + B22AA95553ABF8CFB5A19E2223008C81D6AED86263E54370C5355A6A745437ED + D7AF75D30EB534B455B67EFCE663AF7EF8F603DF4926E5FCE4FC62C92FADF6D3 + 9CF72BD123534204681E41A403240294E8D0BA80B8E97396A6FEFACE35B7455A + E35D5BE5A083EE6E4D9110000ED1FA708E11D4D596553DF3C84D4F6FDBFC499E + 6492F3D38CBF58ECA3EA693F67E81100422902940E884820426AF2BCC0E061E3 + 9256AEFEE8B6C42129EA8E340500B0E347F7EE7B60E5D2A78F1D2EA4729808F9 + A9D46798F3137ACB8002F10568D8A52F75BAD5D756B47CFDAF37B2C78C9F111D + 9F303CC9C8DC08005F83E6BA72777EB771D5F2ACA7AAAB4ED063F7A2D42716FA + 885ABF6EE7278C1200427C197B11E8E8EC6CEBF8EECB37724B8FEE2F1E327C7C + 42A43556F3D261007C9DA387F714BFF2CCED6BDE5873D7BACECE762AF391F3D3 + C84FCEAFDCE2CBE59CDF1E238763910E88EA80A81050999052029A1BA0B4C0B6 + E467774E5B7CE9ED97C60E1C9228D900989A93E5478F7FF6C1131F7DF2DEA374 + 9807393C35CAF5C5E61E62A6DF50E7278C8EC7850850534E0E0A21A0DD40A845 + F9FB07D9AEB9717556D6C29F2F8E8E1948C20080A9A8AA3C59BDE1CB37D7BDF5 + F2CA0D5D5DEDE4F434BB4FA3BD08F7C9F1458D5F19F21BE2FC84D10240080120 + C4E4A02815D21A486A14119010582D166BF48DB73D7D415AE6A2B95131719A36 + 1801C01BA9A92CAFD8B9EDF38D2F3F7DDB174D4DB594DFD3684F4E2F9EE5A726 + 4A7C22DF270C757EC21D02201042402981582F40CF3D2A230251312031089F3A + F3E2E4ACF95766A48C9D39316E48D2504C18025F8026F6CA8E1E3A52B4E7DFB9 + 1BD6FF7D7BF68F6B69F30E1AE185D3D3CCBE72C4A765BDA2BE6F68C86F8FBB3D + 4C880041D18088088410503420C44034F9DEF0516903175E7C63FA8449599307 + 0F891915109860E48425006EA5B3A3B4F3D8918A7DF9B91B73BE5CFBF28E43FB + 76D20A3E72701ADDC9D94513F784E38B11DF6DA3BE124F0CB1E2770831A068C0 + 5E0844544069824815E84AF74263E286444C4E3F6F68DCC0A4186B6C62B4CD16 + 17658988B55A23A2232DC15191E1A1D688105B78182206E00968446FA96E686C + 68AEAD6F6AADA96BACAFAAABABAFA8ADAE2EAFA9AD3851557EB2A43267C7D747 + 2ACB8FD2E84E0E4E8D427A11DA0B9B9CDEDEF1ED477CB7393FE1498F71240494 + 1ED0958440290A2402C2A6AB789F6822AAF0F3F70F92AEDDE2678BDF05809170 + C7F4EBEEEA6A17937262B416B3F4D4287C27A716CE6DEFEC7415EFEB13C717F4 + 85A388DF291C55CC1108311057E1F062EE40E9F44AE7179FA7267E2600EE4238 + A9C8CFA90911B01702727672722108C2D9954EDF278E2FE84B6711BF5B5C8503 + 0B3110CEAD747C7B8717367D4E7C160077A3745AA50828FB4A3150DEA3BEF81C + D1278E2F10CED7D7080716D83BB5B0C9E1C57DF19AD2A60680BB11CEAF6CC2B1 + A991A38B7BCAFBC2E90971AF4FE98F0E23BE93F2BB515F8CEECAD77B7A2F616F + 036004F60E2B6CA5338BAB707C81FDEBFD82FEEE28CAEFE7E8BBC2E1415FE0C8 + 997B727E00000000000000000000000000000000000000000000000000000000 + 00001D30F6FF01967F3F46ED7D2A740000000049454E44AE426082} FileName = 'E:\YandexDisk\Development\Delphi\AErender Launcher\src\AErender ' + 'CC\icon_256.png' @@ -535,684 +535,684 @@ object SplashScreenForm: TSplashScreenForm PNG = { 89504E470D0A1A0A0000000D4948445200000200000002000806000000F478D4 FA000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 - 549B49444154785EEDDD077C1CC5DDFFF151EFB625DB72EFBDDB72078C6D8A29 - A1F3E40143020904082990841020104842092D05481E5268212424E14F0BD554 - 630810F722F75E254BB6E4AA5EFEFB3B769CF1F9249FA4DBDBBDDBCFFBF59AEC - CC4ABA93CFC4BFEFCEEEEC262844937CDE7CE600105AA3DD100514A3C84BB4B7 - CDE1730780A38553F81BEC2D228042D4364D157BF373D5FDE0CFBAA9CF9EBF13 - 00F1AAA9221FBC5F8FCDFD4DFD2CA1A09528362D13AAE09B9FA1F975BD3FD43E - D986FAEC43ED03807812AA90CBBE50455F17F750FB44A8D72210848982D3BC50 - 855A8FCDAFE9BEB94F177E199B7DF37BF45698FB01205E99C55EE8BEDEAFC752 - C8CDBE30BF477F2DB86F32BF8620149C63852AC47A9FDE2FDBE0021F6A6BB6E0 - 7D426FF56B09BDAF29C7FB3A00B8E578C5D6FC7AF0D1BD2ED6D274F10FB52F78 - 2BCCBE6C753385DAE76B1493FF328BB090CFC66CFAEBBAAF0BBAEE0737FDB5A6 - B622B8AF49DF1C03402C0B2EBEBA1FAA8837B70DD5CCAF495FE8BED94CF275DF - F37B91D1C557D39F4770A14EB29A1E9B4DF607F7CD7D7A1CEA6785F91ED29726 - F41600E2852EC266410E2EDA6693FDF541FBF4D8DC1FFC3DD2F4CF0A3D96ADD0 - EFA7E9FDBEE3D742A38BAE661662D9CAD82CDCD2370BBB1E1FAF25AAE4E4E413 - A75D9C3F72CC8C3E5DBB0FEC9393DBB95B5A6A5A5672726A6672725266624A46 - 466A637266627A52467D725A4666637546424D6DB2F5B30010371A5353EA2A12 - D22A93EAAA2B1BAAEA2B6B12EA2A1A6A2B2BEBEAEA2BEAEA6A2AAA6BAA0F1F2C - 2F2D2ADEB5616BE1B2B95BFFFDF18B25AAAEAECEFA5129D052CCC369F2BDE6F7 - 4B5F87013304E8FD26FD35DFF05B00D0455EE83FBB2EF87AFB45E13EB698EB26 - C5596F8FF4C519177CA7DF8891D38676EADCD32AF41D7B676777E899519FD423 - A9438774EB7B000061AADFB7AFAA32A97EE7A143FB761C2CDFBB6D4FE98EAD2B - 0B3F5E33E795DF6EB6728104036952D883FBBAF807371D0C741030038119067C - 1304FC1200820BBF1EEBBE1471D9EAFE51C5DDDEA6D87DBD4D3EF5ACAFF59A7A - F29727F4E83D747C56A7EE637252D3F3ACFD0000871CACA92A3B5CBA6BE9CEED - 6B167F36EF8585EFBFF5CC766BB70E01B5C6568ABD190C745F0ABC0E033A0808 - B32FE23E08C47B0068AAF04B41378BBF6E4D157BD9A64E98FCA5FC53CFF9C694 - 9E7D868DEFDCA9D798B48CCC2ED67E00804BAA2B2B7697EED9BE6CC7D6D58BDE - 7FFD89CF17FEE78D126B778DD5CC30102A14E8A60BBFF4856F8240BC0680E315 - 7ED9EAE2AF0BBCF4538DB1F453BA771F9473F935F7CD183A6AEA192A217D7C5E - 5EC778FDCC0020A69595ED6D548D558BD6ACF86CCE5FFFF4E3B9BB76AD3F68ED - 96C26F0602E94BB1D7631D0264EBAB20106FC54CFE3CFACFA4B752E875D3855F - 8ABC6E52EC7593A29F9A9C9C9E7EE5371F9C3076D2AC33BBE5779D9694D63EC3 - DA0F008811F5D5FB2B8B4A8A3F5E3AFFEDB7FFFCFB5B17D6D5555559BBA5F8EB - 30A09B8400DD741090AD6E420701D99AA120A6C5530090C2AEC99F4BC6B20D3E - DA0F59F4AD9636F38C2B7A9F75D10D1774EB3DECB4ECF4CCCED63E00408C3B54 - 55515AB46DF57B6FBDF4E82B1FCE79769BB5ABDA6ACD8581E05901E9C7DD6C40 - 3C0400F933E83F8759F875D1D74D177E5DF08F14FEB32FFAEEC0B32FBCE18AEE - 3D724F4948E868060900409C686CDCDBB06B67F9076FBEFCE8B36FBEF4D8066B - 971904CC40A043806E3A00984140B666288839B11C00CCC22FCCA2DFD4117FA0 - E0EBED972FFBF1A899E75EF3D5F4B4F627E6E6E6C6F267010008537979796355 - F5FE7FBFFFDA1F9F7DF16FBF28B476E920A0B7CDCD0804CF06C46C1088D5A267 - 167F5DF8656B1EF14BC197E26F1EEDCB7AFCB4AF5C73FFF819A77FE58A8E9D7B - 4CB4C600009FDABB67E7FCB973FEF2EC734FDCB6D81A4A0030AF1590260140C2 - 80392320053FE667036231009853F4BAF8EBA3FEA68EF8A5A59F7BF1F7865C78 - D92D37E6E6751D678D010008D8535ABCF8957FFCE2D1375E7C74AD3594102061 - A0A91981A66603641C33622900C8EFAA7F5F5DF8651B7CD46F1EF1070A7FCFBE - 23F2BE7FDBB357F71BD4E7A284848EF27D00001CA5B1716FFDA6755B5FFCE5BD - 973F59B47D4DB9B54B07017346206E6603622500842AFEFAC8DF3CEA370B7F86 - 4A4ECEB8F1E6A74F9B7AF245DF4E4BCFEC64ED0300A059D555157B3E9BF7D2EF - 1E79E8EBEFA9BABA4A6B9734330884BA3E20E642402C040029F45AF0517FA8C2 - 2FE7F9334E3DF3AA01977CFDE7DFEB9CDF6382350600A0454A4B762EFCC7D377 - FEE6FDB79FDA680D250404CF08E820103C1B203C1F02BC1E0074F1D747FD66F1 - 97C22F01409FE30F1CF5A7A76767DDF5F09CAB06F71E7C59624E27F91E00005A - A5E1E09EDA75DBD6FDED673F3CE3A9AAAA4387AD5D7A3640370900E669011D02 - 74F1D781C073A4907A5570F197A60BBF3EEA0F1CED5B2DD36A5993A69ED7E7A7 - 0FBFFD40CF3EC36725A4657AF9CF06008801524B3AE5F71A7BDA595F9BB063CB - DAE5453BD7CB2C80D425DD84EE873AE26F6ABFEBBC5824E5C30A2EFEF27BEA73 - FD474DF55B4D8A7FF6B537FC76FAE5D7DEF350564E5E6F6B0C0040C4A467E674 - 193BE5C2333A75EABA63F1FCB7765BBB74D1D74D33FB5AA87DAEF35A00303F48 - D9EAE2AF03C07F2FF0B38B7F5656FBF6F7FC66DEF54346CDB8313BBB1DCFDD07 - 0038222D2D25BD73D741A79E70F245599F7DF4C2CADADA6A39B237EB5673C2F9 - 9EA8F25200303F44D99AC55F4FF94BD19722FFC594FF4917F6FBC943731EE8D9 - 7BF0291919199EFB700100F1456A4DC7CE3D469E72D655E38BB6AD5BB673C75A - B926C0AC5D7ABABFA9D3019EE19500201F8AF901EAC26F1EF5EB23FF40F1BFE2 - BA074EF8DAF5F7FF2A3BAB432F6B0C0040D4A46764E54F39F9FC333332DB6F5A - B6E8BD126B9759DC830BBD8C752008FE9A6BBCF08BC8EFA07F0F39EAD74D8ABF - 3EF237A7FDB3BE7BCBD3A7CF38F19C1FC7CB55FED5D555AA78C70EB56BFB36B5 - 6BDB56B5A7A458551EAE50959515AAAAC2DA5AADAAF2B0BDAD548D0D9EBC9E04 - 808F252525A9B48C0C9591991968E919F6D66A9959D9AA4BB7EEAA5BAFDEAABB - D5BAF4E8A19293E3E29F6F557FB0B476EE27AFDFFBDB07AF7ACF1AEA5502E67D - 03F452417DAF00CF2C13743B001CAFF8EB237F99F6CFB25AE6ADF7BCFA3F8386 - 9D78435E5E47B77FF756292B2D51854B16A94D6BD7A89D56B12FB28AFE9E12B9 - 9E0400FC21313151E5DB81A047EF3E6AD0B0116AF8D80295D3BEBDFD1DB1A5AC - 6C6FE3FAD5FF7EF4FE3BCEFF7FD6B0C26A120464B58034CF8600378BA859FC65 - 2B53FEC1C55F5FE92F77F5CBB9F797EF5F357CF4C95758E3987160DF3EB56AD9 - 62B572F122B5C22AFCC53BB6DB5F010098FA0C18A8468C1BAF465A6DE8E83181 - 99835852B86CDEB33FF9E1A94FA9BABA83D650CF04E89B07992140DF2F40B816 - 02DC0A002D29FE99494969ED1EFAC3FC1FF41B30FA1C6BEC79BB77ED541FBFFB - B69AFFF13CB56D933C721A00D0120909896AC090A16ACA8C99EAC45367A9DC8E - B17137F72D1B97BFF6C3EB26FDBABEBEFA803594D900CF8600B70280147B21EF - 2F7D7DC1DF31C5BF7DFBFCDC07FEEFF33BBB74EF37CD1A7BD6E18307D5E71F7D - A0E6BDF3B65A5BB8DCDE0B00682B0903A3274C54D34E3F534D3C699A4A4B97F2 - E05DC5BB367C7CEBB74EFCF9FEFD25F240A1A6428004000902BAF0EBD30251E3 - 460068AEF8EBA57E81E29F9696D5EED74F2CF979B79E834EB2C69ED3D8D8A096 - CEFF8FFAE8ED37D5A24F3F56B5B5F2F70A00704A7A46869A3C7DA69A71E697D4 - D05163AC70E0D6716CF324047CE78A917705CD04480B7E86806B2120DA9F9CBC - 9F6EBAF84B93C2AFAFF60F2CF34B4A4ACA79E80F8B6FF2E2B47F434383FA6CEE - FBEA95BF3EABB66FDE64EF050044D3E0E123D5855FB9528D9D3CD5934160F3C6 - E5AFDF7C5DC12FEBEBEBE59A00B9305082805E1D204D02801902A27A2A209A9F - 5870F1972647FED2CC697FB9DA3FFBEE47E65E3372F4F4AF587DCFA8ABAB551F - BF3B47BDFAFC735CCC07001ED177D06075E1E557AA49D34E0E9C2EF092954BE7 - FDE58EEF4F7FC2EA1EB29A5E26A84F07C82C80BE2620EA21408EBEA341177E71 - DCE27FEB3DAF7CB960E219D7587D4F90C2FFDE6BAFAA477E7E67E0E2BE430764 - 460700E005FBCAF6AACFE77EA03EFFE8C3C0CA815EFDFA7B664620BF6B9F317D - 078C3DF8EF0FFF2157849B055E9A9EF2D7055FB651FBC5A315007424D3C55FDE - 579FF3D7012050FCBFFDA327CF183976D60F3332323DF1B7B772C922F5E0ED3F - 52F3DE794B551C96F00600F0A283FBF7A9059F7CA496CDFF8FEA3B688867560E - 64E6749ED4ABCFE09D0B3EFDD7366BA80BBF59F4755FE81060EE7344340280FC - 4174D3C55F5FF427C53F70C19FD5B2BF72CDFD53CF3E7DF65D991D3A452B9834 - 69DFDEBDEA4FBF7A503DF787DF59FF51EDB7F70200BCAE6C4FA9FAE08DD7D401 - 2B100C1E314AA5A6CAB1A67BE480B66FD7DE27A466775CB77CF17B72E73773BA - 3FEA53FF9AD385F678C55F8EFC03C57FD24917F4FDEAF50F3C9C9AD95E02816B - EAEBEBD53BAFBCA87E79D78FD5A6756BECBD0080D8D2A836AE59ADE6BEF586EA - 90D751F5EE3FC0D5D30209699949FD86144CDDB271C5C7453BD6C9747270F18F - 3AA73F8DE0A97F29FCC714FFACAC761D1E7B66DD23B99DBA0CB3C6AED9B669A3 - FABFFBEF565B36ACB7F70000E2C1F0B1E3D4B76EB94375EAD2D5DEE38E7D65BB - 577DE78AC1DF3B7CF8C03E6B281706CACA00F31E01D2241848137A1B714ECE00 - 9847FFF23EFAE85F9FF73F32F57FF7AFE77EB367DFA1D3ADBE2B1A1B1B0329F1 - 9777DEA6CA4A4BEDBD008078515A5CAC3E7AE72DD5B36FBFC00389DC929E91DD - 79F89819E9EFBFF9E4526BA8670082B7C2F15901A7028059FC9B3DEFFF8DEF3C - 3A7DEAF48BBF63F55D214FD7FBC343F7A9979FFBB36AA897E598008078545B53 - A33EFDE0DDC09355478C2B5089894E1E03372D29257B78C78E5D372D593067A7 - 3594A26F3629FC8E177FE1D49FDE9CFA97C22FEF635EF11F28FE0513CFEA7BC5 - F5F7DF97949422FBA34EEED37FEFCDDF532B972EB6F70000E2DDFA55856AF9C2 - F96AF484492A333BFA0F1CCAC8C848E83768F4844D6B977C52B46B835C0F105C - FC839B1C4CCB36A29C0800E6D1BFBCBE0E01120074F1CFCACA6AD7EEAE87E7DC - 9B9DD3B197358EBAB96FBFA11EFEC96D6A7F7999BD0700E017B252E0A3396FAA - DEFD06A86E3DA35F86E4C07754C18CA1EFBFF1C487B5B5D5FA6E8066D3053FE2 - 855F8B7400308BBF39F51F7CDE3FEBCE87DFFD469F7E234FB5FA5125E7FB5FFA - CB33EAD9DF3DC2943F00F8D817A704DE571DF3F355BF4183EDBDD19391D92E7F - E88893123F78FB6979825C70F137438023221D00CCA97FF3C8FFA8A3FF19675E - 39E4E41997DF929E99A9BF3F2AE41EFECFFCF637EAB5BFFFD5DE0300F0B746B5 - E8D34F544A6AAA1A327274D4970A76CCCA1A56525EF2D9960DCB64558014FDE0 - 6703485F485F7EB9888582480680E0A37F29FEE6D1BF14FFCCA4A4A476B7DDF3 - CA1D1D3B77EB6E8DA3469ED4F7DB7B7F1698F20100C054B878A1AA3C7C588D9E - 3831AA2140EE0F30706041EF375F79ECA3C6C646FD5C00F394800E021117C900 - A08FE6E535750B9EFACFFEF64D4F9C3172DC8C8BAD7ED454561C0EDCCE77C9E7 - 9FDA7B000038DAFAD52BD5EE5D3B55C1D413A3BA422033BB7DD7BC4E3DE456C1 - 5BAC61A8EB01B488CE0244EA4F187CF42FCDBCE18F0480AC9E7D8675BEE29B8F - FE2C2D2D45C65121C5FFEE9B6E50EB0A57D87B0000084D6E082737839B327DA6 - 1502A27796BA739721C33FFFE4FFBD7BE8C05EB9295053170546742620520120 - F8E8DF3CF71F28FE56CBB9FD176F5CD7BD67DF71563F2A64DA5F8EFC29FE0080 - 7015EDD8AEF6ECDEAD269C7852D44E07A4A5A5660C1E3639FDDD379E9075E912 - 007433038088D82C40240240F0D1BF79EEFFC8857F679E7FFDC859E75C7C6342 - 42742EFC930BFE1EBBF7A74CFB03005A6CEBC60DAAA6BA3A70AF8068C9EB943E - A8BCECC0828DEB16EEB586C121409841A0CD221100A4A0EBE26F1EFD4BF19716 - 78CCEF6D77BF72476656746EC22C4BFD9E79ECD76ADE9CB7EC3D0000B4CCBA95 - 2B547A4666E08982D12007C87D068EEBF3FA0BBF7ADF1A4AE1D7170506CF0268 - 6D0A036D0D00A18EFEE5DCBF9EFA0F5CF93FFB6B3F9F3CE184732EB3FA5121EB - FC5FFB074BFD00006D23770CECD2BDA7EA3360A0BDC7595959EDF21312135716 - 2E9D5B640DA5E84B08903020C55E5AC46601DA3A1D2F855FC8EBE826A1428780 - 40109879FA95B3AD6D547CF8D6EBEA85679EB0470000B4CDEF1FBC37B04C305A - A6CFFA9AD44C3988961A2A17D34B4D95DA6AD65AA16B70ABE817690DFDC67A06 - 407E39F31440A0F89F77E9CD233B77EF3DC6EA3B4ECED93CF59B87ED1100006D - 575F5FAF1EBDE7A76ADF5E3935EFBCAE5D7B8F3DEFCB378DB4BA721A5DD753A9 - ADBACEEABA2BF4B6C5DA1200343391E853007A0960DAACB3AFBDD4DA3A4E9EEE - F49B9FDD11B8F21F0080483AB0AF3C7061B95C601E0DB3CEFDA6D44E09007A06 - 409AD458B3E6B6892489D6D0E94337791DB3F0CB857F59A79F73EDF053CFBCF2 - 1AABEF28B9E8EFF70FFD42AD5AB6C4DE03004064951617A9848444357CACF3AB - D9DBB5CFEB5156BAEBF34DEB17EB15017274AB5704982B035AADAD09428ABFBC - 869E969000A0A72BD2CFFB9FEF5F626D1DF7E19BAFAB7FBFFF8E3D0200C0192F - 3EFB945AB964913D72D6B997FC406AA8791A406AACAEB7527BA506B75A6B0380 - 79F42FAF21CD5C019076D2CC4BFB66E6743EC9EA3B4A9EE9FFF463BFB2470000 - 3847669C1FBBF7675179947CCF5E9D4F9A76CAEC3E565766D6A5B64A9D354F03 - 98B5B8C55A1300CC37D201E09819802F5D7CE3D979791D5BF54B854B2ECCF8ED - 7D77071EE908004034EC2BDBAB9EF8B5F3179C2724744C3CFBA2EF7EC9EAEA19 - 00694DCD00B4B8DEB6260068F2B3BAF89B17FFA5A6A66666F61B307ABAD577D4 - 9C57FE5F6006000080685AF0C9476AE9FCCFED9173FAF61F3D5D6AAAD5D53300 - 526765AB4340ABEB786B7E5052864E1AA14240EAFF7EEDCEF169E999B956DF31 - E57BF7A8179E66BD3F00C01D4F3FFA2BC767A0D333B2722FB9F227055657CF00 - 842AFE665D0E5B4B03807E03D99AC5FFC8D1BFD5D2264CFDD2A9D6D6517F79FC - B1C0D23F0000DC208F0E7EF5F9E7EC9173264C3D476AAABE0E40D75B330498B5 - 396C2D0D009ABC890E01F24BE81090DAB5C7C0F61D7B7673F4E9092B162D509F - 7EF09E3D0200C01DAFFEEDD9401070525EAF6E933B77EDD7DEEAEA00A0EBAE2E - FE2D2AFC5A4B03807E2369FA1790E98823D3FF977CF5CE69D9C91D25A938426E - F4F3D423BFB4470000B8476A929C0A90D5014E919A3AFBEB3F9555753A00E8BA - ABEBB0599BC3D6920060BEB04E1DFACD03C55FDAF071D3665A5BC77CF0C6BF02 - CF6A0600C00BE46240A7EF0D306AF4C9525B0375D66AE62C80D462B396871D02 - 5A3A0320F4CFC8569A4E22C9630A4EEF9A92D27E84D577445D5D6D54CEB70000 - D0122F3FF767BBE78CC4D49C915263ADEE919A2BBBED26F4366C2DF9014915BA - C9CFE9F4716406E09433BF3621373737ECF4D152F3E6BCADCA4A4BEC110000DE - B072E962B56EE50A7B1479725F9D99675D39DEEA06CF0048939A6CD6E8B0841B - 00825F50BF992EFE81D667D0E8D1D6D61172D39F57FEF6AC3D0200C05B9C9E05 - E8DB6F8C3C59F748CDB59AD460A9C5C1B53CAC10106E00D0E4FB759337962988 - C036292929AD4B977EF2F842477CF6E1FBAAA468973D0200C05B96FCE733B565 - FD3A7B1479799DFB8D905A6B758FD45E7B6BD6E6B0B5E89B6D922CF4D1BFFE05 - 52A64EFBDF9E72C302AB1F718D8D0DEAE5BF3A9BAC000068AB971D9CA9CE6997 - 953775DAC53DADAE1CFD9BC55FD7E516093700E81797A653863479F3C054C4D4 - E9178EB5B68E58FCD9A76AE7D62DF60800006F9A3F6FAE2ADEB9C31E45DEA493 - 02B5D63C05A0438034B3561F97FCC0F104BF908CF59BEA96DCABEF28C7CEFFCF - 7DFB4DBB07008077C9FD003E7EF76D7B1479FD068D1D656DF4D1BFD942D5EA66 - 851300349D3074CA08147E69494949A99DBAF51E6EF523EEE081FD6AF1E7FFB6 - 470000789B0400A76E0C94DFA5F770ABE6EA53003A08484D366B7458C2FE469B - BC897E239D3A52669E7955DF8CB4CC1CAB1F7172F15F7D5D9D3D0200C0DB4A8A - 8AD4DA42679604A6A665B6B36A6E3FABAB6BB034A9C9BA3E872D9C0060BEA859 - FC8F8480E1A34E1C646D1D31EF9DB7EC1E0000B1C1C9D30043BFA8B9FA1A00B3 - 269BB55AF79B144E00D0F40BEA76240074EAD257AE4A8CB85DDBB7A90DAB57D9 - 2300006283CC5E3BF5A8E0AE5DFBF6B03681FA6B355DF8CD16969604007154E1 - B75AE01C4487BC6EDDAD6DC43999A00000704AC5E1436AF167CE5CBFD62E375F - 0280790D801904C276BC00A05F4C177EFD066608486A9FD3CE910030FFE38FEC - 1E0000B1C5A91A96D33EAF9BB5D145DF2CFE669D167A1B927C6338CC1739EA8D - 525333521AEA93BAC8172269DFDEBDACFD0700C42C793E8013AB01721213BB24 - 25A5EAA37FB3266BCD167E2DDC0020E40575939F0B1CFD8F9E34AB4B874E9DE5 - 1789A8954B9D7DB42200004EDA57B657EDDAB6D51E454E524EE79482C967C881 - 77A00E5B4D8700DDC2D2920020E4FB75F10F6C870D3FC1910B000B1D7EB63200 - 004E5BE9502D1B3CFC845ED6E6482DB6B7D2C216CE379B47FDC21C27F6E83548 - 2E468838A73E340000A2C5A983D91E3D8748EDD5455FD765113C6E922EEA4D09 - 7E0119EB379496D42EAF5BC4CFFFCB4D14A4010010CB562D5D1278A05DA4E575 - EE966F6DCC237F69A16A7693E4079AD254F117BA9F9096929E11D813419CFF07 - 00C48343070FA8AD1B37DAA3C8494949CFB436476AB1ECB3B428043417004CE6 - 0B986F9898929616F100B071CD6ABB0700406CDBB826F237B44B490DD4DE23B5 - D8DE6A66BF49E104007921B31DF586A9C9919F01D8B53DF2574D0200E006B9AB - 6DA425A7A6A75B9B636A72506B56380140D32F66BE7862726AAA030120F21F16 - 00006E70A2A6A5AA40ED358BBE66F69BD5920020F4F7EB374C484A494E0BEC89 - 90CA8AC3819B000100100F8A1C08004919C97A06C06C2DAAE9E17CB3BCA84927 - 0ED926AAE424F92522A668FB76BB070040EC2B29DAA5EAEA6AED51642427040E - BEBFA8C3FF0D00A6E0F131C209005A132F9611D100B0D381BB260100E0968686 - 06B57BE74E7B141949E9C7D45E5DA38F5BF8B5960400D37F1347654584670038 - FF0F00882F91BE0E20B5E6B0790AA055B53CDC1F329385EE07342625CB8D0822 - A67477B1DD0300203EEC89706D3B50971CEA193C66AD3EAED6CE008863C24024 - C845800000C493CACA0ABB1751661D6E713DF6600070E4430200C03555CED4B6 - 36D5E1960400F34D225EF835873E2400005CE3F0C16DABEA734B6700E4851D2B - FEC2A1691200005C53159DDAD6A2FADCD6530011C70C000020DE383803A06B71 - 8B6B725B0280887808E01A000040BCA9AAACB47B11D5A61ADCD60010710E7D48 - 0000B8C68BB3DB9E0B008D8D0D760F0080F8D0E0C1DAE6B9000000009C470000 - 00C08708000000F810010000001F22000000E043040000007C88000000800F11 - 000000F021020000003E44000000C08708000000F810010000001F6AEE5182F2 - 356949564BB65A9AD532AC966DB57656CB93F6D44B65CFE7E6E646ECB1C0979E - 72A2DD035A273D234375CAEF628FBC6DFFBE727570FF7E7B04205EF51F3254DD - F7F893F6A8EDCACBCB1BAFBA286FB6D52DB3DB01AB1DB29A3C52B7DA6A7556AB - B75AA3DD8E4100405C1933698AFAFE5DF7044240AC285CBC50DD7BF3F7546363 - C8FF8F0288035E0C009C02405C3979D6993155FCC5C882096ADC9413EC110044 - 07010071A57BAFDE762FB64C3BED0CBB0700D14100405CC9CA96B353B167CCA4 - C92A2959CEB401407410001057B2DBE5D8BDD8929995AD868C1C658F00C07904 - 00C48DA4A4A440218D55055C0700208A0800881B99D9B15BFC45C11456C00088 - 1E0200E246764E6C9EFFD7BAF7EEA3BA74EF618F00C0590400C48DEC76B11D00 - 04CB0101440B01007123D66700C4F8A99C0600101D0400C48D789801183E669C - CAC8CCB44700E01C0200E246561CCC00C8BD00468D9F688F00C0390400C48D0E - 791DED5E6CE33A0000D1400040DCE83768B0DD8B6D723F808404FEAF09C059FC - 2B83B8909090A0060E1D6E8F625BFBDC3CD57FF0107B0400CE2000202E74E9D1 - 5365E5C4E66D8043E1340000A711001017060E1D66F7E24301CB0101388C0080 - B83070D808BB171FE414406EC74EF60800228F0080B8307844FC3D496FDC94A9 - 760F00228F00809817AF17CD8D9BCC7500009C430040CC1B3371B2DD8B2FA327 - 4C5429A9A9F60800228B0080983776D214BB175FD2D23302B706060027100010 - D3121313D5E88993EC51FC61392000A7100010D3E4E63FF1F014C0A6144C3931 - 709323008834020062DAD8C9F139FDAFE577EBA67AF4EE638F00207208008869 - 6327C5FF52394E030070020100312BB0FC6FC8507B14BFB82B200027100010B3 - E275F95FB0212347C7F5750E00DC410040CC8AD7E57FC164A5835FC20E80E821 - 002026C5FBF2BF605C070020D208008849F1BEFC2F98AC76484A4AB24700D076 - 0400C4243796FF6DDBB4D1EE459F849D41C3E3EB898700DC4500404C7263F9DF - 4B7F79461D3E78D01E451FA701004412010031C7ADE57FEB5717AA3585CBED51 - F4C95D01012052080088396E5C11BF6FEF5E55565AAAD6AE5866EF89BE5EFDFA - ABCE5DBBD92300681B0200628E1BCBFF36AC59A51A1B1BD59AE5EE0500C16900 - 00914200404C716BF9DF86D52B03DB4DEBD6AADA9A9A40DF0D05040000114200 - 404C716BF9DFFAD5AB02DBBABA5AABFF451870C38871E3555A7ABA3D0280D623 - 0020A6B8B1FC4FA6FE37AD5D638F945ABBC2BD0B01535252D4C88209F608005A - 8F008098E2C6F2BF9DDBB6AACA8AC3F648B9BA1240701A00402410001033DC5A - FEB7D19EFED7D615AE508D8D0DF628FAE4E980090909F608005A87008098E1D6 - 0371F405809ACC066CDDE8DE5D01733B76527D060EB24700D03A0400C40CB79E - FEB761CD6ABBF75F6B5CBC1F802898CC6900006D4300404C706BF99F2CF9DBB6 - F9D8A37D376F0824E4340000B405010031C1ADE57F9BD7AF55F57575F6E8BFD6 - B8B812400C183A2C704D0400B416010031C18DE57F6243D005805AF9DE3DAAA4 - 68973D8A3EB908D0ADCF04407C20002026B8B1FC4FC82D809BB2DAE5DB02731D - 0080B62000C0F3DC5AFE2782570098D616BA1B00464F9CAC929353EC1100B40C - 01009EE7D6F2BF83FBF7ABD2E2627B742CB7AF03C8C8CC5443478FB14700D032 - 0400789E6BCBFFACA37FB90D70538AB66F0B84043771574000AD450080A7B9B5 - FC4F3477FE5F041E0FECF67240020080562200C0D3DC5AFE2742DD002898DB01 - A06BCF5EAA9BD500A0A50800F034B796BAC9BDFED7AF2CB4474D73F3C9801A37 - 0502D01A0400789A5BCBFFB66C58AF2A0E1FB2474DDBBC619DAAAAACB447EEE0 - 340080D62000C0B3DC5CFEB77AD952BBD73CB94BE0EAE5E17DAF53868E1EAB32 - B3B2ED110084870000CF726BF99F58B56C89DD3BBE954B16D93D77242525A9D1 - 13DCB95012B147FE7B9125A4ED3A74501DF3F303D790F4EE3F500D1C365C0D1D - 35865B4CFB48730F1597AF494BB25AB2D5D2AC96613539D490ABB2E4BF92BCA7 - 5E2A7B3E373737620F27BFF414CE67E20B37DCF13375C229A7D9A3E891ABFBAF - B9E06C75E8E0017B4FF3FA0E1AACEEFFC3D3F6C81D1FCD794B3DFEC03DF6087E - 909090A872DAB7571DF23A5A2D2F68FB456B9F9BABD23332556A5A9A4A494D0D - 6C6565CDF1BCF7DA2BEA895F3F648F1009329B79DFE34FDAA3B62B2F2F6FBCEA - A2BCD956B7CC6EF20F969CB7947392D556938798D45B4DD632875CCF4C008027 - C93F527F7CF90D5756006CDBB441FDE81B57DAA3E3937F88FFF48A3BBFAB7660 - DF3EF5CDFF3957353434D87B100F72DAB50F1CA177EB25AB3D7A07FAF9DDBBDB - C53D2FAC62DE1A72FD8B84E0FA7AA91F88042F06004E01C093DC5CFEB72ACCF3 - FF9AAC1858B964B13D72874CE7CA1302117B92929355EFFE03D4E4E933D50597 - 5FA1AEBFE50EF5F3DFFEC10A956F069AF4659F7C4DBEA7DFA0212AB76327C78A - BF906B4AB8CD74FC2300C093DC7CD2DDEA169CFFD7DCBE0E408C633580E749B1 - EF3B70903AE54BE7AAABBF7FB3BAF7F127D4336FBCA71E7CE259F5FDBBEE5197 - 5E7D9D9A7EC6596AF0F09181A37FC049040078925BCBFF446BAEEA2F5CBCD0EE - B9A7600AA7CFBC448ED04315FBFBFFF88CBAF6A65BD5E9E75EA0060C19A65252 - 38D2863B0800F09C761D725D5BFEB763EB96C0F9F4962ADAB15D95EFDD638FDC - 21C526AF73BE3D42B4252424A82EDD7B040AFBF77F7AAFFAD3CB6F52ECE16904 - 00788E9BCBFF5A33FD2F64E540E162F74F037053A0E892ABF0A7CE382550E41F - FDEB0BEA91E7FE1938DA9F7CF20C959593637F17E04D040078CEB8C9EE4DFFB7 - 64FD7FB0C225EE9F06E03A0067C932BA51E327AACBAEFD5660E9A71CE5DF78E7 - DD8169FECE5DBBD9DF05C40602003C45CE9BBAF5F43F11EE1D0043717B258018 - 55302150A41019F2DFA39C8E3A7FF657D54F7EF9A87AF25F73D4ED0FFD469D77 - E9E581FB3F00B18C00004F7173F99F9CC7DF57B6D71EB5DC9EDDC56AF7AE9DF6 - C81D52FC478C2DB047688DB4F4F4C00DA8E4AA7CB91785ACDD9E7DCD37D58871 - E339878FB8420080A7B8B9FCAF2DD3FF9A175603701AA0E56479DED84953D4B7 - 6FBB53FDF1A5D70377A19435F76EDEDC09701A01009EE2E6F2BF554B2310003C - 703F00793CB05C918EE6C96724EBEDAFBAE107EAF17FBEAA6EBDFF976ADAE967 - A8B474B9E12910FF0800F00C3797FF89D6AE003079E13A804EF95D54AF7EFDED - 1182F5ECD3575D72D5B5EA91E75E08DC656FD6051707EEA408F80D01009EE1E6 - F23F39775FB6A7D41EB5DE817DE56ADBA68DF6C83D2C073C5A7A46863AF792CB - 02EBF21F7EFAAFEAC2AF5CA9F2BB71D53EFC8D0000CF88D5E57FC1B82DB0B7C8 - 236FEFFBFD53EAF2EBBE1DB85912802F1000E009B1BCFC2F9817AE03183C6264 - E02635506AF4F849AA7BAFDEF6088046008027B8B9FC4F44720640C2843C21D0 - 4DF28862B9AA1D4A75EAD2D5EE01301100E0096E2EFF93F5FBD222459EA5BE71 - ED1A7BE49E7193390D202A2B2AEC1E001301009EE0EAF2BF081EFD6B5EB80E60 - CCA42981F5ED7E77F8D001BB07C0440080EBDC5FFE17B9F3FF9A171E0C94959D - AD868C18658FFCEBF0C183760F80890000D7B9B9FC4FAC5C1AF962BDAE7085AA - ABABB547EE6135000100680A0100AE7373F95F49D12EAB15D9A3C8A9AEAE52EB - 5616DA23F7703F003905400000422100C0556E2FFF5BE1E0BDFBBD701D408F3E - 7D5597EE3DEC913F1D6206000889000057B9BDFCAF70D102BB17795EB80E40F8 - FD3400A70080D0080070959BCBFF849337EDD9B06695AAAAACB447EEF1FB6980 - AACA0AD5D0E0EE7D19002F2200C0556E2EFFDBB261BD3AB87FBF3D8ABCFABABA - 883C60A8AD868F1DA7323233ED91FF343636721D0010020100AE717BF95FE162 - E7A6FFB5158B9CBBC6205CC9C9296A64C1447BE44F9C06008E4500806BDC5EFE - 178DE2BC220A21231C7E3F0D5071E890DD03A01100E01A3797FFC9F4FC9A15CB - EC9173766CD9ACF69797D923F78C9B3235F07C00BFE21400702C02005CE1F6F2 - BFB52B57A8EAAA2A7BE41C39FF5CE8E052C37075C8EBA8FA0D1E6C8FFC870000 - 1C8B000057B8BFFC2F7A45D90BD70188822927DA3DFFA9AD71FFAE8C80D71000 - E00AD797FF45F1A8DC0B3300C2CFD701D4D7D7D93D84A36C4FA9AAA9A9B64788 - 570400B8C2CDE57FF278D88D6B57DB23E7ED29D9AD8A776CB747EE9115171D3A - 76B447FE22D77CF8557D7DBD3A74F04060C9AB6C0F1F3A64FD7FE070E01E1572 - CBEADA9A9AC0732BE4FB1A1B1B5491F5DFEAEBFF783E70FA0AF12DC1DE86225F - 9396643579A6689AD532AC966D3599BBCD93F6D44B65CFE7E6E636F73A2D72E9 - 29FE9DA6F40B59FEF7C7975EB747D1B7E8B37FAB876EFF913D8A8EABBFF74375 - FA7917DA23F7FCE1E15FA80FDF74EFB377CB5537FC40CDBAE0627B14DB0E1ED8 - AF76EFDCA97617ED5407CACB03D737485197A58E81BEB5AD387C28700BE40A6B - 2CD7BA50CCDD2701FCBEC79FB4476D575E5EDE78D54579B3ADAE5C652C4D9E7B - 2DCB5DE4EE63327D23A9B7DE6AF2971FF23F0066001075EE2FFF8BFED23C37DE - 3314BF9E06A88BB1530007F695ABB585CBD54773DE52FF7CEA4FEAD17BEE523F - BEFE6A75F5F967AA6B2E385BDDF1ED6BD463F7FC54FDF9778FA8FFF7E7A7D45B - 2FFE53CD7BE72DB5E8D34F02AB5BB66DDAA8CA4A4B0247F9147F34850080A873 - 73F99F70F2FEFF4D59B974B127FE211E3D61924A4949B147FE515F270742DE25 - 53F39F7DF8BEFAFD83F7A96FFDEF05EADA8BCE5177DD70BD7AFC817BD44BCF3D - A33EFDE03DB569ED1A6E688488220020AADC5EFEB76FEF5EB573DB567B143DF2 - 0FF7E6756BED917BD2D233D4B031E3EC917F3434782B00C8B9F6752B57A8179E - 7942DDF1AD6BD4B5177E493D72F79D6AEEDB6F042EC003A2810080A8727BF99F - 3CFED7AD2371EE0A086DD5B2A5EACEEF7E53BDF8ECD3818746F1B022B8810080 - A8727FF99F7B45D833F703987A924A4888D875BB006214010051E5E6F23FB1C2 - C567F4CB946F6DADFB37A4C9EFD64D75EFDDC71E01F02B0200A2C6EDA7FFEDDA - BE2D7065B45B6AAAABD5DA283C7F201C9C0600400040D4B8BDFCCF8DABFF8379 - E534C0380200E07B0400448DDBCBFFDC9CFED7BC7221E0D0516354564E8E3D02 - E04704004485DBCBFF64D9D5AA658BED917BB6AC5F17B86B9BDBE4EFC3ED1919 - 00EE2200202ADC5EFEB7D123375191E55E2B97B83F1321C64DE63400E0670400 - 4485FBCBFFBC517485576E0B3C6ECAD4C04C00007FE2FFFD880AD797FF79A4E8 - 0AAF3C1E586664060D1F698F00F80D01008E737BF99F3CEE54D6E07B45F1CE1D - 6A6F897BCB114D0553390D00F81501008E73FB6233793A9A8400AF905B117B65 - 3500D70100FE450080E3DC3EFF2FF7FFF71AAFDC0FA077FF01AA5397AEF60880 - 9F1000E0282F2C37F3CA39779357560208EE0A08F81301008E727BF99F2CFD93 - B5F75EB3AF6CAFDABE79933D7217770504FC89000047B9BEFCCF3AD2F6EAA356 - BD721DC0C882092A2D3DDD1E01F00B02001CE5F6F23F2F4EFF6B5EB90E202525 - 458D1C37DE1E01F00B02001CE3F6F23FE1C50B00B535CB97AAFAFA7A7BE42E4E - 0300FE43008063DCBEF86F4FC96EB57BE70E7BE43D9515156AC3EA95F6C85D05 - 534F54090909F608801F1000E018F76FFFBB30B0E6DECBBC721A20AF5367D567 - C0407B04C00F080070841796FF79A5B836C74BD728144C39D1EE01F00302001C - E1F6F23FE1A5B5F64DD9B07A95AAAEAAB447EEE23A00C05F08007084DBD3FFB2 - C65ED6DA7B5D5D5DAD5AB56CA93D72D7C061C303176E02F00702001CE1FAD3FF - 3CB2C63E1C5E7952A15C0438CEE5E006207A080088382F2CFF2B5CECFDE97FCD - 4BBF2BA70100FF200020E2DCBEF84FEEFCB77AD9127BE47D72BAE2C0BE727BE4 - 2EF9BB4B4E4EB14700E219010011E7F6F9FFF5AB0A036BEC6345636383676E58 - 949199A5868C1A6D8F00C433020022CA1B4FFF8B9DE97FADD0434B16C74F6539 - 20E007040044941796FF79E5A2BA96F0D22D8BB90E00F007020022CAEDE97F59 - 532F6BEB63CD9EDDC5AAD823B72DEED6B357A001886F04004494DBCBFF562F5F - 16585B1F8B980500104D0400448C279EFE1783D3FF9AB76E0B4C0000E21D0100 - 11E3F6C57FC24B45B4A5562D59EC9987170D1B332EB0220040FC6AEEF99FF235 - 6949564BB65A9AD532AC966D35B9CA2B4FDA532F953D9F9B9B1BB1E7885E7A0A - 5720C7AAEFDEF15375E229A7DB2377C80C80DC07E0B8C22CB4E17C57D8453B8C - EF1B397EA24A49F1C63AFC5FFFEC0EF59F8F3EB447B16DF635DF54E7CFFEAA3D - 72DFCAA58BD5DD3FF8AE3D821FC8ECE87D8F3F698FDAAEBCBCBCF1AA8BF2665B - DD32BB1DB0DA21ABC9C345AAAD5667B57AABC93F3C21FFF12100202264F9DF1F - 5F7EC3F51500889C8FE6BCA51E7FE01E7B14DB0800709B170300A70010115E58 - FE87C81A3779AA4A48E09F08205EF1FF6E4484DBCBFF1079ED3A74500386BA7B - 512700E7100010116E2FFF83330AB82B2010B7080068332F2CFF83330A26B31C - 1088570400B4991796FFC1197D070D56799D3ADB2300F184008036E3FC7F7CE3 - AE80407C2200A04DBCF0F43F388BEB0080F84400409BB0FC2FFE8D2C18AF52D3 - E4362000E20901006DC2F47FFC4B4B4B57C3C78CB34700E20501006DC2F23F7F - E03400107F0800683596FFF9873C1D3021216277FC06E0010400B41A17FFF947 - A72E5D55CFBEFDEC118078400040AB71FEDF5F0AA6701A0088270400B40ACBFF - FCA7602AF70300E2090100ADC2F23FFF193C62A4CA69D7DE1E0188750400B40A - D3FFFE238F061E3389591F205E1000D02A2CFFF327AE0300E20701002DC6F23F - FF1A33698A4A4A4AB24700621901002DC6C57FFE95959DAD068F18658F00C432 - 02005A8CF3FFFEC65D0181F84000408BB0FC0F3C1E18880F0400B408CBFFD0B3 - 4F5F95DFADBB3D0210AB08006811A6FF21E4D90000621B01002DC2F23F08AE03 - 00621F01006163F91FB4E163C7A9F48C0C7B042016110010362EFE83969C9CA2 - 468D9F688F00C4220200C2C6F97F98B82B2010DB0800080BCBFF106CDCE4A981 - E70300884DFCBF176161F91F8275E8D851F51B34C81E01883504008485E97F84 - C26A0020761100101696FF2114AE0300625782BD0D45BE264D1EFD956CB534AB - C9BA9F6CABC95C709EB4A75E2A7B3E3737B7B9D769914B4FE11F14AF91E57F7F - 7CE9757BE49E7F3EF527F5CADF9EB547FE74D76F7EA7868C1C6D8FBCE19BFF73 - 9EDA57B6D71E79D3EC6BBEA9CE9FFD557BE4BE954B17ABBB7FF05D7B043F9025 - D4F73DFEA43D6ABBF2F2F2C6AB2ECA9B6D75CBEC76C06A87AC5669B56AABD559 - ADDE6A8D763B063300382EAF5CFCB77CE17CD5D0D0E0EBB66CC17CFBD3F00EB9 - 181040EC2100E0B8BC70FEBFE2F021B569DD1A7BE45FCB17FEC7EE7947C1546E - 0B0CC42202009AE595E57F2B972C0E1C01FBDDA6B56BD4E18307ED91378C1A3F - 49A5A4A4D82300B1820080667965F9DF8AC50BED9EBF49085AB178813DF206B9 - 25F0D0D163ED118058410040B3BCB2FCAF7091B78A9E9BE45A08AF19CF724020 - E61000D02C2F2CFF2B2B2D51453BB6DB232CF7E08580723F808484882D060210 - 05040034C92B4FFF5BB168A16A6C0CB98AC597F694EC56BBB66DB547DE90DFAD - BBEAD6ABB73D02100B080068925796FF79ED9CB71778F13400370502620B0100 - 4DF2CCF9FFC58BEC1EB4650B580E08A06D080008C92BCBFFB66FDEE4F9BBCCB9 - 61D5B225AABE4E6EF4E51D43478D5159D972A35000B180008090BCB3FC8FE9FF - 50AAABAAD49AC2E5F6C81B24348EE691D140CC20002024A6FFBDCF93A701B80E - 008819040084E485E57F72D39BD5CB96D82304F3E28580121C65260080F7F1FF - 541CC32BCBFFD6AF2A54951515F608C1B66ED8A00EECDB678FBC21A75D7B3570 - D8087B04C0CB080038866796FF2DE2F6BFCD696C6CB03E236FDE140880F71100 - 700CEF9CFFE702C0E3F1E2E3810BA6B01C10880504001CC52BCBFFAA2A2BD5FA - D5ABEC119AB2DC833300BDFB0F509DF2BBD823005E4500C051BCB2FC4F2EFEF3 - DA3A772FDAB777AFDAB669A33DF28E71CC02009E4700C051BC32FDCFF9FFF02D - 5FE8C5BB02721D00E07504001CC50BCBFF0437000A9F17AF0318396EBC4A4B4B - B74700BC88008023BCB2FC6F7F7999DAB165B33DC2F1AC2D5CAE6A6B6AEC9137 - A4A4A6AA1105E3ED11002F2200E0082F2DFFE3F1BFE1ABA9AE0E3C1BC06B580D - 00781B0100477867F91FE7FF5BCA9B8F073E41252424D823005E430040805796 - FF090240CB793100E475CE0F2C0904E04D0400047865F95FD18EED6A4FC96E7B - 8470C93513E57BF7D823EF603500E05D0400047867F91F57FFB7865C33B1DC93 - 77052400005E450040806796FFB1FEBFD5BC781A60E0B0E1AA5D870EF6088097 - 1000E099E57FF2709B55CB16DB23B494DC16D86BAB27E42240AF844B00472300 - C03317FF6D5CBB461D3E78D01EA1A50EEEDFAF36AF5F678FBCA3602ACB01012F - 2200C03BCBFF98FE6F332F9E06908099949C6C8F00780501C0E7BCB4FC8F0B00 - DB6EF902EF3D172023334B0D1D39DA1E01F00A0280CF7965F99FDCCD6EDDAA42 - 7B84D65AB7B250555755DA23EF603920E03D04009FF3CAF4BF17EF671F8BEAEA - 6AD5CA25DEBB90920000780F01C0E7BCB3FC8FE9FF4859E6C1D300DD7AF6525D - AD06C03B08003EE695E57F82F5FF91E3C50B0145C1645603005E4200F031AF5C - FC77E8E001B565C37A7B84B62ADEB943EDD95D6C8FBC83E58080B710007CCC4B - 4FFF939B002132E466405E3C0D306CF4D8C08A0000DE4000F0296F2DFF63FA3F - D2BC781A40EE05307AC2447B04C06D04009FF2CAF23FC105809157B864912767 - 55783810E01D04009FF2CAF47F495191D576D923448ADC5279FDEA55F6C83BC6 - 4D99AA1212F86707F002FE9FE8539E59FEB798A37FA778F1F1C0B2F264804756 - 9E007E4700F0212F2DFF2B64FADF319E5D0EC86A00C01308003EE4958BFF849C - AB863336AE59A52A0E1FB247DEC17500803710007CC82BE7FF65EDBF3CC216CE - A8AFAF57858BBD17B0FA0E1AACF23A75B64700DC4200F0192F2DFF2BE4FCBFE3 - BC7A1A60DC646F5C8302F81901C067BCB5FC8FF5FF4E5BBED07B3704123C1C08 - 701F01C067BC32FD2F4FAD5BB362993D8253649965F18EEDF6C83B468E9FA052 - 5253ED11003710007CC62BCBFFD615CA73EBABEC119CE4C5D3006969E96AF8D8 - 027B04C00D04001FF1D4D3FF38FF1F35CB3C7A1DC0F8292C0704DC4400F0112F - 2DFFE3F6BFD1B36AE9E2C08A00AF91EB00121212EC1180682300F88857CEFFCB - DAF4CDEBD6DA2338ADB2A242AD5BB9C21E7947A72E5D558F3E7DED1180682300 - F8849796FFAD5CE2CD23D278E6DDBB02B21A00700B01C0273CB5FC6F31CBFFA2 - 6DD9028F2E07E4AE80806B08003EE195E97FC1FDFFA36FCBFA75EAE001EFDD75 - 71C8C8919E09A680DF10007CC22BCBFFCAF694AA220FAE4B8F770D0D0D56F0F2 - DECC8B3C1A78CC24EF8453C04F08003EE0A9E57F56116A6C6CB4478826CF9E06 - E0E980802B08003EE0A9A7FFB1FEDF35CB3D7AEA4566A7929292EC1180682100 - F88097CEFF7301A07BCA4A4BD48EAD5BEC9177646567AB41C347DA2300D14200 - F08161A3C6D83D77EDD8B259EDDBBBD71EC10DCB3DBB1A80D30040B411007C40 - 2E00F3824F3F7CDFEEC12DF33FFEC8EE794B564E8EDD03102D04001F3874F0A0 - DD73CFE14387D49C975FB047708B3C81F1C3B75EB747DE71E8E001BBE78C1D5B - BC75EA4366C300B73577236EF99A34B93A27D96A6956CBB05AB6D564E16E9EB4 - A75E2A7B3E3737376237F4BEF4146E0C12699DBB760B5C0898EDC25196CC3E6C - 5EBF2E702B5A9EFEE70DB2F4AE57BFFE6AC8C85181F3EF6E2B2FDBAB3EFFF003 - 555DEDDC7F1F39EDDAAB07FEF48CCAEB9C6FEF718F84E1876EFF118FC3F61959 - 8975DFE34FDAA3B62B2F2F6FBCEAA2BCD956B7CC6E92A20F59ADD26AD556ABB3 - 9ADC7255965D855C7A450000E00BF2E0A1DEFD07A80E1D3BD97BA2AFAAA2426D - 58B34AD5D7C9BFCDF0130240180800008078E3C500C035000000F81001000000 - 1F22000000E043040000007C88000000800F11000000F021020000003E440000 - 00C08708000000F810010000001F22000000E043040000007C88000000800F11 - 000000F021020000003E44000000C08708000000F810010000001F22000000E0 - 43040000007C88000000800F11000000F021020000003E44000000C087080000 - 00F810010000001F22000000E043040000007C88000000800F11000000F02102 - 0000003E44000000C08708000000F810010000001F22000000E043040000007C - 88000000800F11000000F021020000003E44000000C08708000000F810010000 - 001F22000000E043040000007CC873012021814C0200882F8989DEAB6D9EFB8D - D233D2ED1E0000F1213D23D3EE7987070380F73E240000DA223D23C3EE7987E7 - 02404626010000105F0800614827000000E24C5A3A01E0B83232B3EC1E0000F1 - C1A11980467BDB2A6D0900F2C66D7AF3503805000088370E9E0268751D6E6900 - 70A4E89B080000807813850BDC5B5C9F5B1200CC173ED24F68A8AFB7BB11D131 - BF8BDD0300203EE477ED66F72223A1BECEACBD21EBF3F1B4F9144066427AF517 - C3C8E8D1BB8FDD0300203E74EBD5CBEE4548466695F5BF813A1C18B7429B0340 - 5D5AA5FC1211D3AD576FBB0700407CE8D2A3A7DD8B9440ED3503408B8340B801 - C07CE1A3DEA4AEA63EA201A03B01000010473AE6E7ABB4B408DFE5B63664ED6D - 511868CD4580A2C16AD26FACAD8F6C00C8CCCA56ED73F3EC110000B1AD5BCFC8 - 1FD8D6D5D6CAE9F7401DB69AD4E4166BED458047D456554734000866010000F1 - A25BCF089FFFB7D45537597B43D6EA50C20900C12FA68FFE65DB50D75013F900 - C08580008038E14400A8ADAF92DA1BA8C3560B350B70DC20D0D25300E61BC88B - 37565755443C00F41F32D4EE010010DB060E1B6EF722A7E68B1980401D0EECF8 - 42700868566B4E01C8F648E2A8AEADAC949D913472DC78BB070040EC928BFF06 - 0C19668F22A7A6AAAAC2DA9847FF668D0E4BB8A700CC76D41BEE2FDB5D6A6D23 - 2ABF5B77D5891B02010062DC9051A3555272B23D8A9CF2F262A9BDC7D4E4A0D6 - AC706700CC1792FE9137DCB56DED2ED919490909096A4401B3000080D836625C - 81DD8BAC5D3B564BED0D2EFE9AD96F52730120F805F49B88236FB876D5E7110F - 0082D3000080583762AC33B56CCD8ACF8BACCD915A2CFB2CC14140048F8F68E9 - 458042DE40B7FAA50BDED95D5F5F1AD1E7018811639D494D000044833CDCAEDF - E021F62872F6ED29AD5BBEF8BDDD56576AAF59939B2CF6A11C2F00C88BE9A65F - FCA87DB5B55575070E259658FD88CAEB9CEFC8D2090000A261E8A8312A2929C9 - 1E454E634A42A9D45EAB1B5C9745A87D21B5740640A70C69923C02ED705969B1 - B58DB889D3A6DB3D000062CBA49367D8BDC83AF445CD3D5283AD66D6E6B0B524 - 00988942BF61E0CDF794EF7224009C7CFA99760F0080D891929AAA263B1400CA - F7EE94F3FF66009066D6E8B0841B00CC1794C27F5408282DDEE4C885803DFBF6 - 53FD1D387F02008093269C7052E0D9364E28DEBD556AAEAEC1BA26CB560B2B04 - B4240004BFD191E4B16EE5E79BADAD234E9E7596DD030020364C7370067B6DE1 - BFB7589B2335D86A666DD6FDE30AE722409359FC8F84800FDE7E767345F541B9 - 2B51C49D70CA698E5C440100801372DAB75763264EB64791555376E8F0DC779E - 93836EA9BFFA42403304989A0D022DBD08505E4C37793379F3BA8686DABABDBB - B6ACB5FA11D7AE43AE1A3B698A3D0200C0DB4E98691DB83A70F73F517C60CB5A - A9B956579A59F8750B5B3801C07C6169478EFC8D56BB79FDB255D6D611279F71 - B6DD0300C0DBA69FF925BB17799B37046A6DADD582EB70701090D6ACD6CE0098 - 2120F08BFCE7B37F391600269E74B2EACA3D0100001E3762DC78472F5EFFFC93 - 57A4D61EA9BD76338B7FD85A1200E40D7493379137D55310B59FCE7B715B55D5 - E103563FE2121313D505977DD51E0100E04D175E7E85DD8BBCAAB243073EFFF8 - A5ED56578ABF791A401F98EB1696704F019874F1D7ED8B5FA2A1A176D7CE0D8E - 5C0720A69D76064F08040078963CF75F66009C52B467E31AA9B55657177EB385 - AAD5CD0A7706405E48373365C89BCA2F23AD66F39A458E9D06900B2ACE9BFD15 - 7B040080B75C78F99581A7D93A65E386408DADB19AAEBB5283CD9A6CD6EAE36A - E9350042BFB84E1D92440289E483F79F5B666D1D33F3AC735487BC8EF6080000 - 6FE8DD7F802A987A823D72C687EF3DB7DCDA1CA9B956D37538ECA26F6A6900D0 - 0943A70D3304D4AC5AF2617149F196F556DF11726BC5732FB9CC1E0100E00DE7 - 5FF655EBE8BF35C7D4E129DAB9659DD458AB2B330066F1378FFE651BB6969C02 - D0CC00A093C891B66CC1BB9F5A5BC79C7EDE852ABF5B377B040080BB060C19A6 - A6CE38D51E3963F99239525B8FAAB756931A6C0600CDEC37A92571455E503779 - 339D3E8ECC00487BE16FBFF8CFBED212193B22352D4D7DFD869BEC110000EE91 - 73FE577FEF8781D56A4EA93F5852FBD25F7EF11FAB1BA8B356336700A4E900A0 - 5B585AF31BEB17D7A943CF0204424069F1E6FDFBF6152DB5FA8E1937796AE0DE - 000000B8E9B4732F50FD870CB547CED85CBC6B5949C9565966AF8B7FF0D1BFD0 - DBB0B57406406FE58D647BCC0C80D5AA3FFBF415474F03882BBF7DA34A4B4BB7 - 4700004497DCF3FF92ABAFB547CE59F0EF57FE6D6DAAAD166A0640D7644DD7EA - E36AE90C801902F49B4BD3E72302BFDCABCF3FB8ACB2EAF041ABEF984E5DBAAA - 8BAFF8BA3D020020BA2EBFEEDB2A3BA79D3D7286DC60EFD5BF3F242BEC74F1D7 - F5363804E816B6D69E02D04D5287FE258ECC025457571C5EBF66C102ABEFA8B3 - BF7C89EAD1A7AF3D0200203A068F18A5A69FE1FCE3EA37AC5EB0C0AAA9F2B45D - 1D00CCC2AF67E35B54F8B5B6CC00E80020BF843EFA976D609AE28D171F7DBFBC - BCBC55BF54B8929353D4B76FFD89634F5D020020587A4686FAD62DB73BBAEC4F - 480D7DEDA5473FB0BA525FCD5300526B43058016D5DCD6FEF6FA0DE5CD750890 - 54A20340F5FC4F5EDEBABF7C87A317030AB9F8E2ABD77FD71E0100E0AC6B6FBA - 352A0FA83BB077C712AB966EB1BA81BA6A35A9B37A0640D75F5D8F5B54FC456B - 4F0108FDC6F28BE800A0D34995D5AA5FFDC7C3AF5B5BC79D71C1C56AD2B4E9F6 - 080000679CFAA5F3D409A79C668F9CF5F23F1F941AAA6B6AF0D1BF34A9C1528B - 5BA52D0140E804A203803E1510F885E7BEF3ECFA6DDBD7AEB4FA8E927598D7DD - FC63D5B92B3708020038A357BFFEEACAEF7CCF1E396BDBB6352B3F7AF7B90D56 - B7A9E2AFEBAF16951900216F64B6E000A0A72BAADE7EE9D1A8CC02646567ABEF - DD7537D7030000224E969D7FEFCEBB0337A38B86375F0CD4CEC06CBADD7400D0 - A70082EB708BB5F50A065DFCCD59007D2A201000DE7AE5FF56EFDCB6C9B1E703 - 98E4768C577EEB067B040040645C73D32D515B7556B473FDBA39FF7A5C9EFC27 - 0140CF00E8FA2AB556B756157E2DC9DEB685840879FEA134E94B93D7952687E3 - C9A9A9E91563279E3ED5EA3B6EC0D0E1B20E51AD2D5C61EF0100A0F52EBBE67A - 75FAF917DA23E7BDF8FC037F5E5BF8E956AB7BC86A87AD566937F33480147F39 - F86EF50C405B02802EFAC22CFED23F2A00AC59FDD9FEE9B3BE3E2627A77DAE35 - 76DCC882096A4F49B1DABA212A130F00803875F6C597A82F7FFD1B816BCDA2A1 - 64F7A64D0FFF7CF63F5563A3DC4C4F8ABF0E003213609E0230CFFFB74A5B0280 - D021407F32B20D9E0548B2FE20C9870F96EF1E3C62DAB48C8C4CC73F45F98B2A - 9872A2DAB2619D2ADAB1DDDE0B0040F84E3CE57475CD4D373BBEDE5F2B2BDBDB - F8D73FDEF67F5B362EDB610D9B3AFA9700A08FFC45AB4F03B4F54FA5A71EE497 - D14D92897931A0A496CAB9EFFC795DD1F6151F5BFDA8484A4A5237DEF9F3C0DD - 9A0000688951E327AAEB6F75FE663FA65DDB0AE7CD7DEF2FEBACAE3EF76F5EFC - A78FFA75D3F5B7D522110034E9CB2FA82F54382A00487BEC81AB5FDC77F890A4 - 9AA890AB367F74DF83AA77FF01F61E00009A271794FFE067F705EE361B2D9595 - 870EFEF6C1AB5F94AEDDCC00A0EBAA3EF7AFB52900B4F51440307D0AC03C1520 - 2D703DC0E143E50D79795D6B860C9F3CD61A47852CD9983AF354B566C572B5B7 - B4C4DE0B00C0B1E41AB25BEFFFA5CAC8CCB4F744C79C571F7FFEE30F9E2FB4BA - 72906C4EFF4B10901020C55FCF0248E16F53F117910A0052F075D3740890F7D0 - DBA4A5F3DF299D79C615C3B37372F3AC7154480838E1D4D3D4D68D1B5431D704 - 0000429832FD14F5FD9FDDABD2D2A3FBA8F9E25D9B36DC7DEB397FB36ABA5CF8 - D7DC95FFBAF80BCF0400930E013A00C8D608018D89A5253B8A4F987ECAB48404 - E72F08D4929393D554EB2F776FC9EE40100000409B75FE45EABA9B6F0BD48A68 - 6A68D8D3F0BB876FFCDDCE6DAB765A437DF42F4FFFD3C55F9F0288D8B97F2D92 - 01C02CFCA19A040069C93BB7ADAE183A62664EB71E83A27A723E3131514D3871 - 9AAAADE13E0100802FFCCF9557ABCBAEFD56A04644DB92F9F3DEFDDB53B7CFB5 - BA52F8F5D23F09007AEADF2CFED284E702809042AF852AFED2E43D933EFFF4D5 - 2DD34EFBEAE8ECECF61DAC71D4C81241B9BA33C77ADB158B16A8C606FD790200 - FC242525455DF3835BD497BE7C49A03644DBEEDDDBB7FEE40733FE585F5B73C0 - 1AEAA37FF302C050EBFE2352FC855301C0DC9A4D078044EB0F9CB079C3924DA3 - 675E784266727AF42EB5B40D1C3A5C8D9938D90A010B5545F4162600003C401E - E7FBE3077FADC64D8ECA4D6A8FB1A77A7FE5A33FF9F2AF8B76AE2FB6865284E4 - C85F1FFD9BC55F9A39EDEFD90020CCE2AF9901E0C84C4069F196EAACE4F47D23 - C7CE186F8DA32EAF5367357DD659AA68C736B56B9BDC75110010EF6465D82DF7 - 3DA83A77E96AEF89BE7F3DF7E0531FBEF3E7E6AEFA9716F10BFF4C4E04005370 - 18D041E04818285C3A77EFD091D33A74EDDE3F3A4F590812582638E35495D3AE - 9D5AB17821A70400204EC994FF5537DEA4667FE39B2A2535D5DE1B7D4B17BEF7 - D1EF1EBAEA4DAB6B4EFDEB0BFFCCA37F29483A00E816314E0580E0822F745FB7 - 23B301F33F7965D3B4D32F1B9D95D5A1BD358E3A39F73370D8083576D214B566 - F95275F0C07EFB2B008078D0B36F3F75EB2F1E5605534F0CFC9BEF969292ADDB - 7F72E3CCDFD7D5554BA1093EFAD7C55F9A147E990170E4E85F38390310EA13D6 - FB74089096687D106AEBC6159B46CD387FAA1BD70368724AE09473CE0FAC015D - B77285AAAF97CF1E0010ABE4DFF3D9DFB84E5DFFA3DB555EE7CEF65E77C879FF - C77E36FB373BB7AF95F3FE72C5BFBEEA3FD4D4BFA3C55F387D0A4033C3C051C5 - 5FF74B8A375725D6D7978E1E376E7C4242A6EC77853C4360E8A831EAA4D366A9 - 92A25DAA68FB36FB2B0080583269DA7475CB7D0F076677DD58E2676A68D853FF - C2D3F7FF69DEBB7F5D690DCD1BFE984BFEA4393EF5AF393D0320CDA4C7E6D78E - 8480B5859F966566E61F1C3AF2843181AFB8282B3B27F024A87E8387AAF5AB0A - 592900003122BF5B77F59DDBEF52177DE56B2A332BCBDEEBAE575F78FC2FFF78 - FAA79F5A5DB3F84BD34BFE74F1D701C091A26F8AC60C8059F483E920A05BE2D2 - 85EF16E777EDD7D86FE0D8A1D6D875DD7BF556A79E739EF51F5176E00E82D555 - F2770500F09A0E791D0337F5B9FE96DB55CF3EAE5C571ED2FB739E7DF94FBFF9 - D6BB56574FFB9BE7FDF5D1BF14FE5057FD3B16044215E5483BAAC05B4D42879C - E79726375CCEB05AB6DD72ACD64EDA4FEE7F7376C1E4B34EB1FA9E51535DAD3E - 78F335F5AFBFFF5595F1602100F0844EF95DD479B3BFA2669E758EAB57F787B2 - F0F337DEBFF7B6739EB7BA52F8E5AA7F6952FC2504E800A02FFC330380A3C55F - 442300087DF245B6660890BFA934ABC91C8D3C7A49428004002B0824B6BFFFD1 - 4FBE3164D4D489D6D853EAEA6AD5BC396FAB579FFF8BDABD4B6EDF0C0088B6AE - 3D7AAA0B2EBF2270CD56341FDD1BAEB52B3E5B70EB0D273D61D574B9E25F0ABF - 3EFA97F3FE1202F4D4BF59FCA509BD754CB402809E01103A04C8131774080839 - 13909C96D1FE57BF5FF8DD5E7D870FB7C69E23AB04E67FFC911506DE54CB16FC - 4735700F010070945CCC3766D21435E38CB3D584934E0E5CB8ED45DB36AD5879 - D3B726FFB6AEBA32B8F89B47FEBAF89B17FE09C78FFE45B40280D021409A1902 - A449009099000901321B2001408240FB76ED3AE7DDF3C8DCEBBD1A02B47D657B - D5A71FBCA7E6BDF396DAB261BDBD170010097D070D5627CF3A33707176FBE83D - 4DBE55B66F59B5EA8E1B673C7EE040E95E6B68167F7DDE5F8EFC25009817FD49 - 8BCAD4BF16CD0020824380443769320BA06702E454C051A7036426E09E87DEFF - BA174F0784B26DD3062B08CC51F33F9E1B584A08006839B99A7FD2B41981C2DF - BB7F541F1EDB6A32ED7FC7CDA73E6D1FF9EBF3FE7ADA3F78C99F5EEF1FF5E22F - A21D0084147E6186007D3A406601F4E980E06B02DADDFE8BD7FE77C294B3675A - E398B16777B15AB964B12A5CB248152E5EA8CAF7EEB1BF020030E576ECA44616 - 4C5023C78D5723C615A84E2EDEABBF35167DFAFA07F7DC7EFE0B563DD747FD66 - F1D7D3FEE6AD7E83AFFAD7A700A2C28D00205A1A02E49440A0DD78DBB367CF98 - F5D5F3AD7ECC696C6C54C53B770482C0C635ABD5AEEDDB02371AE2D6C300FC26 - A75D7BD5AD57EFC052EB014387050ABF5CD4E7E66D7ADBE283B7FFFCCA630F7C - ED2DAB2B855F37CF167FE1D6272DEFABDF5BB6120024084808304F079821E048 - 10B8F2BA874E3EEF7FBF76596262271D24629A040009023BB76D0D6C4B7717AB - AA8A0A5569B5AACA2FB6BA2F4B1101C08B64095E4666A6D5B202DBF40CE95B5B - ABC993F7BAF7EE1328F852F82500C403B9C3DFBFFEF9CCF37FFEC3CDF3ACA159 - F8838BBF9EF6D7E7FC2500E8E21FD5A97FCDCDA865860029E4C13301C121402E - 0ED42120FBC24B7E3461F6A5B77D2DA54307F91EDF9095063CB11080E75847EE - 5EBD22DF29B5FBF6553DFFF75F3CF3F23F1E5C680DA5E0EBE22F17FB0517FFE0 - 237FFD0FB92BC55FB81900447321409A793AE098D98051E366F6B9E196A7AEEE - D4A56F4F6B0C004054ECD9BD65C7A30F5CF5E48A251F6EB586C147FDD2A4F0EB - 697F29FC9E2AFEC22B714D4240F087A03F98504D3496146FA978EF8DA7160D18 - 3A21BB6BF7017DECFD00003866E9A2773FBEE3C6994F184FF5D3C5BFA9237F29 - FC9E2AFEC24BF335C12120B86F36F90003DBBABA9AFA8FDEF9CB9A0495583AB8 - EF986149E9E9327300004044D5ECDB57F5C2DFEFFFCBEF1EFAC65B56ED31D7F7 - CB56AFF1D747FDE6B4BF2EFC9E29FEC26B276C7408303F18DDD7FB75F1D7FD40 - 2B5C36B778F59ACF0B4716CCEC9F95D5213EAE2E0100784249C9D6EDF7FFEC7F - 7F37F79D670BADA1147C5DFCA5F0EB237F5DFCA5F04B00308FFC836B99EBBC78 - C586BE26C0A43FB0E0261FAA7CB8817EE9EEAD87DF7FE3C9C57D068C49EFDA3D - B74F424266A8D70200202C0D0D7B1A16FD67EEDCBBBE7FEA53453BD79B53FEFA - A8DF9CF2378FFC3D5DFC8517038068AA70EB0F4F9A3EFA97BEFE90E59440EDC7 - EFFF6DED964D1B56F51B3CBE67BB76791DACFD0000B4C88E1D1BB6FCDFC337FC - E1EF4FFFE463ABB6C80D5B74E197ADBED8AFA92BFD3D5DFC85570380080E01FA - C393A63F541D02F4F84810D8B96DCD81B75EFEDDA2CCCC7607FA741BD52F39C3 - 63CF880400785255D9A1C3AFFFEBB72FFEE2F6F3FEB973DBEA226B9759F8CD29 - 7F29FE72D4AFA7FD83AFF497BA2474EDF214AF4F91EB1BFDC8EF297DD94A6891 - 26F70AD0F70BD0CB05F59241B967C091FB0774E9D63FEFDB373D717E8F7EA3A7 - E4E575F4FA9F1900E082B2B2BD8DDB362FFBFCF7BFBCE6D5DD459BCAAC5D66A1 - 97BE3EDA0F9EEE37A7FCF5C1A92EF8D2F7242FCF0008F90075C136D393F4839B - 4E5CD2F45F84F4EB0E1F2AAFFEF09D3FAF2A2FDDB16EE0A0093DB272B8481000 - F05FA5BBB66E7BF6F73F7CEAD93FDEFCA15533CAAD5DFA885FB75047FDE6F97E - B3066966DF7362E568587E4FFDBBCA56DF3048B6FAA641E66C40F00D8474CBB4 - 7E24F3DC2F7F7FD459175C3FAB5BF701FDAC7D00009F2ADAB961F35BAF3EFECE - 6B2FFC668555AFCDF3FA66D347FD52F0CD73FD7A899F0E0072302AF481A9A7C5 - 4A0010A142806CF529011D04240498A705F4564E079861207DD6B9D70D3BE7E2 - 1B67F5EA336C90350600F8C4D64D85EBDE78F9B177DE7DFD8F6BACA11477B3E0 - 4B08D0D3FCE674BF345DF8F54CB39E818EA9E22F62290068FABA00111C027410 - D0B301C161E048F137C6E9279F3A7BE0B997DE72FAC0816346586300409CDAB0 - 61D9CAD7FEF1D03BF3DEFBEB466BA80BBF6CCD10105CF4CDA37E5DF8CDE2AF79 - 7ACA3F582C060021BFB7FEDD651B2A084808089E11D04120544B9B70E2057DCF - 39FF5B270D1A35656C667A8ECC180000625C45D5C18AF52B3E5FFAE62BBFFD78 - FEA7FF927BF7EB23FB504DBE167CC46F5EE46716FE983BEA37C56A0010660810 - 660890BE9E0D686A46408701331404FAA9195919E75C78E3A813A65F3CB16FFF - 9EC39292F3E5B5000031A2BEAEA47ECBA61DAB3FFDE8C505AFBFFCC88A9ACAC3 - E691BD59EC43157DF3885F1FF54BC10F75D41F93C55FC47200D0CC5302F2E7D1 - 41408780E02060860129F8B2D5C5DF6C81FDF9DDFAB53FFFCB3F185F3079D6F8 - AEDD07F3C02100F0B0E25DEBB62E9CFFEEC2D7FEF9CBC525459BE5E63D52E0A5 - A0EB22AF9BB9DF2CFAC1855F177F5DF8CD626F068198130F01406B2A08E81020 - 631D0242CD0A48D385DF0C017A9B327CF4C95D4F9A79C9888143A60CECD177D0 - 80CC0C4E1300809B2A2A0F56ECDCB27AE386B50B377CF2E13F56AE5A3E4F6ED7 - 2B45DC2CEEBAE807177CDD74D1D75B7DB46F1EF1C74DE1D7E2290008F9F3E83F - 93DEEA9900330C483383806C750890B12EFAA19A7CDD6A89A9934E3AAFE7C4A9 - E70E1E38A46050F78E7DFBA676E8203309000087C813F9B6EDDDBA79CBDA451B - 167CF6DABAF99FFC6B87558F7511D7853F5493C26F7EDD2CF8B2D5055F177DD9 - EA42AF8BBF6CCD2010D3E22D0068A1660344A820D05418907E50D13FAAAF5BE0 - E7929353534F987E71EF41234FECD5B56BBFFCCEF9BDF233F3BA76EAD82E2137 - 31B193F9FB00008E431EC2B3F74063794559F19ED292ED25C5C59B4BD617FE7B - FBA71FBDB8ADAEAE460AB859BCCDA6BFA6FB7A7CBCA26F167E119747FDA6780D - 005A384140F6C9560AB9DE0687013D3EA6F0076D753BF27AA9E99929C3479EDC - 79E0D0095D7AF61C9C9FD7B95B5E4A46765A7A6A7A7A4A62665A7266525A5A72 - 4E6A4A5A5A5A636A5D6ACD2195CAED8A01C41BB9CD6E6AB6AA49A849AEA9ADB6 - D41DACA9ABA8AFAE6DA8A8AEAAA9AAAAAD3C545D565A54B663C7BA920D6B16EE - 5E5538AFB4A6AA42176929D87AAB9B59C8F5D66CB22FB8E84B335F4F8ABA6C7D - 55F8353F141AF9339A7F4EE99B41406FA5E93070A480DB5B29F0663F78ABBFA6 - 9B7E0DB3C96BEBA67F07732BAC6D62626A6AAAEC0380B85153536315D206B3B8 - CA568FCDAD6E5290839B2EE2C14D1778BD95EF35FB7A2BCD7C6DA1B7FA77D0A4 - 6F8EE38E2E3C7E611656F9B39B4DBE66B650455C1777B3D0EBAD0E024D35790F - D9CA6BEBF733B742B6BA2FCC3E00C4A2A68AAA6C75D135B75290A5AF8B74A826 - C55DB666810F55ECCD26AF6D36790FB369F2355FF06B8191A2ABE9CFA0A9C2AC - 8BB62EE4665F9A0400D9A7B7C1DF63EED3CD7C7DDD17D20FB5058058A58B6BF0 - D62CC2BAAF8BB3345DB4CD02AEB7CD15F9E07EF0EBEBAD90BEA6F7F986DF0B8C - 2EBC9A7C1E660B2ED6B295626EF6838B7BA87D66335F2F5433058F0120D69845 - 56C83854338B73A86616F650FBE467CD7EF0D66C26F9BA2F5160BED054F1359B - 146D21C55D842AEA4DED93BEFC9C7EAD504D93EF0780786416DBE0A26C3629E4 - B295EF370BB9D982F709F939A1BF6E3653A87DBE63161E7C21B8200BBDCFFC9A - 59E485EE076F851E0737A1BF47E87DC2EC03402C338BADD9D7855B1764B3E9AF - E9621EBC15E63E217DB39942EDF3358A4CF3CCE2ACE9CF4CB6BA09FDBD3236FB - C1DF17DCD75BDD078078671663731BDC37F705177E11FC3D7A6BD2DF8B20149D - 9609271088E6F689E65E0700E2DDF10AB559D0838B7BA87D260A7E98283A6D13 - AA900BF3730D15009AFADC9BFBFB68EE6B00E025A10AB3D6D4D7CCFDA10A7C53 - 3F47C16F258A4A64C9E779BCCFB4B59F397F5700624553C5FA788EF773F2F5D6 - BE36825054A2279C7000007E4791070000000000000000000000000000000000 + 549849444154785EEDDD077C5D65F9C0F1377BB72549D3A67BEF996EA0B4EC21 + 5354282A28531CA02282822032643900FDE36009282AB2649659868074B7E9DE + 3BCDE84A9B3DFEE7B99CB7BEBDBD496F927BEE39F79EDFF7F3797DDFF724B937 + BDC53ECF79D749508826F9BCF9CC0120B466BB200A0846919768D7ADE1730780 + 438513F89BEC1A114020EA989682BDF9B9EA76F067DDD267CFDF098078D55290 + 0FBEAEFBE6F5967E96A4A09D08366D132AE09B9FA1F9757D3DD435A9437DF6A1 + AE01403C0915C8E55AA8A0AF837BA86B22D46B9110848980D3BA50815AF7CDAF + E9B6794D077EE99B6DF37B742DCCEB0010AFCC602F745B5FD77D09E4665B98DF + A3BF16DC36995F431002CEE14205627D4D5F973A38C087AACD127C4DE85ABF96 + D0D75A72A4AF03805B8E146CCDAF07DFDDEB602D4507FF50D7826B61B6A5D6C5 + 14EA9AAF114CFEC70CC2423E1BB3E8AFEBB60EE8BA1D5CF4D75AAA45705B93B6 + D9078058161C7C753B54106FAD0E55CCAF495BE8B6594CF275DFF37B90D1C157 + D39F4770A04EB28AEE9B45AE07B7CD6BBA1FEA6785F91ED29622740D00F14207 + 61332007076DB3C8F5C6A06BBA6F5E0FFE1E29FA6785EE4B2DF4FB69FABAEFF8 + 35D0E8A0AB9981586AE99B815BDA6660D7FD239544959C9C7CCCF4F30B468D9D + D9B77B8F417D738EEA5A98969A96959C9C9A999C9C949998929191DA9C9C9998 + 9E94D1989C9691D95C9B9150579B6CFD2C00C48DE6D4B486AA84B4EAA486DAEA + A69AC6EABA8486AAA6FAEAEA8686C6AA8686BAAADABADA0395BBCB76946C5FBB + A978F19C4DFFF9F0B952D5D0D060FDA8046809E6E114F95EF3FBA5AD93013309 + D0D74DFA6BBEE1B704400779A1FFEC3AE0EBFAF3C07D7830D74582B3AE0FB6C5 + A9E77EB7FFC851D387E577ED6505FABC3ED9D95D7A653426F54CEAD225DDFA1E + 0040981AF7ECA9A94E6ADCB67FFF9EAD95BB2B3697976DDDB4ACF8C395B35FFC + DD062B2F90C4408A04F6E0B60EFEC14527063A113013023319F04D22E0970420 + 38F0EBBE6E4B10975AB70F09EE769D62B7759D7CE2E9DFE83DEDB82F4FECD967 + D884ACFC1E637352D373ADEB00008754D6D5EC3A50B67DD1B62D2B177CF2C1B3 + F3DE79FD892DD6659D04D41BB5047B3331D06D09F03A19D0898030DB22EE1381 + 784F005A0AFC12D0CDE0AF4B4BC15EEAD48953BE5070E299974FEDD577F884AE + F9BDC7A6656476B3AE03005C525B5DB5B3AC7CCBE2AD9B56CC7FE795473E9DF7 + DF574BADCB75563193815049812E3AF04B5BF8261188D704E048815F6A1DFC75 + 809776AAD197764A8F1E8373BE7AC55D33878D9E766A5373EA84FCFCAEF1FA99 + 01404C2B2F2F6B4E4CA89BBF72E927B3FFFAE79FCED9BE7D4DA5755902BF9910 + 485B82BDEEEB24406A5F2502F116CCE4CFA3FF4CBA9640AF8B0EFC12E4759160 + AF8B04FDD4E4E4F4F44BBE75EFC471934F39ADB0A0FBF4A4B4CE19D67500408C + 68ACDD5BBDA3B4E4C3459FBDF1C65FFE70E3BC86869A1AEBB2047F9D0CE82249 + 802E3A11905A17A11301A9CDA420A6C5530220815D933F97F4A50EBEDB0F19F4 + AD9276FCA917F739FD8BD79C5BD867F849D9E9995DAD6B008018B7BFA6AA6CC7 + E6156FBFFEFC832FBE37FBC9CDD6A55AABB4960C048F0A483BEE4603E2210190 + 3F83FE7398815F077D5D74E0D701FF60E03FE38BDF1B74C679D75CDCA367E713 + 1212BA9A890400204E343797356DDFB6F7DDD75E78F0C9D79E7F68AD75C94C04 + CC84402701BAE804C04C04A43693829813CB098019F88519F45BBAE30F047C5D + 7FF9A29F8E3EFEAC2BBE9E9A92734C5E5E5E2C7F1600803055545434D7D557FE + E79D97FFF4E4737FFB65B175492702BA6E6D4420783420661381580D7A66F0D7 + 815F6AF38E5F02BE047FF36E5FF6E3A77DED8ABB27CC3CF96B17E775ED39C9EA + 03007CAAA27CDB6773663FF5E4D38FFC6481D59504C05C2B204512004906CC11 + 0109F8313F1A108B09803944AF83BFBEEB6FE98E5F4AFA59E77F7FE87917DD70 + ED51B9DDC75B7D000002CACB4A16BCF88F5F3EF8EA730FAEB2BA92044832D0D2 + 88404BA301D28F19B19400C8EFAA7F5F1DF8A50EBEEB37EFF80381BF57BF91B9 + 3FF8C99397F51FDCFB8B09095DE5FB00003844737359E3FAD55B9EFBD59D5F7D + 74C79695BBAD4B3A11304704E266342056128050C15FDFF99B77FD66E0CF50C9 + C919D75EFFF849D38EFBE277D2D233F3AD6B0000B4AAB6A6AAFC930F9EFFFD03 + F77DF36DD5D0506D5D92622602A1D607C45C12100B0980047A2DF8AE3F54E097 + 79FE8C134FBB74E005DFFCC5F7BB16F49C68F501006893B2D26DF3FEF1F82DBF + 7DE78DC7D6595D49028247047422103C1A203C9F04783D01D0C15FDFF59BC15F + 02BF24007A8E3F70D79F9E9E9D75EBFDB32F1DD267D045893905F23D0000B44B + 536569FDEACD6BFF76DB8F4E7DACA666FF01EB921E0DD0451200735A4027013A + F8EB84C07324907A5570F097A203BFBEEB0FDCED5B25D32A5993A79DDDF7E7F7 + BF714FAFBE234E4948CBF2F29F0D0010032496E417F41E77D2E9DF98B875E3AA + 253BB6AD915100894BBA08DD0E75C7DFD275D7793148CA87151CFCE5F7D473FD + 870CF55B45827FF695D7FC6EC657AFBCE3BEAC9CDC3E561F00808849CFCCE936 + 6EEA79A7E6E777DFBAE0B3D7775A9774D0D74533DB5AA86BAEF35A02607E9052 + EBE0AF1380FF2DF0B3837F5656E7CE77FCF683AB078F3CEEDA9C9CCE3C771F00 + E088B4B494F4BC8281271E33E3FCAC4FDE7F76597D7DADDCD99B71AB35E17C4F + 54792901303F44A9CDE0AF87FC25E84B90FF7CC8FFD8F3FAFFECBED9F7F4EA33 + E484CCCC4CCF7DB80080F822B126AF6BCF51279C7EE9841D9B572FDEB67595AC + 093063971EEE6F693AC033BC9200C887627E803AF09B77FDFACE3F10FC2FBEEA + 9EA3BF71F5DDBFCECEEAD2DBEA03001035E9195905538F3BE7B48CCCCEEB17CF + 7FBBD4BA6406F7E0402F7D9D10047FCD355EF845E477D0BF87DCF5EB22C15FDF + F99BC3FE59DFBBE1F193671E73C64FE365957F6D6D8D2AD9BA556DDFB2596DDF + BC49959796A8EA0355AABABA4AD55459B5556AAA0FD875B56A6EF2E47A12003E + 969494A4D2323254466666A0A467D8B55532B3B255B7C21EAAB0771FD5C32ADD + 7AF654C9C971F1CFB76AACDC593FE7A3D7EEFCDDBD97BE6D75F52E01F3DC00BD + 55509F15E0996D826E2700470AFEFACE5F86FDB3AC9279E31D2F7D69E0D069D7 + E4E77775FB776F975D65A5AA78E17CB57ED54AB5CD0AF63BACA05F5E2AEB4900 + C01F12131355819D10F4ECD3570D1E3E528D1857A4723A77B6BF23B694979735 + AF5BF5C98377DF7CCEBFAC6E9555241190DD02523C9B04B81944CDE02FB50CF9 + 07077FBDD25F4EF5CBB9F357EF5C3A62CC71175BFD98B16FCF1EB57CF102B56C + C17CB5D40AFC255BB7D85F010098FA0E1CA4468E9FA0465965D898B181918358 + 52BCF883277FF6A3131F530D0D9556578F04E8C383CC24409F17205C4B02DC4A + 00DA12FC339392D23ADDF7C7CF7ED87FE09833ADBEE7EDDCBE4D7DF8D61BEAB3 + 0F3F509BD7CB23A701006D919090A8060E1DA6A6CE3C5E1D73E229EAA8BCD838 + CD7DE3BA252FFFE8AAC9BF696CACDD67756534C0B349805B0980047B21EF2F6D + BDE0EFB0E0DFB973C151F7FCDFA7B774EBD17FBAD5F7AC039595EAD3F7DF551F + BCF9865A55BCC4BE0A00E8284906C64C9CA4A69F7C9A9A74EC7495962EE1C1BB + 4AB6AFFDF0C66F1FF38BBD7B4BE581422D250192004822A003BF9E16881A3712 + 80D682BFDEEA1708FE6969599D7EF3C8C25F14F61A7CACD5F79CE6E626B5E8B3 + FFAAF7DF784DCDFFF843555F2F7FAF0000A7A46764A829338E57334FFB821A36 + 7AAC951CB8751FDB3A4902BE7BF1A85B834602A4043F43C0B52420DA9F9CBC9F + 2E3AF84B91C0AF57FB07B6F9252525E5DCF7C705D77971D8BFA9A9497D32E71D + F5E25F9F545B36ACB7AF0200A269C88851EABCAF5DA2C64D99E6C94460C3BA25 + AF5C7F55D1AF1A1B1B654D802C0C944440EF0E90220980990444752A209A9F58 + 70F0972277FE52CC617F59ED9F7DFB0373AE183566C6D7ACB6673434D4AB0FDF + 9AAD5E7AE66916F3018047F41B3C449DF7D54BD4E4E9C705A60BBC64D9A20F9E + BAF907331EB19AFBADA2B709EAE9001905D06B02A29E04C8DD7734E8C02F8E18 + FC6FBCE3C52F174D3AF50AABED0912F8DF7EF925F5C02F6E092CEEDBBF4F4674 + 00005EB0675785FA74CEBBEAD3F7DF0BEC1CE8DD7F806746040ABAF71DDB6FE0 + B8CAFFBCF70F59116E0678297AC85F077CA9A3F68B472B01D029990EFEF2BE7A + CE5F270081E0FF9D1F3F7AEA883127FD283333CB137F7BCB16CE57F7DEF463F5 + C19BAFABAA0392BC0100BCA872EF1E35F7A3F7D5E2CFFEABFA0D1EEA999D03E9 + 597993FBF41BBA6DEEC7FFDE6C7575E03783BE6E0B9D0498D71C118D0440FE20 + BAE8E0AF17FD49F00F2CF8B34AF6D7AEB87BDA19275F706BD65105D14A4C5AB4 + A7A242FDF9D7F7AAA7FFF87BEB3FAABDF6550080D7ED2A2F53EFBEFAB2DA6725 + 0443468E56A9A972AFE91EB9A1EDD7BDD7D1A9D9F9AB972C785B4E7E3387FBA3 + 3EF4AF391D688F14FCE5CE3F10FC271F7B6EBFAF5F7DCFFDA9995D2421704D63 + 63A37AF3C5E7D4AF6EFDA95ABF7AA57D1500105B9AD5BA952BD49CD75F555D72 + F3549F01035D9D164848CB4AEA3FB468DAC6754B3FDCB175B50C270707FFA873 + FAD3081EFA97C07F58F0CFCAEAD4E5A127563F70547EB7E156DF359BD7AF53FF + 77F7ED6AE3DA35F61500403C18316EBCFAF60D37ABFC6EDDED2BEED8B36BE7F2 + EF5E3CE4FB070EECDB63756561A0EC0C30CF089022898114A1EB88737204C0BC + FB97F7D177FF7ADEFFE0D0FFEDBF99F3AD5EFD86CDB0DAAE686E6E0E6489BFBA + E5276A5759997D1500102FCA4A4AD4FB6FBEAE7AF5EB1F7820915BD233B2BB8E + 183B33FD9DD71E5D6475F50840702D1C1F15702A0130837FABF3FE977FF7C119 + D3669CFF5DABED0A79BADE1FEFBB4BBDF0F45F5453A36CC70400C4A3FABA3AF5 + F1BB6F059EAC3A727C914A4C74F21EB86509499923F2F30BD72F9C3B7B9BD595 + A06F1609FC8E077FE1D49FDE1CFA97C02FEF63AEF80F04FFA249A7F7BBF8EABB + EF4A4A4A91EB5127E7F4DF79FDF7D5B2450BEC2B008078B76679B15A32EF3335 + 66E26495991DFD070E65666626F41F3C66E2FA550B3FDAB17DADAC07080EFEC1 + 456EA6A58E28271200F3EE5F5E5F27019200E8E09F9595D5A9D3ADF7CFBE333B + 27AFB7D58FBA396FBCAAEEFFD94FD4DEDDBBEC2B0000BF909D02EFCF7E4DF5E9 + 3F5015F68A7E18921BDFD1453387BDF3EA23EFD5D7D7EAD300CDA2037EC403BF + 16E904C00CFEE6D07FF0BC7FD62DF7BF7579DFFEA34EB4DA5125F3FDCF3FF584 + 7AF2F70F30E40F003EF6F994C03B2AAFA040F51F3CC4BE1A3D19999D0A868D3C + 36F1DD371E9727C805077F33097044A4130073E8DFBCF33FE4EE7FE669970C3D + EEB85937A46765E9EF8F0A39C3FF89DFFD56BDFCF7BFDA570000FED6ACE67FFC + 914A494D5543478D89FA56C1BCAC8CE1A5BBCB3ED9B876B1EC0A90A01FFC6C00 + 690B69CB2F17B1A420920940F0DDBF047FF3EE5F827F66525252A79FDCF1E2CD + 79053D7A58FDA89127F5FDEECEDB02433E0000988A17CC53D5070EA831932645 + 350990F301060D2AEAF3DA8B0FBDDFDCDCAC9F0B604E09E84420E2229900E8BB + 79794D5D8287FEB3BF73DD23A78E1A3FF37CAB1D35D5550702C7F92EFCF463FB + 0A0000875AB36299DAB97D9B2A9A764C547708646677EE9E9BDF538E0ADE6875 + 43AD07D0223A0A10A93F61F0DDBF14F3C01F4900B27AF51DDEF5E26F3D785B5A + 5A8AF4A34282FFEDD75DA356172FB5AF0000109A1C082787C14D9D71BC950444 + 6F96BA6BB7A1233EFDE85F6FEDDF57218702B5B42830A22301914A0082EFFECD + B9FF40F0B74ACE4DBF7CF5AA1EBDFA8DB7DA5121C3FE72E74FF00700846BC7D6 + 2DAA7CE74E35F19863A3361D9096969A3164F894F4B75E7D44F6A54B02A08B99 + 0088888D0244220108BEFB37E7FE0F2EFC3BED9CAB479D72E679D726244467E1 + 9F2CF87BE8CE9F33EC0F0068B34DEBD6AABADADAC05901D1929B9F3A78F7AECA + B9EB56CFABB0BAC149803013810E8B440220015D077FF3EE5F82BF94C0637E7F + 72FB8B376766758FCA21CCB2D5EF89877EA33E98FDBA7D050080B659BD6CA94A + CFC80C3C51301AE406B9EFA0F17D5F79F6D7EF585D09FC7A5160F02880D6A164 + A0A30940A8BB7F99FBD743FF8195FFB3BEF18B29138F3EF322AB1D15B2CFFFE5 + 7FB0D50F00D031726260B71EBD54DF8183EC2BCECACAEA54909098B8AC78D19C + 1D565782BE2401920C48B09712B151808E0EC74BE017F23ABA4852A193804022 + 70FCC997CCB2EAA878EFF557D4B34F3C62F70000E8983FDC7B67609B60B4CC38 + E51B1233E5265A62A82CA697982AB1D58CB542C7E076D12FD21EFA8DF50880FC + 72E6144020F89F7DE1F5A3BAF6E833D66A3B4EE66C1EFBEDFD760F00808E6B6C + 6C540FDEF173B5A742A6E69DD7BD7B9F71677FF9BA515653A6D1753C95D8AAE3 + AC8EBB42D76DD69104403333123D05A0B700A69D72C695175AB5E3E4E94EBFBD + EDE6C0CA7F00002269DF9EDD8185E5B2C03C1A4E39EB5B123B2501D023005224 + C69A31B7432493680F9D7DE822AF63067E59F89775F299578E38F1B44BAEB0DA + 8E92457F7FB8EF976AF9E285F615000022ABAC64874A48485423C639BF9BBD53 + E7DC9EBBCAB67FBA7ECD02BD2340EE6EF58E00736740BB75348390E02FAFA187 + 252401D0C315E9677FE9071758B5E3DE7BED15F59F77DEB47B000038E3B9271F + 53CB16CEB77BCE3AEB821F4A0C35A70124C6EA782BB1576270BBB5370130EFFE + E535A4983B00D28E3DFEC27EE95979C75A6D47C933FD1F7FE8D7760F0000E7C8 + 88F34377DE169547C9F7EA9D77ECF41366F5B59A32B22EB155E2AC390D60C6E2 + 366B4F0260BE914E000E1B01F8C2F9D79E919FDFB55DBF54B86461C6EFEEBA3D + F048470000A261CFAE0AF5C86F9C5F709E90D035F18C2F7EEF0B56538F004869 + 6904A0CDF1B63D0980263FAB83BFB9F82F35353533B3FFC03133ACB6A366BFF8 + AFC008000000D134F7A3F7D5A2CF3EB57BCEE93760CC0C89A956538F00489C95 + 5A2701ED8EE3EDF941C93274A6112A0948FDCA376E9990969E7994D576CCEE8A + 72F5ECE3ECF70700B8E3F1077FEDF808747A46D651175CF2B322ABA947004205 + 7F332E87ADAD09807E03A9CDE07FF0EEDF2A6913A77DE144AB76D4530F3F14D8 + FA0700801BE4D1C12F3DF3B4DD73CEC469674A4CD5EB0074BC359300333687AD + AD0980266FA29300F925741290DABDE7A0CE79BD0A1D7D7AC2D2F973D5C7EFBE + 6DF7000070C74B7F7B3290083829B777E194AEDDFB77B69A3A01D0715707FF36 + 057EADAD09807E2329FA1790E18883C3FF177CFD96E9D9C97992A938420EFA79 + EC815FD93D0000DC233149A6026477805324A6CEFAE6CF65579D4E0074DCD571 + D88CCD616B4B0260BEB0CE3AF49B0782BF9411E3A71F6FD58E79F7D57F079ED5 + 0C008017C86240A7CF06183DE63889AD81386B1573144062B119CBC34E02DA3A + 0220F4CF482D456722C9638B4EEE9E949433D26A3BA2A1A13E2AF32D0000B4C5 + 0B4FFFC56E3924396B94C458691945C761A1EBB0B5E50724ABD0457E4E671F07 + 47004E38ED1B13F3F2F2C2CE3EDAEA83D96FA85D65A5760F00006F58B668815A + BD6CA9DD8B3C3957E7F8D32F996035834700A4484C36637458C24D00825F50BF + 990EFE81D277F0983156ED0839F4E7C5BF3D69F70000F016A74701FAF51F2B4F + D63D1873AD2231586271702C0F2B09083701D0E4FB759137962188409D949494 + D6AD5B7F797CA1233E79EF1D55BA63BBDD0300C05B16FEF713B571CD6ABB1779 + B95DFB8F94586B350FC65EBB366373D8DAF4CD36C92CF4DDBFFE0552A64DFF4A + 2F39B0C06A475C7373937AE1AF0ECFAF0000D0412F3838529DD3292B77DAF4F3 + 7B594DB9FB3783BF8ECB6D126E02A05F5C8ACE32A4C89B078622A6CD386F9C55 + 3B62C1271FAB6D9B36DA3D0000BCE9B30FE6A8926D5BED5EE44D3E36106BCD29 + 009D04483163F511C90F1C49F00B495FBFA92EC9BDFB8D766CFE7FCE1BAFD92D + 0000BC4BCE03F8F0AD37EC5EE4F51F3C6EB455E9BB7FB3848AD5AD0A2701D074 + 86A1B38C40E097929494949A5FD86784D58EB8CA7D7BD5824FFF63F70000F036 + 49009C3A18A8A05B9F1156CCD553003A1190986CC6E8B084FD8D367913FD463A + EB4839FEB44BFB65A465E658ED8893C57F8D0D0D760F00006F2BDDB143AD2A76 + 664B606A5A66272BE6F6B79A3A064B9198ACE373D8C24900CC173583FFC12460 + C4E863065BB5233E78F375BB0500406C70721A60D8E73157AF013063B219AB75 + BB45E124009A7E415D0E2600F9DDFAC9AAC488DBBE65B35ABB62B9DD03002036 + C8E8B5538F0AEEDEBD5F4FAB0AC45FABE8C06F96B0B425011087047EAB04E620 + BAE416F6B0EA887332830200C0295507F6AB059F38B37EADD351059200986B00 + CC44206C474A00F48BE9C0AFDFC04C02923AE774722401F8ECC3F7ED160000B1 + C5A91896D339B7D0AA74D03783BF19A785AE43926F0C87F92287BC516A6A464A + 537D4237F94224EDA9A860EF3F002066C9F3019CD80D9093A8BA2525A5EABB7F + 33266BAD067E2DDC0440C80BEA223F17B8FB1F33F9946E5D0ABAC92F1251CB16 + 39FB684500009CB4675785DABE7993DD8B9CA49C6E2945534E951BEF401CB68A + 4E0274094B5B120021DFAF837FA01E3EE268471600163BFC6C6500009CB6CCA1 + 583664C4D1BDADEA602CB66B29610BE79BCDBB7E61F6137BF61E2C8B1122CEA9 + 0F0D00806871EA66B667AFA1127B75D0D7715904F75BA4837A4B825F40FAFA0D + A52475CA2D8CF8FCBF1CA22005008058B67CD1C2C003ED222DB76B6181559977 + FE5242C5EC16C90FB4A4A5E02F743B212D253D2370258298FF0700C483FD95FB + D4A675EBEC5EE4A4A4A4675AD5C1582CD72C6D4A025A4B004CE60B986F989892 + 9616F10460DDCA15760B0080D8B66E65E40FB44B490DC4DE83B1D8AE35B3DDA2 + 7012007921B31CF286A9C9911F01D8BE25F2AB26010070839C6A1B69C9A9E9E9 + 5675584C0E2AAD0A2701D0F48B992F9E989C9AEA400210F90F0B0000373811D3 + 525520F69A415F33DBAD6A4B0220F4F7EB374C484A494E0B5C8990EAAA038143 + 80000088073B1C4800923292F5088059DA14D3C3F966795193CE38A44E54C949 + F24B44CC8E2D5BEC160000B1AF74C776D5D0506FF72223392170F3FD791CFE5F + 02600AEE1F269C04406BE1C532229A006C73E0D4240000DCD2D4D4A4766EDB66 + F7222329FDB0D8AB63F41103BFD69604C0F4BF8CE3C0FE088F0030FF0F00882F + 915E07905A57694E01B42B9687FB436666A1DB018D49C9721041C494ED2CB15B + 0000C487F208C7B63D75C9A19EC163C6EA236AEF0880382C1988045904080040 + 3CA9AEAEB25B1165C6E136C7630F26008E7C480000B8A6C699D8D6A138DC9604 + C07C9388077ECDA10F090000D7387C73DBAEF8DCD611007961C782BF70689804 + 0000D7D44427B6B5293E77740A20E218010000C41B074700742C6E734CEE4802 + 20229E04B0060000106F6AAAABED56447528067734018838873E2400005CE3C5 + D16DCF2500CDCD4D760B0080F8D0E4C1D8E6B904000000388F040000001F2201 + 0000C08748000000F021120000007C88040000001F22010000C08748000000F0 + 21120000007C88040000001F22010000C08748000000F0A1D61E25285F939264 + 9564ABA45925C32AD956E964955C298FFCABFC99BCBCBC883D16F8C2138EB15B + 40FBA46764A8FC826E76CFDBF6EED9AD2AF7EEB57B00E2D580A1C3D45D0F3F6A + F73AAEA2A2A2F9F22FE5CFB29ABBECB2CF2AFBAD228FD4ADB54A83551AADD26C + 97C3900020AE8C9D3C55FDE0D63B024940AC285E304FDD79FDF7557373C8FF8F + 0288035E4C009802405C39EE94D3622AF88B514513D5F8A947DB3D00880E1200 + C4951EBDFBD8ADD832FDA453ED160044070900E24A56B6CC4EC59EB193A7A8A4 + 6499690380E82001405CC9EE9463B7624B6656B61A3A6AB4DD0300E79100206E + 242525050269AC2A621D008028220140DCC8CC8EDDE02F8AA6B2030640F49000 + 206E64E7C4E6FCBFD6A34F5FD5AD474FBB0700CE220140DCC8EE14DB0980603B + 208068210140DC88F5110031611AD30000A283040071231E4600468C1DAF3232 + 33ED1E003887040071232B0E4600E42C80D11326D93D00700E0900E24697DC3C + BB15DB580700201A48001037FA0F1E62B7629B9C079090C0FF3501388B7F6510 + 17121212D4A06123EC5E6CEB7C54AE1A3064A8DD0300679000202E74EBD94B65 + E5C4E631C0A1300D00C0692400880B83860DB75BF1A188ED80001C460280B830 + 68F848BB151F640AE0A8BC7CBB070091470280B8306464FC3D496FFCD469760B + 00228F0400312F5E17CD8D9FC23A0000CE210140CC1B3B698ADD8A2F63264E52 + 29A9A9760F00228B0400316FDCE4A9762BBEA4A567048E06060027900020A625 + 2626AA319326DBBDF8C37640004E2101404C93C37FE2E129802D299A7A4CE090 + 230088341200C4B47153E273F85F2B282C543DFBF4B57B00103924008869E326 + C7FF5639A6010038810400312BB0FD6FE830BB17BF3815108013480010B3E275 + FB5FB0A1A3C6C4F53A0700EE200140CC8AD7ED7FC164A7835F921D00D1430280 + 9814EFDBFF82B10E0040A491002026C5FBF6BF60B2DB212929C9EE0140C79100 + 2026B9B1FD6FF3FA75762BFA24D9193C22BE9E7808C05D240088496E6CFF7BFE + A927D481CA4ABB177D4C030088241200C41CB7B6FFAD5951AC56162FB17BD127 + A7020240A4900020E6B8B1227E4F4585DA5556A6562D5D6C5F89BEDEFD07A8AE + DD0BED1E00740C0900628E1BDBFFD6AE5CAE9A9B9BD5CA25EE25008269000091 + 42028098E2D6F6BFB52B9605EAF5AB57A9FABABA40DB0D452400002284040031 + C5ADED7F6B562C0FD40D0DF556FBF364C00D23C74F5069E9E9760F00DA8F0400 + 31C58DED7F32F4BF7ED54ABBA7D4AAA5EE2D044C494951A38A26DA3D00683F12 + 00C41437B6FF6DDBBC4955571DB07BCAD59D00826900009140028098E1D6F6BF + 75F6F0BFB6BA78A96A6E6EB27BD1274F074C4848B07B00D03E240088196E3D10 + 472F00D4643460D33AF74E053C2A2F5FF51D34D8EE0140FB90002066B8F5F4BF + B52B57D8ADFF59E9E27900A2680AD300003A86040031C1ADED7FB2E56FF386C3 + EFF6DD3C1048C83400007404090062825BDBFF36AC59A51A1B1AECDEFFAC7471 + 278018386C78604D0400B417090062821BDBFFC4DAA00580DAEE8A7255BA63BB + DD8B3E5904E8D66702203E90002026B8B1FD4FC811C02D59E1F2B1C0AC0300D0 + 112400F03CB7B6FF89E01D00A655C5EE260063264D51C9C929760F00DA860400 + 9EE7D6F6BFCABD7B55594989DD3B9CDBEB00323233D5B03163ED1E00B40D0900 + 3CCFB5ED7FD6DDBF1C03DC921D5B3607920437712A2080F6220180A7B9B5FD4F + B436FF2F028F07767B3B2009008076220180A7B9B5FD4F843A002898DB0940F7 + 5EBD55A15500A0AD4800E0696E6D7593B3FED72C2BB67B2D73F3C9801A870201 + 680F1200789A5BDBFF36AE5DA3AA0EECB77B2DDBB076B5AAA9AEB67BEE601A00 + 407B9000C0B3DCDCFEB762F122BBD53A392570C592F0BED729C3C68C539959D9 + 760F00C2430200CF726BFB9F58BE78A1DD3AB2650BE7DB2D77242525A93113DD + 592889D823FFBDC816D24E5DBAA8BC8282C01A923E0306A941C347A861A3C772 + C4B48FB4F65071F99A9424AB245B25CD2A1956915B0D599525FF95E43EF2AFF2 + 67F2F2F222F670F20B4F603E139FBBE6E6DBD4D1279C64F7A24756F75F71EE19 + 6A7FE53EFB4AEBFA0D1EA2EEFEE3E376CF1DEFCF7E5D3D7CCF1D760F7E909090 + A8723A77565D72F3AC921B547F5E3A1F75944ACFC854A969692A25353550CBCE + 9A2379FBE517D523BFB9CFEE21126434F3AE871FB57B1D575151D17CF997F267 + 59CD5D76917FB064DE52E6246BAD220F3169B48AEC650EB99F9904009E24FF48 + FDE985575DD901B079FD5AF5E3CB2FB17B4726FF10FFF945777E576DDF9E3DEA + 5B5F3A4B353535D957100F723A750EDCA117F696DD1E7D02ED821E3DECE09E1B + 56306F0F59FF22497063A3C40F4482171300A600E0496E6EFF5B1EE6FCBF263B + 06962D5C60F7DC21C3B9F28440C49EA4E464D567C0403565C6F1EADCAF5EACAE + BEE166F58BDFFDD14A2A5F0B1469CB35F99A7C4FFFC143D55179F98E057F216B + 4A38663AFE9100C093DC7CD2DD8A36CCFF6B6EAF0310E3D90DE07912ECFB0D1A + AC4EF8C259EAB21F5CAFEE7CF811F5C4AB6FAB7B1F7952FDE0D63BD485975DA5 + 669C7ABA1A326254E0EE1F701209003CC9ADED7FA23DABFA8B17CCB35BEE299A + CAF49997C81D7AA8607FF79F9E50575E77A33AF9AC73D5C0A1C3554A0A77DA70 + 0709003CA75397A35CDBFEB775D3C6C07C7A5BEDD8BA45EDAE28B77BEE906093 + DBB5C0EE21DA12121254B71E3D0381FD073FBF53FDF985D708F6F0341200788E + 9BDBFFDA33FC2F64E740F102F7A701381428BA6415FEB499270482FC837F7D56 + 3DF0F43F0377FB538E9BA9B27272ECEF02BC8904009E337E8A7BC3FF6DD9FF1F + AC78A1FBD300AC0370966CA31B3D6192BAE8CA6F07B67ECA5DFEB5B7DC1E18E6 + EFDABDD0FE2E20369000C05364DED4ADA7FF89704F000CC5ED9D006274D1C440 + 904264C87F8F321D75CEACAFAB9FFDEA41F5E8BF67AB9BEEFBAD3AFBC2AF06CE + 7F00621909003CC5CDED7F328FBF675785DD6BBBF29D256AE7F66D76CF1D12FC + 478E2BB27B688FB4F4F4C00154B22A5FCEA290BDDBB3AEF8961A397E0273F888 + 2B2400F01437B7FF7564F85FF3C26E00A601DA4EB6E78D9B3C557DE727B7A83F + 3DFF4AE0144AD973EFE6E14E80D34800E0296E6EFF5BBE2802098007CE0390C7 + 03CB8A74B44E3E23D96F7FE9353F540FFFF32575E3DDBF52D34F3E55A5A5CB81 + A740FC23018067B8B9FD4FB4770780C90BEB00F20BBAA9DEFD07D83D04EBD5B7 + 9FBAE0D22BD5034F3F1B3865EF9473CF0F9CA408F80D09003CC3CDED7F3277BF + ABBCCCEEB5DFBE3DBBD5E6F5EBEC9E7BD80E78A8F48C0C75D6051705F6E5DFFF + F85FD5795FBB441514B26A1FFE460200CF88D5ED7FC13816D85BE491B777FDE1 + 31F5D5ABBE13382C09C0E74800E009B1BCFD2F9817D6010C19392A70480D941A + 3361B2EAD1BB8FDD03A09100C013DCDCFE2722390220C9843C21D04DF2886259 + D50EA5F2BB75B75B004C2400F00437B7FFC9FE7D299122CF525FB76AA5DD73CF + F8294C0388EAAA2ABB05C04402004F7075FB5F04EFFE352FAC03183B796A607F + BBDF1DD8BFCF6E01309100C075EE6FFF8BDCFCBFE6850703656567ABA12347DB + 3DFF3A505969B700984800E03A37B7FF89658B221FAC57172F550D0DF576CF3D + EC062001005A420200D7B9B9FDAF74C776ABECB07B91535B5BA3562F2BB67BEE + E13C00990220010042210180ABDCDEFEB7D4C1B3FBBDB00EA067DF7EAA5B8F9E + 76CF9FF63302008444020057B9BDFDAF78FE5CBB15795E580720FC3E0DC01400 + 101A09005CE5E6F63FE1E4A13D6B572E5735D5D576CF3D7E9F06A8A9AE524D4D + EE9ECB00781109005CE5E6F6BF8D6BD7A8CABD7BED5EE435363444E401431D35 + 62DC7895919969F7FCA7B9B999750040082400708DDBDBFF8A173837FCAF2D9D + EFDC1A83702527A7A8514593EC9E3F310D001C8E0400AE717BFB5F3482F3D228 + 2419E1F0FB3440D5FEFD760B80460200D7B8B9FD4F86E7572E5D6CF79CB375E3 + 06B577F72EBBE79EF153A7059E0FE0574C0100872301802BDCDEFEB76AD95255 + 5B5363F79C23F3CFC50E6E350C5797DC3CD57FC810BBE73F2400C0E14800E00A + F7B7FF452F287B611D80289A7A8CDDF29FFA3AF74F6504BC860400AE707DFB5F + 14EFCABD300220FCBC0EA0B1B1C16E211CBBCACB545D5DADDD43BC2201802BDC + DCFE278F875DB76A85DD735E79E94E55B2758BDD738FECB8E8929767F7FC45D6 + 7CF8556363A3DA5FB92FB0E555EA03FBF75BFF1F381038A3428EACAEAFAB0B3C + B742BEAFB9B949EDB0FE5B7DE51FCF04A6AF10DF12EC3A14F99A9424ABC83345 + D3AC9261956CABC8D86DAE9447FE55FE4C5E5E5E6BAFD326179EE0DF614ABF90 + ED7F7F7AFE15BB177DF33FF98FBAEFA61FDBBDE8B8ECFB3F52279F7D9EDD73CF + 1FEFFFA57AEF35F73E7BB75C7ACD0FD529E79E6FF7625BE5BEBD6AE7B66D6AE7 + 8E6D6ADFEEDD81F50D12D465AB63A06DD55507F6078E40AEB2FAB2D68560EE3E + 49C0EF7AF851BBD771151515CD977F297F96D59455C652E4B9D7B2DD454E1F93 + E11BC97A1BAD227FF921FF0360040051E7FEF6BFE86FCD73E33D43F1EB344043 + 8C4D01ECDBB35BAD2A5EA2DE9FFDBAFAE7637F560FDE71ABFAE9D597A9CBCE39 + 4D5D71EE19EAE6EF5CA11EBAE3E7EA2FBF7F40FDEB2F8FA9D79FFBA7FAE0CDD7 + D5FC8F3F0AEC6ED9BC7E9DDA55561AB8CB27F8A3252400883A37B7FF0927CFFF + 6FC9B2450B3CF10FF1988993554A4A8ADDF38FC606B911F22E199AFFE4BD77D4 + 1FEEBD4B7DFB2BE7AA2BBF78A6BAF59AABD5C3F7DCA19E7FFA09F5F1BB6FABF5 + AB5672A011228A040051E5F6F6BF3D15156ADBE64D762F7AE41FEE0DAB57D93D + F7A4A567A8E163C7DB3DFF686AF256022073EDAB972D55CF3EF188BAF9DB57A8 + 2BCFFB827AE0F65BD49C375E0D2CC003A281040051E5F6F63F79FCAF5B77E29C + 0A086DF9E245EA96EF7D4B3DF7E4E3818746F1B022B881040051E5FEF63FF782 + B067CE039876AC4A4888D8BA5D00318A040051E5E6F63FB1D4C567F4CB906F7D + BDFB07D2141416AA1E7DFADA3D007E450280A871FBE97FDBB76C0EAC8C764B5D + 6DAD5A1585E70F84836900002400881AB7B7FFB9B1FA3F9857A601C6930000BE + 470280A8717BFB9F9BC3FF9A5716020E1B3D5665E5E4D83D007E440280A8707B + FB9F6CBB5ABE7881DD73CFC635AB03A7B6B94DFE3EDC1E9101E02E12004485DB + DBFFD679E41015D9EEB56CA1FB231162FC14A601003F23014054B8BFFDCF1B41 + 5778E558E0F153A705460200F813FFEF4754B8BEFDCF23415778E5F1C0322233 + 78C428BB07C06F4800E038B7B7FFC9E34E650FBE57946CDBAA2A4ADDDB8E682A + 9AC63400E0572400709CDB8BCDE4E968920478851C45EC95DD00AC0300FC8B04 + 008E737BFE5FCEFFF71AAF9C07D067C04095DFADBBDD03E0272400709417B69B + 7965CEDDE4959D00825301017F220180A3DCDEFE275BFF64EFBDD7ECD955A1B6 + 6C586FF7DCC5A980803F9100C051AE6FFFB3EEB4BDFAA855AFAC0318553451A5 + A5A7DB3D007E41020047B9BDFDCF8BC3FF9A57D601A4A4A4A851E327D83D007E + 410200C7B8BDFD4F787101A0B672C922D5D8D868F7DCC53400E03F2400708CDB + 8BFFCA4B77AA9DDBB6DA3DEFA9AEAA526B572CB37BEE2A9A768C4A4848B07B00 + FC8004008E71FFF8DF79813DF75EE6956980DCFCAEAAEFC041760F801F9000C0 + 115ED8FEE795E0DA1A2FAD51289A7A8CDD02E00724007084DBDBFF8497F6DAB7 + 64ED8AE5AAB6A6DAEEB98B750080BF9000C0116E0FFFCB1E7BD96BEF750D0DF5 + 6AF9E24576CF5D83868F082CDC04E00F24007084EB4FFFF3C81EFB7078E54985 + B20870BCCB891B80E8210140C47961FB5FF102EF0FFF6B5EFA5D990600FC8304 + 0011E7F6E23F39F96FC5E28576CFFB64BA62DF9EDD76CF5DF277979C9C62F700 + C4331200449CDBF3FF6B961707F6D8C78AE6E626CF1C58949199A5868E1E63F7 + 00C43312004494379EFE173BC3FF5AB187B62C4E98C67640C00F480010515ED8 + FEE79545756DE1A5238B590700F803090022CAEDE17FD9532F7BEB634DF9CE12 + 55E291638B0B7BF50E1400F18D040011E5F6F6BF154B1607F6D6C72246010044 + 13090022C6134FFF8BC1E17FCD5BC702930000F18E040011E3F6E23FE1A520DA + 56CB172EF0CCC38B868F1D1FD81100207EB5F6FC4FF99A9424AB245B25CD2A19 + 56C9B68AACF2CA95F2C8BFCA9FC9CBCB8BD873442F3C8115C8B1EA7B37FF5C1D + 73C2C976CF1D320220E7001C519881369CEF0A3B6887F17DA3264C522929DED8 + 87FF9BDB6E56FF7DFF3DBB17DB665DF12D75CEACAFDB3DF72D5BB440DDFEC3EF + D93DF8818C8EDEF5F0A376AFE32A2A2A9A2FFF52FE2CABB9CB2EFBACB2DF2AF2 + 70915AAB3458A5D12AF20F4FC87F7C48001011B2FDEF4F2FBCEAFA0E0044CEFB + B35F570FDF7387DD8B6D2400709B171300A60010115ED8FE87C81A3F659A4A48 + E09F08205EF1FF6E4484DBDBFF10799DBA74510387B9BBA8138073480010116E + 6FFF83338A381510885B2400E8302F6CFF83338AA6B01D1088572400E8302F6C + FF8333FA0D1EA272F3BBDA3D00F18404001DC6FC7F7CE35440203E9100A043BC + F0F43F388B7500407C22014087B0FD2FFE8D2A9AA052D3E4181000F18404001D + C2F07FFC4B4B4B5723C68EB77B00E20509003A84ED7FFEC03400107F4800D06E + 6CFFF30F793A604242C44EFC06E0012400683716FFF9477EB7EEAA57BFFE760F + 403C200140BB31FFEF2F4553990600E2090900DA85ED7FFE53348DF300807842 + 02807661FB9FFF0C19394AE574EA6CF700C43A1200B40BC3FFFE238F061E3B99 + 511F205E9000A05DD8FEE74FAC0300E2070900DA8CED7FFE3576F25495949464 + F700C4321200B4198BFFFC2B2B3B5B0D1939DAEE01886524006833E6FFFD8D53 + 0181F84002803661FB1F783C30101F4800D0266CFF43AFBEFD5441610FBB0720 + 569100A04D18FE8790670300886D24006813B6FF41B00E00887D2400081BDBFF + A08D18375EA56764D83D00B18804006163F11FB4E4E414357AC224BB07201691 + 00206CCCFFC3C4A980406C23014058D8FE8760E3A74C0B3C1F00406CE2FFBD08 + 0BDBFF10AC4B5E9EEA3F78B0DD03106B4800101686FF110ABB0180D8450280B0 + B0FD0FA1B00E00885D09761D8A7C4D8A3CFA2BD92A6956917D3FD95691B1E05C + 298FFCABFC99BCBCBCD65EA74D2E3C817F50BC46B6FFFDE9F957EC9E7BFEF9D8 + 9FD58B7F7BD2EEF9D3ADBFFDBD1A3A6A8CDDF3866F7DE96CB5675785DDF3A659 + 577C4B9D33EBEB76CF7DCB162D50B7FFF07B760F7E205BA8EF7AF851BBD77115 + 1515CD977F297F96D5DC65977D56D96F956AABD45AA5C12A8D5669B6CB611801 + C0117965F1DF92799FA9A6A6265F97C5733FB33F0DEF90C58000620F09008EC8 + 0BF3FF5507F6ABF5AB57DA3DFF5A32EFBF76CB3B8AA6712C30108B4800D02AAF + 6CFF5BB67041E00ED8EFD6AF5AA90E5456DA3D6F183D61B24A4949B17B006205 + 09005AE595ED7F4B17CCB35BFE2649D0D20573ED9E37C891C0C3C68CB37B0062 + 0509005AE595ED7FC5F3BD15F4DC246B21BC6602DB018198430280567961FBDF + AEB252B563EB16BB87251E5C0828E7012424446C331080282001408BBCF2F4BF + A5F3E7A9E6E690BB587CA9BC74A7DABE7993DDF38682C21EAAB0771FBB072016 + 9000A0455ED9FEE7B5396F2FF0E23400870201B18504002DF2CCFCFF82F9760B + DAE2B96C0704D031240008C92BDBFFB66C58EFF953E6DCB07CF142D5D820077D + 79C7B0D1635556B61C140A201690002024EF6CFF63F83F94DA9A1AB5B27889DD + F306491AC7F0C86820669000202486FFBDCF93D300AC03006206090042F2C2F6 + 3F39F466C5E285760FC1BCB810501247190900E07DFC3F1587F1CAF6BF35CB8B + 55755595DD43B04D6BD7AA7D7BF6D83D6FC8E9D4590D1A3ED2EE01F03212001C + C633DBFFE673FC6F6B9A9B9BACCFC89B870201F03E12001CC63BF3FF2C003C12 + 2F3E1EB8682ADB018158400280437865FB5F4D75B55AB362B9DD434B96787004 + A0CF80812ABFA09BDD03E0552400388457B6FFC9E23FAFED73F7A23D15156AF3 + FA7576CF3BC6330A00781E09000EE195E17FE6FFC3B7649E174F05641D00E075 + 2400388417B6FF090E000A9F17D7018C1A3F41A5A5A5DB3D005E44028083BCB2 + FD6FEFEE5D6AEBC60D760F47B2AA7889AAAFABB37BDE90929AAA46164DB07B00 + BC880400077969FB1F8FFF0D5F5D6D6DE0D9005EC36E00C0DB4800709077B6FF + 31FFDF56DE7C3CF0D12A2121C1EE01F01A1200047865FB9F2001683B2F2600B9 + 5D0B025B02017813090002BCB2FD6FC7D62DAABC74A7DD43B864CDC4EE8A72BB + E71DEC0600BC8B040001DED9FEC7EAFFF69035134B3C792A200900E055240008 + F0CCF63FF6FFB79B17A701060D1FA13A75E962F700780909003CB3FD4F1E6EB3 + 7CF102BB87B6926381BDB67B4216017A25B904702812007866F1DFBA552BD581 + CA4ABB87B6AADCBB576D58B3DAEE7947D134B603025E440200EF6CFF63F8BFC3 + BC380D2009665272B2DD03E01524003EE7A5ED7F2C00ECB82573BDF75C808CCC + 2C356CD418BB07C02B48007CCE2BDBFFE434BBD5CB8BED1EDA6BF5B262555B53 + 6DF7BC83ED8080F79000F89C5786FFBD789E7D2C6A68A857CB167A6F21250900 + E03D24003EE79DED7F0CFF47CA620F4E0314F6EAADBA5B0580779000F89857B6 + FF09F6FF478E1717028AA229EC0600BC8404C0C7BCB2F86F7FE53EB571ED1ABB + 878E2AD9B65595EF2CB17BDEC17640C05B48007CCC4B4FFF9343801019721890 + 17A701868F1917D81100C01B48007CCA5BDBFF18FE8F342F4E03C8590063264E + B27B00DC4602E0535ED9FE2758001879C50BE77B725485870301DE4102E0535E + 19FE2FDDB1C32ADBED1E22458E545EB362B9DDF38EF153A7A98404FED901BC80 + FF27FA9467B6FF2DE0EEDF295E7C3CB0EC3C19E8919D2780DF9100F89097B6FF + 1533FCEF18CF6E07643700E00924003EE495C57F42E6AAE18C752B97ABAA03FB + ED9E77B00E00F00612001FF2CAFCBFECFD9747D8C2198D8D8DAA7881F712AC7E + 8387A8DCFCAE760F805B48007CC64BDBFF8A99FF779C57A701C64FF1C61A14C0 + CF48007CC65BDBFFD8FFEFB425F3BC772090E0E14080FB48007CC62BC3FFF2D4 + BA954B17DB3D3845B659966CDD62F7BC63D484892A2535D5EE0170030980CF78 + 65FBDFEA62796E7D8DDD8393BC380D909696AE468C2BB27B00DC4002E0239E7A + FA1FF3FF51B3D8A3EB00264C653B20E02612001FF1D2F63F8EFF8D9EE58B1604 + 7604788DAC03484848B07B00A28D04C047BC32FF2F7BD337AC5E65F7E0B4EAAA + 2AB57AD952BBE71DF9DDBAAB9E7DFBD93D00D14602E0135EDAFEB76CA137EF48 + E399774F05643700E01612009FF0D4F6BF056CFF8BB6C5733DBA1D90530101D7 + 9000F8845786FF05E7FF47DFC635AB55E53EEF9DBA3874D428CF24A680DF9000 + F88457B6FFED2A2F533B3CB82F3DDE353535598997F7465EE4D1C063277B2739 + 05FC8404C0073CB5FDCF0A42CDCDCD760FD1E4D969009E0E08B88204C0073CF5 + F43FF6FFBB668947A75E64742A2929C9EE01881612001FF0D2FC3F0B00DDB3AB + AC546DDDB4D1EE79475676B61A3C6294DD03102D24003E307CF458BBE5AEAD1B + 37A83D1515760F6E58E2D9DD004C0300D14602E003B200CC0B3E7EEF1DBB05B7 + 7CF6E1FB76CB5BB27272EC1680682101F081FD959576CB3D07F6EF57B35F78D6 + EEC12DF204C6F75E7FC5EE79C7FECA7D76CB195B377A6BEA4346C300B7B57610 + B77C4D8AACCE49B64A9A5532AC926D15D9B89B2BE5917F953F93979717B103BD + 2F3C81834122AD6BF7C2C042C06C17EEB264F461C39AD581A36879FA9F37C8D6 + BBDEFD07A8A1A34607E6DFDDB67B5785FAF4BD77556DAD73FF7DE474EAACEEF9 + F3132AB76B817DC53D920CDF77D38F791CB6CFC84EACBB1E7ED4EE755C454545 + F3E55FCA9F653577D945B2E8FD56A9B64AAD551AAC2247AECAB6AB905BAF4800 + 00F8823C78A8CF8081AA4B5EBE7D25FA6AAAAAD4DA95CB556383FCDB0C3F2101 + 080309000020DE783101600D0000003E44020000800F91000000E04324000000 + F810090000003E44020000800F91000000E04324000000F810090000003E4402 + 0000800F91000000E04324000000F810090000003E44020000800F91000000E0 + 4324000000F810090000003E44020000800F91000000E04324000000F8100900 + 00003E44020000800F91000000E04324000000F810090000003E44020000800F + 91000000E04324000000F810090000003E44020000800F91000000E043240000 + 00F810090000003E44020000800F91000000E04324000000F810090000003E44 + 020000800F91000000E04324000000F810090000003E44020000800F91000000 + E04324000000F890E712808404721200407C494CF45E6CF3DC6F949E916EB700 + 00880FE9199976CB3B3C980078EF430200A023D23332EC9677782E01C8C82401 + 0000C417128030A493000000E24C5A3A09C011656466D92D0000E283432300CD + 76DD2E1D4900E48D3BF4E6A13005000088370E4E01B43B0EB735017024E89B48 + 000000F1260A0BDCDB1C9FDB9200982F7CB09DD4D4D868372322AFA09BDD0200 + 203E14742FB45B9191D4D860C6DE90F1F9483A3C0590999459FB7937327AF6E9 + 6BB70000880F85BD7BDBAD08C9CAAEB1FE37108703FD76E87002D090562DBF44 + C414F6EE63B70000880FDD7AF6B25B911288BD6602D0E64420DC04C07CE143DE + A4A1AE31A209400F120000401CC92B28506969113EE5B63E64EC6D5332D09E45 + 80A2C92AD26EAE6F8C6C02909995AD3A1F956BF70000886D85BD227F63DB505F + 2FD3EF81386C1589C96DD6DE458007D5D7D4463401108C020000E24561AF08CF + FF5B1A6A5B8CBD21637528E12400C12FA6EFFEA56E6A68AA8B7C02C042400040 + 9C702201A86FAC91D81B88C35609350A70C444A0AD5300E61BC88B37D7D65445 + 3C0118307498DD020020B60D1A3EC26E454EDDE7230081381CB8F0B9E024A055 + ED990290FA60C6515B5F5D2D172369D4F809760B0080D8258BFF060E1D6EF722 + A7AEA6A6CAAACCBB7F33468725DC2900B31CF2867B77ED2CB3EA882A28ECA1F2 + 3910080010E3868E1EA3929293ED5EE4ECDE5D22B1F7B0981C545A15EE0880F9 + 42D23EF886DB37AFDA2E1723292121418D2C6214000010DB468E2FB25B91B57D + EB0A89BDC1C15F33DB2D6A2D01087E01FD26E2E01BAE5AFE69C41300C1340000 + 20D68D1CE74C2C5BB9F4D31D56753016CB354B70222082FB07B57511A09037D0 + A571D1DC37773636EE8CE8F300C4C871CE644D000044833CDCAEFF90A1762F72 + F694EE6C58B2E0ED9D565362AF19935B0CF6A11C29019017D345BFF821D7EAEB + 6B1AF6ED4F2EB5DA1195DBB5C091AD13000044C3B0D16355525292DD8B9CE6B4 + A43289BD5633382E8B50D7426AEB0880CE32A448E61128077695955875C44D9A + 3EC36E0100105B261F37D36E45D6FECF63EEC1186C15333687AD2D09809951E8 + 370CBC79F9EEED8E2400C79D7C9ADD02002076A4A4A6AA290E2500BB2BB6C9FC + BF99004831637458C24D00CC1794C07F48125056B2DE918580BDFAF557031C98 + 3F0100C049138F3E36F06C1B2794ECDC243157C7601D93A5D6C24A02DA920004 + BFD1C1CC63F5B24F3758B5238E3BE574BB0500406C98EEE008F6AAE2FF6CB4AA + 8331D82A666CD6ED230A6711A0C90CFE07938077DF787243556DA59C4A147147 + 9F7092238B28000070424EE7CE6AECA429762FB2EA76ED3F30E7CDA7E5A65BE2 + AF5E08682601A6561381B62E029417D345DE4CDEBCA1A9A9BEA162FBC655563B + E23A75394A8D9B3CD5EE0100E06D471F6FDDB83A70FA9F28D9B77195C45CAB29 + C50CFCBA842D9C04C07C612907EFFC8D52BF61CDE2E556ED88E34E3DC36E0100 + E06D334EFB82DD8ABC0D6B03B1B6DE2AC17138381190D2AAF68E00984940E017 + F9EF27FF762C019874EC71AA3B670200003C6EE4F8098E2E5EFFF4A31725D61E + 8CBD7631837FD8DA9200C81BE8226F226FAA8720EA3FFEE0B9CD353507F659ED + 884B4C4C54E75EF475BB070080379DF7D58BED56E4D5ECDABFEFD30F9FDF6235 + 25F89BD300FAC65C97B0843B0560D2C15F97CF7F89A6A6FAEDDBD63AB20E404C + 3FE9549E100800F02C79EEBF8C00386547F9BA95126BADA60EFC660915AB5B15 + EE0880BC902E6696216F2ABF8C94BA0D2BE73B360D200B2ACE9EF535BB070080 + B79CF7D54B024FB375CABAB581185B67151D7725069B31D98CD547D4D6350042 + BFB8CE3A2413096424EFBEF3F462AB76CCF1A79FA9BAE4E6D93D0000BCA1CF80 + 81AA68DAD176CF19EFBDFDF412AB3A1873ADA2E370D841DFD4D6044067183ADB + 309380BAE50BDF2B292DD9B8C66A3B428E563CEB828BEC1E0000DE70CE455FB7 + EEFEDB734F1D9E1DDB36AE96186B356504C00CFEE6DDBFD4616BCB1480662600 + 3A13395816CF7DEB63AB76CCC9679FA70A0A0BED1E0000EE1A3874B89A36F344 + BBE78C250B674B6C3D24DE5A4562B099006866BB456D4957E405759137D3D9C7 + C1110029CFFEED97FFDDB3B344FA8E484D4B53DFBCE63ABB0700807B64CEFFB2 + EFFF28B05BCD298D9525F5CF3FF5CBFF5ACD409CB58A390220452700BA84A53D + BFB17E719D75E8518040125056B261EF9E7D3B17596DC78C9F322D7036000000 + 6E3AE9AC73D580A1C3EC9E333694942C2E2DDD24DBEC75F00FBEFB17BA0E5B5B + 4700742D6F24F561230056A9FDE4E3171D9D0610977CE75A9596966EF7000088 + 2E39F3FF82CBAEB47BCE99FB9F17FF6355B556093502A063B2A663F511B57504 + C04C02F49B4BD1F311815FEEA567EE5D5C5D73A0D26A3B26BF5B7775FEC5DFB4 + 7B000044D757AFFA8ECACEE964F79C2107ECBDF4F7FB64879D0EFE3ADE062701 + BA84ADBD5300BA48D6A17F8983A300B5B55507D6AC9C3BD76A3BEA8C2F5FA07A + F6ED67F70000888E212347AB19A73AFFB8FAB52BE6CEB562AA3C6D57270066E0 + D7A3F16D0AFC5A474600740220BF84BEFB973A304CF1EA730FBE535151D1AE5F + 2A5CC9C929EA3B37FECCB1A72E0100102C3D23437DFB869B1CDDF6272486BEFC + FC83EF5A4D89AFE61480C4DA5009409B626E7B7F7BFD86F2E63A0990AC442700 + B59F7DF4C2A6CABDDB1D5D0C2864F1C5D7AFFE9EDD0300C059575E7763541E50 + B77FF7F685562CDD68350371D52A1267F508808EBF3A1EB729F88BF64E0108FD + C6F28BE8044067273556A97DE91FF7BF62D58E3BF5DCF3D5E4E933EC1E0000CE + 38F10B67ABA34F38C9EE39EB857FDE2B3154C7D4E0BB7F2912832516B74B4712 + 00A133109D00E8A980C02F3CE7CD27D76CDEB26A99D57694ECC3BCEAFA9FAAAE + DD39200800E08CDEFD07A84BBEFB7DBBE7ACCD9B572E7BFFADA7D75ACD9682BF + 8EBF5A54460084BC91598213003D5C51F3C6F30F466514202B3B5B7DFFD6DB59 + 0F00008838D976FEFD5B6E0F1C46170DAF3D17889D81D174BBE804404F0104C7 + E136EBE80A061DFCCD51003D151048005E7FF1FF566CDBBCDEB1E70398E438C6 + 4BBE7D8DDD03002032AEB8EE86A8ED3ADBB16DCDEAD9FF7E589EFC2709801E01 + D0F15562AD2EED0AFC5A925D77842411F2FC4329D29622AF2B456EC7935353D3 + ABC64D3A799AD576DCC06123641FA25A55BCD4BE020040FB5D74C5D5EAE473CE + B37BCE7BEE997BFEB2AAF8E34D5673BF550E58A5DA2EE63480047FB9F96EF708 + 404712001DF48519FCA57D4802B072C5277B679CF2CDB139399D8FB2FA8E1B55 + 3451959796A84D6BA332F000008853679C7F81FAF2372F0FAC358B86D29DEBD7 + DFFF8B59FF54CDCD72989E047F9D00C84880390560CEFFB74B471200A19300FD + C9481D3C0A9064FD41920F54EEDE3968F831D33333B31CFF14E52FAA68EA316A + E3DAD56AC7D62DF6550000C277CC0927AB2BAEBBDE8A2912D29C575E5ED6FCB7 + 3FFFF4FF36AE5BBCD5EAB674F72F0980BEF317ED9E06E8E89F4A0F3DC82FA38B + 6426E66240C95AAAE7BCF997D53BB72DFBD06A4745525292BAF6965F044E6B02 + 00A02D464F98A4AEBED1F9C37E4C255B977F30E7EDA7565B4D3DF76F2EFED377 + FDBAE8F8DB6E9148003469CB2FA8172A1C92004879E89ECB9EDB7360BF643551 + 21AB367F7CD7BDAACF8081F61500005A270BCA7F78DB5D81D366A3A5BA7A7FE5 + EFEEBDEC3969DAC54C00745CD573FF5A8712808E4E0104D35300E6548094C07A + 8003FB7737E5E676AF1B3A62CA38AB1F15B26563DAF127AA954B97A88AB252FB + 2A00008793356437DEFD2B959199695F898ED92F3DFCCC87EF3E536C35E526D9 + 1CFE974440920009FE7A1440027F8782BF88540220015F174D2701F21EBA4E5A + F4D99B65C79F7AF188EC9CA372AD7E54481270F48927A94DEBD6AA12D6040000 + 42983AE304F583DBEE5469E9D17DD47CC9F6F56B6FBFF1CCBF59315D16FEB5B6 + F25F077FE19904C0A493009D00486D2401CD8965A55B4B8E9E31737A4282F30B + 02B5E4E46435CDFACBAD28DD1948040000D04E39E78BEAAAEB7F128815D1D4D4 + 54DAF4FBFBBFFFFB6D9B976FB3BAFAEE5F9EFEA783BF9E0288D8DCBF16C904C0 + 0CFCA18A24005292B76D5E51356CE40939853D074775723E3131514D3C66BAAA + AFE39C0000C0E7BE74C965EAA22BBF1D8811D1B6F0B30FDFFADB6337CDB19A12 + F8F5D63F4900F4D0BF19FCA508CF25004202BD162AF84B91F74CFAF4E397364E + 3FE9EB63B2B33B77B1FA51235B046575678EF5B64BE7CF55CD4DFAF30400F849 + 4A4A8ABAE28737A82F7CF982406C88B69D3BB76CFAD90F67FEA9B1BE6E9FD5D5 + 77FFE602C050FBFE2312FC85530980599B45270089D61F3861C3DA85EBC71C7F + DED199C9E9D15B6A691B346C841A3B698A9504CC5355D1DB980000F000799CEF + 4FEFFD8D1A3F252A87D41EA6BC766FF5833FFBF26F766C5B5362752508C99DBF + BEFB3783BF1473D8DFB309803083BF662600074702CA4A36D66625A7EF19356E + E604AB1F75B9F95DD58C534E573BB66E56DB37CBA98B008078273BC36EB8EB5E + D5B55B77FB4AF4FDFBE97B1F7BEFCDBFB4B6EA5F4AC417FE999C48004CC1C980 + 4E040E2603C58BE6540C1B35BD4BF71E03A2F3948520816D82334F54399D3AA9 + A50BE631250000714A86FC2FBDF63A35EBF26FA994D454FB6AF42D9AF7F6FBBF + BFEFD2D7ACA639F4AF17FE9977FF12907402A04BC438950004077CA1DBBA1C1C + 0DF8ECA317D74F3FF9A23159595D3A5BFDA893B99F41C347AA7193A7AA954B16 + A9CA7D7BEDAF0000E241AF7EFDD58DBFBC5F154D3B26F06FBE5B4A4B376DF9D9 + B5C7FFA1A1A156024DF0DDBF0EFE5224F0CB08802377FFC2C91180509FB0BEA6 + 93002989D607A136AD5BBA7EF4CC73A6B9B11E4093298113CE3C27B00774F5B2 + A5AAB1513E7B0040AC927FCF675D7E95BAFAC737A9DCAE5DEDABEE9079FF876E + 9BF5DB6D5B56C9BCBFACF8D7ABFE430DFD3B1AFC85D353009A990C1C12FC75BB + B464434D626363D998F16327242464C97557C83304868D1EAB8E3DE91455BA63 + BBDAB165B3FD1500402C993C7D86BAE1AEFB03A3BB6E6CF133353595363EFBF8 + 3D7FFEE0ADBF2EB3BAE6813FE6963F298E0FFD6B4E8F004831E9BEF9B58349C0 + AAE28F77656676AB1C36EAE8B181AFB8282B3B27F024A8FE4386A935CB8BD929 + 000031A2A0B087FAEE4DB7AA2F7EED1B2A332BCBBEEAAE979EFDC353FF78FCE7 + 1F5B4D33F84BD15BFE74F0D709802341DF148D110033E807D389802E898BE6BD + 5552D0BD7F73FF41E386597DD7F5E8DD479D78E6D9D67F44D98113046B6BE4EF + 0A00E0355D72F30287FA5C7DC34DAA575F57D69587F4CEEC275FF8F36FBFFD96 + D5D4C3FEE6BCBFBEFB97C01F6AD5BF638940A8A01C69870478AB48D221F3FC52 + E4C0E50CAB64DB25C72A9DA4FCECEED766154D39FD04ABED1975B5B5EADDD75E + 56FFFEFB5FD52E1E2C04009E905FD04D9D3DEB6BEAF8D3CF7475757F28F33E7D + F59D3B7F72E633565302BFACFA9722C15F92009D00E8857F6602E068F017D148 + 00849E7C91DA4C02E46F2ACD2A3246238F5E92244012002B1148EC7CF7831F5D + 3E74F4B44956DF531A1AEAD507B3DF502F3DF394DAB95D8E6F0600445BF79EBD + D4B95FBD38B0662B9A8FEE0DD7AAA59FCCBDF19A631FB162BAACF897C0AFEFFE + 65DE5F92003DF46F067F2942D78E895602A04700844E02E4890B3A0908391290 + 9C96D1F9D77F98F7BDDEFD468CB0FA9E23BB043EFBF07D2B19784D2D9EFB5FD5 + C4190200E02859CC3776F25435F3D433D4C4638F0B2CDCF6A2CDEB972EBBEEDB + 537ED7505B1D1CFCCD3B7F1DFCCD857FC2F1BB7F11AD0440E824408A99044891 + 04404602240990D10049002411E8DCA953D7DC3B1E9873B55793006DCFAE0AF5 + F1BB6FAB0FDE7C5D6D5CBBC6BE0A0088847E8387A8E34E392DB038BB73F49E26 + DF2E5B362E5F7EF3B5331FDEB7AFACC2EA9AC15FCFFBCB9DBF2400E6A23F2951 + 19FAD7A2990088E02440523729320AA04702642AE090E9001909B8E3BE77BEE9 + C5E9805036AF5F6B2502B3D5671FCE096C250400B49DACE69F3C7D6620F0F719 + 10D587C7B69B0CFBDF7CFD898FDB77FE7ADE5F0FFB076FF9D3FBFDA31EFC45B4 + 130021815F9849809E0E9051003D1D10BC26A0D34DBF7CF92B13A79E71BCD58F + 19E53B4BD4B2850B54F1C2F9AA78C13CB5BBA2DCFE0A00C074545EBE1A553451 + 8D1A3F418D1C5FA4F25D3CABBF3DE67FFCCABB77DC74CEB3563CD777FD66F0D7 + C3FEE651BFC1ABFEF5144054B8910088B6260132251028D7FEE4C933669EF2F5 + 73AC76CC696E6E5625DBB6061281752B57A8ED5B36070E1AE2E861007E93D3A9 + B32AECDD27B0D57AE0B0E181C02F8BFADC3CA6B723DE7DE32F2F3E74CF375EB7 + 9A12F875F16CF0176E7DD2F2BEFABDA596044012014902CCE90033093898085C + 72D57DC79DFD958B2F4A4C2CD089444C93044012816D9B3705EAB29D25AAA6AA + 4A555BA5A6FAF35AB7652B220078916CC1CBC8CCB44A56A04ECF90B6555B459E + BCD7A34FDF40C097C02F09403C9013FEFEFDCF279FF9CB1FAFFFC0EA9A813F38 + F8EB617F3DE72F09800EFE511DFAD7DC4CB5CC24400279F048407012208B0375 + 12907DDE053F9E38EBC29F7C23A54B17F91EDF909D063CB11080E75877EE5E5D + 91EF94FA3D7B6A9EF9FB2F9F78E11FF7CEB3BA12F075F097C57EC1C13FF8CE5F + FF43EE4AF0176E2600A2B524408A391D70D868C0E8F1C7F7BDE686C72ECBEFD6 + AF97D50700202ACA776EDCFAE03D973EBA74E17B9BAC6EF05DBF1409FC7AD85F + 02BFA782BFF04ABA264940F087A03F9850453497966CAC7AFBD5C7E60F1C3631 + BB7B8F817DEDEB00003866D1FCB73EBCF9DAE31F319EEAA7837F4B77FE12F83D + 15FC8597C66B829380E0B659E4030CD40D0D758DEFBFF9D4CA04955836A4DFD8 + E149E9E9327200004044D5EDD953F3ECDFEF7EEAF7F75DFEBA157BCCFDFD52EB + 3DFEFAAEDF1CF6D781DF33C15F786DC2462701E607A3DBFABA0EFEBA1D28C58B + E794AC58F969F1A8A2E307646575898FD52500004F282DDDB4E5EEDBBEF2FB39 + 6F3E596C7525E0EBE02F815FDFF9EBE02F815F1200F3CE3F3896B9CE8B2B36F4 + 9A0093FEC0828B7CA8F2E106DA653B371D78E7D54717F41D3836BD7B8FCE7D13 + 12B242BD16000061696A2A6D9AFFDFF7E7DCFA83131FDBB16D8D39E4AFEFFACD + 217FF3CEDFD3C15F783101102D056EFDE149D177FFD2D61FB24C09D47FF8CEDF + 566D5CBF6E79FF21137A75EA94DBC5BA0E00409B6CDDBA76E3FFDD7FED1FFFFE + F8CF3EB4628B1CD8A203BFD47AB15F4B2BFD3D1DFC85571300119C04E80F4F8A + FE507512A0FB0713816D9B57EE7BFD85DFCFCFCCECB4AF6FE1E8FEC9191E7B46 + 2400C0936A76ED3FF0CABF7FF7DC2F6F3AFB9FDB36AFD8615D3203BF39E42FC1 + 5FEEFAF5B07FF04A7F894B42C72E4FF1FA10B93EE8477E4F694B2D498B14392B + 409F17A0B70BEA2D837266C0C1F303BA150EC8FDCE758F9C53D877D4D4FCFCAE + 5EFF3303005C505E5ED6BC75D3D24FFFF0AB2B5EDAB963FD2EEB9219E8A5ADEF + F68387FBCD217F7D73AA03BEB43DC9CB2300423E401DB0CDEC49DAC145675C52 + F45F84B41B0EECDF5DFBDE9B7F59BEA77CDBEA418327F6CCCA61912000E07FCA + B66FDAFCD41FAF7FECC93F5DFF9E1533765B97F41DBF2EA1EEFACDF97E330669 + 66DB7362E56E587E4FFDBB4AAD0F0C925A1F1A648E06041F20A44BA6F5239967 + 7DF907A34F3FF7EA530A7B0CEC6F5D0300F8D48E6D6B37BCFED2C36FBEFCEC6F + 975AF1DA9CD7378BBEEB97806FCEF5EB2D7E3A01909B51A16F4C3D2D56120011 + 2A09905A4F09E844409200735A40D7321D602603E9A79C75D5F033CFBFF694DE + 7D870FB6FA00009FD8B4BE78F5AB2F3CF4E65BAFFC69A5D595E06E067C4902F4 + 30BF39DC2F45077E3DD2AC47A0632AF88B584A0034BD2E400427013A11D0A301 + C1C9C0C1E06FF4D38F3B71D6A0B32EBCE1E44183C68EB4FA008038B576EDE265 + 2FFFE3BE373F78FBAFEBACAE0EFC529B494070D037EFFA75E03783BFE6E921FF + 60B1980008F9BDF5EF2E75A844409280E011019D08842A69138F39B7DF99E77C + FBD8C1A3A78ECB4CCF91110300408CABAAA9AC5AB3F4D345AFBDF8BB0F3FFBF8 + DF7276BFBEB30F55E46BC177FCE6223F33F0C7DC5DBF29561300612601C24C02 + A4AD47035A1A11D0C980991404DAA9195919679E77EDE8A3679C3FA9DF801EC3 + 9392BBCB6B01006244634349E3C6F5DB577CFCFE73735F79E181A575D507CC3B + 7B33D8870AFAE61DBFBEEB97801FEAAE3F2683BF88E5044033A704E4CFA31301 + 9D04042702663220015F6A1DFCCD12B85E50D8BFF3395FFEE184A229A74CE8DE + 63080F1C02000F2BD9BE7AD3BCCFDE9AF7F23F7FB5A074C70639BC4702BC0474 + 1DE47531AF9B413F38F0EBE0AF03BF19ECCD4420E6C44302A0B59408E82440FA + 3A0908352A2045077E3309D075CA8831C7753FF6F80B460E1A3A7550CF7E8307 + 6666304D00006EAAAAAEACDAB671C5BAB5ABE6ADFDE8BD7F2C5BBEE40339AE57 + 82B819DC75D00F0EF8BAE8A0AF6B7DB76FDEF1C74DE0D7E2290110F2E7D17F26 + 5DEB910033199062260252EB2440FA3AE8872AF275AB24A64E3EF6EC5E93A69D + 3564D0D0A2C13DF2FAF54BEDD245461200000E9127F26DAED8B461E3AAF96BE7 + 7EF2F2EACF3EFAF7562B1EEB20AE037FA82281DFFCBA19F0A5D6015F077DA975 + A0D7C15F6A33118869F1960068A1460344A844A0A56440DA4141FF90B62E819F + 4B4E4E4D3D7AC6F97D068F3AA677F7EEFD0BBA16F42EC8CCED9E9FD7A9F9A8C4 + C402F3F701001C813C84A7625FC2EEAA5D25E565A55B4A4B4A3694AE29FECF96 + 8FDF7F6E7343439D047033789B457F4DB775FF4841DF0CFC222EEFFA4DF19A00 + 68E12402724D6A09E4BA0E4E0674FFB0C01F54EB72F0F552D33353468C3AAEEB + A06113BBF5EA35A420B76B616E4A46765A7A6A7A7A4A62665A7266525A5A724E + 6A4A5A5A5A736A436ACDBEA6548E2B06106FE498DDF44E89750975C975F5B596 + 86CABA86AAC6DAFAA6AADA9ABA9A9AFAEAFDB5BBCA76ECDABA7575E9DA95F376 + 2E2FFEA0ACAEA64A076909D8BAD6C50CE4BA368B5C0B0EFA52CCD793A02EB5AF + 02BFE68740237F46F3CF296D3311D0B5149D0C1C0CE0762D01DE6C07D7FA6BBA + E8D7308BBCB62EFA77306B61D58989A9A9A9720D00E2465D5D9D15489BCCE02A + B5EE9BB52E1290838B0EE2C14507785DCBF79A6D5D4B315F5BE85AFF0E9AB4CD + 7EDCD181C72FCCC02A7F76B3C8D7CC122A88EBE06E067A5DEB44A0A522EF21B5 + BCB67E3FB31652EBB630DB00108B5A0AAA52EBA06BD61290A5AD8374A822C15D + 6A33C0870AF66691D7368BBC875934F99A2FF835C048D0D5F467D05260D6415B + 0772B32D451200B9A6EBE0EF31AFE962BEBE6E0B6987AA012056E9E01A5C9B41 + 58B7757096A283B619C075DD5A900F6E07BFBEAE85B4357DCD37FC1E6074E0D5 + E4F3304B70B0965A82B9D90E0EEEA1AE99C57CBD50C514DC07805863065921FD + 50C50CCEA18A19D8435D939F35DBC1B5594CF2755F22C07CAEA5E06B1609DA42 + 82BB0815D45BBA266DF939FD5AA18A26DF0F00F1C80CB6C141D92C12C8A596EF + 3703B95982AF09F939A1BF6E1653A86BBE63061E7C2E38200B7DCDFC9A19E485 + 6E07D742F7838BD0DF23F43561B601209699C1D66CEBC0AD03B259F4D774300F + AE85794D48DB2CA650D77C8D20D33A33386BFA33935A17A1BF57FA663BF8FB82 + DBBAD66D008877663036EBE0B6792D38F08BE0EFD1B5497F2F821074DA269C84 + 40B4764DB4F63A0010EF8E14A8CD801E1CDC435D3311F0C344D0E99850815C98 + 9F6BA804A0A5CFBDB5BF8FD6BE06005E122A306B2D7DCDBC1E2AC0B7F47304FC + 7622A844967C9E47FA4CDBFB99F377052056B414AC8FE4483F275F6FEF6B2308 + 41257AC2490E00C0EF08F2000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000C07F94FAFF7C41D8 - 4937BF6CA10000000049454E44AE426082} + 000000000000000000000000000000000000000000F88F52FF0FC8CDDA5741E0 + 81170000000049454E44AE426082} FileName = 'E:\YandexDisk\Development\Delphi\AErender Launcher\src\AErender ' + 'CC\icon_512.png' @@ -1224,1574 +1224,1574 @@ object SplashScreenForm: TSplashScreenForm PNG = { 89504E470D0A1A0A0000000D49484452000004000000040008060000007F1D2B 83000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 - C51E49444154785EECDD077C6545D9F8F1C9A6275BB2D9C2F6BE6C2FC9B6ECD2 - A429202888A0A8D8F07DED282A166C7F5154AC585E2BA888D81510A42BA28022 - DB93EDBDB76CCDA6B7FF79EECE84C9C9B9C94D72EFCD29BFAF9FF9CC3C736F36 - F79C64659FE79C3393A18070EAEDEF367F3700000082AD55F73DD5DBAF077C87 - 240741D093DF537EB7010000D01B3D2900503480AF9124C1EFE2FD8EA6F27797 - BF17000000E190CA843CDE9F4D1100BE45A283BED09DDFBB9EFE8EF6E4EBF8FB - 000000104EE9BC9ADF9DAFA35880B422E1415FE8ECF72E91DFC978EFE9EE7C77 - 24E3CF00000040EA2423998EF7677477DED6D97B92F199818491D42015BAFABD - EACEEF9DD77BDD73F1FEBC44DF273A7B0D000000C1D79D443CDE7B13795F67DF - C7ADABF776E7CF02BA44D28354E869A2ED7ECD8EE37D9D99EFCE7BDDE2CD1B5D - BD0E0000007FE869429DC8BC1977E7BD46BCAF113D7D0DE836121BF4464F136A - E1F51E33E77ECD8E65DCD9D78A7863C33DE7F51E116F1E000000FE162F714E24 - 31B7E7E28D0D99EBEC3D268EF7B55D89F79E44BE16E8800407BD9148726D33AF - D9EF71BFDFFD1EAFF77ABD263AFB1A2391F724AAA75F07000080DEE969026C7F - 9D19BBFFACEEBCC7EBF5CE5E139DBDD78BD76B9DBD1F888B04068988F77BD2D9 - EF8FD76B3267CFBBC75EAF79CDDBAFD9CC6BEE79E1FE1AAFF718EED73A7BAFE8 - EA7500000024475789AFFBF544126B776F9339D36CF6D7D8AFD971BC79D1D96B - 86D79C11EFB5CEBE0620714142BC7E4FBA9A3363F7FB2436CDE635DFDB39AF5E - B8C776ECA5B7AF0300002039BA4A701379DD7E8FD7D8DD0B199B66F4664E7436 - 6FF7C2FD1E91E81CD086C405B678BF0F9DFD9ED8AFC9D8FD5E13DBAFB9C7A6B7 - E7853D6737E11EBBFBCEE684D7D89EF3D2D5EBF1F4F4EB000000A2A6A7096C57 - 5F675EB7DFE71EBBDF136FCEF4EEB1BB19EE39BB8F37B6D9AF09F7EBB678AF75 - F63588101213D8BC7E1FBA9A93B13B36BDD7FBEC79AFB1BB09E9FB9D197ABED6 - 556C7A33165EAFBB253AD7959E7C0D00004014F52451F5FA9ACEE6DCBD90B1D7 - EBEEF9CEE216A779BD6637E135B6E7841DC79B17F6D848740E114462126DEE9F - 7F67BF0FF66B3276C7A6778FBD62BB0949EECD587A3BD98F37F66AA2AB58B85F - B7B9DF67B8DF070000007F899718BB935F134BEF7E9F3DD7596C376127FFF1C6 - D24B2C64ECD544BC58985ED8F3C21EBBB95FEBECBD0831929A684B24C135F3D2 - 7BBDDF9E37637713D29B04DE24FCEEE695ECDBEFF57ADDBCE6D584FD3ED39BB1 - B0E7EDDEE86E0C000080D4EA2A998D17BB7B2163F77C5749BA34E195E84B335F - 1FEF75BB79BDD7FD1ED3847B6CC49BB7B9DF8F0822798986783FE7CE7EFEF29A - 698619DBF3D227928CDB89BC7BCE7CBDFD9E7873666CCF09F39AB0E7EDF70ABB - 3763E1F5BA9778F3000000E81B5D25BCEE5EC8D8EB757BDE9D94BB9375BBD973 - 5EEF73CFD9AFD9EF71CFD94D98F7087BDEF4C2CCDB736EF15EEBEC6B10022433 - D1E0F573EE6C4E7AFB7513DBAFDB09B6D7D824E466CEAB4FE4757B4EC47B8F70 - 8F33C64C98553061D2EC8183078F2CE83F686861FFC2C10505FD0716E4170C28 - C8CDCB2FC8CD292CC8C9C9C9CFCEC92FC872FACCEC9C829CECBCFC7EAA5F4166 - 4E6E417666767EBF2C95DF98D19C75E68F050000801F65B76636B534A9DAC6E6 - C6DAE686FA9A16D552D3D05857DBDCD850D3D4D050DBD8505BD3E0F4F50DD535 - F575B535B535553535A74FD59CAE3E5E73FA6465F5F1E3076A766EAF38B577E7 - BA1AE78FB313683BE9B6937433965ED8B1D77BDCAF75F5BA8C859913F6EBA609 - 772CDCAFBB253A8710912409E113EFE7EA356FE66209F399618C19B74BA8ADE6 - 4EBADDAF25D267BAE29EF4AAB07050F6B20B5E3F72EAACA5E3468E9A32B6A8F8 - ACB10503868CED5F38606C4E4EDE60790F00000090888686BAE3A7ABABF6D454 - 1DDD73E2D8A13D07F66FDDB365DDBF77BFF0EC1F0F54579F6CD46F7327EC89F6 - CDAE38D1DE3477EC6E42DE234C2CECD7ED79C36B4EC49B4740491285F0F1FAB9 - BAE74C2C7DBCB130C9B6BBB54BC2752F716749BDDDEC39FB7D5E5F1F1BCF9C73 - 7ED18225978F1F3B61C6B821C3C68D1D5834746C6EE1A0B1CD750D238B860CE5 - 0A3D00000052E6C4D1CAA6CCBC9C03F5D527F79C3A51B9E7E891DD7BF6ECDCB0 - 7BC58B8FED5A5FFECF13CE5B245996E4DB9DBCDB49BFFB353317EF35E9EDAF17 - EED7DDCDBC4FC6A68F37B6B963E135870093040BC117EFE7E8352F73A619EE39 - 3B3689B83D965E98D84EDAEDF7D8CDBCCF1E7BBDAF5F66666EE66BAEFFF094D2 - C59795140F1D35B9B0A0686CE1C0FE63B2B20A063AAF03000000BED2D45473AA - FAD4E9BDD53527F65456EEDFBAFABF8FAFFECBEFEFDADADC5C2FC9BB24E4F19A - 24D8D2BB8B04EED7CDD8EB0E026162FB35D3843B165E7386D79C88378F809004 - 0CC1E7F57374CF496C9A61CFC56B266177F75E49BF3BC1778F3D5BA6E3922BDF - 3D61C9B2AB4BC64E985E52543C641EC93E000000824C8A02478F1E5EB37FD796 - 552FBEF0E0AAA71FF9F1CE6687F39224E8F19A9DE0C71B4B93B15731C0EEBB6A - 86D79C70C7C26B0E0122C9198227DECFCD6B5EE64C13A697E45B48EC1EC7EBCD - 38D1443F6E7CE12B6F1C5D76C1F50BC64D9859523874D4BC013979C5CE3C0000 - 00104A550D75C7AA8FEC5FBD77F786552FFCE3772B9F79F2BE7DCEB449E8DD85 - 01AF5892EFCEC6D2CCD8AB17EEB130B1F4A6B979CD8978F3F02949DA103C5E3F - 37F79CC4A609AF5892717BDEC476EFD5BA4AFAEDB9D878F1B9D79C75C12BDF52 - 3A61E2EC922145634A72FB170C77E60100008048AAAFAD3974F4E8DED53B7754 - AC7AF6C95FADFCEF730F1C72A62529B7937F19DBB1FDBA24DFEED7EC26AFBB7B - D34C2CEC79E18E0D772CBCE6E06392C0C1FFE2FD9CBCE665CE34617A49C64D6F - 5E377392A49BD8F476F34AF2DDB1998BF5C3464E2878CB3BEF5836614AE982A1 - C3479614140C1AEDCC03000000F0505373725FE5E103AB766E5DB9E2573FFBF4 - 0B470EEC94ED08255137497E67C58078B13449D24D2FAF0B139BD784E94D526F - 5E37B1CD6B4EC49B874F98E410FEE6F57372CF496C9A70C7929C9BD88CED3E5E - B3937B13BBE7637D66666EF65BDFFD95F90BCB5EFDAAA29123CF2BC81A50E0CC - 03000000E8869AA6AA9A13FB0FFC73F98B7F7DF2973FFED4EAE6E67AD97E5012 - 74BB08608F4DF39A733749D2DDBD190B134B13EED870C7C26B0E3E629243F893 - FBE7E3F5F39239D384E9253137BD79DD8CA5376393C4DB63D39BB169F66B6DF3 - 975EF59E09AFBAE29DAF1C3366D625DCDA0F000000244FFDE99AC37BF7AE7BFA - 89477FF6E4530FFF68A73365927C3BD9B77B3376CF4B72EE1E4B3363E9CD5898 - 5EE64C6F9A9B7BCEEB3DF00149FAE05FF6CFC7FDB332B1F4EE26244937B1194B - 1FAF7596E4DBE3589B3DEFFC21AF7BF3A72F9A346DE1A58306164F73E6000000 - 00A4D0C953C736EDD8BCFCC9DFFFEACB7FDFB0E6D963CE9449F84D93A4DD3D76 - CFC56B92B49BDE8C8589ED264C6FD8B1FB35F8844916E10FEE9F87D7CFC7CC49 - 6F8F254917D29BD7CC587ABB99A4DE8EDDADC37C71F1C8FCB7BEE7EBE7CC9C73 - DEA543CF2A5C9C913144E601000000A4D18963479B1A1BAA5F5AB7F69F4FDEF7 - E38F3F7FECD8813A67DA24F976B2EF9E33F3A6B9636992BC9BDE8C859913E635 - 617A9B7BCEEB3DE8032681843FD83F0FF7CFC6C4D2BBC7A649D2EEEEED66127B - 7BDC96E07BB6ACACAC1BDFFEC5B98BCFBBFA5523868CBD20ABB0B0BF330F0000 - 00C0079AAAAB4FEF3FB2E71FCB9F7FF0C9FB7EF1D9B5AAA9A9C9997627FDEE26 - C9BCE9DD63D3246977F77613EEB1CD8EDDAFA18F489288BEE7FE3978C5A6093B - 962689BCBBB79B24F3EE71FB445FA92C7B3C7ED2EC01FFF3A1FFBB7AF2C4B957 - E60D281AE9CC01000000F0B1BAAA1307B6ED58FBC84FBFF3FE07776DAFA872A6 - EC6280576140127BD3BBC7A649F2EEEEED26DCB1D1558C349364117DCFFE39B8 - 7F26127B352189BC8C4D72EF6E92CCBBC76D49BEC738EBEC19CB06BFEB03DFBE - 76E2F859D770B51F000000081EB92B60EBAEB50FFCFCFB1FFBD3E60D2F1C9729 - A749721FAF202089BDE9DD637793245E7A61927E77B3D9B1FB35A4994924915E - EEF3EEF5739039D384F492C00BE94D2CBD24EF269671BCDE9DF4B7C5F3175F36 - FCADEFFACAF5E3C64DBC32337750BE330700000020C09AEB4FD6EEDCB9FDE1FB - EFFEE4EF572D7FF2884CE926C9BF57314012FB78BD24EF3296DEC4D20B130BE9 - 4D7373CF79BD072964924BA4977DDEDD3F03134BEFD54CD22FBDBBD9C9BEE94D - 6BBBCA6F8F975E70DDA837BEEDB36F1C337EE465FDFA0DCD71E6000000008448 - 4B4B65C3DE5D071EFFEDBD5FFCEDBF9FFDC37E67CA24FC7621C02E0848B3937F - D3BB9B24F0A6F76AC2F4861DBB5F438A492289D48B779EED793396DE1E4B221F - AF374D9279D37B3593F4B725FE17BFFA5DE35FF7865BDF3472CC904B58CD1F00 - 0000083FD93DA0FA54E5DF1EF8FD9DBFFEDB633FDFE54CB90B01EE2280DD24D1 - 37BD5701C0DD0BE9EDB1618F6DF1E6912426D1446A799D677B4EC6A6093BB613 - 7EE9255937B149F03B6B76F29F75D5EB6F99F2EA6B3EF096ECBC411714170F91 - 3F0700000040841C3B76B4B5B1EEE4B37F7DE0FBBF7AF88FDFDEEA4CD90580CE - 8A00763389BE8CA57717004C13EE58D863C36B0E494402985AEEF3EB75BE65CE - 3461127D6976F26F1700A4791500CC157E33362DF3FA1B3F3FFB922BDEF99661 - 23C62D756200000000509587F7BCF0C45FEFFED51F7F79FB3A279464DEAB10E0 - 55149044DF8C257197D8AB0820636162696EEE39AFF720094CD289D4B0CFAFFB - 5C9B587A777327FE76B3137E3BD977F7B176DD8D9F9D79D96BDFF7AEE2212316 - 3831000000007470ECE8C1158F3DF0FD9FFEF1FE3B3638A1BB08E0EEDDCD24FF - 769324DEF4EE264C6FD8B1FB3524892499483EF779F58A4D13D24B72EFEEED66 - 27FC766B4BF6AD387BF28CC5833FF4F19FDFD47FD0C82B070F1E6CBE0F000000 - 00783A7EFC786BD589030F7FF7CEB7DDB36DD3F213CE54A3D3ECE4DF347701C0 - B4CE8A00A617D29B66EB2A462F9118A6867D5EDDE75862AFE695F84B42EFEEED - 64DF8E632D333333E7A39FFBFD650B4B2EFFDFEC01F9839C390000000048585D - 5DDD8955FF7DF4A7DFBCFDFAC79B9B9B1B9C293BF9B70B00762C09BEBB374D12 - 79D37B359B1DBB5F432F49C289E431E7D3EBBCCA9C69427A49EADDBDDD4C926F - B77609BFD5B2AF7CFD87A75CFBE6DB3E5454346CB61303000000408F9D387EB8 - E24FBFFECA771EF9E35DB250A0B91BC0AB998280DDEC0280BB08607A21BD696E - F67B900426194572C8F9F43AA766DEAB7925FD5EC9BF24F9A6CFD663E9B3C64E - 9C35E896DB7EF5B60993C75E93913144BE16000000007AADB5F568F3B6ADBB1F - FCF697DEF48BFDBB379E72A624E197628024F9EE4704EC02803449F44D6F373B - E97737B778F3E8014940D173EEF3E7753E4D922FECB1F4124B222F63D34CC26F - 9A7D955FE258D22F4D6EF7FFE0277E79E19273AE796F5E41FE10670E00000000 - 92AEAEA6F6E88BCF3FF0C3EFDDF9D6675C8F0598628089E315024C9358127A19 - 0B531010F6D8E69EA320D0435E092B12679F3FF7B934B13BE19766C626E1B77B - 93E8DBBDDD6205804BAF78D7C4EBDFFEC50F0E1D36A2D4890100000020E52A8F - 1C58F9DB7B3FFBDDBFFDF59E9D4E680A0076F26F9A24FAA63789BFDD9B2280F4 - 662C4CDF59D2EF7E0D097227AD488CFBBC79C5A6093BE137BD6992E4BB9B57D2 - 2FF3D943478CEFFFF1CFFDFEC661C3275D573464A8BC06000000006973E26865 - D3E1835B7FFFF52FBDF1579507779D76A6DC8F04B80B01EE2649BE6926F9B78B - 003236CDD6558C2E980415DD639F37F73994D8AB49022F7D67C9BF49F8656C6E - F56FEBDF77EBDDE79E77E11B3F90975F78961303000000409FA9ABAD3EF4AF67 - 7EFBFD1F7CFD5DCF39A149FEED5E92FD788500771140E64CD2EF6E363B76BF86 - 2E48428AC4B9CF971DCBD83421BD24F9A6376349EEDDC9BF49FA4D01C04EFC73 - 468F9B3EE0D35FFECB2D23474FBDD88901000000C0370EECDBF2B73B6E7BCDB7 - F7EDDE58E584667D00F7DD0092E0BB0B0192FC9BC4DF2E06985E486F9A618F85 - 3B461C9274227126B917EEB169C24EF8CDD84EFADD89BE69B1845F8F73657CD5 - 751F9E7ECB27EFFF7AF1B051F39D18000000007C65C0C021935E71F15BCFAF6F - AC5DB765C38B279D29C97D849D1FD9F9923DF6625E97C4DEEB7D9D7D2D3AC189 - 4B8CFB3CD9B18CBD9AF9259784DF5D0088570868EB333333733F7EFB03572E2C - 5BFABE7EFD864A5100000000007CABA5A5B261C5BF5FF8BF3B3FFFBABF363737 - D73B53F69D005E7704B8EF0670DF1120BD5733ECB170C7709104155DB3CF937B - ECD54CC26F927E77F22F89BEE9EDC43F361E3B7666D127BFFA975B468D9AFC0A - 270600000080C038B867DB335FFEF46BEEDAB367FD092734C9BFBB102089BEBB - 10600A00A618D0DD22803D86074942119F49E80DF7D86EEE84DF4EFA25C137CD - 24FAA6C9D5FDB6DBFE5F73DD47677CF833BFBCB3B878E45C27060000008040E9 - 3FA878E205AF7ACBF9CD0DF5EB37ADFF8F3C1220243FB2F327C36BCE30735EAF - 19F66BF1FE1C6814003AE7FE6532BDBB995F6677E26F3777F26F92FE5801406E - F9FFD41D0F5D7DF9A5377C36A77F719133070000000081949D9D3770EE8C05AF - 9A3AFBFCD32F3CFBFB6DADADB18BF3267F324C1EE5C53DEFF53E3317EFCF800B - 27CA5B67BF483227BFA8C28CCD2FAE197B25FFEE2689BFF4D91326CC19FCF12F - 3FF0919123279FEFC400000000101A07F66FFBE7D73E7DCDB776EE2C3FEE84E6 - 7100F3288057B31F09B01F05B0C7C21EDBCC9CD76B9126C9293A9264DE9DFC9B - 3993FC9B645F9ACCC74BFAE52ABFE93B5CF9BFFA868FCFBCF9E33FFBDAE021A3 - 663B310000000084CA8001C5E32FB8F8860B9A55EB868D15CF4B11C0E45A5E7D - BC3949E6ED39776C73C7D03831ED75F60B649A90DE9DFCCBD85D0030BDBB0890 - 2DB7FCDF76C7C3D74C9AB2E8DD454386CA6B00000000105A2D55958D2BD7BDF4 - E3AF7EE6AA07F52E01EEBB014C2F57FFED3B01CCDD00D24BE2EFBE13407AD36C - F6EB7098841667D849BE61E6CCBC49FADD57FE4D01C04EFC4D6B4BFC9D963376 - E2DC419FFED243B79E356AC2794E0C00000000917168FFCE7FDDF199D77E7DCF - 8EB5B2406083D3DC8500D3EC42802900D84500D30B199B66F39A8B2C4954D131 - C937DCF376F26F127ED34CB26FC66D09BFDDE62E7CE5C8CF7DF5A16F140F1D35 - CF89010000002052FA0F281A7FCE2BAE5FB27DEBEAFF1EDABFADD69972E75DA6 - 17F6BC17794D12FC78EF31F39DFD1991C1493843CE83FB5C9839336F5FF197DE - 5D003089BF69EDAEFA4B7FF1656F1FFF8E9BBFFDD5C2FCA2114E8C80A8A93EAD - 0EEFDFEFF4D5AAB6B646D5D5387D8DD33B63E9ED719D2B96D6D820454D000000 - 74A65FBF0C959B97AFF20A0A547E7EC1995EB73C278EF5B171BEF37A61DBEBF2 - DAC04183D4F051A3545696FCD31B41515D7BE2E0DDDFBEF993FF78EABE5D4E28 - 57FFBBBA1BC06EE60E00FB8E0061AEF84BB379CD458E496EA3CA1CBFFB3C486C - 9A4834F997FFC77127FFD272AE79E327665EFDA6CFDF317040FE202786CFB4B4 - B4A823070FA8FDBB77A9FD7B76C7DA01A7ED73E293C78FE977010000C0AFFAF5 - EBA7868F1CA5468E1DA7468F1B1FEB47E936B068B0CAC830FFB4879F9CAAAA3D - F9E7DF7CFEB6877EF3F50D4EE82E00982280E9935104B0FBC889FADF0273FCF6 - 7990B169A2ABE4DFBEEA6F92FFD8157F337EFB7BBEB9E8CAAB6FFA7C66EEA07C - 27461FAAAEAAB212FC5D4E827FA63FB86F9F6A6A92FF5F01000040D81414F68F - 1502DA8A02E3C6C7FA11A3C7A8EC1CF9A73BFA5273FDC9DABF3CF8D32FFCF247 - B7BEE4847611C08CED3B01DC8580EE1401CCD89E8B1493E4468DFBB84D6C7A49 - F24D2F7326F997DE2E00B8137FE94DF21F7BE6FF43B7DD7BD1FCD22B3ECE4AFF - 7D43AEDEAF5FBD4A55AC5AA1D639EDE0BEBDFA15000000445D46463F3579DA74 - 35AB64819A5DBA409D3D7B8ECACDCDD3AF229D4E1CAD6C5AB5E2B13BBFFB95B7 - 3EE38492F89BE45F7A49FADD8500BB0060927F7711C02E06D8BD11B942803B11 - 8E0AFBB8CDD8F48924FF92CC4B2F89BEE94D8B25FED23EFD95BF5E3379DAD2F7 - 0E1E3CD8FE7E48A1EAD3A7D586352F27FC7B766CD7AF000000009DCBCCCA5267 - CF9CDD561098326326EB0AA4D1F1E3C75BB76F7CFE075FBAEDAA079CD02E0048 - 6F9A24F9A63785809E16012800849CFB78ED58C68926FF7693FF47307D2CF197 - 3DFEBF74D7BFDE317DF6D21B9C1829545F57AB3696AF8D25FB92F4EFD8BC59B5 - B69ABFE300000040CFE5E4E6AA69B3E7C68A0152149838759A72FEADAF5F45AA - 6C58F7FCAF3FFBA10B7ED1DCDC5CEF84F6DD005E7702245A04E82CF18F4C21C0 - 9D10879D3BE1B7FB9E26FF7673FE3FA220FFCE1FBEF8A1F113675FEEC44881DD - DBB7AA17FFF98F58D2BF65C37AD5DC247FE701000080D4CA2F285433E7CD57B3 - 4B17AAB2575CA4060F19AA5F41B2EDDA51F1D827DEBBE43BF5F535B24DA0FB2E - 809E16018449F6EDA49F0240C8B88FD38E659C94E4BF68E8E8015FB9EB5FB78D - 183D71991323894E1C3BAA9EFFDB53EA9F4F3EA6766DDBAA6701000080BE21EB - 07CC59B0509DFFCACBD5A273CF8B6D6188E43A7C60C7F39FB8F9BCAF9CA8DC57 - E584C92A027496F887BE10E04E8CC3CA9DF01B327627FFD29B26897F57C97FEC - B6FFF193E70DFE7F773E7A7BD19051739C1849D0505FAF963FFFAF58D2BFE6A5 - FF726B3F0000007C292F3F5F2DB9E0C2583140EE1090E20092E3C4D1FDE5FFEF - 13577C6ED7B635C79DD07E1CA0B32280290498966811800240C0B98F2F5EF2EF - 4EFCA5259CFCCF2BBDE4AC8FFDBFDF7CB5FF80A1139D18BD2049BE3CD32F49FF - 7FFEF18CAAADA9D6AF00000000FE3764F87075DEA597A9F39D366ADC783D8BDE - 3875F2E8F66FDDFEC64FAD59F9F42127EC6911C04EFC3B2B0288D01602A25400 - 708F4D9364DFEE4DE26F170024D9F74CFEC74F9A57FCA5BB9EFE26C97FEF1CDC - BB47FDF3A927D4BF9E7A5C1D397840CF02000000C13579DA0C75FEAB2E57CB2E - BC440D183448CFA2274E5755EEF8CC2D977CA48B3B014C6F0A00A649426F927E - D39B66C41B878A24BC61E43E2E3B96B1DDCC157F19772BF92F1A3A6AC0B77FB0 - F22B45C3CE9AEDC4E82659BCEFB9BF3DA5FEF6F0836AF3FA0A3D0B000000848B - EC1C5052B64C5D76CDEB63BB09646448EA81EE92C7016E79CFA2DB4E54EE376B - 02D84500197BDD05E02E02B80B0076B26F8F853B0EBCB0FEE6D9C7E51EDBCDBE - FAEF4EFEA599E45F12FE76C97F6E6E41DE5DF7547C8E05FFBAAFB1A141FDE3F1 - BFAA877EF32B5579E8A09E05000000C26FCA8C99EA756F797BAC204021A0FB0E - EEDBF1C2876F9A7D7B7D7D4D9D139A22805D08307702B80B00D2E2DD056027FA - F1C6A110D6DF38735CEEE33309BF69E6EABF24FBA69784DF4EFEEDC43FD66766 - 66E67DFB276B6F193B69E6654E8C04C99EFD4F3FFC907AF8F7BF56278E1ED5B3 - 00000040F48C9F3C455DFDE6B7A925E7BF42F5EB27A90812255B047EF47FE6DF - D5DCDC6C17014C01C05D0430770348D26F7A770140629B49FC2900048449F06D - 26E137AF49B3137FD324E977DFF26F0A00D272BFF2BD17DE317DF6D21B9C3112 - 50537D5A3DF1C09FD4A37FFC9DAA3A7552CF020000001835769CBAFACD6F55E7 - 5C74A9CACC92340489D8B0EEF95FDFF681737FE10CEB9DE65504308500F7E300 - A6106027FEA6206093980280CF99E3711F9749F8A599228049FE4D01C024FE32 - F64AFC63C9FF6D5F7EE49A454B5FFD5E678C2E549D3CA91EFDD3EF62C9BF1401 - 00000000781B3662A47AED0D6F51175CF66A959D2D6908BAB2FC85477E70C7A7 - AF7AD019DA4500772140927DBB1020C9BEBB0860927D77C26F62F77C6049B21B - 2626F137BD3089BF3493FCDB89BF69F6957FE9EDC43FD63EF8C95F5C3C6BDE25 - 1FCECFCFB7FF7CB8C8EDFD7FB8F71EF5FD3BBEA02A56AD508D8DF27710000000 - 403C35A74FAB95FF7941FDE3B147628F048C9B345965655108E84C7EFF610BC7 - 4E98BEEFBFCF3FB45B4FD9246997BCCD2B790F4D42DF5D6129009804DF306333 - 6F9A49FC656C27FED29BC45F7A6976F29FFBD6777F7DD1B2F3AEFFF4E0E22161 - 39674977E2D851F5EB9FFC50FDE0AB5F8CEDE5DFDC2C45360000000089AAABAD - 516B5E7A51FDED9187546B6B4B6C2B41D945001DC985D9E2C163960E1A3C7CF3 - 9A154F1D72A63A4BECCD6BEE5E72C3AE987C32F0C2F29B64FF30CCD8FC904CB3 - AFFECB719B66AEFC9BABFE1D0A00AFBDFE6333AFBFE6C35F2A282E96182E2D2D - 2DEAC987FEACBEF5B9DB9CC47F4D2C06000000D0730DF5F5AA62E572F5C2DF9F - 56A3C68C5523468FD1AFC0965750D0EFECA9B396D5D635ACDEBCFEDFF1561AEF - EA8ABFE4895EE2CD0756D00B0026B937DC6349F685B9F26F927FE9CD957F73D5 - DF1401ECE43FF7C257DE38E186777DEBCEFC4103FA3B315CB66E5CAFBEF1994F - AA671E7B845BFD0100008024ABAEAA52CF3DFDA4DAB363BB3A7BE61C555058A8 - 5F81D12F2B2F7BF28CF3971D3FB2EB3FBBB6AF95C5C7ECABFC76F2EF1EBB137C - 3367BFCF9D63BABF2650C2500030BC7E30D224D997DE24FED29BC45F7A93FC4B - C26F92FF5CE9E72CB864C47B3FF5B3AF0FEA3F608813C372BAEA94FAE50FBEAB - EEB9EB1BEAF8D14A3D0B0000002015F6EDDA197B2C40D60598327D065B07BAE4 - E666E7CD587861D9B64D2B9E3B7C607BAD9EF64AFEED399B57F26FC87C2804FD - 40CCE7B78F43C67693BF19A6D9C9BF7DC5DFB4B62BFFE3C7CF1EFCA5EF3DF3CD - FE03864E746268F21CD2B34F3CA6EEFFF1FFC556F907000000905E63264C5437 - 7DF8636AC6DCF97A06C6E9AACA1D9FF9E0851FDDB5ABE2B813C6DB22D0EC0A60 - 7606B0770770EF0A601704CCD89E0B143B710E2293E41B2636CD4EFE4D01C09D - FC4B6F12FF58CBCCCCCCFBFEBD5B3E3F62F4C4654E0C6DF7F6ADEA9EBBBEA936 - 55ACD53300000000FACAF9AFBC5CBDF9DDEF53830617EB19884307763CFFFE1B - A7DEDEDCDC5CE784A600609A24FD5E4500BB00D05511C08E034512E220B2937C - 9B49FA853BF1EFECEA7FDB957F69B77DE5AFAF3B7BC6A26B9C311CB53535EAB7 - 77FF48FDE86B5F5695870EEA59000000007D69D7B6ADEA99471F560585FDD5C4 - A9D35446863B3D8AA6FE03068F9B74F682EA7FFDEDD75BF4943B618F97C0BB13 - 7D39A1EEF79A931CC8931DE40280DD0B199B2649BFF4727C7601C04EFCED0240 - 5B11E035D77D74E639E7BFE153B29AA413475A6B6BAB7AF19FCFA8AFDD76AB5A - BBFCBFB118000000807F343634A855FF7941AD7AF1DFB122C0E0A143F52BD156 - 905F3CBFB5B565E5A6333B034822639A88D71B124B3EE99E0FBCA015004C826F - 98B19937CD5CF9F74AFE4D6BBBE55FB7DC7113E714DF7CDBCFBF3C7050F14027 - 8EB4BADA5AF5E3AF7F59FDFEE777C7F62205000000E05FB230B7ECCC95959DAD - A6CD9E13F9BB0162DB03CE5A5CF2E2738FFCBDEAE411B9E5DF4D927B3BC137E3 - EE24FD26FF0C8C2016000C333627DD343BF93705003BF1B7AFFAB75DF997E7FE - EFF8DEF31F1F523C72A613479A3CEB7FC7AD1F56EB56AFD43300000000FC4EEE - D8AD58B95C6DDDB841CD5BB844E5E6E5E957A229273BAF7FC9A24B473DFE971F - FCDB3937F25CBF3089BF57C2DF55F26F5E37B968E004B500609F7093F40B77E2 - 6F9ABB00605FF99738F7535F7CE8B5D36795BDCE194796FC1FC6DF1F7D587DEB - F3B7A993C78FE95900000000417268DF5EF5FCDF9E5293A7CF5443CF3A4BCF46 - D3808143C68D9F3CEFD4737FFFADAC07608A00865D0870731706DC497F208B00 - 412C00B8937FD324E9975E8EC92E00C4BBF22F2D76EBFF95D7DD32E3DC57BC29 - D2CFFDCB427F3FFAFA57D483F7FF52B534CB229800000000824AFE7DFFCF271F - E39100C7A8C143E7D73636AED8BCFE3FB235A049FAED26DCBD21B19C3CF7BC08 - DC490D4A01404EAC693693F44B93B169EEE4DF2E02D857FF73468F9B55F4D14F - DDFBE50145C5839C389264F5D03B6EFD905ABF66959E0100000010743C127046 - 466E41E6B41965F35F7CE1A1BF559DAC94F500BC927E3BC177BFEE66CF9B1CD5 - 9DABFA52900A00762F4CD2EFEE4DF26F1700DC57FE63850079EEFF2BDFFBD7AD - 83878D9EE5C49113BBE5FFAF7F3973CBFF09298601000000081B7924E0B9A79F - 545366C8230123F46CB464E7E60D9857F2AA514F3CDCB61E8049FAED64DE8CBD - E6EC5C34B0FC5E0090936C9F683336F3D24CF22FC7620A0092F4BB0B00EDAEFC - 4BFBF8ED0FBC66C6EC65D73AE3C8A9ADA9563FFCDA1DEAA15FDFA75A5ADC8FC2 - 000000000813D9D94B1E09C8CC8AEE2301038B868C1F3F61EE89E7FEF13B590F - C04EF6DD89BFBB175E736E2647F5AD2014000C333627D53449FA4D93E331CD4E - FEDD4580DC57BFEEE6E9575EF696DBE47610278E949D5BB7C456F9DFB066B59E - 0100000010766D8F046C58AFE62D8AE62301238B879454D5D52DDFBAF1BF279C - D0EB4E003BB6E73A637255DF0B4A01C03EA126E9178924FF1DAEFE8F1E3F7DD0 - CD9FB9FFCB79FD8B8B9C38525EF8FBD3EA6BB7DDAA4E71CB3F000000104987F6 - EF8B3D123067C12255545CAC67A3A15F6E61E6D4D9CBE6BFF4FC837FD7EB0108 - 3BD18F97F8BBC79297DA7381280204AD0020BD6992F44B2FC7600A0092F47B15 - 00DA8A00999999B95FFECEF31F1B3A74D46C278E94C7FFFC07F5E36F7C955BFE - 010000808893470264AB40791C6058C4D605C8CDC91B3077E1A5239EFCCB0FBD - D603B09BE11E4B1E6ACF05865F0B0026C937CC587A93F89B2BFF26F937CD4EFE - A56F77F5FF3D1FFDC905F3175EFA16671C1972ABCFEF7EF613F5DB7B7EAC6700 - 000000445D5363A37AE16F4FA9B11327A9D1E3C6EBD968183870E884C1C52377 - BDF4EF87F7EA2993F4DB574BCD9C49F64D6FF39A73E7B3BEE1E7028061C6E624 - 4A8B97FCBB0B0026F18F8D878D9834E8BDB7FCF0FF65656517387124343737AB - 9F7EEBCED8D57F00000000B0C9DDC1FFF9C733AA78E83035F1EC697A361A468F - 9D3EF39F7FFBED9335A78F3738A13BD1773723DE58D879AC2FF9BD00609F4049 - F6ED02807C76BB0060127F93FC9B668A00B99FBBF3B1B79D3572E242671C090D - F5F5EA3BB77F36F6DC3F00000000786B552BFEFD9CCACCCC52D3E7CC8BCC0E01 - 59D93905D3662ECE7CFAD17BD63AA124F3F11E0710A637E2C5BE3E797E2E00D8 - 27CE24FDA6B79B3BF9B70B00B1C45FFA8B2FBB69F2E557BFE123191905F235A1 - 575D55A5EEFCD447D5DAE52FE91900000000886FDDAA154E1E714ACD5BBC2432 - 4580C143F2A7551E39FAC28EADAB4E3AA149F8BD760710EE381EDF9E3CBF1500 - E444996693A4DD7ECD24FE768B77E55F16FECBBBED8E873E5550188DD52D8E1F - AD545FFCE8CD6AFBA68D7A0600000000BAB675E37A7560EF1EB560D9B9AA5F3F - BFA58BC9271788274F5B34FED13F7FE71F71160414EE58C49B334C4EEBCE6DFB - 94DF7EA25E27C924FCA6B79B49FCDD57FF25F16FBB03E0E64FDD7BF18C39E75E - ED8C434FFEB27EE1960FA8834E0F00000000DDB567C776B565FD3AB5E8DCF355 - 76B6A455E1565030E0ACE1674D3CF0E2730FEC74C2AE760570C7812249B49F49 - D26F17054CF32A04D8C50019C70A006327CC2A2A3BEFF53739E3D0DBB66983FA - DC07DFAD2A0F1DD43300000000D07DE52B5E525FFCE807D5A91327F44CB82D7B - C5EBDF397ADCCC81CE50F248FB02B3C92FA5B9F3503B4715F6D897E420FCC47D - C2EC936A4EB239F9E60761FF60CC55FFD8957FE93FFBD5C76F1A3E62DC5C671C - 6A152B97ABAF7CE223AAA6BA5ACF0000000040CFC9A3C5CB9FFF975A74CEF9AA - A0B050CF8653665676FED93317E73FF5C84F5738A1B9C29FC8A280A6B79939DF - 1503FC52003049BE7D824CD22F4CF2EF5504B0937FBB0090F3EAD7DD3CBDB4EC - B51FCCCF2FF0DD894F26794E4792FFFABA3A3D0300000000BD77FAD429B5E6A5 - 17D539175FAA7272E51A6B88F5CB9BDAD850BD7CEBC6978E3951678F02B89B21 - 6377EE69625FE4A426C1F61B3939E604C96794B19DFCDB63772120560CC8CCCC - C979DD0D9F7A5F71F1105F9CE854D9BF67B7BAF3931F23F9070000009012FB76 - ED545FFBD4ADAABE3EDC3987E48ED7DFF8D9F74A2EE984893C0A608F4DCE2AEC - 7CD657E403FB813939766F9F44D3CC093627DFFC50CC957FD3E77EF4F3BFBD7C - DACCC5973BE3D03A567944DD7ECB07D4896347F50C0000000024DFD12387D5AE - 6D5BD5D20B2E52FDFA494A164E79F9FD878E1E7BF6B1179EFDE33627B4EF0270 - 8F85E965CECD6BAECFF9E9276727FFF6D8F4A608609A1400A4D9D598583160EA - F4C5834B975DF136671C5AB2CFBFDCF65F79F8909E0100000080D459F59F17D4 - 4FBEF955D5DAEACBDC36694ACFB9EA6D93A62E18EC0CCD056777DE29CD9D9F7A - E5B0EEB93E271FBC2F9993629F10199B13E83EA9E6C49B5E7E20A6C5AEFC4BFF - D93B1F7DEFB0A163663AE3506AA8AF57777EEAA3ECF30F00000020ADE42E80C6 - C6063567C1223D133ED999D9B9D3A6970D78E2E11FFDD709CD157FFB0E00D384 - 3BB6D97326E7B573DFB4F34301C0DD9B661701E4734A93B1A9BCD80580B6E4FF - 756FFAD49CB90B2E7F4F7E7EBEF93343A5B9B959DDF585CFC4B6E50000000080 - 74DB54B1561514F6575367CED633E1D3DA2F67526666BFD51BCA9F3B22A1D3E2 - 1501CC6300C2CC09D3FB8A24D47E13AF08601702EC660A01B1FECAABDFFFF6C1 - 83078732F9975B6DEEFED6D7D48A179ED33300000000907EBFFCC177D5734F3F - A9A3F0919CF2D54E6EE90CDB724DDD7BE5A4266FB57358D37C453E6C5FB24F8A - 7D92ECC4DF9C50E9CD09373F00B9F2DFB6F8DF756FFDDCBCC5E7BCE64DCE3894 - 7E77CF8FD5E30FFC514700000000D077E4C2E4941933D588D163F44CB8E4170E - 1CDEDADCB276DDDA7F1E7642FBEABF7D378030F3C23DB67B93FBF61949ACFB82 - 9DECDBEC79BB722263D3A400608A0076CBBEE48A9BDEE0F4A1F4D89F7EAF1EFC - F57D3A0200000080BE258F277FEBF3B7A9AD1BD7EB99F0B9E4F277498E69AEFE - DBCDE4A576AEEA95CB9A6678CDA58D7C303FB04F80DDDB27D39C5C93FCDB4580 - EC2BAFFDF0D9C3CF1A57E28C43E7F9BF3FA5EEFDBFEFE80800000000FCA1BEAE - 4EDDF9A98FA9FD7B76EB997019366A5CE9ABAFF9D05467681701EC9CD4CE554D - F3CA6DCDB84FC987F30B7352A49993669F446972624DB34F7CD6AB5FF781EB9D - 3E74766CD9A47EF8D53B740400000000FE5275F2A4FAC6673EA1EA6A6BF54CB8 - 5CF1BA0F4AAEE995FC9BE6CE5BED9CD6345F900FD557EC9360C6766F9F387352 - CD0936273FD62EB9FCA689B9F9C54B9C71A8D4D654ABBBBEF059D5D4D4A86700 - 000000C07FE40E807BEEFA7A6CE1F2B0C92F2C2EBBE8F2774C7086EDF250A7D9 - 0500D3DBB9AC70F7C21EA7957CB074920335CDB0E7A4999365C6A699936BB7D8 - 897FCD1B3F765DD856FE97BF383FF9C657D5A1FDFBF40C00000000F8D7BF9E7A - 42FDE3F1BFEA283C24D7BCFABA5BDD7701B89B9DBB7AE5B6A6195E7329271FC8 - 2FCC814B6F9F3C7332CD8935273DD6969E7FDDE83163879DEB8C43E5E9871F54 - FFFEC7DF750400000000FEF7F3EF7E4BEDD9B15D47E13166C2F07325F77486ED - F251A7D90500D39B66E7B8BE201FAA2F99645F7AAFB169F609352D76C2AFBFF1 - D3D765640C91D74263E796CDEADEEFB3E81F000000806069A8AF5777DDFE5955 - 5F17AEF50024E7BCEEAD9F7EBD337427FED2EC9CD5B47839AEF47D463E809F98 - 93624E8C194B3327D79CF0AC92C5979D553478F42B9C7168C49EFB77FEC2F0DC - 3F0000008020DAB76BA7FAD977BEA9A3F0185C34FAC2B90B5F7996336CCB499D - 6617014C73E7B5BE211F281DE4A0DD076ECF99B1DDEC936827FEE60467BDE96D - 5FB8B668C850990B85D873FFDFBC531DDCB757CF0000000040F03CFBC463B116 - 26927BBEF9A62FBDCE19B6CB4BADD8CE5FBD725C618F0DAFB994485701C0661F - 98395069F2594C6F377362ED963D63D6B9C513A74DBCC41987C6D38F3CA4FEFD - CCDF740400000000C1F5B3BBBEA1F6EEDAA9A370983C75C2A567CF5A5AEC0CED - 2280DDDCF9AC9DEB9A66D8E3B4900F924E5E076B9F04333627C87D324D7525EB - ADEFB9F3EACCCC6139CE3814766EDDA27EF9FDBB740400000000C1565F5FA7EE - FAC267627D58480EFAB6FFFDC66B9D615B6E2AD3AE66E7B4D2847B6CD8E3944B - 7701C0701FB034F92C76739F44D3B2C64F9A3370CAD459973BE35030CFFD3736 - F2DC3F00000080F0D8BB7387FAC5F7BEADA370387BDAAC2B9C9C749033F44AFE - 4D73E7B726EF35EC71DAC807E92BF6093063D3EC13654E605B75E5A6F77FE7AA - ACDC41F9CE38F0DA9EFBDFBB47CF0000000040783CF3E823EA5F4F3DA1A3E093 - 5CF41D1FF8CE95CED0E4A926679566E7B2EE3C57D8E3B4930F952E5E076CC6A6 - D927CB3E896D2D3333277BEAF4C5AF74C6A1F0C2DF9FE2B97F00000000A176CF - 5D5F57C78E1CD651F04D737252C94D9DA1E4A9A60860E7B1766EEBCE7B857B9C - 16F26152C91C94FB80EC79D3CC89B14F9469E62466BEF1ED9F9B97575038C419 - 075E4DF569F5CB1F7C4F4700000000104E75B5B5EABE1F8627F7C9CB2F1C7AFD - 5B3F33CF19B6E5AABAB973593BD775375BBCF9A4920F924EF601D9BD69F68992 - 669FC8D823008B975D7D91D387C2EF7FF65375F2F8311D010000004078FDFB1F - 7F576B97FF5747C1B7F8BCD75DE8746D8FAA5BCD9DD7DA39AFB07B334E0BF930 - E9660E529A3919F6C991669F3C69B1133A74E8D882D1C5A3CB9C71E0EDDCB259 - 3DF1E09F750400000000E1F7B3EF7E2B348B9F8F1D3C7AA9E4A8CEB02D677535 - 779E6BE7C0A6A5957CF3BEE43E0132769F3033CEBAE19DB72FCB2C2ACA73C681 - D6DADAA2EEBEEBEBB11E00000000A242163F7FE477BFD651B0496EFAC6777C61 - A933B4937FAF9CD6CE77A5EF33F201D2C51CB43063D3E473B89B7DD2626DCEBC - 8B5EE1F481F7F7471F515B37ACD7110000000044C703F7DFAB8E1C3CA0A3609B - 33FF22790CA043EEEA34AF1CD79D070B7B9C72F22152CD3E187370763327C23E - 31D2CC898B3D53317BEE854333F30AE73AE3403B75E284FAF54F7EA023000000 - 00889686FA7AF58BEFDFA5A360CBCAEB3F77E6BC0B6491FA58DEEAB47805003B - F77537C31EA7847C8054F03A1837FB3DF68991664E98397999D7BCE9D60B8A8B - 8774F6E705C26F7EFA43555D55A52300000000889E152F3CA756FCFB791D0597 - E4A8AF7BE3C72F70866DB9ABD3EC9CD66E760E1C4F22EFE931F910E9601F807D - 40D2CC8990DE7DC24CCB9A3C7DA19CD440DBBCAE5C3DF3D8233A0200000080E8 - FAC5F7BEADEAEBEB74145C53662C9247D5EDFC559A3BBFB5735FBB097B9C52F2 - 01D2C53E48F9BEA60973524C33272A760BC52BAF7ACFE44183868D77C681D5DC - DCACEEFEF637740400000000D126EB003C74FF7D3A0A2EC9552FBDF2DD939C61 - 5B0EAB9B3BC715F69C9D23A7857CD3BE648A01F6814B6C4E56EC045E78D9DB02 - BFF8DF130FFE51EDDEBE55470000000080BFFCF6FED8CE004177F1ABDE2E8B01 - 9AE4DFCE69DDB9AEF47D463E40AA998315662C4DBEB73901D2CB093227A92DCE - CFEF9F3361D2BC739D71601D3F5AA9FEF0F3BB750400000000104D4D8DEA67DF - FD966A6D6DD533C1347ECADCF37272F2B39DA1675EABC7EE3CD834618F5346BE - 71AAD81FDE1C8C34F701DB27479A3941B176DD8D9F9D9F97975FE48C03EB0FBF - B85BD5D6D4E8080000000060AC5DFE5FB5E6A51775144C797905456F78DBE7E7 - 3BC376F9ACD3DCB96EBCBC589A618F934ABE613275F6E1DD0721B1396073F0EE - 9395B970E955815EFCAFF2F021F5EC138FE90800000000E0F6C0AFEE0DFC5D00 - 8BCF798D7B3700D34CBE6BE7C03613DBF332362D69E49BA752BC0390669F00BB - 9913943972CC94FEA3C60E5DEC8C03EBE1DFDEAF9A9B9A74040000000070DB54 - B1566D58BB5A47C13472F49025C3474E2A74866D39ADEEED66E7C27633EC71D2 - C9374E35FB80EC0317766CB758A5E4F56FF9ECE2CCCC6139CE38904E1C3BAAFE - FEE8C33A0200000000C4237701045966D6F09C37BCEDF34B64A89B57AE2B4DB8 - 6377212025CC374B373930F9DEE6204D6C574A32274D5B20CF5004D65FFFF05B - D5D8D0A02300000000403CE52B5E52DB366DD051304D99BA609ED3D90500D3BB - 735FE9D34EBE71AA98831366EC6E6DC9BE1EB7C562C4F009B39D7120559D3AA9 - 9EFACB033A02000000007425E877010C1F3961B6E4B2CED033CFD563AFDC589A - B0C74927DF3CD9DC1FD61C8069E680ED03B74F48ECA42C5E76F5A8BC82C221CE - 38901EFFF31F545D6DAD8E00000000005D59FEFCBFD4EEEDDB74143C79F98543 - 172E7DCD4867D821C7755A6739B1693677DC6BF20D53C9FEC0F60199B17C7FD3 - CC49899DA0B20BAF9BEBF481545B531D2B000000000000BAE7A15FDFA747C174 - EE85D74B2E6B27FED2ECFCD72B3736EC71D2C9374F357340A6998336076EC7A6 - 654E98306F8ED307D2930FFD59559F3EAD230000000040A25E78E66FEAE0DE3D - 3A0A9E0993E74A2E6B27FFB11C57F75E39B1DD524ABE6132787D60F7D8ABB90F - 3C7652E49989A2A1E3673AE3C0A9AFAF8B2DFE0700000000E8BED6D616F5D06F - 7EA5A3E0197AD6C4997A1D00C973BDEE02B07362BB19EEB1FBF51E936F9E0AF1 - 3EB069E604D8ADED049D7FD19BC70D1C903FC81907CEDF1FF98B3A75E2848E00 - 00000000DDF5CF271F5395870FE92858F2F2F28BCEBBF0CD639C61875CD79A93 - E6952B1BF63869E49BA68AFB00849933CD3E7869B113B2F8BCAB0379FB7F6363 - A3FACB6FEFD71100000000A0279A9B9BD5C301CEAD169FFB5AB30E803BE795E6 - CE8B6D5E734923DF3C95EC83B29BFBE0ED3873DCC4D9812C00FCF38947D5F1A3 - 953A0200000000F4D4DF1F7D589D3C7E4C47C13266E21CB30E805D04F0CA85BD - 5ACAC8374D36FB43DB07619AFB40CD09899D9CCCCC9CCC61678D9CE18C03E7A9 - 871FD42300000000406F343634A87F3EF9B88E8265C090513324B77586761140 - 7A3B178E570410F63869925900707F38F70777377312642C7DAC5D72E54D93B2 - B3FB173AE34091BD2A776ED9AC2300000000406FC95A00ADADAD3A0A8EA2C2C2 - FE975CF18E49CEB02DD7759AC97DDD8500BB09D31BEEB8C7E49BA742BC0F680E - CA3473224C31A0DFC2259707F2F6FF7F3D15CCCA1400000000F8D59E1DDBD5AE - 6D5B75142C0B965C39DBE93AE4BC4E73E7C55EE2CDF78A7CF354711F8C395073 - D02636D58FD8DCD8B1B366397DA0B4B4B4A87F3DFD848E0000000000C912D48B - ADE3C6CFB40B001D725FDD4C6C482C2D25EC6FD413E6C3D91FD0FD61EDF798D7 - CCD89C80583524AF7060F6D0FEC5817BFEBF62E57275E2E8511D010000000092 - E5B9A79F8CED0A1034439CDC362FAF30DB194ADE6DE7BE261F16666CCF19761C - EF3DDDD2DB02805BBC0F68E6E5FBD94DE6DBE2575DF9EE2999454579CE3850E4 - B9140000000040F2C94E00152B5ED251706439B9EDA557BD7B8A338C9B03EB26 - ECDC599A618F7BCD7CB364B23FB019C79B33071C1BCF2BBD3870CFFFD7D6D4A8 - FFFEEB591D0100000000922DA8BB01CC5BF44AF318803BFF354DD8B17B2EA9E4 - 9BA7837C70FB60CDD8B4D82300C3474E18EFF481F2DF7FFE4335D4D7EB080000 - 0000906C2F3DFF4F555B53ADA3E0183674FC04A73379AF49EAEDD81EA79C7CA3 - 543007663721BD3938D3DA0EBCFFC0E2514E1F28DCFE0F00000000A925175D5F - FCE73F74141C45C543473A9D49F26317BE9DE6CE858599B35BD2C9374C35AF03 - 3127C01C70BFCCCC9CCCFE85AD727202A3F2D041B56EF54A1D010000000052E5 - 5F017C0CA05F61C6C84C870C9DE6950BBB5B4AC9374D16FB03DB07605ABC038D - CDCD99F78AA19959C3739C7160C86A940000000080D4938BAF72113648FA670D - C99DE5E4BACE306E2EAC9B3D6F9AB0C7BD26DFA8B7DC1FC6EB837ABD47BE775B - 2564E6FCF3463B7D60B4B6B672FB3F00000000A451102FC2CE9A77813CEADE21 - 07769ACDCE9DEDB1CD1D775B320A0036AF0F640EC034F99EE680DBE25163A707 - EAF9FF6D9B36A8FD7B76EB0800000000906AFF7CEAF1D8C5D820D1B9AE671E6C - C5A6B979CDF5987CC364737F7033EEF480870D1F13A802C08BCF3EA347000000 - 008074D8BF7B97DAB76BA78E8261D88871E60E003B17B6C7D284C486793DA9CC - 374A06F787331FD8FDC165EC3EE0CC01C52302550058B76A851E0100000000D2 - A52260B958D1E0B324D735B7FE9B5CD8F486C98F4DB3B9E31E936F9A6C5E1F5C - 7A73B0EE038EB5A281FD03B30340755595DAB165B38E0000000000E9B26E55B0 - 76622BCC1F20B96E5BEEEB349387BB736461BFCFCC258DF9C6A9E2FEF0E600CC - 3876B0454346E4D5D5670E91178260FD9A55817BEE0400000000C260FD9A95AA - A5A54547FED7D8D26FE880A2E1B9CED04EF64D2E6E7263BBA54C6F0A00F68773 - 7FC8CE5EB30F38F6BE050BAF183178F060F7FB7C8BDBFF01000000A06FC81DD9 - BBB66DD191FF49AEBB70C9E5F65D00EE2280617262F33E5B67AF25ACA70500AF - 6FE8F541CC9C5713B1F1E4E9A581DA023068CF9C00000000409804EDA2EC9469 - 8BEC85008519DBCD4BBCD7E2BDBF533D2D007497F9D0E643CAF735558F8C11A3 - A7046601C093C78FA9BD3B77E80800000000906E415B0760E4999CD7E4C4261F - 1666CE6E2993EC0280FD81BDC6EEB9D881170F1919980240D07ED10000000020 - 6C36AC5DAD9A9B9A74E47F45C5A324E73589BF9D13DB4D985ED8F34991EC0280 - 617F78F70198036E6B838A86046607009EFF0700000080BE55575BABB66DDEA8 - 23FF1B7826E76D97073BCD2E0608F7EB4997AC0280F9705E1FD88ECD01B61501 - FA399A0A83B30520CFFF0300000040DF5BB73238B959FEA0012325F775867173 - 63DD841DDB73BD26DF2C55DC1FDA7C60D3CBF7EE3771F28241437307E59F99F2 - B7CA4307D5A1FDFB740400000000E82BEB5607E7F1EC82EC010592FB3AC3581E - 1C9B6C9F23BB5B4A24A300E0F5E1DC73F681486BFBBE23C74DEDAF87BEC7F3FF - 00000000E00F9B2AD6AAC686061DF9DFC83193EDDC577262779E6C73C7C26BAE - 5B7A530088F7CDEDF9780721BD7CEF7E03071417C6660280DBFF01000000C01F - 24F9DFB27E9D8EFCAFFFA021054E17CB839D66E7C6F1C47BADB3AFE9546F0A00 - 5D910F15AFB5E93FA03810B7FFB7B6B6B2002000000000F848902ED20E1CD821 - F7F5CA954D4B89641600E27D48F741D87146E180A23C99F4BBE3472BD5B1CA23 - 3A0200000000F4B56D1BD7EB91FF15140E96DCB75D3EEC34617A618F0DAFB91E - 495601C0FD81243673666C3773CB434641E1C040DC017060CF6E3D0200000000 - F8C1FE00E569F905FDE51100C39D239B26ECB1E18E7B24D98F0074F5A1DC0794 - 9197DF3F10058020FD62010000004014C84E6D0DF5F53AF2B7FCFCFE720780E4 - E0E682B8CDE4C86E5E733D96EC02809BFD61CD0199B9D83837BB20108F005000 - 00000000007F91B5DA0EEEDBAB237FCBC92DB42F7E9BDCD85D0CB0C74997CC02 - 80F9A0EEDEADDD7C767E4130EE00D8BD4B8F00000000007E1194C7B5F373F3ED - 35004457397357EFEBB6641400BAFA30F2BA6946DB5C6E1E770000000000007A - 2628B95A766EBEFB0E00A32D3F8E45F175F57A97527107803063AF0F28736D2D - 3727CFF77700C83325F26C0900000000C05F0EECDDA347FE969D1FBB03407270 - 73DB7FBC7CD9EE85D7FB7A249905002FE6A0EC264CAF72B2F27C7F07803C5322 - CF960000000000FC65FF9E603CAE9D9DE57907809D2B9B9632C92E0074F5A1ED - D762E3EC6CFF170082F20B050000000051236B0004E1826DAE93FC3A5D879CF8 - CCB003F35ABCD77B24D5770008FB4377F8F099D939BE7F0480E7FF01000000C0 - 9FAA4F9F5655274FE8C8BFB27373BC2E7EDBB972877C39D97A5A00889BD05BDC - AF797E4D4E66AC0AE26B4159551200000000A22808176D33B2626B00D8E2E5D5 - EED816EF6B12928E3B00DCE483B6B57ED999FE7F046037050000000000F0AB20 - E46C79D959F62300A6A5554F0A005D7DC8440EA2ED3D99791DAA20BE22CF92B0 - 060000000000F85710EE00C86ABFFE5DB7F2E63812F933DA49C522805E64DE34 - 2316E73454FBBA0070F2D831555B53A3230000000080DF1C08C045DBCCAC58EE - EB9917EBE625DE7C8FA4F21100F781787EF0938DFDB2F4D0970EEEDFA7470000 - 0000003F3A1480BCEDE4C97ED97AE866E7CA760E9D74C92A0074E7039A034AE9 - 81254BCDE92A3D0200000000F891EC0410103DCD8793923BA7EA0E00F7C19871 - 523E743AD5D672FB3F00000000F8595D70F3363B57F6CAA1932A190580C025F5 - DD51C7F3FF00000000E06B75B5B5B105DC43AED7B9772AD70008051600040000 - 00007F93E4BFBEAE4E478197B28BECE92E0004EE6E8100DF4A02000000009111 - D0BBB7D39A23A7BA002007639A11A8220077000000000080FF0570FD36AF3C39 - A5F9328F0074419E250100000000F81B776F772D150580C05EEDF7C222800000 - 0000E07F21B87BDB9D3F273D9F4EE71D005E1FDEF70502B6010400000000FF0B - C8C5DB3ECD8BD35100F07D92DF19EE000000000000FF0BC1C55BC99D539A3FF7 - C51A00E6A002511860114000000000F0BF005DBCEDB39C984500BBC023000000 - 0000E07F5CBCED1A05802EF0080000000000F81FBB00748D0240176A6BAAF508 - 00000000E057DC01D0350A005D68A86FD02300000000805F35D4D5E911E2A100 - 0000000000400450000000000000200228000000000000100114000000000000 - 88000A0000000000004400050000000000002280020000000000001140010000 - 0000008008A00000000000004004500000000000002002280000000000001001 - 1400000000000088000A00000000000044000500000000000022800200000000 - 000011400100000000008008A000000000000040045000000000000020022800 - 000000000010011400000000000088000A000000000000440005000000000000 - 22800200000000000011400100000000008008A0000000000000400450000000 - 000000200228000000000000100119BAEF0EF91AF375D24B11C1F4994ECBD27D - B6D372AC96EBB43CA7E55B7DFE3D7FAABCAFB878484F3E475ADC70F179AAB5B5 - 454700907E03060E5213A69EAD0AFAF7D7334886E6A62675EAF871B56BDB5655 - 5F5FA767010040505D7AD5D5EAA65B6ED591FF1C3B76B4F5A66B87DEE80C6B75 - 937F8098BEDE690D566B745AB3D39A742F4969ABD50BE9CD38213D49BCE56BCC - D799C4DFF41400002089CEB9E852F5BFB77E52E5E6CAFF6D2215AA4E9D54F77E - FF2EF5DCD34FEA19000010441400BAC6230000E053038B06ABFFF9E82748FE53 - 4CEEB078CFC76F53E3264DD133000000E1440100007C6A76E90295972F374B21 - D5B2B2B2D52B2EBB4247000000E1440100007C6AF8C8517A84745874EEF92A23 - C3B74FA4010000F41A050000F0A9FE0306E811D261D888916AF4F8093A020000 - 081F0A0000E05379F9057A8474295D7A8E1E010000840F050000F0A9FC020A00 - E9565A46010000008417050000F029EE0048BF69B367ABFE0306EA080000205C - 280000804FE5710740DA6564F453F31697E9080000205C280000804FE5730740 - 9F285DBA4C8F000000C285020000F8147700F48DF98BCA546666A68E000000C2 - 83020000F8545E7EBE1E219D0A070C505367CED61100004078500000009F6217 - 80BEC376800000208C280000800F6564647007401F2A2D631D000000103E1400 - 00C087727272632BD2A36F8C9930510D1F395247000000E1C0BF2E01C0875800 - B0EF952CE12E000000102E140000C08764213AF42DD60100000061430100007C - 6870F1103D425F995552CA3A0C00002054280000800F150D19AA47E82B5959D9 - 6A76E9421D010000041F050000F0A1C114007CA1B48CC7000000407850000000 - 1F2A1E4A01C00F643B40D992110000200C280000800F15B106802F140D19A226 - 4C395B47000000C1460100007C68307700F846E952B603040000E1400100007C - 883500FCA3A48C0200000008070A0000E033F2CCF9E0213C02E01753A6CF5483 - 0617EB08000020B828000080CFC8F3FFB979EC3FEF27254B96EA110000407051 - 0000009F193769B21EC12F4A97B21D200000083E0A0000E0331400FC67EEC2C5 - 2A2B2B5B47000000C1440100007C860280FFE4E5E7AB19F3E6EB080000209828 - 000080CF8C9B34458FE027A5EC06000000028E020000F8486656961A3D7EBC8E - E027B20E80ECD00000001054140000C047C64E98C8B3E63E75D6A8D16AE498B1 - 3A020000081E0A0000E02333E795EA11FC88DD0000004090510000001F9939BF - 448FE04725AC03000000028C020000F844BF7EFDD48C791400FC6CFA9C79AAB0 - 7F7F1D010000040B050000F0897193A7905CFA5C6666A69ABB70B18E00000082 - 85020000F8C4ACF93CFF1F04AC03000000828A020000F8C4BC454BF4087E367F - F1D2D8E31A00000041C3BF6000C00772F3F258003020060C1AA4A64C9FA92300 - 0080E0A00000003E30AB6481CACACAD611FC8EC70000004010510000001F98BF - B84C8F10046C070800008288020000F4B18C8C8CD873E5088EF193A7A821C387 - EB0800002018280000401F1B3966AC1A3E72A48E1014A54BB80B000000040B05 - 0000E8635CFD0F26D6010000004143010000FAD8FC253CFF1F44B34B17AADCDC - 3C1D010000F81F050000E8436CFF175CD939396A6649A98E000000FC8F020000 - F421B6FF0B361E030000004142010000FA10DBFF059B2C0428BB380000000401 - 050000E8236CFF177CB215E0D8899375040000E06F140000A08FB0FD5F38942E - 653B400000100C140000A08F70F53F1C4ACB280000008060A00000007D84EDFF - C261EACCD96AC0A0413A020000F02F0A0000D007D8FE2F3C58CB010000040505 - 0000E8036CFF172E6C070800008280020000F401B6FF0B97798B16ABCCAC2C1D - 010000F81305000048336E190F9F82C2FE6ADAEC393A020000F0270A00009066 - 6CFF174EA5653C06000000FC8D020000A41957FFC389ED00010080DF51000080 - 3463FBBF701A356EBC1A317A8C8E000000FC87020000A411DBFF855B09770100 - 00001FA300000069C4F67FE1C663000000C0CF280000401AB1FD5FB8CD9C57A2 - F20B0A74040000E02F140000204DD8FE2FFC32B3B2D49C058B74040000E02F14 - 0000204DA2B2FD5F7D7D9DFAE6E73EA5A3E8295DCA76800000C09F280000409A - 44E5EAFFAEAD5BD4AAFFFC5B35D4D7EB99682959B2546564F09F570000E03FFC - 0B0500D2242ADBFF6DDFBC49353535AA2D1BD6E999681934B8584D3A7B9A8E00 - 0000FC83020000A44194B6FFDBB17963ACDF54BE26D647118F010000003FA200 - 00006910A5EDFFE40E00B1616D740B00256C070800007C88020000A44154B6FF - 930500F7EFDE151B6FDDB04EB5B6B6C4C651238F000C1E325447000000FE4001 - 0000522C4ADBFFC90280CDCDCDB1716D4D8DDAB1654B6C1C4525656CF9080000 - FC85020000A45854B6FF13E6F67F23D2EB0094B10E000000F0170A0000906251 - B9FA2FCC0280C6C6081700E62C58A8B2737274040000D0F7280000408A4565FB - 3FD1E10E808A723D8A9EDCBC7C35735E34767E000000C14001000052284ADBFF - 35D4D7B72D00689C3876541DDCB75747D1C376800000C04F280000400A4569FB - BF9D5B37B72D00688BF26300254B96C51681040000F0030A0000904251D9FE4F - B86FFF373695AFD5A3E891C51F478F1BAF23000080BE4501000052244ADBFF09 - F70280C68608DF0120780C000000F8050500004891286DFF27E2DD017068DF5E - 75EAC4711D450F05000000E0171400002045A274F5DF6B0140A3B5B5556D581B - DDBB00CE9E3547F51F3050470000007D87020000A44894B6FF8BB700A011E575 - 00FAF5EBA7E62D5AA223000080BE4301000052204ADBFF8978B7FF1B1BCB57EB - 5134952E5DA6470000007D87020000A44094B6FF13F1160034766DDBAAEA6A6B - 75143DF31697A9CCCC4C1D010000F40D0A0000900251DAFE4F6CDBB8418FBCC9 - E3015BD657E8287A640D80A93367E9080000A06F50000080248BDAF67FD5A74F - AB7DBB77EB28BE8D51DF0EB08CDD00000040DFA20000004916B5EDFFB66E58A7 - 5A5B5B7414DFC608EF0420D80E100000F4350A0000906451BAFA2F36AF2BD7A3 - CE6DDDB8BED39D02C26ECC84896AD888E81486000080FF50000080248BD2F67F - 62F3BAC49EEDAFAFAB533BB674BE5B40D89594B11B000000E83B1400002089A2 - B6FD5F6B6BABDABA61BD8EBA16F5C7001650000000007D880200002451D4B6FF - DBB363BBAAADA9D651D73655ACD5A3689AE9FC7E4891080000A02F5000008024 - 8ADAF67F893EFF6F44BD00909D9DAD66972ED4110000407A510000802489DAF6 - 7FA2BB7BFB9F3A7142EDDFBD4B47D1C46E000000A0AF500000802489DAF67F22 - D105006D1BCA23BE1D60D9B258B108000020DD280000409244EDEA7FD5A993EA - E0BEBD3A4ADCA6F2683F063078C850357ECA541D010000A40F0500004892A86D - FFB7655D456C1780EEDA58BE5A8FA2ABB48CC700000040FA510000802488DAF6 - 7FA2BB0B001A470E1E54C78F56EA289A4A97B21D200000483F0A0000900451DB - FE4F6CEEE6028086DC35B0716DB4D701983C6D861A34B85847000000E9410100 - 0092206ADBFFB5B4B4A86D1B37E8A8FB36467C21C0D88E11117B64040000F43D - 0A0000D04B51DCFE6FD7B62DAABEAE4E47DD17F50280601D000000906E140000 - A097A2B8FD9F2C00D81B7B766C57B535D53A8AA6B90B1747EEB1110000D0B728 - 0000402F45EDEABFD8D4CB02803C42B0B9A2678B0886457E41819A3E779E8E00 - 0000528F020000F452149FE5DEB2BEF7C9FB061E0360370000009056140000A0 - 17A2B8FDDF896347635BF9F5D6A6F2B57A145DAC03000000D289020000F44214 - B7FFDBB2BE22B6955F6F6DDDB85E353535EA289A468C1E135B43020000201D28 - 0000402F446DFB3FB1B997CFFF1B8D0D0D6AFBA68D3A8AAED2A5DC05000000D2 - 83020000F45014B7FF13C9DCC26FE35AD601A000000000D285020000F45014B7 - FFABAFAB55DB376FD251EF6DAC601D80E973E6A982C2FE3A020000481D0A0000 - D04351BCFA2FB7FF373735E9A8F73655AC4DCA7A0241969999A9E62E5CAC2300 - 0080D4A10000003D14C5EDFFD6AF59A547C9515D55A5766CD9ACA3E8623B4000 - 00900E140000A007A2B8FD9FD890E4028058B76A851E4597DC4DD2AF1FFF4906 - 0000A9C5BF3600A007A2B8FD5F437DBDDAB671838E92A78202801A5854A4264F - 9FA123000080D4A00000003D10C5EDFFB6ACAF508D8DC9DFB77FE3DAD5AAB9B9 - 5947D1555AC66E00000020B528000040374575FBBF643FFF6FD4D7D5A92DEBD7 - E928BAD80E1040B2C9A34579F9F96AC0A0416AC8F0E16AC498B16ADCA4C96ACA - F4996AC6DCF96ADEA2256AE139E7A9A5175EAC2EB8EC0A75E95557AB2B5EFF06 - 75F59B6E54AFBBF11DEAB26B5EAF169F7781CAC9CDD57F2280A0CBD07D77C8D7 - 98AF935E8A08A6CF745A96EEE5DED81CABC9FF73E4392DDFEAF3EFF953E57DC5 - C5437AF239D2E2868BCF53ADAD2D3A0200A5468D1DA7BE75EF6F74141DB7DFF2 - 81941501AE7BFBBBD4B56F7D878EA2EB7D6FB8461D3B72584700A24C8ACD0585 - 856A50F11035D869454E1B545C1CEB8B9C7E50D16095ED24E6929CE7E4E4A8EC - 1CE9739D3E273627BDEC32920CA7AB4EA92F7DEC436A278BB6C2E7A48875D32D - B7EAC87F8E1D3BDA7AD3B5436F7486B5BAD5597DBDD31AAC26B75DCA2D92B2FD - 92F49294CAD649A617D2776B3BA59E24DEF235E6EB4CE26F7A0A000042EF8A6B - DFA0DEFAFE9B75140D72EBFF3BAF7AA56A6C90FF1E25DFCC7925EA73DFFEBE8E - A2EBEE6F7F5D3DFDF0833A02104692980F1A2C89BC49E6CF24F42F8F7582EFF4 - D9D9FE596B46B66DFDFCCDEFD511E04F1400BAD693C45BBEC67C9D49FC4D4F01 - 0040E8DDF6B56F476EDFF60D6B57AB2F7CF8FD3A4A3EF947EE3D7F7922F2B799 - AEFCF7F3EA6B9FFEB88E00044D46463F553C6CA81A39669CD3C6AA11A3C7A8A2 - 213AA98F25FD4354E18001FADDC152575BABDE71E5A5CEBF8BBB956B00694501 - A06B92B4030012C4F67FA9217718C8D5A5A89B5DBA90676D810090247ECA8C99 - EAFC575EAEDEF0CEFF551FFEFC17D5D7EEBE57DDFBE8D3EAFF7EFB80FACC37BE - A36EFAF0C7D4ABAF7BA33AE7A24BD5ACF9A56AF4F809814DFE85AC25208F2400 - 08360A0000D00D51DCFE4FAC5FB35A8F52A76225DB014AF22F890280BE27B7EA - 8F9D3829B608DE6B6FB851BDE7E3B7A9DBBFF723F5D3071E55F73CF4B8FAD2FF - FD54BDEF939F51D7BCE56DAAEC828BD4B84953425FC0EB97A4350500F41D0A00 - 00D00D51DCFEAFB9A9496D5957A1A3D4A958B95C8FA28DDD0080F4EA3F6060EC - EE9B575D7DAD7AFB076F893DE6F5BD5FFF51FDF2B1BFABAFDF739FFAC817BEAC - 6EF89FF7A8575CF66A75F6AC39B115F50120A82800004082A2BAFDDFB64D1B54 - 7DBD3C9A965A3BB76E5635D5A775145DA565E7C47ED700249F24FB73162C8A5D - D1BFE5F35F52DFBDFF8FEAEE871E8BDDB2FF8E9B3F12DBF64ED678193662247F - 0F01841205000048902CE8347CE4481D45473A6EFF17CDCDCD6A439ABE979FC9 - 5EDD72DB3180DE193070D0CBC9FEFFBB2376555F92FD4F7FFDAED815FD25175C - 18C9FF4F07106D140000204151BCFA2F52BD00A0AD9CC700624ACB96E9118044 - 48B22F57EEAF7ED3CBC9FE4F1F7CF4E564FFFC57C4AEEA0340D45100008004CD - 5F12BDE7FF5B5A5AD4E675E53A4ABD75AB580850B00E00109FAC462F57F64DB2 - FFFDDFFC2996ECCBB3FB6F7C17C93E0074860200002420AADBFF6DDFBC51D5D6 - D4E828F5F6EEDCA14E9D38A1A3E89A3A73160B8D015A7E41A12A59B254BDE97F - DF175B79FF9EBF3C11BBB26F92FDA1678DD0EF040074850200002420AADBFFA5 - FB99FCD6D656EE02706464F48BE48E138090BDF2172C3B57DDF8DE0FAA2FFFE8 - 67EA670F3FAE3EF1956FA8D7BCF1CDB1BDF733D98A0E007A8C0200002420AAC9 - D8FAD52BF5287DD80EF00CD90D008802B9DB65D1B917A8B7BDFF43EACE9FDEAB - EE7EF03175EB97EE54AFBEEE8D6AD2D9D3620531004072F0FFA800D085A86EFF - D7DADAA23696AFD551FA54700740CCBCC54B546656968E80F01834B858955D70 - 917AE7CD1F89EDB3FFD3071E551FBDFDCBEAF26BAF57E3274F61FB3D0048210A - 0000D085A86EFFB763CB16555B53ADA3F4397C60BFAA3C7C4847D15550D85F4D - 9B3547474070656767C716ED7BEBFB6E56DFFCF9FDEAC77F7A587DF8F35F54AF - BCFA5AB6BC048034A30000005D60FBBFF4927500780CE08CD2A56C0788602A1E - 365C5DFCEAD7A88F7DF1AB6D7BEF5FF1FA37A8D1E327E8770000FA02050000E8 - 4214B7FF13EBFBA800205808F00CD6014050C8C27CD3E7CC8DADCCFFB5BBEF55 - 3FF8DD03EA7F3EFA09B5F09CF3546E5EBE7E1700A0AF510000804E4475FB3FB9 - 0ABFB17C8D8ED2AF62250500316ADC7875D6A8D13A02FC656051913AEFD2CBD4 - CD9FF982FAC99FFFAAFEDF777E18DB9B7FDCA429FA1D0000BFA10000009D88EA - F67FBBB76F53D555553A4ABFE3472BD5FEDDBB74146D25653C06007F90C5F964 - 55FE6BDFFA8ED87EFC3FFED323EAFD9FFAAC5A76D125B1ADFB0000FE47010000 - 3A11D5EDFFFAEAF97F1BBB019CB160298F01A0EF48D23F65FA4CF596F7BC5F7D - EFD77F8CEDCB7FDDDBDF15DB8F9FD5FA012078280000401C51DDFE4FF4E5F3FF - 06EB009C3163DE7C955F50A02320F5DC49FF977EF05375E5F56F5243CF1AA1DF - 0100082A0A0000104754B7FF131BD6AED6A3BEB37EF5AAD85A0451278FA0CC2E - 5DA423203548FA01201A280000401C51BDFABF77E70E5575F2A48EFA4ED5A993 - 6AD7D62D3A8A36B603442A48D23F79DA8C58D2FFDDFBFF40D20F001140010000 - E260FBBFBEC73A006794962D739235FE938DE41835769CBAE17FDE134BFAEFF8 - E1DDB1A47FD88868DEED040051C3BF2600C04354B7FF137E5800D0601D803306 - 0D2E5613CF3E5B4740F7E51714AA8B5E7D95BAFD7B3F52DFBAF737EAB537DC48 - D20F0011440100003C4475FB3FB161ED1A3DEA7B1BCBD7A8E6E6661D455B6919 - BB01A07BE4AE9159F34B635BF5FDF84F0FABFFFDE827D5D9B3E6E85701005144 - 0100003C4475FBBFFD7B76AB13C78EEAA8EFD5D6D4A86D1BD7EB28DA4AD90E10 - 09922BFBAF7FDB3BD5777EF57BF5D96F7D4F9D77E9652A273757BF0A0088320A - 0000E012E9EDFF56AFD423FF601D8033269D3D4D150D19A223A0A37193A6A8CF - 7CE33BB155FC5FFFB69B22BB8B0900203E0A0000E012E9EDFFD6F4FDF67F6E15 - 2B97EB114A9644B33085CE49D1F2E22B5F1B5BD06F76E9423D0B004047140000 - C025AA57FF859F760030B6AC5FA71A1B1A74146DAC03002F57BCFE0DEA7F3EF2 - 71959D1DCD754B000089A30000002E51DDFEEFE0BEBDEAF8D14A1DF98724FF9B - 2AD6EA28DAE62E5C4492870EA6CD9EAB470000748E02000058A2BDFD9FFF6EFF - 375807E08CDCBC7C35635E347F3F11DF980913F5080080CE510000004B94B7FF - F3E3EDFF06EB00BC8CDD0060CBCCCA5223468FD11100009DA300000096A86EFF - 2736F8B800B063F3A6D8968038B30E802CFA068896E6167E1F000009A3000000 - 5A94B7FF3B72F080AA3C7C4847FED3DCDCECEB02453AC90E15A3C68DD711A2AE - B5B545D55457EB080080CE510000002DCADBFFADF7F1F3FF46C54AD601304ACB - 96E911A0547555951E0100D0390A0000A04579FBBF205C5D6721C097B10E006C - D5A74FE91100009DA30000005A54B7FF137E5E00D0D8B363BBAA3A795247D126 - DBBE150E18A023441D7700000012450100001C51DEFEEFD891C3B13500FC4E9E - 75E62E8033FAF5EBA7E62D5AA223445DF5E9D37A040040E72800008023DADBFF - AD7692EB561DF9DB3A0A006D64370040700700002051140000C011E5EDFFD6AD - 0E4E52CD1D002F934756E44E00A0FA340500004062F8970380C88BF2F67FA27C - C5723DF2BF43FBF6C61E598052FD070C545367CED611A2ACBA8A4500010089A1 - 000020F2A2BCFDDF4127A1AE3C745047FE278F2A94B31D609BD2A56C07081E01 - 0000248E020080C88BF2D5FF8A95C1B9FA6FB00EC0CB580700E2348F00000012 - 44010040E44579FBBFF20016005807E06563274E5243CF1AA123441577000000 - 1245010040A44579FB3FB99D7EFDAA953A0A0E5903E0C0DE3D3A4269198F0144 - 1D05000040A228000088B4286FFFB773EB665575EAA48E8285BB005E56BA94C7 - 00A28E5D00000089A2000020D2A2BCFD5F9056FF770BE2DA05A922452CB99305 - D1C51D00008044510000105951DFFE2FC849B43CBA208F3040A9ECEC6C35BB64 - 818E1045DC01000048140500009115E5EDFF9A9A1AD5A6F2B53A0A1E797461C7 - 96CD3A028F01445B4B4B8BAAADA9D6110000F1510000105951BEFABFA9A25CD5 - D7D7E92898780CE0652565CB6277B420BA780C000090080A0000222BCADBFF85 - 21792E5FF1921EA178E830357EF2141D218A4E530000002480020080488AF2F6 - 7F220CC9F3A68AB5AAB1B15147282DE3318028AB397D5A8F0000888F02008048 - 8AF2F67F35D5A7D58ECD9B74145C0DF5F56A734570D7314836D60188B6EAD3A7 - F4080080F828000088A4286FFFB77EF52AD5DCDCACA3602B671D803693A7CF50 - 038B06EB0851C32300008044500000103951DFFE2F4CCFCE57ACA00060C8EF75 - 4984D7B5883A160104002482020080C889F2F67FA262D50A3D0ABEED9B37C61E - 69C019AC03105DD5A729000000BA46010040E444F9EAFFF1A3956AFFEE5D3A0A - 3ED9FF7C5D880A1ABD3577D192C8AE6D1175DC01000048040500009113E5EDFF - E4F6FFD6D6561D8543F94A0A00467E41819A3667AE8E10251400000089A00000 - 2052A2BEFD5F450893E58A10AD69900C0BD80D2092EA6A6BF4080080F8280000 - 8894286FFF272A42B86AFE81BD7BD4B123877584D2B2657A8428690AC9CE1E00 - 80D4A200002052A2BCFDDFBE5D3BD5B1CA233A0A0F79A4A19CDD00DA8C183336 - B6D025A2A5B9A9498F0000888F020080C888FAF67F615AFDDFAD621505005B09 - 7701440E0500A4435D0D8F9A00414701004064447DFB3F590030ACCA43F86843 - 6FB00E40F4500040AA9D3A7142353636EA084050510000101951BEFADFDADAA2 - 36AC59A5A3F03971F4A8DABB73878E307DEE7C5550D85F478882A6660A0048AD - 179E795A8F0004190500009111E5EDFFB66DDCA8AA4F9FD65138857181C39ECA - CCCC5473162ED211A2803B00A249D640912D200F1FD8AFF6EEDA195BEB65FF9E - DDEAE0DE3DEAD0FE7DCEFC015579E8A03A7AF8706C0D1829969E3A715C559D3C - A9AA4E9D8C7D6D4DF569555B53A3EAEB6A55437D7DEC2A7F5353A36A6E6E8EBD - 67FFEE5DEACFF7FD5CFDEE9E1FEBEF0A20C83274DF1DF235E6EBA4972282E933 - 9D96A57B59663BC76AB94ECB735ABED5E7DFF3A7CAFB8A8B87F4E473A4C50D17 - 9F17BB720620D864FBBF7BFEF27864770078E057F7AADFFDEC273A0A27B9EDFD - D63BBEA6233CFBC463EA87777E494708BB31E327A86FFCFC7E1D214824E9AE39 - 7D5A9D3EED24E34E93A45C0AB6D5B1F1A933E3B6B95367DE2B89BBD34BE2CEBF - 5381975D7AD5D5EAA65B6ED591FF1C3B76B4F5A66B87DEE80C6B75ABB3FA7AA7 - 35584D9EB9912D5EA4C22BBDFC656FB57A21BD1927A42789B77C8DF93A93F89B - 9E0200005F2A7592C38F473839FCE2473EA8D6AD5EA9A370CA2F288C1579FAF5 - E3E63621CFEBBEFBDAABF86F5844C8EE0F77FDF2B73A825FC8DFC383FBF7C6AE - C81FDCB74F1DDAB7571D3974D049E09DC43E96C457F15C3D90441400BAC6BF92 - 00444294B7FF93AB4B9BD757E828BC6A6BAAD5D60DEB74848145456AF2F4E93A - 42D8F10840DF3971ECA8DA58BE563DFBF8A3B13BADBE73FB67D5A7DEFD4EF5CE - AB5EA5FEF775AF569FFBC0BBD50FBEFAA5D86DF4CFFFFD29B5795D79ECB6FA93 - C78F91FC03483B0A0000422FEADBFF6D2C5FA31A1BA4901C7EAC03D09EDCF982 - 68A000905AC78F56AAF56B56A9671E7D44FDE6A73F52DFFEC267D427FFF7EDEA - EDAFBE44BDE7F5AF51FFEF43EF553FFCDA1DB1C7ADFEFD8FBFAB1D5B36C59EAD - 0700BFA1000020F4A2BEFD5F9492E2F21514006CA5651400A2A2890240D2C85D - 53EB57AF8A25F35FFDE447D54DAF79957AEF75AF55B7DFF201F5E36F7C453DF4 - 9BFBD48BCF3EA3766EDDA2EA6AE5CE5D00080E0A0000422FCA57FF459492E22D - EBD7A9FA7A798C0E62C294A9AA78D8701D21CC9AD906B0C764457C49E87FF97F - DF559F7EEFBBD43BAE7AA5BAFD231F88DDCEBFFABFFF892DBE07006141010040 - E84579FB3F59684AAE5245856C5DB561CD6A1D41942C8976012C2A5A9A59ECB1 - 3B647BBBBFFDF52FEA4B1FFB907ACFEBAF8ADDD2FFE89F7EA7B66DDAC0E31400 - 428D0200805093EDFF66CE2FD151F4AC5BB92272ABC0B30E407BAC03009C2157 - F29F79EC11F5954F7C24F6DCFE4FBF7967ECFF2F64BF7B00880A0A0000426D56 - C982C8EEFD2FCA23980C97AF78498F20E6942E5439B9B2132F106D8FFCFED7EA - C75FFF8A5AF3D28B5CE5071059140000845A94B7FF1351BC1ABE7BFBF6D8DEDB - 384392FF99F3A27B170C00007819050000A115F5EDFF2A0F1D5487F6EFD35174 - C8230F3C06D01E8F010000004101004068457DFB3F59FDBFB5B55547D152B18A - 02804D0A005210030000D14601004068457DFBBF285F058FD2D68789183AFC2C - 3566C2441D010080A8A2000020B4A2BCFD9FA858B5428FA2E7C8C103917CFCA1 - 33A5653C06000040D4510000104A51DFFE6FF7F6ADEAE4F1633A8A26D60168AF - 74E9323D020000514501004028457DFBBF8A95D1BDFA6FF018407B67CF9AAD06 - 0C1CA423000010451400008452D4B7FF632F7CA5D6AD5E11D94510BD6464F453 - F3162FD111000088220A00004227EADBFF353737AB0D6B57EB28BAAA4E9E543B - B76ED61104EB000000106D140000844ED4B7FFDBB27E9DAAABADD551B4F12844 - 7BF31697A9CCCC4C1D010080A8A100002074D8FE8FDBFF0D1E8568AFB07F7F75 - F6AC393A0200005143010040E8447EFB3F56BF6FB3A97CAD6A6A6AD41144E952 - 1E03000020AA2800000895A86FFF27B7FE6FD9B05E47A8AFAF539B2ACA750451 - 5AC6768000004415050000A112F5EDFF36AC59A59A9B9A7404C11D11ED8D1E3F - 410D1F394A470000204A2800000895C86FFF47B2DB01EB0074C45D0000004413 - 050000A111F5EDFF0457BB3BDAB17993AAA93EAD2308D6010000209A28000008 - 8DA86FFF77EAC471B567C7761DC1686E6E56EB56ADD41184AC9391979FAF2300 - 0010151400008446D4AFFECBEDFFADADAD3A828D3B23DA937532E62C58A42300 - 0010151400008446E4B7FF5B41921B0F6B2374545AC663000000440D050000A1 - 10F5EDFF04496E7C07F6EC56C72A8FE808A2A46CA9CAC8E09F0100004409FFE5 - 07100A51DFFEEFE0BEBDAAF2D0411DC14D1E8DE03180F68A8A87A889679FAD23 - 000010051400008402DBFF91DC76A59C47243A603B400000A285020080C063FB - 3F16B94B04E7A823D6010000205A28000008BCA86FFF27B7B7AF679BBB2E1D3F - 5AA9F6EEDAA9238849D3A6ABA2214374040000C28E020080C08BFAD5FF9D5B37 - ABAA53277584CE701740472511FFFB03004094500000107851DFFE8F67DB1357 - BEE2253D8251BA9475000000880A0A0000028DEDFF486ABB63C39AD5AAA5A545 - 471073172E56D9D9D1DD4103008028A1000020D0A2BEFD5F5353A3DA5C51AE23 - 74A5A6FAB4DABA71BD8E2072F3F2D5F4B9F375040000C28C020080408BFAF67F - 9B9CE4BFBEBE4E474804EB0074B46029BB01000010051400000416DBFF71FB7F - 4F54B0664207A54BCF8DFD7D020000E14601004060457DFB3FC1D5ECEEDBB2BE - 82BB265CE4EFD1A871E375040000C28A020080C08AFAD57F799E7DC7E64D3A42 - A21A1B1BD5C635AB7504A36409BB01000010761400000456D4B7FF5BBF7A956A - 6E6ED611BAA37CE50A3D82C176800000841F05000081C4F67F3CFFDF1B152B39 - 776ED3E7CC53850306E808000084110500008114F5EDFF4439CFFFF7D8AE6DDB - 54D5C9933A82E8D7AF9F9ABB70B18E00004018510000104851DFFEEFF8D14A75 - 60CF6E1DA1BB5A5B5B54C52A1E03702B2D633B400000C28C020080C061FBBF33 - B7FFB7B6B6EA083D51C123141D94942D8DDD09000000C289FFCA03081CB6FF93 - 0200B7FFF75639EB0074D07FC0403575E66C1D010080B0A100002070A27EF55F - 54F0FC7FAF1D3E70C069FB7504A3A48CDD000000082B0A00000227EADBFFEDDB - B533B606007A8F85143B2AA5000000406851000010286CFFA758BC2E895807A0 - A3719326ABA1C3CFD211000008130A00000285EDFFCE2C0088E4A098E28DC700 - 000008270A00000225EADBFFC9F675EB57AFD2117AABEAE449B573CB661DC128 - 5DCA76800000841105000081C1F67F4A6DDBB851D5549FD61192A16215EB00B8 - CD2E59A07273F374040000C282020080C060FB3F6EFF4F05B654EC283B2747CD - 2A5DA023000010161400000406DBFFB1777D2A6C2C5FA39A9A1A750483DD0000 - 00081F0A00000223EADBFF35D4D7AB2DEB2A748464A9AFAB539B2B38AF6EB20E - 803C76030000C2830200804060FBBF3357AA1B1BB9529D0A152B790CC0AD78E8 - 30357EF2141D01008030A000002010D8FE8F24359578B4C21BDB010200102E14 - 00000442D4B7FF132C56973ADB376D54B535D53A82515AC67680000084090500 - 00BEC7F67F4A9DAE3AA5766EDDA223245B7373B35ABF7A958E604C9931530D2C - 2AD2110000083A0A00007C8FEDFF945AB772856A6D6DD11152812D163BA2F806 - 0040B8500000E07B2420F28C3AB7FFA71AE7D85BE952D6010000202C280000F0 - BDA86FFF27B83A9D7AFB77EF52C78F56EA08C6BC454B22BF0027000061410100 - 80AFB1FD9F5295870EAAC307F6EB08A9D2DADACA4E0B1EF20B0AD5B439737504 - 0000828C0200005F63FBBF33ABFF4B728AD463A7056FA56C0708004028500000 - E06B6CFFA7B82A9D469C6B6FA54BD90E10008030A00000C0B75881FC8C8A552B - F408A976ACF288DAB76BA78E60C84E1C239C060000828D020000DF62FB3FA576 - 6FDFAA4E1E3FA623A40305176FA54B780C000080A0A30000C0B7B8FA2FB7A493 - 8CA61B3B2E78633B400000828F020000DF62FB3F92D1BEB07EF52AD5DADAA223 - 1833E695C47604000000C1450100802FB1FD9F52CDCDCD6AC3DAD53A42BAD454 - 9F565B376CD0118CCCCC4C3577E1221D01008020A20000C097D8FE4FA92DEBD7 - A9BADA5A1D219DD80DC05B6919BB0100001064140000F812DBFF4912CAEDFF7D - A59C73EFA9A46C99CAC8E09F0E00000415FF1507E03B6CFF770657A1FBCE9675 - 15AAA1BE5E4730061615A9C9D3A7EB080000044D86EEBB43BEC67C9DF4524430 - 7DA6D3B2742FF7EEE6582DD769794ECBB7FAFC7BFE54795F71F1909E7C8EB4B8 - E1E2F3580C0A48B35163C7A96FDDFB1B1D45D7FD3FFE3FD5DCD4ACA3F85A9DFF - 25A2B53581F725F21E47427F9623A17725F97B26F2E725F227BDE68D6F56C347 - 8ED2118C3FDFF773F5FB9FDFAD23F8852CD0F8F3479ED411BCFCEE673F510FFC - EA5E1D0108A34BAFBA5ADD74CBAD3AF29F63C78EB6DE74EDD01B9DA13CE329AD - CEEAE5CA4383D51A9D26FF106CD2BD24A5F24F18D30BE913F9674D9B9E24DEF2 - 35E6EB4CE26F7A0A00007AED8A6BDFA0DEFAFE9B7504C04F766ED9AC3EF9EE77 - E8087E4101A06B140080F0A300D0351E0100E03B6CFF07F8D784A967ABE2A1C3 - 7404000082840200005F61FB3FC0FF4A96B0460700004144010080AFB0FD1FE0 - 7FA54BD90E10008020A20000C057D8FE0FF0BFD90B16AA9C5C59DA0700000409 - 050000BEC1F67F4030E4E6E6A999F37854070080A0A10000C037468E19AB868F - 1CA923007E565AB64C8F00004050500000E01B5CFD078243D60190BB76000040 - 70500000E01B6CFF0704C7D0B346A8311326EA0800000401050000BEC0F67F40 - F094F01800000081420100802FB0FD1F103CA5656C0708004090500000E00B6C - FF0704CFB4D9B3D580818374040000FC8E0200803EC7F67F40306564F4537317 - 2DD1110000F03B0A0000FA1CDBFF01C155BA9475000000080A0A0000FA1C57FF - 81E092BFBF9999993A0200007E460100409F63FB3F20B80AFBF75767CF9AA323 - 0000E067140000F429B6FF03828FED00010008060A0000FA14DBFF01C157BA94 - ED00010008020A0000FA14DBFF01C13766FC0416F204002000280000E8336CFF - 078447C9121E030000C0EF280000E8336CFF0784078F010000E07F140000F419 - AEFE03E131ABA454E5E5E7EB080000F8110500007D86EDFF80F090C53CE72C58 - A4230000E047140000F409B6FF03C28775000000F0370A0000FA04DBFF01E153 - 5AB64C6564F04F0B0000FC8AFF4A03E8136CFF07844FD190216AE2D4A93A0200 - 007E43010040DAB1FD1F105E25653C060000805F51000090766CFF078417DB01 - 0200E05F140000A41D57FF81F09A3C6D862A2A1EA2230000E027140000A41DDB - FF01E156B284221F00007E440100405AB1FD1F107EAC030000803F5100009056 - 6CFF0784DFDC858B5576367FCF0100F01B0A0000D28AEDFF80F0CBCBCF57D3E7 - CED7110000F00B0A0000D286EDFF80E828E5310000007C87020080B461FB3F20 - 3A162C3B3756F4030000FE41010040DA70F51F888EE12347A99163C7E9080000 - F80105000069C3F67F40B4F018000000FE420100405AB0FD1F103DA565E7E811 - 0000F0030A0000D282EDFF80E8993E779E2AECDF5F470000A0AF51000090166C - FF07444FBF7EFDD4DC454B74040000FA1A05000029C7F67F4074B10E000000FE - 41010040CAB1FD1F105DF3972C8DDD09000000FA1EFF450690725CFD07A26BC0 - C0416ACA8C593A0200007D890200809463FB3F20DA780C0000007FA0000020A5 - D8FE0F40E9520A000000F80105000029C5F67F00C64D9AA2860E3F4B470000A0 - AF50000090526CFF0740942C612D100000FA1A05000029C3F67F008CD2A5E7E8 - 110000E82B140000A40CDBFF013066972E54B9B9793A0200007D8102008094E1 - EA3F00233B2747CD2A5DA0230000D0172800004819B6FF03602B613B400000FA - 1405000029C1F67F00DC16942D8BAD0D020000FA0605000029C1F67F00DC8A87 - 0D57E3264DD611000048370A00005282EDFF0078E131000000FA0E05000049C7 - F67F00E2613B400000FA0E05000049C7F67F00E2993A63961A5854A423000090 - 4E140000241D57FF01C4237708CD5BC423420000F4050A0000928EEDFF007486 - C7000000E81B14000024956CFF37631EDBFF01886FFEE2252A332B4B47000020 - 5D280000482AD9FE2F3B9BEDFF00C4975F50A8A6CF9EAB230000902E14000024 - 15DBFF014804DB010200907E140000240DDBFF014814EB000000907E14000024 - 0DDBFF0148D4A8B1E3D488D16374040000D281020080A4E1EA3F80EEE0310000 - 00D28B020080A461FB3F00DD514A01000080B4CAD07D77C8D798AF935E8A08A6 - CF749AECEB23BD2C039E63B55CA7E5392DDFEAF3EFF953E57DC5C5437AF239D2 - E2868BCF53ADAD2D3A02108F6CFF77F7438FB30380F6BE375CA34E1E3FA62344 - D1073FFD795576C1453A8297E6A626F5AEAB2F57B535357A063D253B2BFCFC91 - 2775042FBFFBD94FD403BFBA574700C2E8D2ABAE5637DD72AB8EFCE7D8B1A3AD - 375D3BF4466758AB5B9DD5D73BADC16A8D4E6B765A93EE25296DB57A21BD1927 - 843B00002405DBFFBD6CF7F66DEAD891C3B1E48616DDB6E6A517F56F04E2C9CC - CA5273162CD211000048350A00009282EDFF5E56B172B91E21CAD62EFFAF1EA1 - 33EC06000040FA500000D06B6CFFD75EF98A97F4085176F4F061B56FD74E1D21 - 1E59072023837F8E0000900EFC171740AFB1FDDFCB9A9B9BD586B5AB7584A8E3 - 2E80AE0D2C1AAC264F9BAE230000904A140000F41A57FF5FB665FD3A55572B6B - B9008A750012C476800000A407050000BDC6F67F2FAB58C9EDFF7899DC0DD2D4 - 248BF8A233A54B29000000900E140000F48A6CFF37635E898E50BE820500F1B2 - FABA3AB5A97CAD8E10CFC4A9D3D4E021437504000052850200805E61FBBF97C9 - ADFF5B37AED71170068F0124A6A48C4789000048350A00007A85EDFF5EB67EF5 - CAD8FEEF808D850013535AC676800000A41A0500003DC6F67FED95AFE4F67F74 - B46BDB3675EAC4711D219E390B17A9EC9C1C1D01008054A00000A0C7D8FEAFBD - F2152C00888E5A5B5BD49A97B80BA02BB9B9796A26EB8900009052140000F418 - 57FF5F76E2D851B56FD74E1D01EDF11840624A97F218000000A9440100408FB1 - FDDFCB64F5FFD6D6561D01ED717748624ACB96C51E2D020000A9410100408FB0 - FD5F7B15AB78FE1FF1C91D22BBB66DD511E2193662A41A3D7E828E000040B251 - 0000D0236CFFD75E050B00A20B3C069018B90B000000A4060500003DC2F67F2F - DBBF67B73A7AF8B08E006F140012C33A000000A40E050000DDC6F67FED55F07C - 3712B0B17C8D6AA8AFD711E299367B8EEA3F60A08E00004032510000D06D6CFF - D75E39B7FF23018D0D0D6AC39A553A423C1919FDD4BC454B7404000092890200 - 806EE3EAFFCB648FF7F5AB57EA08E8DC1A1E034848E952D60100002015280000 - E836B6FF7BD9B68D1B55F5E9D33A023AB7F6A517F5089D9122636666A68E0000 - 40B2500000D02DB9B96CFF67637F7774C7BEDDBBD4B1CA233A423C850306A8A9 - 3367E9080000240B050000DD32B3A494EDFF2CE52B29002071ADADADEC0690A0 - D2327603000020D9280000E89692253CFF6FC88AEE5BD655E808480C0580C4B0 - 1D200000C947010040C2D8FEAF3DD9D6ADB1B151474062E4B111B913009D1B33 - 61A21A3682DD46000048260A000012C6F67FEDF1FC3F7AA2EAE449B563F3261D - A1332565EC06000040325100009030AEFEB757BE72B91E01DDC3630089594001 - 000080A4A2000020616CFFF7B2AA5327D5AEAD5B750474CF1AB6034CC8CC9205 - 2A372F4F470000A0B72800004808DBFFB557B172856A6D6DD111D03D5BD6AF53 - 75B5B53A423CB2E3C8ECD2853A020000BD4501004042D8FEAFBD0A9EFF472F34 - 3535AA75AB57EA089D6137000000928702008084B0FD5F7BE52B2900A077780C - 2031A565CB623B90000080DEA30000A04B6CFFD7DEE10307620DE80D16024CCC - E02143D5F82953750400007A830200802EB1FD5F7B5CFD47321CDAB7571D3948 - 212911A5653C0600004032500000D025AEFEB7C7F3FF4886D6D6561E034850E9 - 52B60304002019280000E812DBFFB557B16A851E01BDC363008999327DA61A34 - B858470000A0A7280000E814DBFFB5B773CB665575F2A48E80DE59B76A856A69 - 613BC94450880400A0F7280000E814DBFFB557BE72B91E01BD577DFAB4DABA61 - 9D8ED019D6010000A0F7280000E814DBFFB557CEF3FF48321E0348CCDC858B55 - 5616C54800007A83020080B8D8FEAFBDA6A646B5A97CAD8E80E458FB12058044 - E41714A8E973E7E9080000F40405000071B1FD5F7B9B2ACA557D7D9D8E80E4D8 - B66943EC5100748DDD000000E81D0A0000E2E2EA7F7B153CFF8F14686E6EE677 - 2B41AC03000040EF5000001017AB6EB7C7F3FF4815D60148CC88D16362772601 - 00809EA10000C013DBFFB557537D5AEDD8BC494740725100485CE952EE020000 - A0A7280000F0C4F67FEDAD5BB53276AB36900A470E1E5007F6EED1113A430100 - 00809EA30000C053C9626EFFB795F38C36528CBB0012337DCE3C5550D85F4700 - 00A03B280000E820B6FDDF1256DBB655F0FC3F526CED4B2FEA113A939999A9E6 - 2E5CAC230000D01D14000074C0F67FED1D3B7298DBB39172EB56AF54CD4D4D3A - 4267D80E1000809EA10000A003B6FF6BAF7CC572D5DADAAA232035EA6A6BD5A6 - 75E53A42674A962C53FDFAF14F180000BA8BFF7A02E880EDFFDA2B5FC9EDFF48 - 0FD60148CC804183D4E4E9337404000012450100403B6CFFD751C5AA157A04A4 - 16EB0024AEB48CDD000000E82E0A0000DA61FBBFF6F6EEDCA14E1C3DAA2320B5 - 766CD9A2AA4E9DD4113AC376800000741F050000EDB0FD5F7BE5ACFE8F346A6D - 6D51E5CBF99D4BC4F8C953D490E1C37504000012410100401BB6FFEBA87CE572 - 3D02D263CD721E0348942C0608000012470100401BB6FF6BAFA5A5456D58B34A - 47407A700740E24ACB28000000D01D140000B461FBBFF6B6ACAF50B535353A02 - D2E358E591D8DA13E8DAECD2852A273757470000A02B140000B461FBBFF6CA57 - 70FB3FFAC61A7603488824FFB3E697EA080000748502008018B6FFEBA86225B7 - 62A36FAC5DFE5F3D4257D80D000080C451000010C3F67FEDD5D7D5AAAD1B36E8 - 0848AF8D6BD7A8C6C6461DA133A565E7C416300500005DA300002086EDFFDA5B - BF66B56A6A220143DFA8AFAF531BD7AED6113A235B018E9D3849470000A03314 - 0000B0FD9F87F215DCFE8FBEB5E6251E034814BB01000090180A0000D8FECF43 - C54A160044DF621D80C4B10E00000089A1000080EDFF5C4E9D38AEF6ECD8AE23 - A06FECD9B14D9D38765447E8CCD499B3D580418374040000E2A1000080EDFF5C - E4F6FFD6D6561D017D437E07B90B2031B1C79858C70400802E510000228EEDFF - 3A2A5FC1EDFFF0070A008993DD00000040E728000011C7F67F1DF1FC3FFC62ED - 7216A34CD4BCC54B546656968E000080170A0040C4B1FD5F7B07F6EE5195870F - E908E85BB21EC5CE2D9B7584CE1414F657D366CDD1110000F04201008830B6FF - EB88ABFFF01B1E03485CE952FEFF0C0080CE500000228CEDFF3A920500013F59 - F3D28B7A84AEB00E0000009DA300004418DBFFB527ABAEAF5BBD5247803F6C5E - 57AEEAEBEB7484CE8C1A375E9D356AB48E0000801B050020C2D8FEAFBDED9B37 - AAEAAA2A1D01FED0D8D8A8D6AF5EA52374A5A48CC70000008887020010516CFF - D711DBFFC1AF580720710B96F218000000F1500000228AEDFF3AE2F97FF815EB - 00246EE6BC12955F50A023000060A300004414DBFFB5D7D8D0107BD61AF0A303 - 7B76ABA3870FEB089DC9CCCA52B34B17E9080000D8280000117466FB3F1600B4 - 6D2C5F132B02007E240B54F21840E2D80E1000006F140080083AB3FDDF281D41 - 70FB3FFC8EC70012575AB64C6564F04F1C0000DCF8AF2310416CFFD751C54A16 - 0084BFC9EFA8DC0980AE0D1A5CAC269E7DB68E0000804101008820B6FF6BEF74 - D529B573EB161D01FE24BFA7DB366DD011BA525AC66E000000B85100002286ED - FF3A5AB772856A6969D111E05F6B790C2061A56C07080040071400808861FBBF - 8ECAB9FD1F01C14280899B74F634553464888E000080A00000440CDBFF75C402 - 80088A2D1BD6ABDA9A1A1DA12B25EC760200403B1400800861FBBF8E8E1C3CA0 - 0E1FD8AF23C0DF9A9B9A58B0B21B5807000080F628000011C2F67F1D95AF6065 - 75040B8F01246EEEC2453CF204008085020010216CFFD751F94A6EFF47B05000 - 485C6E5E3E8B9E020060A100004408DBFF75B46ED50A3D0282E1D0FE7DB186C4 - B01B0000002FA300004404DBFF75B46BDB5675EAC4091D01C1C15D0089937500 - 64FD130000400100880CB6FFEB88D5FF1154140012377CE448356ADC781D0100 - 106D1400808860FBBF8ECA594D1D0155B172856A6969D111BA525AB64C8F0000 - 88360A004004B0FD5F47B29DDAC6B5AB7504044B6D4DB5DABCAE4247E80AEB00 - 0000700605002002D8FEAFA34DEBCA557D5D9D8E80E0E13180C44D9B3D57150E - 18A0230000A28B020010016CFFD751C50A6EFF47B0AD7DE9453D4257FAF5EBA7 - E62D5AA2230000A28B020010016CFFD751F94A160044B06DDFBC51555755E908 - 5D91DD000000883A0A0040C8B1FD5F47F2FCF4F64D1B750404932C0248212B71 - 5208953B0100008832FE4B08841CDBFF75B47EF52AD5DCDCAC2320B858072071 - FD070C545367CED6110000D14401000839B6FFEBA87C05574D110E6B5FA200D0 - 1DA54BD90E1000106D1400801063FB3F6FE52B590010E15079F890DABF7B978E - D015D6010000441D050020C4D8FEAFA3E3472B4998102A3C0690B8B11327A9A1 - 678DD0110000D14301000831B6FFEB486EFF6F6D6DD511107C6BD80EB05B4ACB - 780C0000105D1400801063FBBF8ECA5770FB3FC265FD9A55AAB9A94947E84AE9 - 521E0300004417050020A4D8FECF5B05CFFF2364EAEBEAD4C68AB53A42576695 - 2C50B979793A0200205A28000021C5F67F1DEDDDB533B6060010363C069038F9 - FFC5D9250B74040040B4500000428AEDFF3AAA60FB3F84140B01760F8F010000 - A28A020010426CFFE78DEDFF1056BBB66E55A74E9CD011BA5252B62CF6FF9300 - 00440D05002084D8FEAFA3969616B561CD6A1D01E1D2DADAC25D00DD503C7498 - 1A3F798A8E0000880E0A004008B1FD5F475B37AE5735D5A77504840F0580EE29 - 2DE331000040F45000004288EDFF3AE2F97F84DDDA151400BA83750000005144 - 01000819B6FFF356BE82E7FF116E278E1E55BBB76FD511BA3279FA0C35B068B0 - 8E000088060A0040C8B0FD5F47F5F5756ACBFA753A02C28BC70012278B009670 - B71400206228000021C3F67F1DC9E27F4D4D8D3A02C26BCD4B1400BA83750000 - 00514301000811B6FFF356CEF3FF88888DE56B546343838ED095B98B16ABAC2C - EE980200440705002044D8FECF5BC54A9EFF473448F2BF7ECD2A1DA12BF90585 - 6ADA9CB93A020020FC28000021C2F67F1D9D3A7142EDDEBE5D4740F8B10E40F7 - 2C6037000040845000004284EDFF3A92ABFFADAD2D3A02C26FCD4B2FEA111251 - 5AB64C8F0000083F0A004048B0FD9FB7F2953CFF8F68D9B76BA73A7EB45247E8 - CA883163638F4F010010051400809060FB3F6FE52B78FE1FD1D2DADAAAD6B21B - 40B79470170000202228000021C1F67F1D1DDCB757551E3AA823203AD62CE731 - 80EE601D000040545000004280EDFFBC95B3FA3F224AB6BE943B019098E973E7 - C77604000020EC28000021C0F67FDE2A9C240888A2AA9327D58E2D9B7584AE64 - 6666AAB98B16EB080080F0A200008400DBFF7524573FD7AD5AA923207AD80EB0 - 7B4ACB780C0000107E1400801060FBBF8EE4EAE7E9AA533A02A2672DDB01764B - C992A52A23837F160100C28DFFD201213076E2243D82C1EDFF88BACDEB2A547D - 5DAD8ED0958145456AE2D967EB08008070A20000049C2C003860D0201DC158C3 - EDCF88B8A6A6461E83E9A6B3468DD6230000C2890200107039B9B92A2B2B5B47 - 10D5A74FAB8DE56B740444D7F37F7F5A8F9088C14386EA110000E144010008B8 - 86FA7A75F2F8311D413CFFF413AAB9A949474074BDF8EC33AAF2F0211DA12B47 - 8F1CD6A3E0A9ABADE5FFF7BA70FAE4493D0280E8A20000049CAC76BFE285E775 - 84DDDBB7AAFB7FFC031D01D1268F017CF9E3B7A8E3472BF50CE291AD1337AC59 - ADA3E0696D6D097401231D288601805219BAEF0EF91AF375D24B11C1F4994ECB - D2BDDC939C63B55CA7E5392DDFEAF3EFF953E57DC5C5437AF239D2E2868BCF8B - FD4715F033D9C3FAAA37BC49CD5DB4440D1D3E22526B02343737A913478FC612 - 9C179E795A3DF7D413AAB1B151BF0A40E41714AAF35E79995A7CEEF9AA78D870 - 55545CCC8AF7DAF1CA236AD7F66DEA0FBFB85BEDDFBD4BCF06D39BFEE7BDEA35 - 37BC4547B0C99D721FBEF18DAAB6A65ACF0008A34BAFBA5ADD74CBAD3AF29F63 - C78EB6DE74EDD01B9DA1ACD22BADCEEAEB9DD66035F9076DB3D3E4F62EE92529 - 6DB57A21BD1927A42789B77C8DF93A93F89B9E02000000401F9042CFAD77DCA9 - 66CE2BD13310B225EC0FEFBC43AD78E1393D0320AC280074AD2789B77C8DF93A - 93F89B9E02000000401F919D6166CE2F5563274C5443869FA532B3E49F64D174 - EAC4095579E8A05AF5E2BF557555959E0510661400BAD693C45BBEC67C9D49FC - 4D4F01000000000090761400BA26493B000000000008390A0000000000004400 - 0500000000000022800200000000000011400100000000008008A00000000000 - 0040045000000000000020022800000000000010011400000000000088000A00 - 0000000000440005000000000000228002000000000000114001000000000080 - 08A0000000000000400450000000000000200228000000000000100114000000 - 00000088000A0000000000004400050000000000002280020000000000001140 - 0100000000008008A00000000000004004500000000000002002280000000000 - 0010011400000000000088000A00000000000044000500000000000022800200 - 000000000011400100000000008008A000000000000040045000000000000020 - 022800000000000010011400000000000088000A000000000000440005000000 - 00000022800200000000000011400100000000008008A0000000000000400450 - 00000000000020022800000000000010011400000000000088000A0000000000 - 0044000500000000000022800200000000000011400100000000008008A00000 - 0000000040045000000000000020022800000000000010011400000000000088 - 000A000000000000440005000000000000228002000000000000114001000000 - 00008008A0000000000000400450000000000000200228000000000000100114 - 00000000000088000A0000000000004400050000000000002280020000000000 - 0011400100000000008008A00000000000004004500000000000002002280000 - 0000000010011400000000000088000A00000000000044000500000000000022 - 800200000000000011400100000000008008A000000000000040045000000000 - 000020022800000000000010011400000000000088000A000000000000440005 - 00000000000022800200000000000011400100000000008008A0000000000000 - 40045000000000000020022800000000000010011400000000000088000A0000 - 0000000044000500000000000022800200000000000011400100000000008008 - A000000000000040045000000000000020022800000000000010011400000000 - 000088000A000000000000440005000000000040F06564E801E2A100D0859C9C - 1C3D0200000000F8555E7EBE1E211E0A005DC82B28D02300000000805FE5E593 - BB7585024017A8220100000080FF91BB758D024017F2B90300000000007C8F02 - 40D728007481DB4800000000C0FF72F328007485024017B8030000000000FC8F - 3B00BA4601A00B2C020800000000FE4701A06B1400BAC01D0000000000E07F3C - 02D0350A005D600D0000000000F03FEE00E81A05802E70070000000000F81F05 - 80AEF54501A0D56ABE47010000000000FC2F40776FF7594E9C8E02402012FD78 - 78040000000000FC2F372F4F8F022BE5B9733AEF00F03A18DF1707B803000000 - 0000FC2D23A39FCACEC9D191AFF5695E9C8A0280FDE17D9FE07725AFA0508F00 - 000000007E24CFFF676464E828D0529A4FB30860170A0A290000000000809F15 - 0E18A047E84CAA0B0052B130CD6857C5E8D7D2D2AC87BE347CC4283D02000000 - 00F8D1C83163F5C8BF0665B734E9A1E1CE93DDB973D2A5FB0E808E07935F50A7 - 47BE543C6C681816930000000080D00A4201A021A7D02BF74D69C2EFE6834700 - 6A7D5D0090C524468E1DA7230000000080DF04A100D05C9770EE9BB2A240320A - 00BDFB708DCDBE2E008851140000000000C0B78270D1B6A5F7B96FAF0B03A9BA - 03403E98FDE1CCB8C3076EAE6DA2000000000000E8B1403C02D0DCE895FBDAB9 - B2570E9D54C92A0074E7C399038BB5C6D6FA001400C6EB1100000000C04F32B3 - B2D4D0B346E8C8BF1A9B6B24F76D970F3B2D51DD796F5CA95C03C07D509E1FB8 - BEA18E3B0000000000003D72D6A8D12A33335347FED5D4E0790780B073653B87 - 4EBA641700E27D507310F6EBB1B8A1D6FF05809163FD7F3B0900000000445110 - 6EFF170DF5B1DCD7332FD6CD4BBCF91EE94901A0AB0F90C8076C7B4F638BBF77 - 0110B979F9AA78D8701D0100000000FC62E49860DCB1AD0B0046B7F2E63812F9 - 33DA49E52300F1C8876C6B0D75F5B532E977A3C7B10E0000000000F84D50EED8 - AE6FECD51A0049D1D30280F9A09D7D60F76B9E5FD3505FEDFB3B004410B69500 - 00000080A809CC230075B102802D5E5EED8E6DF1BE2621E9B803403E58DC0F59 - 575B158802000B010200000080FF8C0AC82300F5B5D55E77BFDBB972877C39D9 - 52B10860671FDC7E2D36AEADA1000000000000E8BEBCFC7C35A8B85847FE567D - 26F7ED90139F1976605E8BF77A8FA4FA0E00FB43DB1FDEF4AAAEF67420D60018 - C51A0000000000E02BB200604646868EFCADA6E6847DF1DBCE8DDD2D65925900 - B03FA819C7FBF0E6C05A6B4E9F0C440160C8B0E16A6051918E00000000007D6D - EAACD97AE47FB5A74F49EEDBA29BC989DDCC9CFD9AD7FB7A24190580AE3E8CBC - 6E9AB0E3D6D355C703510090AAD2ACF9A53A0200000000F4B520E568AEDCD7E4 - C7C2CE913BD3D5EB5D4AC51D00EEDEADDDFCC9134702B10680985DBA508F0000 - 0000007D6DE6BC123DF2BF53A72ADD17BFBBCA99BBCAADBB2D1D6B001832364D - C4C6470EEF3E7D26F4BF59250BF40800000000D097C64D9AAC060C1AA423FFAB - 3CB8B3DAE93AE4C4BA19F638E9925D00E8EAC39AD7CD41B66EDEF8E2C9D34D47 - EB63B33E77D6A8D16AC8F0E13A0200000000F4959941BAFDDFC979376F5E7ED2 - 19B6E5C2326FF5F174F57AB724AB00E0FE50EE0372B797173D68696969AE6A3E - E88C7D4FD60198CD5D0000000000D0E782F4FC7FD3A9A68392FB3AC38E39F1CB - B13461E66CEEB84752B106809BF9F0E6753B8ECD9D387EE890F441C063000000 - 0000D0B7E4E2EC8C79F375E47F278F1D3617BD3BE4C3562FECB1E135D723A95C - 03C01C9057B3B51EABDC7F408F7D6FD67C0A0000000000D097C64F9EA2FA0F18 - A823FFAB3CBA570A001D72E14E5A4AF4A60010EF43D9F3EEF798587A738B43CB - 81FD5B035300903500468C19AB230000000040BA05E9F97F7170FFD6FD4ED796 - 033BCDCE8DE389F75A675FD3A964DC01E0F5CDDD7312DB4D0EB8CDB64D2B03B1 - 0680C13A0000000000D07782F668F6F6CDABDC39AF2902D8CDE68E85D75CB7A4 - FB110061FAB6EAC7DAE54F4835243058070000000000FA4646463F3563EE3C1D - 05C3DAE54FCA5DEF6D39B0CC39EC1CD9DD5222590500F301BD3EB03D27076AC7 - B15659B9AFAEB6F6F471671C08B3E697E81100000000209D269E7DB62A28ECAF - 23FFABADA93A2E39AF33EC900B3BCD9D230B3BB6E77A2D5D770018EEB9B6F8F8 - C98381D9096060D160356ED2641D0100000000D265E6BC603DFF7FEA786C0780 - B8B9702C3AC39EB3E79326D90580781FD88ECDD8BEFDA1B5EAE56D110281C700 - 0000000020FD6697062B173BFE7201A05D0EAC9B708F0D7B3E2952790780B00F - C26EEE836E3D726077607602108BCFBB408F0000000000E9205BFF05AD0070F8 - D02EF71D001DF261574B999E1600BC3E94D7873573A6C5AB74B4ECDBB3295005 - 80E973E6AA612346EA0800000000906A4B5F7191CACACAD65130ECDFBDD16C01 - E8990B5B632FF15E8BF7FE4EF5E60E00FB83B8BF7967AF99036C57F1D8B8EE85 - 40150064E5C9F32EBD4C470000000080543BEF95C1CBC136543C2FB96E5BEEEB - 343B27B6C99CE9CDD8E8ECB584A5E311007713662C071C6B6B573E73A4B9EA48 - A3330E8CF32F7D951E010000000052E9AC51A3D5D499B375140CCD55871B2B56 - 3F5BE90CDB725FA779E5C6764B99541400BC3EBCF4EE03B60FBCB5A5A5B1A5BA - A9F9B0330E8C1163C6AAB303F60B08000000004174DEA5AF521919193A0A86AA - E6D64392EB3AC3B6DCD769764E6C9AC4C27E9F994B9A641600DC1F2EDE0797B1 - 7D02DA0EFAE4A9A381DA09409CF7AACBF50800000000902AE75EFC4A3D0A8E93 - 2762396E5BCEEB343B0F96DE30F3A6D9DC718FA5F20E00C38CBD0ED88E5B0F1F - DCBDD7E90325888B500000000040904C9D392B760776D0541EDAB5CFE9DA725E - A7C5CB8B85C486793DA9925D00F0FA80E6839BE675C0CDD2CA573EB3C1E90345 - B6A158B0EC1C1D0100000000922DA80BB097AFF8FB7AA78BE5BB4E73E7C1766C - 9A9BD75C8F25A300E0FE40897C68894DE2DF76D07F7BF49EADB24882330E1476 - 030000000080D4C8CCCA524B2FBC5847C121B9ED537FFDE9366718CB779DE6CE - 816D2636EF15F1DED363C95E03C0FEA072506DC97D02732DA74F1F6BA83C55B5 - D51907CAFC25656AC0C0413A0200000000244BC992A581CCB724B7ADA939D9E0 - 0CDB725EA779E5C2F69CDD843DEEB554AC01E0E6FEE0D2DC27A02DDEB57DDD46 - A70F14590360D94597E80800000000902CE75D12CCEDD777EC2C9747DCE3E6BE - 3A364D983E65525500B00F449A7D70EE033571EC24AC5CF1843C231138E7B31B - 0000000000245541617F55BA34986BAEAD79F149C96D6379AED33ACB85BD5E93 - 9674E9B803409803B00FDC6EE63988967F3CFE8BED4D274ED439E3409974F674 - 356ADC781D01000000007A4B765DCBCEC9D15170343A39ED334FDEBBC31976C8 - 79AD66E7C8D2522E150500FBC3BBC7A637CD7DE02DF5F5354D474E1DD9E28C03 - 252323435D72E56B750400000000E8AD4B5E73B51E05CB915387B7486EEB0C3B - E4BC7A6C9AB07BAF71D224BB00607F40F381ED660ED83E707B1C8B776C5F13B8 - 7500C4C557BE86C500010000002009E62D2E5313A74ED351B0ECDCB6C63CFFEF - CE85EDB13DE76E863DEEB5DE160012F980F67BCC6B662CB741482F072DE3D86D - 11CBFFF34820D701C8CDCB5757BCFE0D3A0200000000F4D4356F7EAB1E05CF7F - FFFDB02900B4E5B94EB3736069C28CED39C38EE3BDA75B52B90680FDE1A43707 - 2CBD69129B93615AF3B34FFD7A57C3B1D3D5CE38705E75CDB5B1852A00000000 - 003D337DCEBC580B22C965FFF5B7DFEE72861D725DA779E5C4A617D29B71D2A5 - AA0010EF039B8331CD1CA87D625A5B5A1A5B0E9DDCB3D919078E24FF52040000 - 000000F44C90AFFE1F3AB963B3E4B4CED0E4BCD2ECE4DFE4C3A6798937DF2BC9 - 2C00B83FA089CD41B99BBB1A629ACC376FDFB23290EB00882BAE7D83CACDCDD3 - 11000000002051F2DCFFDC454B74143CDBB6AE96DBFF6379ADD3E2E5BC5E39B2 - 34617AC31DF7582AEE00707F70779303B6637352DA9DA0175F783090EB008801 - 83060576B54A00000000E84B57BFF9ADB15DD682EA3FCFC572593BD9B7735E3B - 1796393B364DD8E3A449E51A00C23E08BB9993610ED88E6327E8DFCFFE795F5D - 5DF529671C48575E7F83CACECED61100000000A02BA3C68D578BCF3B5F47C123 - 39EC8BFF7C70BF33B4137FD3BC7261AF9632E95A04D0B00F4A9A7DF0AED6D2BC - 7FDFB64DCE3890060F19AA2EBCE22A1D0100000000BA72F59B6E541919A9BE4E - 9D3A07F76DDBE8E4B24DCED0E4B6EE228034775E6CF39A4B9A549D59FB039B03 - B09BD70970CF35EFD8B83CB08F0188D7BCF1CD2A33335347000000008078868D - 18A9CEB9E8521D05D3968D2F796DFF272D5E1EEC6E863D4E9A641500BAFAC0F6 - EBA609333627462A256D27EAC1DF7F734573F3111907D2D0B346A8F32EBD4C47 - 000000008078621750B3B274143C92BB3EF0FB6F2C778676926F725DE9BD7261 - BB19EEB1FBF51E4BC7BD15F6079626076F7AFB84D84DE69AF7EE5E7F6AFFEECA - B5CE38B05E1BF05B580000000020D58A8A87A8575CF66A1D05D3FEDD07D71ED8 - BDB1CA19C6F259A779E5B9666CE7C6764BA95467A6F601D807E43E50FB64D827 - A5F9BFCF3FF46FA70FAC9163C6AAA5175EA4230000000080DB95D7BF5165E7E4 - E828985E7CEE91179CAE5D3EEBEADD39B030B1618F932E150500F7073607649A - 3970FBC4D84DE6DBDA9F7FF3D5350DC74E573BE3C07AC33BFF971D0100000000 - C0C3F091A3D42B5F7BAD8E824972D6077E7BA7DCBDDE2E9F755ABC9CD7CE8DED - 6673C7BD96CA3B00EC033063773307EF3E416DE39A9A930DDBF6AF91E72802EB - AC51A3D5D56F7E9B8E0000000000C63B6EFE88CAC9CDD551306DDDBBE625C95D - 9D61BB7CD61ADB735EB9B134618F93AEAF1E4E9703F23A707342DA9DA8679FBC - 2FD08F010859D0420A01000000008033169D7BBE2A59B25447C1F5EC53BF949C - B52D87D5CDE4B5EEBCD7E4C269978E0280394861927B69C28EED13D4AE3DF1F0 - 4FB71D3D75ECB0330E2C799EE59D377F444700000000106D72D5FF6DEFFF908E - 82EB64E5B1434F3E72F77667D82197759A9DEB9A26DCB19D37A74C5F2C02689A - 1CA83D36CD7DC29CD6D2B4B5E2B9179D71A0CD5B5CA6965C70A18E0000000020 - BA5EF796B7C7B64E0FBA4D9B24576DB1B7B49766725B3BD7F5CA854D33EC71D2 - 25BB00D0D901B80F4462FB64B89B7DF29A1EFDF3F76445C5C07BDBFB6E56B979 - 793A0200000080E891DDD25E7DFD0D3A0AB687FF7897DCFEEF550088D7BC7263 - BB1732362D6952BD08A0617F78FBA0ED589A7DC2DAB5B52B9E3E7CE4D0CE2DCE - 38D08A870D57D7BDFD261D0100000040F4BCF3431F0DC54E69870FEEDC52B1FA - 19795CDD338FD5CDCE79E3E5C5D20C7B9C54E95E03C08CA5D9072CBD7D62DC27 - 2CD6562D7FEA3F4E1F7897BFEE7A3566C2441D010000004074945D70919AB360 - 918E826DCDF2A7BD16FF33CDCE6FA577E7C1A6097B9C32E9280074460ED03E78 - 7372CC0932E358FBF3FD77BED45C75A4D119075A6656967AD72DB7EA08000000 - 00A2411E877EEBFB3EA8A36093DCF40FBFBA43B6AC6F97B73ACD9DD7DAF9AEF4 - 7D269D050073D0420EDC3E11E6C498664E96DD9A0E1DD8767AF791836B9D71E0 - 4D9F334F5DF0AACB750400000000E1F7FAB7DD147B2C3A0CF61CD9BFE6C8A19D - 55CED0FDFCBF69EE1CD7E4BF664E98B9B4485701C03E207380D2CC819BB17DA2 - CC584E66DB097DF15F0F84623140F1E677BF5F15F6EFAF230000000008AF31E3 - 27A82BAEBD5E47C1F79F671F30B7FF9B9CD52E04B8F35B77FE6B9A618F532655 - 0580CE0EC8EE4D3327C234F70993163BA17FFECD9DE5B57535526509BC814583 - D51BDFF51E1D010000004078BDF3431F8B3D0E1D06B575D5557FFEDDD7CB9DA1 - 9DB39A66E7B476B37360E1EE85FB3D4995AE45000DFB604C3327C2EEA5D927B0 - AD92D2585FD3B0A9FC85D0DC0570C955AF55F3162DD1110000000084CFABAF7B - A39A39BF4447C1B7B9E2F9E7253775861D7256DD4C5EEB95F3BA9B618F53A2AF - D6003063D3CCC9B14F947DF24C8B9DD45FFDF4134F856131409191D14FBDFF53 - 9F5383870CD53300000000101E53A6CF5437FC4F78EE7C6EAE3ADC78EF8F3EF9 - 940C9DE64EFC4DF3CA71DD79B0B0C72997CE0280173950FB4498136437F7096D - DAB665E5B14D3B363CEF8C4361605191FAD0E76E8F150300000000202C0A0AFB - AB9B3F7BBBCACA0AFE9EFFC6866D9B9EDBB16DD57167687255776F3777BE2B7D - 9FE98B8CD31CBC7D02A4B7C7EE1366C7D29AEEFFE9671F6F69A9947128C8AE00 - 6F78E7FFE8080000000082EF3D1FBF4D0D1F395247C12739E8FDF77CEA096728 - C9BE69B11CD5695EB9AC57BE2BBD696995EE02807D90766F9A3949763327AFDD - 095E5FF1CF235B376D7BD11987C66BDFF4163577E1621D010000004070BDEAEA - 6BD5E2F32ED051386CD9B8ED3F1B2B9E3FE20CDD79AA89BDF2593BE715766FC6 - 6991EA02803920F741D9F3A6C9C931BD7DB2CC4975F74DBFBDF7F6C78E1D3B2A - 5F130AF208C0076E633D0000000000C13671EA34F596F77E5047E120B9E7EF7E - F1F9C79DA13BE977373BA7B5735D77B3C59B4FAA74DE01600EC43E283336CD3E - 41EE93D82EF997B6EAC5470F1C3BBA6785330E0DD91AF0E6CF7E81F500000000 - 0004527E41416C8DB3ECECF03CF72F8E1DDDBD62D54B4F1C70866D39A9D3DC79 - AB699D25FFC23D4E8BBECC32BD0E5E9A9C20BB9913689FE4B613FDE7FBBFF4A8 - D387CA8CB9F3D5F5EF78978E000000002038FEF7A39F5423468FD15178FCF1BE - 3B24F7EC343F759A3B9FB5735D618FD3AEAF0A00F6019B13E03E51E604BA9B39 - B9B113FDEF67FFB467E7CEF56B9C71A85CFDE61BD59C058B740400000000FE77 - C95557ABA5175EACA3F0D8B963DD9A17FFF5A73DCED04EF8EDC4DFDDDCF9AD3B - F1B7C769F3FFDBBB13F0AACA6BFFE39BCC098419640623F3A40C2222501410B5 - 5E6BADF7B6B5D3FDDBDE6B6B27B57A9D6BD5D656ADD50E5AB1B576D2D67AB575 - A6A87544641090799E0992908129849090FF5EC7B37217AF7B9F9C0081337C3F - CFB39EF77DD7DE09E4E4E0E3EFDDFB9C73BC3700827E60FB40E85C1F20F7413C - 2CFCFB7550C6E7FF7AEFCBFE9852E42500DFBEF936AF6D870ED10E0000000024 - AE5E457DBD2F5FF99DE82AB53CFFE44F25733664D068D98C6ACB665A29E1CE95 - 9D37BB13710780FBC36AE903A43B245AEE83A90F76C303FEAF7FFE7EFDF66D6B - 57F8F39412793F809B793F0000000000892D372FCFBBEAB63BBD9CDCDC682775 - 6CD9BA6685644E7F6A43BFCDA4B6DC3C6BB3AE96B2F3E322333A1E2F2D9C51D8 - 9E2D21C9574AD63AD792BF7B43BFBEBEC5EE51679C7FA63F4F299DBA74F50ADB - B4F116CD991DED0000000040E2900B9657FFE087DE80A1C3A29DD4F2B7C76EFF - E39A95733FF4A707FCAAF14BEE02D0D1966E02C8C640D04680703701C471DB08 - 38D11B0032BA25649460AFA396ACE5EF6C7BB2CE5CB3724EE5C4295F195CD8BA - 5D7B7F9D52FA0E1CECD5D5D5792B17A7DC5B1D000000004872575C7B8337EE9C - 29D1556AD9B17DE3DAFB7F74D973FE342CF8CBDABD1B4002BF8E1AF835E41FB7 - B01F2411EE0010B2B6C76C69F0B7A15FEBB0CD80FCFC967B878F9A7C863F4F39 - 434E1BE95594957A1BD6AC8E7600000000E0C4FADC57AFF0CEFFCCBF4757A9E7 - EF7FBDFBF1154BDED9E64F25E8DB4D00BB1110F47200F7EABF94CE4F1809CE89 - C2EE88D807CBEEA0D8D207B9A19E7EE2274BCBCBB66FF6E729A7458B16DE57AF - BACE3B7DFCC46807000000004E9CF33E7DA9F7A9CBBE145DA59EF21D5B363DF3 - C43D4BFDA966CEB0B02F65B3AB96CDB809E178DF0160C9557DA5733BDAD2ABFC - EEDA96DFAFCFC8CCC8AC3C75F4D4B1FE3AE564646478A3C74DF0562C5EE4ED2C - D911ED02000000C0F175E6A473BC2BAEBB21A5DFB0FCA9C7EFFAC3CAA591ABFF - F2DA7FBDDA6FE7BA2110B4196037016C29777D5C9CA80D0009F17614B6A7F368 - B03FAC9CD01FF91974CC58B97456F9D8F19FEAD1B67DD7AEFE3AE564666579A7 - 4FF844E44D0177555444BB00000000707C0C1931CABBFAF6BBBCCCCCAC6827F5 - 6C58B7E8FD9FDFF5E597FCA9DEEAAFC15FD67A37806E00D8BB0224F4CBE8867E - 1BF68F7BF05789B45D631F20DD29B13B275AF260DA07581FF4865FC0AFEFFFE6 - 537B6BCBE41794925AB66AE5DD78F7CF229F100000000000C74B9F7EFDBD6BEF - FCB1979D9D1DEDA49EBD07CB0E3CFCD3AF3FE54F0FCB99D1D1CDA34199D5665A - AD8490281B00F641B1A37D10E5C1B5A50FBA2DE91F5CBD7C76E982D767BEE8CF - 5356BB0E1DBD9BEEB93FF2118100000000D0DC3A77EDE6DDF893FBBCFC8296D1 - 4E6A5AF0C63F5F5CBD72CE4E7FAAC13FA8DC7C6AB36B50B6D5F90975A23600F4 - 01701F04DBD7074EE75AF641D6075E7F090DBFA05FDEF7D5572B2A8AB7FBF394 - D5B5474FEF06FF1F606E5E5EB40300000000C75EEBB6ED221720DBA4DEA7AE1F - A672E7F6E25FDEF7B557FDA99B31ED6680CDA436AB066559292BAC7F5C9CC837 - 0114F2DA7D3B0ADBD3B9BEDE5FCA9D6BC95ADF0F20E3505D6D8B9A03074A468D - BDE04C7F9DB2DA77ECE4F51D38D87BF7F557BDFA43F23C030000008063272F3F - DFBBE5BE9F7B3DFB14453BA9EB0F8FDCF09BD5CB66CB8564FB517FF6F5FF32EA - 6680BD282D614C4637E0BBF3132AD136007414B667CB6E00E83AA85AAC5D396F - D788332EE8DCB153F71EFE3A659DD4ADBBD7A3571F6FDEACB7D8040000000070 - CC48F8BFEE47F778FD870C8B7652D7AA1573E73CFCB32BE4EABF0DFC76234046 - BD0B209E3B014E78E07725E21D00C2F6DDB9AD48D08F8E0DC1DFAED7AE98B779 - F4799F1F5F909597BAEF52E1EBD1E764AFDFA021DEDCB7DFF4EA6AE5B9080000 - 0000474EDE6FEC967B7FEE0D189AFAE17FE7815DFBEFBBF9D30FEDAA28D9EB2F - 8382BFBDF21FB601E006FF84DB0438D11B009604773B0ADBD3126ED0D7B9DBCB - ACACD851DBABEB29B545FD460EF1D7294DEE04183E7A8C37EF9D37BD9A0329FB - 2108000000009A59C793BA78B7DDFFA0D7ABE8946827B5CD9AF1F833AFBEF4DB - 15FE54C2BE7B074058F897D15EF98F75F53F2136031265034083BD8EC2F6DCB9 - 067C9DDBF0FFB1DEC2B9338B275D70F9F096058529FF96F9F29E00A3CF9AE0BD - 3F7B9657B54F36AF00000000207E3D4F2EF2C3FFAFD2E663C7CB776EDE7CFB75 - E73F71E8509D04FF78C3BFBDF21F14FCDD794248D40D001D85DB93602F642DA5 - 415FE70DC15FCBFF45B6D8B7A77C7BFF219F18979F9F2FC7529ADCAA73E6D993 - BD25EFCFF376555444BB0000000010DB80A1C3BD9BEF7D20F2AEFFE9A0A2A2A2 - FECF8F5CFFC8FA350B4AFCA5867E37FCDBB29B0012FC6594801FEBEA7FC29080 - 9C88EC83A60FA4EEACD85D1699DB9D18AD8FFDA25E9FF1FB75DBB72E9FE5CFD3 - 42BB0E1DBDDB1E78C81B386C78B40300000000E1469E799677D3BDF77B2D0B0B - A39DD4B77DCB9259AFCFFCE33A7FFAB10CE9979B33257FBA7954E79A5985CDB3 - 092591DE0340D92BF47A655FE8DC96B06BF7EABF9D672C5FF2F6A6F1D32E1F97 - 979393E3AF539EFC98E3CE99EA6DDEB0CE7F626F8E7601000000E0709F9876BE - F7ED9B6EF3B2D3232A4554EEDBB7F7AE9B3EF9F0DEDDE5FBFCA57BE5DFBD0BC0 - 6E0404857F0DFC6EF877D72754A26D004860B7A3253DF7B88C1AF46DD9F0AF63 - 86FF8BADEDDCA95B75BF8163D2E6B27866569637F613E7781565A5DEC635ABA3 - 5D00000000F8C8459FFB82F7FFBE738D97919988D7879BCF6B2F4E7FF2AD571E - 5FE54F83C2BF067F1BFEF50E80A0F06F4BD9794248960D00DB8F5591A0EFAC6D - 3F63C19C19C513CEFE6C51EBB61D3BF9EBB4909191E18D3A73BC77E8509DB772 - F107D12E0000008074F7C5AF7FD3FBCC972FF75AB490D8943EB66D5AB9FC8737 - 5EF4BF7E46B7E1DF967BD5DF6E0068F86FECEA7FC249D60D0061E736F46BB91B - 01D1AACF58BCE88DD5E3277F694C6E6E6E9EDF4B0BF20F7AE888515EABC2D6DE - 07F3E644BB00000000D291DC29FCF5EB6EF2CEFDD425D14EFAD85FB5A7F2B6FF - 99F6CBDD951FFBCC7F2D09FBEE1D0012FC650C0AFFB6125A22DFE321C1DDD2B5 - 867AA1F3B0D2E0AFF3C8B8BBB2F4E081FD95DB469E31764C8B1605D24B1B7D07 - 0DF1060D3F35B20970A07A7FB40B000000205DC867FCDF78F77DDEC8B1E3A29D - F4515F5F76E8D1876E7C78E19C97B7F84B09FBF2B17F1AFC35F0DB79D8D57F37 - F4BBE1DF1E4B1889BA01A0A1DC8673B76747771E54BA011099AF5D39BFA277D1 - 988C9EBD07F7F7D769A573D76EDE84A9D3BC8D6BD77825DB8BA35D00000000A9 - 6EF45913BC1B7FF233AF4BF71ED14E7A99FDE68B2FFC71FAF5EFFA5337FCDB72 - C3BF5EF9D70D0009F6417700283B4F28C9B40120642D0FA6EDDB7375AE57FE6D - E8973AAC3FFBAD67364E38E7F3A714B6E9D0D15FA795BCFC026FFC94695E6666 - A6B7FC83457E27619FA3000000008E92FC7FFF97AEFCB6F7E52BBFEBE5E4E646 - BBE965DB96D52BBF7FCDE427EAEB0FB9C15FD76EE897B55EF9B757FFED268048 - 9A30958C1B00F6987B9E047B1DEDB186D06F47FF17EF2D59F8FAEA4913BF3426 - 3B3FFDFE15C8FB020C3A75845FA7798BE7CDF5AAF7F3920000000020D5446EF9 - FFC9CFBC33269E9D766FF6A7F697EFD9FD831BA7FD7257C5877BFCA50DFD1AFC - A582360124E4EBA8C15F4BD879C24BE4F7005061CF50EDEBA8E1DFF663556423 - 607765496DD581BDC527F71F33263F3FBDDE0F4075EED235F292804DEBD6F292 - 000000002085A4FB2DFFA2BCBCACFEC93FDE3AFDFD392FE8EBFEDD0D002DDD08 - D0F06FAFFCCB2841DFDD0470C37F502F6124FA068006723798CB5A1ED4A0C02E - 3DEDEBD57EA9A079645CBB6A6EE580A1635BF4EC3D28EDDE0F40E5E5E77BE3A7 - 9C1B7937D0E58B78490000000090CCB8E5FFFF2C9CF3D24B7F987E9DBCEE5F43 - BF8C7AC5DF067F0DFF326AF8B79B001AFE65146ED84FF810952C1B0042E74163 - 5089A0BED4611B0032BEF7E6D31B274EFE7CDFC2D61D3AF8EBB4147949C0F0D3 - BCC1A78DF03E983F8797040000000049885BFEFFCFD64D6B567DFF7BE73C5E5F - 7F48C3BE84FFC63600F4967F1BFC35FC6BC877C37EC2877F914C1B0022E8D92B - 3DEDDBB9D075A325EF07B074D19B6B264DF8D2E959F93969BD45D6A94B576FE2 - B9E7F12901000000409219356E7CE423FED2F9967F555DBE77F71D379FF76065 - C5F6DDFE52C3BF86FE58E15F2A2CFCBB25744C78C9F01E004242BA1D55585F44 - 82FD47D3862BFD42FB5A0D7701ECAADC5173A0AE6A7B9FBEA7A7EDFB01A8DCBC - 7C6FC2D473BDC2366DBD554B9778B507E5DF030000008044D4AAB0B5F79FDFBE - DAFBC215577AB9B979D16EFA8ABCEEFFF1DB7E336FF6739BFCA50DFFEE26800D - FE32B7B7FD6B055DFD0F0AFD09BF11902A1B0042E6EE79DA0B5B6BF86FA8D52B - E6540C1E3A2EB347EF81FDFC755A93DB85FA0E1AEC4D9A7681575951E66D5EBF - 2E7A0400000040A238FB820BBDEB7E78B73770D8F0B4BFE55F2D9E3F73C6630F - 5DF38E3F0D0AFE32D7ABFE5AF6CABF867E1BFCDDBB009252B23D3B34A82B5D4B - 6998974D0D99CB9865C6EC68E54447B9CDDF966C93C9B1BCACACDCFC071E5DFC - DDEEBDFAA7FD2680B56CD102EFD1077EEA156F964D34000000002752AFA2BEDE - D7AEBED6EB3F6458B403B17DDB9AD5DFF9CF61BFA8AD3D206F6A56ED97847E19 - 25F8DB92E0AF7701E82680847F1D25F4CB186B03C05D27B464B9034069F8D751 - C95A1E74DB77E7616B190F7B89C0A14375DEB2C56FAD1E7FCEA52372725B1644 - FB694F3E2E70F2851779B97979DEEA654BBCBA3AF9B700000000E078924FF0BA - EC8A2BBD2BAEBBD1EB745297681762EF9ED2B23BAFBFF0A18AB2E2A0D7FDEB5C - 037F50E8D7E0AF25395346E186FDA409FE2A593700840DF0EEE8CE834A04F565 - 33C0DB55B1E3E0FAD58B569E31F19251D959E9FDA680564646A63770D8A9DE84 - A9D3BCD21D1F723700000000701C9D79F664EF7F7E748F377CF418FFFFCD23D1 - 0551FBABF7EDB9FBD64B7FBE7AC57B3BFCA5BDC2EF96067F2D0DFE36FC6BD8D7 - 90EF86FDA40BFF2299370084BB16DA8B67D4121F5BEFD8BE7E7FE9F68DEB878D - 9B343A27B3405E4680A88256ADBC71674FF18AFA0FF4562F5FEA55EDDD1B3D02 - 000000E058EBD2A3A7F7DD5BEFF02EFADC17BDFC8296D12ED4C1CACAEA077FF6 - F507E7CD7E6EB3BF9490AF57FBED1D00F6CABFDD04080AFFEE268096D031E924 - DB0680B2A1DD92B5FC326C5FE641E7694FE7B64464BE69C3923D35FBAAB79E3A - 7AF4A88C8C966CB139BAF6ECE54DB9F0535E8B8C0C6FCDF265DEA143F2EF0400 - 0000C0B1909D93E35DFA95CBBD6FDD749BD7B547CF6817565D5D69DD1F7E77E7 - 23AFBEF4DBD5FE3228F8BB1B004157FF35FC6B49AED47063C3BF95741B01A9B8 - 0110764CB9E7D8126EAFC59A1573CAB3B3DB9575ED39F4D4FCFC7C3D0F519959 - 59DE90112323B72355EC2CF5B6F1B200000000E0A8C8BBF9CBFF5F7FEF8E1F7B - A3CF9AE06566266B746B5E151515F52F3D33FD8F4F3F7ED7227FD958F0B71B00 - 12FAED0680DD08B0813F2CFC27A5547816C50AE41AE2859D2B7B4CE9797AB53F - B25EB2F0B51D5D7BF6DDDFB7FFC8C11FB5E12A6CDD26F21FA9B19F38C7ABDAB7 - D7DBB26183DF4D997F2B00000040B393D7F54F9C76BEF79D5BEFF0A6FEDBC55E - CBC2C2E8110479EB5F8F3FFDD88357CDF2A71AF6650340427ED846807BF5DFBD - EA2F65E76EA009EA258D64DF00080AF061EC399150FFD1B4611E54A2613EFFDD - E7B716F51B91D5BDD7C053648D60ADDBB6F3C64C98E48D9F72AE575373C0DBBC - 61BD57CF4B0300000080505959D9DEE44F5EE47DF7FB777A93CEBBC02B6CD326 - 7A0461E6BCF3EC3F1FF8D11766FA531BF6DDE0EF5EF90FBBEA6FCB867F1BF693 - 36F82B0DB9C9CAFEFDDDB9967EC49F6C76C85C462979533FA96C33E6989277FE - D7512BCFFF167977FDE2CDCF0D1A367E9CBF461CCA4A4ABCE79F7CDC7BEDC5E7 - BC8335F26F1000000080C8C9CDF5A6FCDBC5DE85FFF179AF7DC74ED12E1AB3F4 - 833767DD7AD5394FFA795D3EDFDFFD8CFFC6360224F4DB8D0009FD324AC07737 - 0054D83CA9D8D09C8CDCBFBF5D6BF817326AE9068096DD00D00ADB0088545656 - 4EFEDDD3E77CB5A8E8B4E1FE1A71DA5551EEBDF8D45FBD99CF3EE355EFDF1FED - 02000000E927BFA0C09B76F167BC0B2EFD6CE40E5AC46FFDBA458BAFFFFA198F - D6D6D648A8B0C15FCB6E00D8E02FA15F37006CD9ABFF423701941BF8D90038C1 - DCE0AFA32DBB09603702DCBB007403C0D6C736015A16B66B75CF43F3AFECD6A3 - 88970334D1DE3DBBBD19CF3CE5BDFCF4DFBC7D7C7C20000000D248ABC2D67EE8 - FF0F3FFC5FCAEBFB8F40F1D675EBAEFDFAA807F7EFDBB5CF5F4AC897ABFF1AF8 - ED064058F8775F02A0615F475B424761E74949C372B2737F0E5D6BF8D70ADA04 - 90E06FCB6E00C85C43BFDD0CC89379874EBDDADCFBD07B57B5EBD8B59BBF4613 - EDAFDAE7BDF2ECDFBD575F78D62BD95E1CED02000000A9A74BF71EDEE40B3F15 - B9DD5FAEFEA3E976966DDF76C337C6FEBCAC74F32E7F29015F6FFDD70D003B4A - D8D75142BF2DF7AA7F3CE15FB8EBA4A3413955E8CF637F2E0DFF5212FA75D40D - 00BB092073BD0BC0BD13403701744320527DFA8DE874C74F675C5DD8BA737B7F - 8D23505F5FEFAD5EB6C47B6BE60C6FF6EBAF453E410000000048762D5BB5F2C6 - 9D3DC59B30ED7CAFDFA021918FF6C391D9BBA7B4EC96ABA7DEBF69DD073BFDA5 - 5EE9D7B2C15F4BAFFC4B49E0B7E1DF6E0048A877370094CE6D2FA9A5DA33507F - 1EF7E792B5966E0248D8B79B00762340C2BF7B3740E826C0B01193BB5DF78327 - BEC526C0D19337097C7FF63B91CD804573667B87F8F4000000002411F9BCFED3 - CE38D39B78EEF9DEC8B1E3BCEC1C890F381A7B769794DFFB83CB7EB564E16B72 - DB70BCE15FC2BEBDFAAFC15FC3BF8C12ECC3C2BFD0B5DB4F5A6E504E151AF62D - 1BFEB5DC4D00BD0B40C37FD09D00EE0640642D77027CFFCE17AE6C7752B7AEFE - 1AC7C0EECA0A6FD66BAF44360336AC5915ED0200000089A768C0C048E8972BFE - ADDBB68D7671B42A766E2FBEE3A64FFE7AE39A85A5FED2067EBB01E0867F2D0D - FEEE957F0DFF5ABA0960E9B194E286E454A13F97FBF3B91B00B276EF02D0D2BB - 0024E0BB1B010DC1DFCE3B9DD4A7ED9DF7BCF6DF27F52A2AF2D73886B66C58EF - BDFDCA0CBFFEE95594C95D3F000000C089251FDB3761EA79DE8473CFF37AF4EE - 13EDE25829DEBA7EDD0FAE9DFC9BD21D1B2BFDA51BFE75EE067F99EBD57F0DFD - B624ECBB57FD656D69F067032049D89FCB9DDBD20D81A04D00F7A500419B0076 - 0320D2934F07B8E3A76FFC6751FFE143FD358E317949C0B285EF7B73DE7AC35B - EA8F1F6EDD123D0200000034BFAE3D7A7A43478CF2C64C9CE40DF1C78C0C8912 - 38D636AE5DB8E4966B26FF61DF9E0A7983301BF475032056F8D70A0AFF1AF835 - FC6BA9B0794A90F09B8ADC9FCBAE656E4BEF02D0B21B00B6DC4D80862BFFEE98 - 9595937FFBBDAF7C76F06913C7FA6B34A3B292126FD9A2F7239B024B16BCEF95 - 9796448F0000000047AF43E7CEDED091A323A17FC86923BDF69D3A478FA0B92C - 5DFCF6ECDBBF37E5C9DADA9A58EFF2AFA3867F29BDF2EF867FBDEAAF65837FAC - C0EFAE939E0DC6A9C8FE7CEE5C4B42BF8EF16E0248D077CBB91B2023EF863B9F - BEF08CF1174FF5D7380EE4D30476146F8B6C06C8DD0132EEAE94BB8500000080 - F8C8EBF7E5CABE047E09FE9DBB76E3DDFB8FA3B9B39E9DF9E35B2E79D1CFE9FA - F9FE1AF635F0BBD594F02F81DEDD005061F39492EACF64F7E7B36B0DFD423701 - 24F4EB283D09FDEE46806E00046D04389B005ECE37AFFDEDD9A3C65DF2E976ED - DAB97F173433D910D8BA7183B774C1FCC886C0F2450BBDFD55FBA24701000000 - CF2B68D9CA1B7CDA888FAEF0FBD5A3CFC904FE13A0A2A2A27EFEDB4FFDFDA1FB - AF78DD5FDA801F16FE25ECEB28A1DF96067F1925CCEB283DA19B00CA0DFC6C00 - 2439FB73BAF363B1092063C34B009C31E7B2AFDE75FA259FFFDA1732333BC9F7 - C109525757E7EDD8B6D52BDEB23952DBFDDAB6795364DCB37B57F42C000000A4 - A2C2D66DBC6EBD7A7BDD7AF6F2BAFA25A3D449DD7B443EBA0F274E5D5D69DDD3 - 7F7DE4CF7FF9ED2DF3FDA5067C0DFD76B4A15FC76319FE5336F82B1B865399FB - 73DAB5CC9BBA0920815F460DFFBA1110B80120F30B3F73D5E0CF5E71CBE5ADB2 - 3B481F09463600EC86806E12C886816C1C00000020F149909740AFE1DE067ED9 - 0040E2D97BB0ECC093D37FF8BB179E7E60B9BFB457FADD0D000DFC1AFE25ECDB - 0D00F99F76198F34FC0B3600528C1BFC75D4124DBD13C0DD00704B027F643360 - C2D997155DFEBD47FEBB6DCB96ADFC3592405D6DAD57F2E176AFA4789B57B56F - 9FB7BFAACAABDE5F1519EDBCBACA3FE6CFABA37D9D57EFDF1FFD4E0000008847 - 5E7EBE975750E0E5E7FBE58F3ACF2B68F9D13ADAB7F382962DBDCEDDBA7B9DBB - 74F532B3E47FD3910C2AF7EDDBFBE87DFF35FD9DD7FFB2C15F6AD8B781DF2DDD - 00B0C13FDEF02F732DA1A3B0F394A6A1375DB83FAFAE65D41247BA09A01B01F6 - EABFADDCE1A3A776BBF6D63F7FA3B075E7F6FE1A29AEBEFE9077B046FEFB0400 - 0080C664E7647B2D5AC8FF7623D5EDD95D52FED33BBFF8EBC5F35F29F69761A1 - 5FFB36F81FEBF02FDC75CAD2C09B6EECCFAD7319B5C4D16E0234847E679DD3A7 - EF691DAFBBEDE9AF74EB51748ABF0600000080B451BC75FDBA7B6FBBE4F71BD7 - 7F50E62FC342BF56ACF0AF1B005CF98F9304D974A4215F05ADE5C9106B0C12F4 - 0492DE615559FEE18199CF3FBCA077D1B0CC96852715E5E7E7877D3F00000000 - 4809F24EFF4B16CC7CE5D6AB273D515E56BCDB6FE92DFFB624E4BB1B0012F48F - 75F84F4BE9BA01A034780705701BF6834615D453D20BEC1F3A5477E89DD79F5C - 7BA8AE66F3C943CE1A9897932377070000000040CAA9DCB777EFDFFF74FB638F - FEEAAA77FC2C249FF12F61DF067DB7742340C3BF847B1D8F24FC5B41BDB4C006 - C0E1A3CB0DFD768C459F5032DAAFFB98D5CBDF2BFB60EECB0B878F9CD2ABB075 - 7BDE1700000000404AD9BE75D5DABB6EFCE4AFE7BEF38F4DFED20DFA5A12EE75 - 5340E65AF68ABF06FFA309FF692DDD3700ACB0501F14FE839E487ACCB2E7057D - 4D4465F987D5339F9FBEB0679F212D5A16762ECACF2F08FBBB00000000405228 - 2F2FAB5F34EFE557BE7FCD94BF94EFDC26B7FCBBA13FA834F4BBA3067F2D09FB - 92B1E20DFF41BDB4C306C047347087056F0DFD760C629F503A0FEAB9E42501F5 - B3DEF8DBFADADAFD9B060F9F30203B3B47DE3C100000000092CEFEFD7BF73CF9 - BB5B1FFBFDC3D7BEEB679D786EF79792B90DFD5AC722FCC3C706C0C7C5BB0910 - 4BD071E9B97DED35D49A1573CBE7CD7E71D1F01193BBB76ED3A183DF03000000 - 80A4B16DF3EA35B75F77EEC3F3E7BCB0D95FEA9BFBE92640D866806E02D80D00 - 37F84B49D8D7920C154FF8777B698B0D80C369F88F671340D92753D0932D6CB4 - E7DAB9B7AB6247F58CE71E5ED0A3F7A016AD5A773985970400000000487472CB - FFFBB39FFFE76DDF9BF2D7CA8A0FF7F8ADA0A02FA59B004157FD6594A06F3700 - 24E4EB5CB25353C23F0C3600C205856E7902B99B00BA0E628FC9E89608ECD7D7 - 1FAA7FF7CDA7D65757EFDD3074C0C401D9F9B9BC24000000004042DA5FBE67F7 - 5FFE78F3A37F7AE4FAF7FC2C6343BE5EFD8FE7CABF867E1BFEA5740340B2921B - FEED2680D590ADF07FD8000866C3BDA581DE0DFDB62FF4983D27682EA37BAEF6 - 22B56ED5BC8A39739F5D78EAF029DD5BB7EBC84B02000000002494AD9B56ADFA - C14D53A72F98F3D2167F29A13E28F0EBD57E9D6BE8D75183BF0DFF12EEDDF02F - A5D92956F8470036001A176B1340B8C72D394F9F7C766C6C2E745DBFBBB2F4C0 - 8C171E5ED8AA4D873D3DFA0C3A393B2B373B7206000000009C2055D57BAA66BE - F0DB7FFCF8E68B9ED955B1436EF90FBACA1FD4D30D000DFFB6DCF06F43BFCD4C - B1C2BFDB4354ACF08AD8215F7A191F4D1BE63ADA924D165B594E4998D7CA696C - DDAD47FF76DFBAF6D10B079D3A7E8CBF0600000080E3AAA2A2A2BE78EBB2B90F - DDF3B5178AB7AEAAF45B6EA86F6C1D16FA6D69E8774761E796F6828EC1C71D00 - 4D17B41960C9934DCE719F74EE933168D412416B6FCFEEB2EAD7663CB67CC78E - CD6BFB0F3CBD477E416161E4280000000034B3F29DC5C57FFACDF57FF8DDAFBE - FB969F4DF6FA2DBDAA2FE55EEDB76B1BFEED26800DFC76AE6573912D15364780 - C6C22C3EE23E4E762DF3A0D23B02649345EF04B07704E81D003297ABFB7A3780 - BD2B20EC8E003927272B2B27F78AAB1F9A3076CAC5E7B5CAE9C09B0402000000 - 6816072B2BABDF98F5D48C471EF8D63BB5B5351AEC35D44BC95AC37D58E09751 - 027E58F8D751827C53C3BF70D770484045FCECE3E5CEB584867F291BFEB57413 - C06E046869C00F0AFE81D5FB9453DB5F79EDF48BFA0F3C6384BF060000008063 - 66F5B2390B1FBAEFBF9EDBB46149B9BFD460AFE56E04D8B2E1DF96067F0DFD5A - BAD6A02F73A16B1BF0C3E688410228E2A7015FB96B213D7D02061DB7F43C1963 - CD63D6AE8A1DD5AFBEF8DBA5BB77EDDCD467C0E85E05F92D5BFA7D0000000038 - 62651525257F9AFE3F7F7AF8FE2BFEB5ABB224E873FDE54E0009F86E3F6C1340 - 02BE8C1AF6DD0D0029C9383A0A9B7D949DA3091A0BA808661F37F73194B52DBD - 1BC08EF68E007B2740BC770484564E5E41DE37AE993E69FCD8A953B30A4F921E - 00000000C4ADB6B6A4E6ED375E79E5E1FBFEFB8D9AEAAA6A69F965437D58D9B0 - 6F4B83BF1BFA752E81DE1D6D5976ED1E43232490A2E9DCC72D681D54BA096037 - 00EC268056D006809DCB4B02741D58FD078FED78C5771FBCB8A8FFC8A1FE1A00 - 0000001AB57EF582A5D37FFECD7FAC5EFE5EA9BFB4A15EAEECEB5CFBB667475B - 1AFADDF02F256B09F141A15FCB6A6C8D4648D8C4919330AFECDC254FCC58C785 - 7DF2EADC8E41FF28C2FEA11C2A2BDDBA7FE60B8F2C3A50BD7F6BEF9E43BAE6B7 - E2D3020000000004ABD851BCFD6F7FFEE193BFF8C95766F85962B7DFD25BF965 - 746FF50F9ACBA81514FE35F0CB68AB21C3F8256CAEB1ECDA3D863835164A119B - FBF885ADE52ABF90B5DE0560472DD990D1D1BD1340D772855FE67AB5DFDE0920 - 73F7EE007F9E9173C965D70F9D76D115533A9FD4BBA7DF0300000000AFB478D3 - E6192F4E7FED9927EE5EEA677009F212DC6D900FEAE95C02BDF6B4A4A76358F0 - 9700EF8E42E6C20DF88DAD112737B0E2C8D8C7D17D4C752DA35BF16E02D8B92D - 0DFD766E82BF3B66E49CFFE92B079C7FF177A6F4ECD5AFC8EF010000004843C5 - 5BD7AE7BE1E95FBCFAF23F1E5CEDE76E1BF2DDD1EDB9732D37F8C713FEDD123A - 2ABB768FA189247CE2E8B98F63D0E32A3D2DA1E15F4AE7BA09A01B003A066D00 - C85A03BE960DFC4EF83FFCF8E4F32E2FBAE8B3D74CE9D567C8007F0D00000020 - 0D6C5CB76CE5B3FF7BDFAB6FCC786CBDBF94202F013D28DCCB68E77A5CD7F275 - B6A7A15F03BF8E61C15FE642D7522EB717740E9A40C3288E2DFBB8BA8FB1AC6D - 49C81732EA5A4B83BF9D4B80B773B76CE0B7EBC00D817193FEBDE7C597DD38B9 - 63C73E43DBB56B277F3E000000801452515151BF73E7C6A5FF78E2C7AFBDFBC6 - 535BFC960DF46EC80F0AFB76ADA561DFCE25D4DBB99604770DFCBAB665D9B57B - 0C4789C0D73CDCC735681D56762340C3BF96067F7703C0CE6D05857EF758A446 - 9C7E7EB7CF7EE5FB93FB0FEE776A8B161DE4CF0200000090C4EAEBCB0EAD5AB1 - 66D1DF7E7FC7BF16CE7BB9D86FD9001F14ECC33601B434F0EBDC960DFCBA9600 - 1F14F86D598DAD71942468A2F9D8C7D77DAC65AD2564D4E02DA3AC25D86B5FE6 - EE28E15D463B6F08F5A624ECCBB1A08D80C38E0F1A36B1F317BE7AC7D903870E - 1E9D99D9497A0000000092485D5D69DDCAA5CBE73FFEE8F75F5FB1E4AD12BF25 - 815E427958B06FECB81CD3D1CE6DD8D75142BBCC6594B5D0BE9051CBB26BF718 - 8E110D9F681EEEE31BF4784B4F4B68F89792B9AE752E25C13C56D970AF6B0DFF - B20EDB0868A853FA8D68FFC5FFFAC9A41EC3CF18DD31B74DBEDF0300000090C0 - 761ED8B57FEBE239F3FFFC9B1BDE58B76661B9DFB2213EA834F8EB5C465D6BC9 - 3A5649B8D792E06EE7BA16BA9672B9BDA073700C68E844F3B28F73D0632E3D2D - 21A3067F2DBB01A025615E47B724C8EB1854722C6853E0B0AF292868937BE1A5 - 570D1D3BFE9251BD4FE9362023A3A31C0700000090000E1DDA59B77943F1CAD9 - 6F3DB3E085FF7D606955D52EF9CC7E37C0CBE8867D9D07951E93D12D09F43ABA - 6543BEAE85ED2B3B57413D1C431A38D1BCDCC739E871D79E8C4125415F479D4B - 18D7B5CC75AD7337D0DB79AC9ED6615FDBAD47FFD617FDC7F7468C18336D64E7 - 937AF7F47B000000004E80921D9BB62C9C3363C1734FFD6C41F1D6D57BFC9684 - 7237C00755D0B1A0AF95514A82BC9DEB5AC2BAAE752E6350091D859D5B617D1C - 23122271FCD9C7DDFD1DC85A4BC828A15E68F0B7A39684753B77CB067A1D1BC2 - BD33BA7DBB8ED469A3CEED72DE45DF183564C4D891AD0ABBB4F57B000000009A - D1DE3D1F562E5BF8DE8219CFFDFAFD45EFCFFCD06F693097D2006F43BCBB6EAC - 2FA35B36F4EB5C4B03BECC85F6841ED3B5B26BF7189A99864C1C5FEEE31EF47B - 909E969060AF6B990BED4928D7BECCED26809DDB101F34D7A01FB676CFCFCCC8 - C8CA9E72FEE5A77C62EA1746F51A346458AB9C0EB97E1F000000C031B0B7A6EC - C0E615CB96BCF9CAE3EFBFFAF2EFD61D3A54ABB7EF4BB9A15D83BD0DF5EEDA9E - 1B349710EFCE35D8CB5C465DDB929EB03D97DB0B3A07CD48C3254E8CA0C7DFED - C93AAC7403C08EB624A4EBE8CE6DA80F9ADBB1B17323F356ADDBE77DEA33570F - 1933F1D3A37AF6EED28F8F13040000009A4E3EBE6FD3FA0F57CF9FF5F705CF3E - 7DFFB2BDBBCBABFD765060B73D5DBBC7EC3961F3B0D0EF96067B3B0F2ACB5D8B - A01E8E03098D3871C21E7FB72F6B2D21A3866B19F598CE65B4A521DD5DDB8A2B - E4C73197CAE8D97B489B4F7EE6AAD3060C1ED3B7558FDE457C9200000000104E - DEC17FEFD64DEB572D9FBBF6C5A71F58B465D3B25D7E5B82B60673A9A0006F7B - EE3A6C6E4BC3BDBBD692B0EE8EC2CE65D4B2DCB50AEBA39969A04462B0BF0FF7 - 77A36B19DD1212EC75AD415FE69140EECC8346B7DC50AFEBB0BE5B0DDF372B2B - 276BCC5917773F7DDC85FD4EEE3BA26F7ECFCE7D3A6777CEF18F0100000069A9 - E46049CDFE2D251B37AC5DB876DEBB2FAC993BEB1FDB6A6B6B6C489780AD735B - 61813FAC1F54FABD65D4B98472772EA5730DED762EA39D5B76ED1EC309A2E111 - 89C1FD7D04FD7EA4A7257494C0ADA3F4DC51C2B8AE35A0DB7924AC375261613F - ACECF76DF8F372720A72CE9AF4EF3D4F3DFDBC7EFD069E5A5490DBA177DB4E9D - E57B0300000029A9B2B4A4765F75D9A6B5AB3E58FFC1BC196B66BDF1D4969A9A - AA1AFF901BC8ED18AB6205FCB0B2DFDFCE25A0CB5C465DDB51E8283D2DA1A3E5 - F682CEC109A0E11189C9FE7EDCDF95ACB5845DDB92D0ED8E0D613C60ED06F7A0 - 7553CAFDBEBAD6B1454141EBDC09533EDF67F8A8697D4FE937E4944E27B5EF91 - 91D1518E0100000049493E9FBFB4B872CBBAF54BD62F7EFF9F6BDF7EF52F1BAB - AA76CB67F44B180E0BE35AEE3ADE8AF57DF4CFD19E5DCBDFC91D834AB86B65D7 - EE3124080984485CEEEF27E8F7253D2D61D76E49E8D631ACC282BAAD787B5AF6 - 7BD9B98CF2F7396CDDBA6DE7FC4993BF78F29091E79CD2B57B9FAE6DDB75EA74 - B036B35DFBF61DE45C00000020A1949797D56767D555545694966EDFB671FBB2 - 05FF5AF7C66B7FDEB0BBB264BF7F58C2B00DE3EE5A469D6BB9EBB05E505FD732 - BAF3A092BF8F8E6125DCB5E5F682CE410220502587A0DF93DB93B596B06BB724 - 6CEBE8CE6DD9606E479DDB72CF0B3BE69E277F76D0FAB0BF534141EB9CC1C3C7 - 772CEA3BBA73F75E033A77EED6BB63FBD6DD3B65746ED7913718040000C0F120 - 6FD477A8A46267F9EE6DA525C59B766EDBBCAA64FDDAF925CB17BFB3B3AA6AB7 - DCCEEF066B09DF3A4A2F68ADE7DB9EADC68EB9C7EDE896FCD9EE5CC6B012EE5A - B96B11D44302919085C417F67B0AEA4B4F4BB86B09D4BAD6B91D756E43B80674 - 2D1BD8DDD19EAB6B7BDC1ED3B9EDB97FB65BDA6F18BBF71CD06AE0B0F19DFB14 - 0DEFD4B56BDF4E6DBA74EFD4A97DB78E85AD5BB4E7A504000000680AB9757FCF - EEFAF2D2F2E29DBB3EDC56BA7DFBDAD28DEB1797AE5CF24EC9B62DABF6FAA748 - C87503B4866A5BD29720AEA37BDCF66C70D7B2C7ECF1A0514BD7F6CFD6633AB7 - A3CE85AEA584BBB6827A22AC8F0421210AC927E8F7E6F664AD25DCB586685B1A - B26DC0D6B906763BD7B26B9DBBBD585F637BFAFDDDBF8F94FB77D251E7A2A197 - 9593973968F099EDDB76EC5A50D0B25D5ECB966D735B15B6C9CDCD6B9557D0B2 - 30372FAF656E8E5F79397939D93979B939B905FEB19CDCCC1CE965E764D716E4 - 666757E5641676CE8E7C6700000024B4BA3D25070F1E2CA839985575A0BAE660 - 4D5DCDBE03FEE440EDC10335D535FBFD79953FD977A0DAAFAA7D7BFCF5DEEABD - 7B761DD8B7AFD25F575457EEDC5EB562F9ECF2DA9A6A0DCF521A90DDD0ACA33B - B73DFD3E6E5097B23D99BBE7E8DA3D4FE7BAD63FDBCEA5DCBF93AC6D494FD89E - 70D7CA5D8BA01E12980425249FB0DF5B503F1286A32574D4C02C6B373C878D61 - C1DCF6DD601F6BAD73FDDE761EF4E7D89ECE65D4B9B0BDA012EE5AB8C71B6465 - E564E415B4CAF4FF137958DFE7AE010000707C7D144033BCFAEAEAAA3A3FB86B - A8551A5065B46155D7EEF1A0D2EF6943B4CE6574E7B61716D06D90B7F3586BFD - 7EF698EDEBF70E1B85AE85F6742DA3962BA827C2FA48500498D4607F8F61BF53 - E96B29DB73CB0DD26EE8B6213D6C6E4B03BE2DFB7DC28E07ADC346A1EBB012EE - 5AB8C783B8FDB0F3000000D0BCDCE0D9584095D19EA36BF77850B9E139D6A8E5 - AEA534A4DBB0EE1E777B7A7ED85CBF8F1DB5DCB55B2AA867B9E7228911605243 - 5382A91CD3526E2F2C4407856E1D75EE6E00B8BDA61C778F35360A5DDB127A5C - D7EE7161D7B6AFDC5ED039000000687E6E100D0AA66E70D5B5CEED5A486016F6 - B894F6DDA01D36BAC13C2CB437E5B8DB0B1BDD92BEB03D15D473B9C7629D8B24 - 4080494D4D09AF32BAF3A0B52D1BB26D00D731A8276350F8D779D0DAF68246B7 - 27EC312DA1C775ED1E1741EB20617D57BCE7010000E070F106CDB0F36C5FE641 - 6BEDE9181496A5B41F14B6DD9E1D6DB93DBB96B90DF9EEB1B0D19DBB25C2D642 - 47E5AE45500F498C80929A9A125CB527A39DEB68E7364407056E9D1FCD18CF39 - 3286F5824AE839CA3D2E74EE8EAEB0BE2BDEF300000070B8788367D879DA7747 - 21732D257309D3C21E772B56088F35C6734E3CA3CE85F6849DEB792256CF0AEA - 89B03E921401253D04FD9EDD9E5D4B5856DA97D1CEF51C1BAC6D10778F6BAF29 - A3965DC73A164FA9B05ED018A6B1E3000000685E8D0557771432D752B6D758D9 - 30EEAEC38EC53BEA5C04F5828E0B3D4FE828F45C61FBC25D8BA01E520801263D - 84FD9E1BEBCB68CF71FBB6848C12C8859DBB015EC4EAB9C7746E7BC23D4FD8F3 - 6C093B06F5ECA8DCB58AF73C0000001C1B61E1B4B160ABEBA031ACE796080AE4 - B6678FB9F3A0F3E3E9093BD7F36C091D4558DF6A6A1F2982D0929E827EEF8DF5 - 641EB4767B8D05F158154FD81741E7D91232DABF8B8E761E34AAC6FA00000048 - 0C6E680D0BBF6EDF8E6EAFB1D0ADA581DDCEF56BDDF3DC5E3C25ECDF45B8C745 - D0DA156F0F298C30939EC27EEFB19E0FF698CCDDB58EEEDCAE6D20B7C71A0BF4 - B684DD0C9031ECFBBA6B11D41341E7C4AB29E7020000E0C83525B0CAB9F67CF7 - 6BF5B87B8EEDB96B1BC665D4D06FCF8B5541E70BF7FBDA63EE5CD9BEB07357D8 - B1585F831444708115F47C88D57347617BEEF17883BA8CC7E25C11D413BA8E75 - 4CB8C744500F000000C75F50806D2C144B4FCB0AEABBBD7882BAAE9B7AAE708F - 0B1D85DBB3C754BC3DA421820CACB0E743ACE7893D2673771D366A091D35C88B - A07362AD85DBB3A3CE55D039AEA09E08EB030000E0F80A0BB68DF56574CFB13D - F73C5D0BB7D7D85A84057CBB0E1A853D4FD8B92BEC58ACAF411A21C8201EF186 - 63DB93B97B8EEDB9E78A581B00C2AEED18D4D351E72AECDC20615F0B000080C4 - E206DC7842B23B2A59879D13764CE742D7B6E76E00089DBBE70AB7E71E17F1F6 - 8006041AC423EC79D2D4F01CD40B1A859EEFF6628D42E6EE3A687405F5DD5ED8 - D7020000E0C472836F53C2B1F6DD51C8DC5DC71A85CCB5947B9E3D26DCF385BB - B6C28EC5FA1A804083A3124F6856B6AFF3585F1F74CE911E13416BB7D798A69E - 0F000080E3A3A9C157CE77BF266CED8EE2488FA9585FE78AF5F5409310687034 - C29E3FF13CAF82CED19E7BCCEDC7F3B541E7A8B073627D0D00000092971B9875 - 1D2B48BBE7049DDBD839F17C6D2C61E7C4F3B5C0C71078D01C829E57F13CD7C2 - 0279ACAF75CF89E75C15766EACEF01000080E4116F808E15A8F5983B06093B27 - D6D7A8A073E2F93A206E041D3487C69E574D79DE059DEBF6C2BE5F3CE7857D2D - 00000052533C413B2C78C7735ED8D70669ECDCA67C2FA051841F9C08B19E77F1 - 3C27C3CE696A3F9623F91A000000248E2309CF615FD3D4BE15EB9C23F93B0247 - 8C90831321DEE7DDD13C3F9BF2B5C7FADF01FFAE0000008E8D631D909BF2FD8E - E6CF8EF76BD900C071455041228BF5FC6C8EE72EFF1E00000052537304ED58DF - 93608F8494191D81447434819C300F000080A3418847CA610300381C1B070000 - 00A9E548833C1B004839841DA4329EDF0000003812847F000000000000000000 + C52549444154785EECDD077C6545F9F0F1C9A6275BB29B6CEF8DED25D9965D9A + 54A90A2A082AA0622F282A2A28FA8AA262C5F2B7810511BB028274419022B23D + D9DE7BCBD66C7A7BCF7377264C4EEE4D6E927B6F4EF97DFDCC67E6997BB3B9E7 + 242BFB3CE79C99340504534F7FB7F9BB010000E06F2DBAEFAE9E7E3DE0392439 + F083EEFC9EF2BB0D0000809EE84E0180A2013C8D24095E17EB773499BFBBFCBD + 00000008866426E4B1FE6C8A00F02C121DF486AEFCDE75F777B43B5FC7DF0700 + 0080604AE5D5FCAE7C1DC502A414090F7A4347BF77F1FC4EC67A4F57E7BB2211 + 7F06000000922711C974AC3FA3ABF3B68EDE9388CF0CC48DA406C9D0D9EF5557 + 7EEFA2BDD73D17EBCF8BF77DA2A3D7000000E07F5D49C463BD379EF775F47DDC + 3A7B6F57FE2CA053243D4886EE26DAEED7EC38D6D799F9AEBCD72DD6BCD1D9EB + 000000F086EE26D4F1CC9B7157DE6BC4FA1AD1DDD7802E23B1414F7437A116D1 + DE63E6DCAFD9B18C3BFA5A116B6CB8E7A2BD47C49A07000080B7C54A9CE349CC + EDB9586343E63A7A8F89637D6D6762BD279EAF05DA21C1414FC4935CDBCC6BF6 + 7BDCEF77BF27DA7BA3BD263AFA1A239EF7C4ABBB5F070000809EE96E026C7F9D + 19BBFFACAEBC27DAEB1DBD263A7A6F34D15EEBE8FD404C24308847ACDF938E7E + 7FA2BD2673F6BC7B1CEDB568F3F66B36F39A7B5EB8BF26DA7B0CF76B1DBD5774 + F63A00000012A3B3C4D7FD7A3C89B5BBB7C99C6936FB6BECD7EC38D6BCE8E835 + 23DA9C11EBB58EBE062071415CA2FD9E743667C6EEF7496C9A2DDA7C4FE7A2F5 + C23DB6E3687AFA3A00000012A3B304379ED7EDF7441BBB7B2163D38C9ECC898E + E6ED5EB8DF23E29D035A91B8C016EBF7A1A3DF13FB3519BBDF6B62FB35F7D8F4 + F6BCB0E7EC26DC6377DFD19C8836B6E7A2E9ECF558BAFB7500000061D3DD04B6 + B3AF33AFDBEF738FDDEF8935677AF7D8DD0CF79CDDC71ADBECD784FB755BACD7 + 3AFA1A840889096CD17E1F3A9B93B13B367DB4F7D9F3D1C6EE26A4EF736A18F5 + B5CE62D39BB188F6BA5BBC739DE9CED700000084517712D5685FD3D19CBB1732 + 8EF6BA7BBEA3B8D969D15EB39B8836B6E7841DC79A17F6D888770E214462126E + EE9F7F47BF0FF66B3276C7A6778FA3C5761392DC9BB1F476B21F6B1CAD89CE62 + E17EDDE67E9FE17E1F000000BC255662EC4E7E4D2CBDFB7DF65C47B1DD849DFC + C71A4B2FB19071B42662C5C2F4C29E17F6D8CDFD5A47EF458091D4845B3C09AE + 99973EDAFBED7933763721BD49E04DC2EF6ED1927DFBBDD15E37AF456BC27E9F + E9CD58D8F3766F743506000040727596CCC68ADDBD90B17BBEB3245D9A8896E8 + 4B335F1FEB75BB457BAFFB3DA609F7D888356F73BF1F2144F2120EB17ECE1DFD + FCE535D30C33B6E7A58F2719B71379F79CF97AFB3DB1E6CCD89E13E63561CFDB + EF15766FC622DAEBD1C49A07000040EFE82CE175F742C6D15EB7E7DD49B93B59 + B79B3D17ED7DEE39FB35FB3DEE39BB09F31E61CF9B5E98797BCE2DD66B1D7D0D + 028064261CA2FD9C3B9A93DE7EDDC4F6EB76821D6D6C12723317AD8FE7757B4E + C47A8F708FD3468D9B91376EC2CCFE03070ECFEB3BA028BF6FFEC0BCBCBEFDF3 + 72F3FAE565E7E4E66567E5E7656565E56666E5E665387D7A66565E56664E6E1F + D5272F3D2B3B2F333D33B74F86CA6D486BCA38F5C7020000C08B325BD21B9B1B + 554D4353434D537D5D75B36AAEAE6FA8AD696AA8AF6EACAFAF69A8AFA9AE77FA + BAFAAAEABADA9AEA9AEACAEAEA9327AA4F561DAD3E79BCA2EAE8D17DD5DBB796 + 9FD8BD7D4DB5F3C7D909B49D74DB49BA194B2FEC38DA7BDCAF75F6BA8C859913 + F6EBA609772CDCAFBBC53B8700912409C113EBE71A6DDECC4512E653C308336E + 93505BCD9D74BB5F8BA74F77C5DDE9557EFE80CC2567BF6DF8E4198BC70C1F31 + 6974C1A0A1A3F3FA158EEE9BDF6F745656CE40790F000000108FFAFADAA327AB + 2A7755571EDE75ECC8815DFBF66EDEB569CD2B3B5F7EFEAFFBAAAA8E37E8B7B9 + 13F678FB26571C6F6F9A3B763721EF112616F6EBF6BC116D4EC49A874F491285 + E089F67375CF9958FA586361926D776B9384EB5EE28E927ABBD973F6FBA27D7D + 643C7DD65905F3165D3C76F4B869630A078F19DDBFA0687476FE80D14DD5B5C3 + 0B060FE10A3D00000092E6D8A1838DE97939FBEAAA8EEF3A71AC62D7E1433B77 + EDDABE6EE7B2571FDFB1B6EC8563CE5B245996E4DB9DBCDB49BFFB353317EB35 + E9EDAF17EED7DDCDBC4FC6A68F35B6B963116D0E3E260916FC2FD6CF31DABCCC + 9966B8E7ECD824E2F6587A61623B69B7DF6337F33E7B1CED7D7DD2D3B3D3DF74 + F52727952CBCA87850D18889F97905A3F3FBF71D959191D7DF791D000000F094 + C6C6EA1355274EEEAEAA3EB6ABA262EFE695FF7B62E53FFE7CF7E6A6A63A49DE + 25218FD524C196DE5D2470BF6EC6D1EE201026B65F334DB863116DCE88362762 + CDC327240183FF45FB39BAE72436CDB0E7623593B0BBFB6849BF3BC1778FA3B6 + 74C7F9977D70DCA22557148F1E37B5B86050E11C927D000000F89914050E1F3E + B86AEF8E4D2B5E7DF9A115CF3CFAF3ED4D0EE72549D063353BC18F359626E368 + C500BBEFAC19D1E6843B16D1E6E023929CC17F62FDDCA2CDCB9C69C2F4927C0B + 89DDE358BD19C79BE8C78CCFB9F0BA91A5675F3D6FCCB8E9C5F94523E6F4CBCA + 19E4CC030000008154595F7BA4EAD0DE95BB77AE5BF1F2BFFFB4FCB9A7EEDFE3 + 4C9B84DE5D1888164BF2DDD1589A1947EB857B2C4C2CBD696ED1E644AC797894 + 246DF09F683F37F79CC4A68968B124E3F6BC89ED3E5AEB2CE9B7E722E385675C + 39F4EC0BDF55326EFCCCE2C28251C5D97DF38638F30000004028D5D5541F387C + 78F7CAEDDBCA573CFFD4EF96FFEFC5070F38D39294DBC9BF8CEDD87E5D926FF7 + 6B7693D7DDBD692616F6BC70C7863B16D1E6E06192C0C1FB62FD9CA2CDCB9C69 + C2F4928C9BDEBC6EE6244937B1E9ED162DC977C7662ED20F1E3E2EEF5DEFBD73 + C9B84925F38A860C2FCECB1B30D29907000000104575F5F13D1507F7ADD8BE79 + F9B2DFFDEA0B2F1FDAB75DB6239444DD24F91D150362C5D2244937BDBC2E4C6C + 5E13A63749BD79DDC4B6687322D63C3CC22487F0B6683F27F79CC4A609772CC9 + B989CDD8EE63353BB937B17B3ED2A7A767675EFFC16FCC9D5F7AE91B0B860F3F + 332FA35F9E330F000000A00BAA1B2BAB8FEDDDF7C2D257FFF9D46F7F7EEBCAA6 + A63AD97E501274BB08608F4D8B36E76E92A4BB7B3316269626DCB1E18E45B439 + 7888490EE14DEE9F4FB49F97CC99264C2F89B9E9CDEB662CBD199B24DE1E9BDE + 8C4DB35F6B9DBFE0F20F8D7BE325EFBD70D4A819E7736B3F00000090387527AB + 0FEEDEBDE699271FFBD5534F3FF2B3EDCE9449F2ED64DFEECDD83D2FC9B97B2C + CD8CA53763617A9933BD696EEEB968EF810748D207EFB27F3EEE9F9589A57737 + 2149BA89CD58FA58ADA324DF1E47DACC396715BEE59D5F3877C294F9170CE83F + 688A330700000020898E9F38B261DBC6A54FFDF9775F7F76DDAAE78F385326E1 + 374D9276F7D83D17AB49D26E7A331626B69B30BD61C7EED7E01126598437B87F + 1ED17E3E664E7A7B2C49BA90DEBC66C6D2DBCD24F576EC6EEDE6070D1A9E7BFD + 87BE7DFAF459675E50343477615ADA6099070000009042C72A0E353634D6BCB6 + 66F50B4FDDFFF3CFBE74E4C8BE5A67DA24F976B2EF9E33F3A6B9636992BC9BDE + 8C859913E635617A9B7B2EDA7BD00B4C02096FB07F1EEE9F8D89A5778F4D93A4 + DDDDDBCD24F6F6B835C18FDA323232AE7BF757672F3CF38A370E2B1C7D76467E + 7E5F671E00000080073456559DDC7B68D7BF97BEF4D053F7FFE6F6D5AAB1B1D1 + 997627FDEE26C9BCE9DD63D3246977F77613EEB1CD8EDDAFA197489288DEE7FE + 39448B4D13762C4D1279776F3749E6DDE3B689BE5219F678EC8499FDDEFF89FF + BB62E2F8D997E5F42B18EECC01000000F0B0DACA63FBB66C5BFDE83D3FF8E843 + 3BB696573A537631205A6140127BD3BBC7A649F2EEEEED26DCB1D1598C149364 + 11BDCFFE39B87F2612476B421279199BE4DEDD2499778F5B93FC28E38CD3A62D + 19F8BE8F7DFFADE3C7CEB892ABFD00000080FFC85D019B77AC7EF0D73FFECCDF + 36AE7BF9A84C394D92FB58050149EC4DEF1EBB9B24F1D20B93F4BB9BCD8EDDAF + 21C54C2289D4729FF7683F0799334D482F09BC90DEC4D24BF26E6219C7EADD49 + 7F6B3C77E14543AE7FDF37AE1E3366FC65E9D903729D39000000003ED65477BC + 66FBF6AD8F3C70EFE7FFBC62E95387644A3749FEA3150324B18FD54BF22E63E9 + 4D2CBD30B190DE3437F75CB4F720894C7289D4B2CFBBFB676062E9A33593F44B + EF6E76B26F7AD35AAFF2DBE3C5675F35E29A1B6EBF66D4D8A117F5E93324CB99 + 030000001020CDCD07EB77EF38F0C41FEFFBEA1F5F79FE2F7B9D2993F0DB8500 + BB2020CD4EFE4DEF6E92C09B3E5A13A637ECD8FD1A924C1249245FACF36CCF9B + B1F4F65812F958BD6992CC9B3E5A33497F6BE27FDEA5EF1BFB96B7DFF28EE1A3 + 069ECF6AFE00000040F0C9EE0155278FFCEBC13FDFF5FB7F3DFEEB1DCE94BB10 + E02E02D84D127DD3472B00B87B21BD3D36ECB12DD63C12C4249A48AE68E7D99E + 93B169C28EED845F7A49D64D6C12FC8E9A9DFC675CFEB69B275D7AE5C7DE959E + D5EFECA2A2C1F2E70000000008918A8A432D4DF595CFFFF3C11FFFEE91BF7E7F + B3336517003A2A02D8CD24FA3296DE5D00304DB863618F8D6873482012C0E472 + 9FDF68E75BE64C1326D1976627FF7601405AB40280B9C26FC6A6A55F7DDD9767 + 9E7FC97BDF3578D898C54E0C00000000AAE2E0AE979FFCE7BDBFFBEB6FEF58E3 + 8492CC472B04442B0A48A26FC692B84B1CAD0820636162696EEEB968EF410298 + A413C9619F5FF7B936B1F4EEE64EFCED6627FC76B2EFEE23EDAAEB6E9F7ED19B + 3FF2BE4185C3E6393100000000B473E4F0FE658F3FF8E37BFEFAC09DEB9CD05D + 0470F7EE66927FBB49126F7A7713A637ECD8FD1A1244924C249EFBBC468B4D13 + D24B72EFEEED6627FC766B4DF6AD3873E2B485033FF1D95FDF98D76FE8658585 + 85E6FB000000004054870F1F6EA93A71E0911FDE75C32FB76C587ACC996A709A + 9DFC9BE62E0098D65111C0F4427AD36C9DC5E82112C3E4B0CFABFB1C4B1CAD45 + 4BFC25A177F776B26FC791969E9E9EF5E92FFDF9A2F9C5177F20B35FEE00670E + 00000000E2565B5B7B6CC5FF1EBBE7BB775CFD44535353BD336527FF7601C08E + 25C177F7A649226FFA68CD66C7EED7D04392702271CCF98C765E65CE3421BD24 + F5EEDE6E26C9B75B9B84DF6A9997BDED9393DEFACEDB3E51503078A613030000 + 0040B71D3B7AB0FC6FBFFFC60F1EFDEBDDB250A0B91B205A330501BBD9050077 + 11C0F4427AD3DCECF720014C328AC490F319ED9C9AF9682D5AD21F2DF99724DF + F4997A2C7DC6E8F13306DC7CDBEF6E183771E495696983E56B01000000A0C75A + 5A0E356DD9BCFBA1EF7FED1DBFD9BB73FD09674A127E29064892EF7E44C02E00 + 489344DFF476B3937E77738B358F6E900414DDE73E7FD1CEA749F2853D965E62 + 49E4656C9A49F84DB3AFF24B1C49FAA5C9EDFE1FFFDC6FCF5974FA951FCEC9CB + 2D74E60000000020E16AAB6B0EBFFAD2833FFDD15DD73FE77A2CC014034C1CAB + 10609AC492D0CB58988280B0C736F71C05816E8A96B0227EF6F9739F4B13BB13 + 7E69666C127EBB3789BEDDDB2D5200B8E092F78DBFFADD5FFD78D1E061254E0C + 0000000049577168DFF23FDE77FB0FFFF5CF5F6E77425300B0937FD324D137BD + 49FCEDDE1401A4376361FA8E927EF76B88933B69457CDCE72D5A6C9AB0137ED3 + 9B2649BEBB454BFA653EB368D8D8BE9FFDD29FAF1B5C34EEAA82C143E4350000 + 0000489963870E361E3CB8F5CFDFFEDA35BFABD8BFE3A433E57E24C05D087037 + 49F24D33C9BF5D0490B169B6CE6274C224A8E81AFBBCB9CFA1C4D19A24F0D277 + 94FC9B845FC6E656FFD6FE23B7DC7BC699E75CF3B19CDCFCA14E0C00000000BD + A6B6A6EAC07F9EFBE38F7FF2EDF7BDE88426F9B77B49F6631502DC4500993349 + BFBBD9ECD8FD1A3A210929E2E73E5F762C63D384F492E49BDE8C25B97727FF26 + E93705003BF1CF1A39666ABF2F7CFD1F370F1F39F93C270600000000CFD8B767 + D3BFEEBCED4DDFDFB3737DA5139AF501DC77034882EF2E0448F26F127FBB1860 + 7A21BD69863D16EE183148D289F899E45EB8C7A6093BE137633BE97727FAA645 + 127E3DCE96F1E5577D72EACD9F7FE0DB83068F98EBC400000000E029FDFA174E + 78C379D79F55D750B366D3BA578F3B5392FB083B3FB2F3257B1C8D795D12FB68 + EFEBE86BD1014E5C7CDCE7C98E651CAD995F7249F8DD0580588580D63E3D3D3D + FBB3773C78D9FCD2451FE9D36788140500000000C0B39A9B0FD62F7BE5BFFF77 + D797DFF2CFA6A6A63A67CABE1320DA1D01EEBB01DC7704481FAD19F658B863B8 + 48828ACED9E7C93D8ED64CC26F927E77F22F89BEE9EDC43F321E3D7A7AC1E7BF + F98F9B478C98F806270600000000DFD8BF6BCB735FFFC29BEEDEB56BED312734 + C9BFBB102089BEBB10600A00A618D0D522803D46149284223693D01BEEB1DDDC + 09BF9DF44B826F9A49F44D93ABFBADB7FDBFE9AA4F4FFBE4177F7BD7A041C367 + 3B3100000000F84ADF0183C69FFDC6779DD5545FB776C3DAFFCA230142F2233B + 7F32A2CD19662EDA6B86FD5AAC3F071A05808EB97F994CEF6EE697D99DF8DBCD + 9DFC9BA43F5200905BFE6FBDF3E12B2EBEE0EDB767F52D2C70E600000000C097 + 323373FACF9E56FCC6C933CF3EF9F2F37FDED2D212B9386FF227C3E451D1B8E7 + A3BDCFCCC5FA33E0C2898AAEA35F2499935F5461C6E617D78CA325FFEE2689BF + F499E3C6CD1AF8D9AF3FF8A9E1C3279EE5C4000000001018FBF66E79E15B5FB8 + F27BDBB7971D7542F338807914205AB31F09B01F05B0C7C21EDBCC5CB4D7424D + 9253B427C9BC3BF9377326F937C9BE34998F95F4CB557ED3B7BBF27FC5B59F9D + 7ED3677FF5AD818523663A3100000000044ABF7E83C69E7DDEB56737A99675EB + CB5F922280C9B5A2F5B1E62499B7E7DCB1CD1D43E3C4B4D5D12F9069427A77F2 + 2F637701C0F4EE2240A6DCF27FDB9D8F5C3961C2BC0F160C1E22AF0100000040 + 6035571E6C58BE66D9CFBFF9C5CB1FD2BB04B8EF0630BD5CFDB7EF0430770348 + 2F89BFFB4E00E94DB3D9AFC361125A9C6227F9869933F326E9775FF93705003B + F137AD35F1775AD6E8F1B3077CE16B0FDF3274C4B8339D180000000042E3C0DE + EDFFB9F38B6FFEF6AE6DAB6581C07AA7B90B01A6D985005300B08B00A6173236 + CD166D2EB4245145FB24DF70CFDBC9BF49F84D33C9BE19B726FC769B3DFFC2E1 + 5FFAE6C3DF195434628E130300000040A8F4ED5730F6F4375CBD68EBE695FF3B + B0774B8D33E5CEBB4C2FECF968E43549F063BDC7CC77F467840627E114390FEE + 7361E6CCBC7DC55F7A7701C024FEA6B5B9EA2FFD7917BD7BEC7B6EFAFE37F373 + 0B8639317CA2BAEAA43AB877AFD357A99A9A6A555BEDF4D54EEF8CA5B7C7B5AE + 585A43BD1435010000D0913E7DD254764EAECAC9CB53B9B979A77ADD729C38D2 + 47C6B9CEEBF9ADAFCB6BFD070C5043468C501919F24F6FF84555CDB1FDF77EFF + A6CFFFFBE9FB7738A15CFDEFEC6E00BB993B00EC3B0284B9E22FCD166D2E744C + 721B56E6F8DDE74162D344BCC9BFFC3F8E3BF9979675E5359F9B7EC53BBE7C67 + FF7EB9039C181ED3DCDCAC0EEDDFA7F6EEDCA1F6EEDA1969FB9CB6C7898F1F3D + A2DF05000000AFEAD3A78F1A327C841A3E7A8C1A39666CA41FA15BFF82812A2D + CDFCD31E5E72A2B2E6F8DFFFF0E5DB1EFEC3B7D739A1BB00608A00A64F4411C0 + EE4327EC7F0BCCF1DBE741C6A689CE927FFBAABF49FE2357FCCDF8DD1FFAEE82 + CBAEB8F1CBE9D903729D18BDA8AAB2D24AF0773809FEA97EFF9E3DAAB151FE7F + 05000000419397DF375208682D0A8C191BE9878D1CA532B3E49FEEE84D4D75C7 + 6BFEF1D03D5FF9EDCF6E79CD09ED228019DB7702B80B015D290298B13D172A26 + C90D1BF7719BD8F492E49B5EE64CF22FBD5D007027FED29BE43FF2CCFF276EBB + EFDCB9732FFA2C2BFDF70EB97ABF76E50A55BE62995AE3B4FD7B76EB57000000 + 107669697DD4C42953D58CE2796A66C93C75DACC592A3B3B47BF8A543A76E860 + E38A154FDEF5C36F5CFF9C134AE26F927FE925E9771702EC028049FEDD4500BB + 1860F746E80A01EE44382CECE33663D3C793FC4B322FBD24FAA6372D92F84BFB + C237FE79E5F8C98B3E5C5858687F3F2451D5C9936ADDAAD713FE5DDBB6EA5700 + 0000808EA56764A8D3A6CF6C2D084C9A369D750552E8F0E1C32DDB37BEF293AF + DD76F9834E681700A4374D927CD39B4240778B00140002CE7DBC762CE378937F + BBC9FF23983E92F8CB1EFF5FBBFB3FEF993A73F1B54E8C24AAABAD51EBCB5647 + 927D49FAB76DDCA85A5ACCDF71000000A0FBB2B2B3D59499B323C500290A8C9F + 3C4539FFD6D7AF2259D6AD79E9F7B77FE2ECDF343535D539A17D3740B43B01E2 + 2D027494F887A610E04E8883CE9DF0DB7D77937FBB39FF1F91977BD74F5FFDC4 + D8F1332F766224C1CEAD9BD5AB2FFC3B92F46F5AB7563535CADF7900000020B9 + 72F3F2D5F43973D5CC92F9AAF40DE7AA818545FA1524DA8E6DE58F7FEEC38B7E + 5057572DDB04BAEF02E86E11409864DF4EFA2900048CFB38ED58C60949FE0B8A + 46F6FBC6DDFFB96DD8C8F14B9C180974ECC861F5D2BF9E562F3CF5B8DAB165B3 + 9E050000007A87AC1F306BDE7C75D68517AB05679C19D9C210897570DFB6973E + 77D399DF3856B1A7D209135504E828F10F7C21C09D1807953BE13764EC4EFEA5 + 374D12FFCE92FFC86DFF6327CE19F8FFEE7AEC8E82C211B39C1809505F57A796 + BEF49F48D2BFEAB5FF716B3F0000003C292737572D3AFB9C483140EE1090E200 + 12E3D8E1BD65FFEF73977C69C79655479DD07E1CA0A32280290498166F118002 + 80CFB98F2F56F2EF4EFCA5C59DFCCF29397FE867FEDF1FBED9B75FD17827460F + 48922FCFF44BD2FFDF7F3FA76AAAABF42B00000080F7150E19A2CEBCE0227596 + D3468C19AB67D113278E1FDEFABD3BAEB975D5F2670E3861778B0076E2DF5111 + 4004B61010A602807B6C9A24FB766F127FBB0020C97ED4E47FEC843983BE76F7 + 33DF25F9EF99FDBB77A9179E7E52FDE7E927D4A1FDFBF42C000000E05F13A74C + 5367BDF162B5E49CF355BF0103F42CBAE36465C5B62FDE7CFEA73AB913C0F4A6 + 00609A24F426E937BD6946AC71A048C21B44EEE3B26319DBCD5CF197719792FF + 82A211FDBEFF93E5DF28183C74A613A38B64F1BE17FFF5B4FAD7230FA98D6BCB + F52C000000102CB2734071E91275D1956F8BEC26909626A907BA4A1E07B8F943 + 0B6E3B56B1D7AC09601701641CED2E007711C05D00B0937D7B2CDCB1EF05F537 + CF3E2EF7D86EF6D57F77F22FCD24FF92F0B749FEB3B3F372EEFE65F99758F0AF + EB1AEAEBD5BF9FF8A77AF80FBF531507F6EB5900000020F8264D9BAEDEF2AE77 + 470A021402BA6EFF9E6D2F7FF2C69977D4D555D73AA12902D88500732780BB00 + 202DD65D0076A21F6B1C0841FD8D33C7E53E3E93F09B66AEFE4BB26F7A49F8ED + E4DF4EFC237D7A7A7ACEF77FB1FAE6D113A65FE4C48893ECD9FFCC230FAB47FE + FC7B75ECF0613D0B00000084CFD88993D415EFBC412D3AEB0DAA4F1F4945102F + D922F0D3EF9F7B775353935D043005007711C0DC0D2049BFE9DD0500896D26F1 + A700E01326C1B79984DFBC26CD4EFC4D93A4DF7DCBBF290048CBFEC68F5E7ECF + D4998BAF75C6884375D549F5E4837F538FFDF54FAAF2C4713D0B00000060C4E8 + 31EA8A775EAF4E3FF702959E216908E2B16ECD4BBFBFED6367FCC619D6392D5A + 11C01402DC8F039842809DF89B82804D620A001E678EC77D5C26E197668A0026 + F937050093F8CB385AE21F49FE6FFBFAA3572E587CE9879D313A5179FCB87AEC + 6F7F8A24FF52040000000010DDE061C3D59BAF7D973AFBA24B5566A6A421E8CC + D2971FFDC99D5FB8FC2167681701DC850049F6ED428024FBEE228049F6DD09BF + 89DDF3BE25C96E9098C4DFF4C224FED24CF26F27FEA6D957FEA5B713FF48FBF8 + E77F73DEB459E77E322F2FCFFEF3E122B7F7FFE5BE5FAA1FDFF91555BE62996A + 6890BF830000000062A93E79522DFFEFCBEADF8F3F1A792460CC84892A238342 + 4047B2F30AE78F193F6DCFFF5E7A78A79EB249D22E795BB4E43D30097D5705A5 + 0060127CC38CCDBC6926F197B19DF84B6F127FE9A5D9C97FF6F51FFCF68225A7 + BFED0B838A0607E59C25DCB12387D5EF7FF153F5936F7E35B2977F539314D900 + 000000C4ABB6A65AAD7AED55F5AF471F562D2DCD91AD04651701B4271766070D + 18B178C0A0A11B572D7BFA8033D551626F5E73F7921B76C6E493BE1794DF24FB + 8761C6E687649A7DF55F8EDB3473E5DF5CF56F570078F3D59F997EF5959FFC5A + 5E61A1C470696E6E564F3DFC77F5BD2FDDE624FEAB223100000080EEABAFAB53 + E5CB97AA979F7D468D18355A0D1B394ABF025B4E7E7E9FD326CF5852535BBF72 + E3DA5762AD34DED9157FC913A38935EF5B7E2F0098E4DE708F25D917E6CABF49 + FEA53757FECD557F5304B093FFEC732EBC6EDCB5EFFBDE5DB903FAF57562B86C + 5EBF567DE78B9F57CF3DFE28B7FA0300000009565559A95E7CE629B56BDB5675 + DAF4592A2F3F5FBF02A34F464EE6C469672D397A68C77F776C5D2D8B8FD957F9 + EDE4DF3D7627F866CE7E9F3BC7747F8DAF04A1006044FBC14893645F7A93F84B + 6F127FE94DF22F09BF49FEB3A59F35EFFC611FBEF557DF1ED0B75FA113C372B2 + F284FAED4F7EA87E79F777D4D1C3157A160000004032ECD9B13DF25880AC0B30 + 69EA34B60E74C9CECECC9936FF9CD22D1B96BD7870DFD61A3D1D2DF9B7E76CD1 + 927F43E603C1EF07623EBF7D1C32B69BFCCD30CD4EFEED2BFEA6B55EF91F3B76 + E6C0AFFDE8B9EFF6ED5734DE89A1C97348CF3FF9B87AE0E7FF1759E51F000000 + 406A8D1A375EDDF8C9CFA869B3E7EA1918272B2BB67DF1E3E77C7AC78EF2A34E + 186B8B40B32B80D919C0DE1DC0BD2B805D1030637BCE57ECC4D98F4C926F98D8 + 343BF937050077F22FBD49FC232D3D3D3DE7C7F76DFAF2B091E3973831B49D5B + 37AB5FDEFD5DB5A17CB59E01000000D05BCEBAF062F5CE0F7E440D183848CF40 + 1CD8B7EDA58F5E37F98EA6A6A65A27340500D324E98F5604B00B009D1501ECD8 + 572421F6233BC9B799A45FB813FF8EAEFEB75EF99776DB37FEF996D3A62DB8D2 + 19C351535DADFE78EFCFD4CFBEF575557160BF9E05000000D09B766CD9AC9E7B + EC119597DF578D9F3C45A5A5B9D3A370EADB6FE09809A7CDABFACFBF7EBF494F + B913F65809BC3BD19713EA7EAF39C9BE3CD97E2E00D8BD90B16992F44B2FC767 + 1700ECC4DF2E00B41601DE74D5A7A79F7EC655B7CA6A924E1C6A2D2D2DEAD517 + 9E53DFBAED16B57AE9FF223100000000EF68A8AF572BFEFBB25AF1EA2B9122C0 + C0A222FD4AB8E56517CC6D512DCB379CDA19401219D344ACDE9058F249F7BCEF + F9AD0060127CC38CCDBC69E6CA7FB4E4DFB4D65BFE75CB1E337ED6A09B6EFBF5 + D7FB1714F677E250ABADA9513FFFF6D7D59F7F7D6F642F5200000000DE250B73 + CBCE5C1999996ACACC59A1BF1B20B23DE08C85C5AFBEF8E8B395C70FC92DFF6E + 92DCDB09BE197725E937F9A76FF8B1006098B139E9A6D9C9BF2900D889BF7DD5 + BFF5CABF3CF77FE78F5EFA6CE1A0E1D39D38D4E459FF3B6FF9A45AB372B99E01 + 000000E07572C76EF9F2A56AF3FA756ACEFC452A3B2747BF124E5999397D8B17 + 5C30E2897FFCE415E7DCC873FDC224FED112FECE927FF3BAC9457DC7AF0500FB + 849BA45FB8137FD3DC0500FBCABFC4D9B77EF5E1374F9D51FA16671C5AF27F18 + CF3EF688FADE976F53C78F1ED1B300000000FCE4C09EDDEAA57F3DAD264E9DAE + 8A860ED5B3E1D4AF7FE198B113E79C78F1D93FCA7A00A60860D88500377761C0 + 9DF4FBB208E0C702803BF9374D927EE9E598EC0240AC2BFFD222B7FE5F76D5CD + D3CE38EB9A503FF72F0BFDFDECDBDF500F3DF05BD5DC248B6002000000F02BF9 + F7FD0B4F3DCE23018E110307CDAD69685CB671ED7F656B4093F4DB4DB87B4362 + 3979EE79E1BB93EA9702809C58D36C26E9972663D3DCC9BF5D04B0AFFE678D1C + 33A3E0D3B7DEF7F57E030B07387128C9EAA177DEF209B576D50A3D03000000C0 + EF7824E094B4ECFCF429D34AE7BEFAF2C3FFAA3C5E21EB01444BFAED04DFFDBA + 9B3D6F725477AEEA497E2A00D8BD3049BFBB37C9BF5D00705FF98F1402E4B9FF + 6FFCE83FB70C1C3C728613874EE496FF7FFEE3D42DFFC7A418060000002068E4 + 9180179F794A4D9A268F040CD3B3E192999DD36F4EF11B473CF948EB7A0026E9 + B79379338E3667E7A2BEE5F502809C64FB449BB1999766927F3916530090A4DF + 5D006873E55FDA67EF78F04DD3662E79AB330E9D9AEA2AF5D36FDDA91EFEFDFD + AAB9D9FD280C0000008020919DBDE49180F48CF03E12D0BFA070ECD871B38FBD + F8EF3FC97A0076B2EF4EFCDDBD8836E7667254CFF24301C0306373524D93A4DF + 34391ED3ECE4DF5D04C8BEF42D374DBDECA277DC26B7833871A86CDFBC29B2CA + FFBA552BF50C00000080A06B7D2460DD5A356741381F09183E686071656DDDD2 + CDEBFF77CC09A3DD0960C7F65C474CAEEA797E2900D827D424FD229EE4BFDDD5 + FF9163A70EB8E98B0F7C3DA76F61811387CACBCF3EA3BE75DB2DEA04B7FC0300 + 0000A17460EF9EC82301B3E62D50058306E9D970E893DD377DF2CC25735F7BE9 + A167F57A00C24EF46325FEEEB1E4A5F69C2F8A007E2B00486F9A24FDD2CB3198 + 028024FDD10A00AD4580F4F4F4ECAFFFE0A5CF14158D98E9C4A1F2C4DFFFA27E + FE9D6F72CB3F0000001072F248806C15288F030C0ED9BA00D95939FD66CFBF60 + D853FFF869B4F500EC66B8C79287DA73BEE1D5028049F20D3396DE24FEE6CABF + 49FE4DB3937FE9DB5CFDFFD0A77F71F6DCF917BCCB198786DCEAF3A75FFD42FD + F1973FD73300000000C2AEB1A141BDFCAFA7D5E8F113D4C83163F56C38F4EF5F + 346EE0A0E13B5E7BE591DD7ACA24FDF6D5523367927DD3DBA2CDB9F359CFF072 + 01C030637312A5C54AFEDD050093F847C683874D18F0E19B7FFAFF323232F39C + 38149A9A9AD43DDFBB2B72F51F000000006C7277F07FFFFD9C1A5434588D3F6D + 8A9E0D8791A3A74E7FE15F7F7CAAFAE4D17A277427FAEE66C41A0B3B8FF524AF + 1700EC1328C9BE5D0090CF6E17004CE26F927FD34C1120FB4B773D7EC3D0E1E3 + E73BE350A8AFAB533FB8E3F6C873FF00000000105D8B5AF6CA8B2A3D3D434D9D + 3527343B04646466E54D99BE30FD99C77EB9DA0925998FF5388030BD112BF6F4 + C9F37201C03E7126E937BDDDDCC9BF5D008824FED29F77D18D132FBEE2AA4FA5 + A5E5CBD7045E5565A5BAEBD64FABD54B5FD3330000000010DB9A15CB9C3CE284 + 9AB37051688A00030BB3A7541C3AF2F2B6CD2B8E3BA149F8A3ED0E20DC712C9E + 3D795E2B00C88932CD2649BBFD9A49FCED16EBCABF2CFC9773DB9D0FDF9A973F + 2C14AB5B1C3D5CA1BEFAE99BD4D60DEBF50C00000000746EF3FAB56ADFEE5D6A + DE9233549F3E5E4B17134F2E104F9CB260EC637FFFC1BF632C0828DCB1883567 + 989CD69DDBF62AAFFD44A39D2493F09BDE6E26F1775FFD97C4BFF50E809B6EBD + EFBC69B3CEB8C219079EFC65FDCACD1F53FB9D1E00000000BA6AD7B6AD6AD3DA + 356AC11967A9CC4C49AB822D2FAFDFD02143C7EF7BF5C507B73B6167BB02B863 + 5F9124DACB24E9B78B02A6452B04D8C50019470A00A3C7CD28283DF36D373AE3 + C0DBB2619DFAD2C73FA82A0EECD73300000000D07565CB5E535FFDF4C7D58963 + C7F44CB02D79C3DBDE3B72CCF4FECE50F248FB02B3C92FA5B9F3503B4715F6D8 + 93E420BCC47DC2EC936A4EB239F9E60761FF60CC55FFC8957FE96FFFE613370E + 193666B6330EB4F2E54BD5373EF729555D55A56700000000A0FBE4D1E2A52FFD + 472D38FD2C95979FAF6783293D2333F7B4E90B739F7EF49E654E68AEF0C7B328 + A0E96D66CE73C500AF14004C926F9F2093F40B93FC472B02D8C9BF5D00C8BAF4 + 2D374D9DBBF0F28FE7E5E57BEEC427923CA723C97F5D6DAD9E01000000809E3B + 79E2845AF5DAABEAF4F32E5059D9728D35B89A55D6E4C686EAA59BD7BF762412 + BE9EF077D60C19BB734F137B22273509B6D7C8C93127483EA38CEDE4DF1EBB0B + 019162407A7A56D65BAEBDF5234545833D71A29365EFAE9DEAAECF7F86E41F00 + 00004052ECD9B15D7DEBD65B545D5DB0730EC91DAFBEEEF60F4B2EE984F13C0A + 608F4DCE2AEC7CD653E4037B813939766F9F44D3CC093627DFFC50CC957FD367 + 7FFACB7FBC78CAF485173BE3C03A527148DD71F3C7D4B12387F50C0000000024 + DEE14307D58E2D9BD5E2B3CF557DFA484A164C39B97D8B468E3EEDC8CBCFFF75 + 8B13DA7701B8C7C2F432E7166DAED779E9276727FFF6D8F4A608609A1400A4D9 + D598483160F2D485034B965C7283330E2CD9E75F6EFBAF387840CF0000000040 + F2ACF8EFCBEA17DFFDA66A69F1646E9B3025A75F7EC384C9F3063A4373C1D99D + 774A73E7A7D17258F75CAF930FDE9BCC49B14F888CCD09749F5473E24D2F3F10 + D32257FEA5BFFDAEC73E3CB868D474671C48F57575EAAE5B3FCD3EFF00000000 + 524AEE026868A857B3E62DD033C193999E993D656A69BF271FF9D9FF9CD05CF1 + B7EF00304DB8639B3D67725E3BF74D392F1400DCBD697611403EA734199BCA8B + 5D00684DFEDFF28E5B67CD2C7EE387F2F2F2CC9F19284D4D4DEAEEAF7C31B22D + 0700000000A4DA86F2D52A2FBFAF9A3C7DA69E099E2695312123237DE5BAB217 + 0F39A124F2B18A00E6310061E684E93D45126AAF895504B00B0176338580487F + D9151F7D7761616120937FB9D5E6DEEF7D4B2D7BF9453D0300000000A9F7DB9F + FC50BDF8CC533A0A1EC9292F75724B67D89A6BEA3E5A4E6AF2563B8735CD53E4 + C3F626FBA4D827C94EFCCD0995DE9C70F303902BFFAD8BFF5D75FD97E62C3CFD + 4DEF70C681F4A75FFE5C3DF1E05F750400000000BD472E4C4E9A365D0D1B394A + CF044B6E7EFF212D4DCDABD7AC7EE1A013DA57FFEDBB01849917EEB1DD9BDCB7 + D74862DD1BEC64DF66CFDB9513199B2605005304B05BE6F997DCF876A70FA4C7 + FFF667F5D0EFEFD71100000000F42E793CF97B5FBE4D6D5EBF56CF04CFF917BF + 4F724C73F5DF6E262FB573D568B9AC6946B4B994910FE605F609B07BFB649A93 + 6B927FBB089079D95B3F79DA90A1638A9D71E0BCF4ECD3EABEFFFB818E000000 + 00C01BEA6A6BD55DB77E46EDDDB553CF04CBE011634A2EBDF213939DA15D04B0 + 73523B57352D5A6E6BC6BD4A3E9C57989322CD9C34FB244A93136B9A7DE2332E + 7DCBC7AE76FAC0D9B66983FAE937EFD41100000000784BE5F1E3EA3B5FFC9CAA + ADA9D133C172C95B3E2EB966B4E4DF3477DE6AE7B4A679827CA8DE629F0433B6 + 7BFBC499936A4EB039F99176FEC5378ECFCC2E58E48C03A5A6BA4ADDFD95DB55 + 6363839E0100000000EF913B007E79F7B7230B97074D766E41E9B917BF679C33 + 6C93873ACD2E0098DECE6585BB17F638A5E483A5921CA869863D27CD9C2C3336 + CD9C5CBB454EFC9BAEF9CC55415BF95FFEE2FCE23BDF5407F6EED13300000000 + E05DFF79FA49F5EF27FEA9A3E0905CF38AAB6E71DF05E06E76EE1A2DB735CD88 + 369774F281BCC21CB8F4F6C93327D39C5873D2236DF159578D1C35BAF00C671C + 28CF3CF2907AE5DFCFEA0800000000BCEFD73FFC9EDAB56DAB8E8263D4B8A233 + 24F774866DF251A7D90500D39B66E7B89E201FAA3799645FFA6863D3EC136A5A + E4845F7DDD17AE4A4B1B2CAF05C6F64D1BD57D3F66D13F00000000FE525F57A7 + EEBEE37655571BACF50024E7BCEAFA2FBCCD19BA137F6976CE6A5AAC1C57FA5E + 231FC04BCC493127C68CA599936B4E7846F1C28B86160C18FE06671C1891E7FE + 9DBF303CF70F000000C08FF6ECD8AE7EF583EFEA283806F61F7ECEECF9170E75 + 86AD39A9D3EC228069EEBCD633E403A5821CB4FBC0ED3933B69B7D12EDC4DF9C + E08C77DCF095B7160C1E2273811079EEFFBB77A9FD7B76EB1900000000F09FE7 + 9F7C3CD2824472CF77DEF8B5B738C33679A915DBF96BB41C57D86323DA5C52A4 + AA0060B30FCC1CA834F92CA6B79B39B176CB9C36E38C41E3A78C3BDF1907C633 + 8F3EAC5E79EE5F3A0200000000FFFAD5DDDF51BB776CD751304C9C3CF682D366 + 2C1EE40CED2280DDDCF9AC9DEB9A66D8E394900F924AD10ED63E09666C4E90FB + 649AEA4AC6F51FBAEB8AF4F42159CE3810B66FDEA47EFBE3BB750400000000FE + 565757ABEEFECA17237D50480E7AC307BEF36667D89A9BCAB4ABD939AD34E11E + 1BF638E9525D0030DC072C4D3E8BDDDC27D1B48CB11366F59F3479C6C5CE3810 + CC73FF0D0D3CF70F0000002038766FDFA67EF3A3EFEB28184E9B32E31227271D + E00CA325FFA6B9F35B93F71AF63865E483F416FB0498B169F6893227B0B5BA72 + E3477F707946F6805C67EC7BADCFFDEFDEA5670000000020389E7BEC51F59FA7 + 9FD491FF492EFA9E8FFDE0326768F25493B34AB37359779E2BEC71CAC9874A95 + 68076CC6A6D927CB3E89AD2D3D3D2B73F2D485173AE34078F9D9A779EE1F0000 + 0040A0FDF2EE6FAB23870EEAC8FFA63839A9E4A6CE50F2545304B0F3583BB775 + E7BDC23D4E09F930C9640ECA7D40F6BC69E6C4D827CA347312D3AF79F797E6E4 + E4E5173A63DFABAE3AA97EFB931FE9080000000082A9B6A646DDFFD3E0E43E39 + B9F945575FFFC539CEB03557D5CD9DCBDAB9AEBBD962CD27947C9054B20FC8EE + 4DB34F9434FB44461E0158B8E48A739D3E10FEFCAB7BD4F1A347740400000000 + C1F5CABF9F55AB97FE4F47FEB7F0CCB79CE374AD8FAA5BCD9DD7DA39AFB07B33 + 4E09F930A9660E529A3919F6C991669F3C6991135A54343A6FE4A091A5CED8F7 + B66FDAA89E7CE8EF3A0200000080E0FBD50FBF1798C5CF470F1CB958725467D8 + 9AB3BA9A3BCFB57360D3524ABE796F729F0019BB4F9819675CFBDE3B96A41714 + E438635F6B696956F7DEFDED480F0000000061218B9F3FFAA7DFEBC8DF2437BD + E63D5F59EC0CEDE43F5A4E6BE7BBD2F71AF900A9620E5A98B169F239DCCD3E69 + 91366BCEB96F707ADF7BF6B147D5E6756B750400000000E1F1E003F7A943FBF7 + E9C8DF66CD3D571E036897BB3A2D5A8EEBCE83853D4E3AF910C9661F8C3938BB + 9913619F1869E6C4459EA99839FB9CA2B4ACDCD9CED8D74E1C3BA67EFF8B9FE8 + 0800000000C2A5BEAE4EFDE6C777EBC8DFFA64E5CD9E3EE76C59A43E92B73A2D + 5601C0CE7DDDCDB0C749211F2019A21D8C9BFD1EFBC4483327CC9CBCF42BDF71 + CBD94545833BFAF37CE10FF7FC54555556EA0800000000C267D9CB2FAA65AFBC + A423FF921CF52DD77CF66C67D89ABB3ACDCE69ED66E7C0B1C4F39E6E930F910A + F601D80724CD9C08E9DD27CCB48C8953E7CB49F5B58D6BCAD4738F3FAA230000 + 000008AFDFFCE8FBAAAEAE5647FE3569DA027954DDCE5FA5B9F35B3BF7B59BB0 + C749251F2055EC8394EF6B9A3027C53473A222B7505C78F987260E183078AC33 + F6ADA6A62675EFF7BFA3230000000008375907E0E107EED7917F49AE7AC1651F + 9CE00C5B7358DDDC39AEB0E7EC1C3925E49BF626530CB00F5C6273B22227F09C + 8B6EF0FDE27F4F3EF457B573EB661D0100000000FEF1C707223B03F8DD796F7C + B72C0668927F3BA775E7BAD2F71AF900C9660E5698B134F9DEE604482F27C89C + A4D63837B76FD6B80973CE70C6BE75F47085FACBAFEFD5110000000040343636 + A85FFDF07BAAA5A545CFF8D3D849B3CFCCCACACD748651F35A3D76E7C1A6097B + 9C34F28D93C5FEF0E660A4B90FD83E39D2CC098AB4ABAEBB7D6E4E4E6E8133F6 + ADBFFCE65E55535DAD230000000080B17AE9FFD4AAD75ED5913FE5E4E415BCFD + 862FCF75866DF259A7B973DD5879B134C31E27947CC344EAE8C3BB0F426273C0 + E6E0DD272B7DFEE2CB7DBDF85FC5C103EAF9271FD71100000000C0EDC1DFDDE7 + FBBB00169EFE26F76E00A6997CD7CE816D26B6E7656C5AC2C8374FA6580720CD + 3E01763327287DF8A8497D478C2E5CE88C7DEB913F3EA09A1A1B750400000000 + 70DB50BE5AAD5BBD5247FE347C64E1A221C327E43BC3D69C56F776B37361BB19 + F638E1E41B279B7D40F6810B3BB65BA452F2B677DDBE303D7D489633F6A56347 + 0EAB671F7B4447000000008058E42E003F4BCF1892F5F61BBEBC4886BA45CB75 + A50977EC2E042485F966A9260726DFDB1CA489ED4A49FA8429F3E4190ADFFAE7 + 5FFEA81AEAEB75040000000088A56CD96B6ACB86753AF2A74993E7CD713ABB00 + 607A77EE2B7DCAC9374E167370C28CDDAD35D9D7E3D6580C1B326EA633F6A5CA + 13C7D5D3FF7850470000000080CEF8FD2E8021C3C7CD945CD61946CD73F5385A + 6E2C4DD8E384936F9E68EE0F6B0EC03473C0F681DB27247252162EB962444E5E + 7EA133F6A527FEFE17555B53A32300000000406796BEF41FB573EB161DF94F4E + 6E7ED1FCC56F1AEE0CDBE5B84EEB282736CDE68E7B4CBE6132D91FD83E203396 + EF6F9A39299113547ACE55B39DDE976AAAAB2205000000000040D73CFCFBFBF5 + C89FCE38E76AC965EDC45F9A9DFF46CB8D0D7B9C70F2CD93CD1C9069E6A0CD81 + DBB169E9E3C6CD99E5F4BEF4D4C37F5755274FEA080000000010AF979FFB97DA + BF7B978EFC67DCC4D992CBDAC97F24C7D57DB49CD86E4925DF3011A27D60F738 + 5A731F78E4A4C83313054563A73B63DFA9ABAB8D2CFE0700000000E8BA969666 + F5F01F7EA723FF291A3A7EBA5E0740F2DC687701D839B1DD0CF7D8FD7AB7C937 + 4F86581FD8347302ECD67A82CE3AF79D63FAF7CB1DE08C7DE7D947FFA14E1C3B + A623000000004057BDF0D4E3AAE2E0011DF94B4E4E6EC199E7BC7394336C97EB + 5A73D2A2E5CA863D4E18F9A6C9E23E0061E64CB30F5E5AE4842C3CF30A5FDEFE + DFD0D0A0FEF1C707740400000000E88EA6A626F5888F73AB8567BCD9AC03E0CE + 79A5B9F3625BB4B984916F9E4CF641D9CD7DF0769C3E66FC4C5F16005E78F231 + 75F470858E0000000000DDF5EC638FA8E3478FE8C85F468D9F65D601B08B00D1 + 72E1682D69E49B269AFDA1ED8330CD7DA0E684444E4E7A7A56FAE0A1C3A73963 + DF79FA9187F40800000000D0130DF5F5EA85A79ED091BFF42B1C314D725B6768 + 1701A4B773E1584500618F1326910500F787737F7077332741C6D247DAF997DD + 382133B36FBE33F615D9AB72FBA68D3A0200000000F494AC05D0D2D2A223FF28 + C8CFEF7BFE25EF99E00C5B735DA799DCD75D08B09B30BDE18EBB4DBE7932C4FA + 80E6A04C3327C21403FACC5F74B12F6FFFFFCFD3FEAC4C010000008057EDDAB6 + 55EDD8B25947FE326FD165339DAE5DCEEB34775E1C4DACF91E916F9E2CEE8331 + 076A0EDAC4A6FA11991B3D7AC60CA7F795E6E666F59F679ED411000000002051 + FC7AB175CCD8E97601A05DEEAB9B890D89A52585FD8DBAC37C38FB03BA3FACFD + 1EF39A199B1310A986E4E4F7CF2CEA3BC877CFFF972F5FAA8E1D3EAC23000000 + 0040A2BCF8CC53915D01FCA6D0C96D7372F2339DA1E4DD76EE6BF26161C6F69C + 61C7B1DED3253D2D00B8C5FA80665EBE9FDD64BE357EE3651F9C945E5090E38C + 7D459E4B0100000000249EEC0450BEEC351DF9478693DB5E70F9072739C39839 + B06EC2CE9DA519F6B8C7CC374B24FB039B71AC3973C091F19C92F37CF7FC7F4D + 75B5FADF7F9ED7110000000020D1FCBA1BC09C05179AC700DCF9AF69C28EDD73 + 0925DF3C15E483DB076BC6A6451E0118327CDC58A7F795FFBDF06F555F57A723 + 0000000040A2BDF6D20BAAA6BA4A47FE31B868EC38A73379AF49EAEDD81E279D + 7CA3643007663721BD3938D35A0FBC6FFF41239CDE57B8FD1F00000000924B2E + BABEFAC2BF75E41F05838A863B9D49F22317BE9DE6CE858599B35BC2C9374CB6 + 6807624E8039E03EE9E959E97DF35BE4E4F846C581FD6ACDCAE53A0200000000 + 24CB7F7CF818409FFCB4E1E90E193A2D5A2EEC6E4925DF3451EC0F6C1F8069B1 + 0E3432376BCE1B8AD23386643963DF90D5280100000000C927175FE522AC9FF4 + CD28CC9EE1E4BACE30662EAC9B3D6F9AB0C73D26DFA8A7DC1F26DA078DF61EF9 + DEAD9590E973CF1CE9F4BED1D2D2C2EDFF0000000090427EBC083B63CED9F2A8 + 7BBB1CD869363B77B6C73677DC65892800D8A27D207300A6C9F73407DC1A8F18 + 3DD557CFFF6FD9B04EEDDDB553470000000080647BE1E927221763FD44E7BA51 + F3602B36CD2DDA5CB7C9374C34F70737E30E0F78F09051BE2A00BCFAFC737A04 + 000000004885BD3B77A83D3BB6EBC81F060F1B63EE00B073617B2C4D486C98D7 + 13CA7CA344707F38F381DD1F5CC6EE034EEF376898AF0A006B562CD323000000 + 0040AA94FB2C172B183854725D73EBBFC9854D6F98FCD8349B3BEE36F9A68916 + ED834B6F0ED67DC09156D0BFAF6F7600A8AAAC54DB366DD411000000002055D6 + ACF0D74E6CF9B9FD24D76DCD7D9D66F270778E2CECF799B98431DF3859DC1FDE + 1C8019470EB6A070584E754D5AA1BCE0076B57ADF0DD73270000000010046B57 + 2D57CDCDCD3AF2BEBA4655D4AF6048B633B4937D938B9BDCD86E49D3930280FD + E1DC1FB2A3D7EC038EBC6FDEFC4B86151616BADFE759DCFE0F00000000BD43EE + C8DEB165938EBC4F72DDF98B2EB6EF027017010C93139BF7D93A7A2D6EDD2D00 + 44FB86D13E88998BD644643C716A89AFB600F4DB33270000000010247EBB283B + 69CA027B214061C6768B26D66BB1DEDFA1EE1600BACA7C68F321E5FB9AAA47DA + B091937CB300E0F1A347D4EEEDDB7404000000004835BFAD0330FC54CE6B7262 + 930F0B3367B7A4497401C0FEC0D1C6EEB9C8810F2A1CEE9B0280DF7ED1000000 + 002068D6AD5EA99A1A1B75E47D05834648CE6B127F3B27B69B30BDB0E71322D1 + 0500C3FEF0EE033007DCDA061414FA6607009EFF0700000080DE555B53A3B66C + 5CAF23EFEB7F2AE76D93073BCD2E0608F7EB0997A80280F970D13EB01D9B036C + 2D02F47134E6FB670B409EFF0700000080DEB766B97F72B3DC01FD864BEEEB0C + 63E6C6BA093BB6E77A4CBE59B2B83FB4F9C0A697EFDD67FCC479038AB207E49E + 9AF2B68A03FBD581BD7B740400000000E82D6B56FAE7F1ECBCCC7E7992FB3AC3 + 481E1C996C9B23BB5B5224A20010EDC3B9E7EC0391D6FA7D878F99DC570F3D8F + E7FF01000000C01B3694AF560DF5F53AF2BEE1A326DAB9AFE4C4EE3CD9E68E45 + B4B92EE9490120D637B7E7631D84F4F2BDFBF4EF37283F32E303DCFE0F000000 + 00DE20C9FFA6B56B74E47D7D0714E6395D240F769A9D1BC712EBB58EBEA6433D + 290074463E54ACD6AA6FBF41BEB8FDBFA5A585050001000000C043FC7491B67F + FF76B96FB45CD9B4A448640120D687741F841DA7E5F72BC89149AF3B7AB8421D + A938A42300000000406FDBB27EAD1E795F5EFE40C97DDBE4C34E13A617F6D888 + 36D72D892A00B83F90C466CE8CED666E7948CBCBEFEF8B3B00F6EDDAA9470000 + 0000002FD8EBA33C2D37AFAF3C0260B87364D3843D36DC71B724FA1180CE3E94 + FB80D27272FBFAA200E0A75F2C000000000803D9A9ADBEAE4E47DE969BDB57EE + 00901CDC5C10B7991CD92DDA5CB725BA00E0667F587340662E32CECECCF3C523 + 00140000000000C05B64ADB6FD7B76EBC8DBB2B2F3ED8BDF2637761703EC71C2 + 25B200603EA8BB776B339F999BE78F3B0076EED023000000008057F8E571EDDC + EC5C7B0D00D159CEDCD9FBBA2C110580CE3E8CBC6E9AD13A979DC31D00000000 + 0080EEF14BAE96999DEBBE03C068CD8F23516C9DBDDEA964DC0120CC38DA0794 + B9D6969D95E3F93B00E4991279B60400000000E02DFB76EFD2236FCBCC8DDC01 + 2039B8B9ED3F56BE6CF722DAFBBA2591058068CC41D94D985E6565E478FE0E00 + 79A6449E2D010000000078CBDE5DFE785C3B3323EA1D0076AE6C5AD224BA00D0 + D987B65F8B8C3333BD5F00F0CB2F1400000000848DAC01E0870BB6D94EF2EB74 + ED72E253C376CC6BB15EEF9664DF0120EC0FDDEEC3A7676679FE11009EFF0700 + 0000006FAA3A7952551E3FA623EFCACCCE8A76F1DBCE95DBE5CB89D6DD0240CC + 84DEE27E2DEAD764A547AA209EE697552501000000208CFC70D1362D23B20680 + 2D565EED8E6DB1BE262EA9B803C04D3E686BEB9399EEFD470076520000000000 + 00AFF243CE969399613F02605A4A75A700D0D9878CE7205ADF939ED3AE0AE229 + F22C096B00000000008077F9E10E808CB6EBDF75296F8E219E3FA38D642C0218 + 8DCC9B6644E2ACFA4A4F17008E1F39A26AAAAB750400000000F09A7D3EB8689B + 9E71D2BE03C030B13D678B35DF2DC97C04C07D20513FF8D1BA3E197AE849FBF7 + EED1230000000080171DF041DE76F4685AA61EBAD9B9B29D43275CA20A005DF9 + 80E680927A6089527DB2528F00000000005E243B01F84477F3E184E4CEC9BA03 + C07D30669C900F9D4A3535DCFE0F000000005E56EBDFBCCDCE95A3E5D0099588 + 0280EF92FAAEA8E5F97F00000000F0B4DA9A9AC802EE01D7E3DC3B996B000402 + 0B000200000080B749F25F575BAB23DF4BDA45F65417007C77B7808F6F250100 + 000080D0F0E9DDDB29CD91935D00908331CDF05511803B0000000000C0FB7CB8 + 7E5BB43C39A9F9328F0074429E250100000000781B776F772E190500DF5EED8F + 86450001000000C0FB0270F7B63B7F4E783E9DCA3B00A27D78CF1708D8061000 + 000000BCCF27176F7B352F4E4501C0F3497E47B8030000000000BC2F00176F25 + 774E6AFEDC1B6B009883F2456180450001000000C0FB7C74F1B6D772621601EC + 048F000000000080F771F1B67314003AC1230000000000E07DEC02D0390A009D + A8A9AED223000000008057710740E7280074A2BEAE5E8F00000000005E555F5B + AB4788850200000000000021400100000000008010A000000000000040085000 + 000000000020042800000000000010021400000000000008010A000000000000 + 84000500000000000042800200000000000021400100000000008010A0000000 + 0000004008500000000000002004280000000000001002140000000000000801 + 0A00000000000084000500000000000042800200000000000021400100000000 + 008010A000000000000040085000000000000020042800000000000010021400 + 000000000008010A000000000000840005000000000000428002000000000000 + 21400100000000008010A00000000000004008A4E9BE2BE46BCCD7492F4504D3 + A73B2D43F7994ECBB25AB6D3729C966BF5B9F7FCE5E0FD454583BBF33952E2DA + F3CE542D2DCD3A0280D4EBD77F801A37F93495D7B7AF9E4122343536AA13478F + AA1D5B36ABBABA5A3D0B0000FCEA82CBAF5037DE7C8B8EBCA7A2E250CBFBAF1A + 729D33ACD14DFE0162FA3AA7D55BADC1694D4E6BD4BD24A52D562FA437E3B874 + 27F196AF315F67127FD353000080043AFDDC0BD4076EF9BCCACE96FFDB443254 + 9E38AEEEFBF1DDEAC5679ED2330000C08F2800748E470000C0A3FA170C54EFFF + F4E748FE934CEEB0F8D0676F5363264CD233000000C1440100003C6A66C93C95 + 932B374B21D9323232D51B2EBA4447000000C1440100003C6AC8F0117A845458 + 70C6592A2DCDB34FA4010000F418050000F0A8BEFDFAE9115261F0B0E16AE4D8 + 713A020000081E0A0000E05139B9797A845429597CBA1E010000040F050000F0 + A8DC3C0A00A956524A010000000417050000F028EE0048BD293367AABEFDFAEB + 08000020582800008047E5700740CAA5A5F551731696EA080000205828000080 + 47E5720740AF2859BC448F000000828502000078147700F48EB90B4A557A7ABA + 8E000000828302000078544E6EAE1E2195F2FBF55393A7CFD411000040705000 + 00008F621780DEC37680000020882800008007A5A5A57107402F2A29651D0000 + 00103C140000C083B2B2B2232BD2A3778C1A375E0D193E5C47000000C1C0BF2E + 01C0835800B0F7152FE22E000000102C140000C08364213AF42ED60100000041 + 430100003C68E0A0423D426F99515CC23A0C000020502800008007151416E911 + 7A4B4646A69A59325F47000000FE470100003C682005004F2829E53100000010 + 1C140000C08306155100F002D90E50B66404000008020A0000E04105AC01E009 + 0585856ADCA4D374040000E06F140000C0830672078067942C663B400000100C + 140000C0835803C03B8A4B290000008060A00000001E23CF9C0F2CE41100AF98 + 3475BA1A3070908E000000FC8B020000788C3CFF9F9DC3FEF35E52BC68B11E01 + 0000F817050000F098311326EA11BCA26431DB01020000FFA30000001E4301C0 + 7B66CF5FA832323275040000E04F140000C0632800784F4E6EAE9A3667AE8E00 + 0000FC8902000078CC980993F4085E52C26E000000C0E72800008087A46764A8 + 9163C7EA085E22EB00C80E0D0000007E450100003C64F4B8F13C6BEE5143478C + 54C3478DD611000080FF500000000F993EA7448FE045EC06000000FC8C020000 + 78C8F4B9C57A042F2A661D000000E063140000C023FAF4E9A3A6CDA100E06553 + 67CD51F97DFBEA080000C05F28000080478C993889E4D2E3D2D3D3D5ECF90B75 + 040000E02F140000C02366CCE5F97F3F601D000000E057140000C023E62C58A4 + 47F0B2B90B17471ED7000000F01BFE0503001E909D93C302803ED16FC0003569 + EA741D010000F807050000F08019C5F3544646A68EE0753C06000000FC880200 + 0078C0DC85A57A043F603B400000E047140000A097A5A5A5459E2B877F8C9D38 + 49150E19A2230000007FA0000000BD6CF8A8D16AC8F0E13A825F942CE22E0000 + 00E02F140000A09771F5DF9F5807000000F80D050000E8657317F1FCBF1FCD2C + 99AFB2B37374040000E07D140000A017B1FD9F7F656665A9E9C5253A020000F0 + 3E0A0000D08BD8FECFDF780C000000F809050000E8456CFFE76FB210A0ECE200 + 0000E007140000A097B0FD9FFFC95680A3C74FD411000080B7510000805EC2F6 + 7FC150B298ED000100803F500000805EC2D5FF602829A500000000FC81020000 + F412B6FF0B86C9D367AA7E0306E8080000C0BB280000402F60FBBFE0602D0700 + 00E017140000A017B0FD5FB0B01D200000F0030A0000D00BD8FE2F58E62C58A8 + D2333274040000E04D14000020C5B8653C78F2F2FBAA293367E9080000C09B28 + 0000408AB1FD5F309594F218000000F0360A000090625CFD0F26B6030400005E + 47010000528CEDFF8269C498B16AD8C8513A020000F01E0A000090426CFF176C + C5DC050000003C8C020000A410DBFF051B8F010000002FA300000029C4F67FC1 + 367D4EB1CACDCBD311000080B7500000801461FBBFE04BCFC850B3E62DD01100 + 0080B7500000801409CBF67F7575B5EABB5FBA5547E153B298ED000100803751 + 0000801409CBD5FF1D9B37A915FF7D45D5D7D5E99970295EB458A5A5F19F5700 + 00E03DFC0B050052242CDBFF6DDDB841353636A84DEBD6E89970193070909A70 + DA141D01000078070500004881306DFFB76DE3FA48BFA16C55A40F231E030000 + 005E4401000052204CDBFFC91D0062DDEAF016008AD90E100000781005000048 + 81B06CFF270B00EEDDB92332DEBC6E8D6A69698E8CC3461E01185858A4230000 + 006FA00000004916A6EDFF6401C0A6A6A6C8B8A6BA5A6DDBB429320EA3E252B6 + 7C040000DE42010000922C2CDBFF0973FBBF11EA75004A5907000000780B0500 + 0048B2B05CFD17660140637D880B00B3E6CD579959593A020000E87D14000020 + C9C2B2FD9F6877074079991E854F764EAE9A3E271C3B3F0000007FA000000049 + 14A6EDFFEAEBEA5A1700348E1D39ACF6EFD9ADA3F0613B400000E02514000020 + 89C2B4FDDFF6CD1B5B1700B485F93180E2454B228B40020000780105000048A2 + B06CFF27DCB7FF1B1BCA56EB51F8C8E28F23C78CD511000040EFA20000004912 + A6EDFF847B0140635D88EF00103C06000000BC82020000244998B6FF13B1EE00 + 38B067B73A71ECA88EC28702000000F00A0A0000902461BAFA1F6D0140A3A5A5 + 45AD5B1DDEBB004E9B314BF5EDD75F47000000BD87020000244998B6FF8BB500 + A011E67500FAF4E9A3E62C58A423000080DE4301000092204CDBFF8958B7FF1B + EBCB56EA5138952C5EA247000000BD87020000244198B6FF13B1160034766CD9 + AC6A6B6A74143E731696AAF4F4741D010000F40E0A0000900461DAFE4F6C59BF + 4E8FA293C70336AD2DD751F8C81A0093A7CFD011000040EFA00000000916B6ED + FFAA4E9E547B76EED4516CEBC3BE1D6029BB01000080DE45010000122C6CDBFF + 6D5EB746B5B434EB28B6F521DE0940B01D200000E86D14000020C1C274F55F6C + 5C53A6471DDBBC7E6D873B0504DDA871E3D5E061E1290C010000EFA100000009 + 16A6EDFFC4C635F13DDB5F575BABB66DEA78B780A02B2E6537000000D07B2800 + 004002856DFBBF969616B579DD5A1D752EEC8F01CCA3000000007A1105000048 + A0B06DFFB76BDB5655535DA5A3CE6D285FAD47E134DDF9FD9022110000406FA0 + 0000000914B6EDFFE27DFEDF087B0120333353CD2C99AF23000080D4A2000000 + 0912B6EDFF4457F7F63F71EC98DABB73878EC289DD000000406FA10000000912 + B6EDFF44BC0B00DAD695857C3BC0D225916211000040AA510000800409DBD5FF + CA13C7D5FE3DBB7514BF0D65E17E0C606061911A3B69B28E0000005287020000 + 2448D8B6FFDBB4A63CB20B4057AD2F5BA947E15552CA6300000020F528000040 + 02846DFB3FD1D505008D43FBF7ABA3872B74144E258BD90E100000A41E050000 + 4880B06DFF27367671014043EE1A58BF3ADCEB004C9C324D0D18384847000000 + A94101000012206CDBFF353737AB2DEBD7E9A8EBD6877C21C0C88E11217B6404 + 0000F43E0A0000D04361DCFE6FC7964DAAAEB656475D17F60280601D00000090 + 6A140000A087C2B8FD9F2C00D813BBB66D5535D5553A0AA7D9F31786EEB11100 + 00D0BB280000400F85EDEABFD8D0C302803C42B0B1BC7B8B0806456E5E9E9A3A + 7B8E8E000000928F020000F450189FE5DEB4B6E7C9FB3A1E0360370000009052 + 140000A007C2B8FDDFB12387235BF9F5D486B2D57A145EAC0300000052890200 + 00F44018B7FFDBB4B63CB2955F4F6D5EBF56353636E8289C868D1C1559430200 + 002015280000400F846DFB3FB1B187CFFF1B0DF5F56AEB86F53A0AAF92C5DC05 + 0000005283020000745318B7FF1389DCC26FFD6AD601A0000000005285020000 + 745318B7FFABABAD515B376ED051CFAD2F671D80A9B3E6A8BCFCBE3A02000048 + 1E0A0000D04D61BCFA2FB7FF373536EAA8E73694AF4EC87A027E969E9EAE66CF + 5FA823000080E4A1000000DD14C6EDFFD6AE5AA14789515559A9B66DDAA8A3F0 + 623B400000900A140000A01BC2B8FD9F5897E0028058B362991E8597DC4DD2A7 + 0FFF49060000C9C5BF3600A01BC2B8FD5F7D5D9DDAB27E9D8E12A79C0280EA5F + 50A0264E9DA623000080E4A0000000DD10C6EDFF36AD2D570D0D89DFB77FFDEA + 95AAA9A94947E15552CA6E00000020B928000040178575FBBF443FFF6FD4D5D6 + AA4D6BD7E828BCD80E1040A2C9A34539B9B9AADF8001AA70C810356CD4683566 + C2443569EA74356DF65C3567C12235FFF433D5E273CE53675F7489BAE0F22BD4 + 256F7BBBBAE21DD7A9B75CF71E75D1956F530BCF3C5B656567EB3F1180DFA5E9 + BE2BE46BCCD7492F4504D3A73B2D43F7726F6C96D5E4FF39729C966BF5B9F7FC + E5E0FD454583BBF33952E2DAF3CE542D2DCD3A0200A5468C1EA3BE77DF1F7414 + 1E77DCFCB1A41501AE7AF7FBD45BAF7F8F8EC2EB236FBF521D3974504700C24C + 8ACD79F9F96AC0A04235D069054E1B306850A42F70FA01050355A693984B729E + 9595A532B3A4CF76FAACC89CF4B2CB48229CAC3CA1BEF6994FA8ED2CDA0A8F93 + 22D68D37DFA223EFA9A838D4F2FEAB865CE70C6B74ABB5FA3AA7D55B4D6EBB94 + 5B2465FB25E9252995AD934C2FA4EFD2764ADD49BCE56BCCD799C4DFF4140000 + 04DE256F7DBBBAFEA337E9281CE4D6FFF75E7EA16AA897FF1E25DEF439C5EA4B + DFFFB18EC2EBDEEF7F5B3DF3C8433A02104492980F182889BC49E64F25F4AF8F + 7582EFF49999DE596B46B66DFDF24D1FD611E04D14003AD79DC45BBEC67C9D49 + FC4D4F010040E0DDF6ADEF876EDFF675AB57AAAF7CF2A33A4A3CF947EE2FFFF1 + 64E86F335DFECA4BEA5B5FF8AC8E00F84D5A5A1F356870911A3E6A8CD346AB61 + 2347A982429DD44792FE4295DFAF9F7EB7BFD4D6D4A8F75C7681F3EFE22EE51A + 404A5100E89C24ED008038B1FD5F72C81D06727529EC6696CCE7595BC0072489 + 9F346DBA3AEBC28BD5DBDFFB01F5C92F7F557DEBDEFBD47D8F3DA3FEEF8F0FAA + 2F7EE707EAC64F7E465D7AD535EAF4732F5033E696A89163C7F936F917B29680 + 3C9200C0DF28000040178471FB3FB176D54A3D4A9EF2E56C0728C9BF240A007A + 9FDCAA3F7AFC84C822786FBEF63AF5A1CFDEA6EEF8D1CFD43D0F3EA67EF9F013 + EA6BFF778FFAC8E7BFA8AE7CD70DAAF4EC73D5980993025FC0EB93A0350500F4 + 1E0A0000D00561DCFEAFA9B1516D5A53AEA3E4295FBE548FC28DDD0080D4EADB + AF7FE4EE9B375EF156F5EE8FDF1C79CCEB47BFFFABFAEDE3CFAA6FFFF27EF5A9 + AF7C5D5DFBFE0FA9375C74A93A6DC6ACC88AFA00E057140000204E61DDFE6FCB + 8675AAAE4E1E4D4BAEED9B37AAEAAA933A0AAF92D2D323BF6B00124F92FD59F3 + 1644AEE8DFFCE5AFA91F3EF05775EFC38F476ED97FCF4D9F8A6C7B276BBC0C1E + 369CBF87000289020000C44916741A327CB88EC22315B7FF8BA6A626B52E45DF + CBCB64AF6EB9ED1840CFF4EB3FE0F564FFFFDD19B9AA2FC9FE17BE7D77E48AFE + A2B3CF09E5FFA70308370A000010A7305EFD17C95E00D056C663001125A54BF4 + 08403C24D9972BF757BCE3F564FF9E871E7B3DD93FEB0D91ABFA001076140000 + 204E731785EFF9FFE6E666B5714D998E926FCD0A160214AC0300C426ABD1CB95 + 7D93ECFFF80F7F8B24FBF2ECFE35EF23D907808E50000080388475FBBFAD1BD7 + AB9AEA6A1D25DFEEEDDBD48963C774145E93A7CF60A13140CBCDCB57C58B16AB + 777CE0239195F77FF98F272357F64DB25F3474987E2700A033140000200E61DD + FE2FD5CFE4B7B4B4701780232DAD4F28779C0084EC953F6FC919EABA0F7F5C7D + FD67BF52BF7AE409F5B96F7C47BDE99A7746F6DE4F672B3A00E8360A00001087 + B026636B572ED7A3D4613BC053643700200CE46E9705679CAD6EF8E827D45DF7 + DCA7EE7DE87175CBD7EE52975E758D9A70DA9448410C009018FC3F2A007422AC + DBFFB5B434ABF565AB75943AE5DC01103167E122959E91A1232038060C1CA44A + CF3E57BDF7A64F45F6D9BFE7C1C7D4A7EFF8BABAF8AD57ABB11327B1FD1E0024 + 11050000E84458B7FFDBB66993AAA9AED251EA1CDCB757551C3CA0A3F0CACBEF + ABA6CC98A523C0BF323333238BF65DFF919BD4777FFD80FAF9DF1E519FFCF257 + D58557BC952D2F0120C52800004027D8FE2FB5641D001E0338A56431DB01C29F + 060D1EA2CEBBF44DEA335FFD66EBDEFB97BCEDED6AE4D871FA1D0080DE400100 + 003A11C6EDFFC4DA5E2A000816023C857500E017B230DFD459B3232BF37FEBDE + FBD44FFEF4A07AFFA73FA7E69F7EA6CACEC9D5EF0200F4360A0000D081B06EFF + 2757E1D797ADD251EA952FA70020468C19AB868E18A923C05BFA1714A8332FB8 + 48DDF4C5AFA85FFCFD9FEAFFFDE0A791BDF9C74C98A4DF0100F01A0A0000D081 + B06EFFB773EB16555559A9A3D43B7AB842EDDDB94347E1565CCA6300F006599C + 4F56E57FEBF5EF89ECC7FFF3BF3DAA3E7AEBED6AC9B9E747B6EE0300781F0500 + 00E84058B7FFEBADE7FF6DEC0670CABCC53C0680DE2349FFA4A9D3D5BB3EF451 + F5A3DFFF35B22FFF55EF7E5F643F7E56EB0700FFA1000000318475FB3FD19BCF + FF1BAC0370CAB43973556E5E9E8E80E47327FD5FFBC93DEAB2ABDFA18A860ED3 + EF0000F8150500008821ACDBFF8975AB57EA51EF59BB7245642D82B093475066 + 962CD011901C24FD00100E1400002086B05EFDDFBD7D9BAA3C7E5C47BDA7F2C4 + 71B563F3261D851BDB01221924E99F38655A24E9FFE1037F21E9078010A00000 + 0031B0FD5FEF631D80534A4A9738C91AFFC946628C183D465DFBFE0F4592FE3B + 7F7A6F24E91F3C2C9C773B0140D8F0AF09008822ACDBFF092F2C0068B00EC029 + 03060E52E34F3B4D4740D7E5E6E5AB732FBD5CDDF1A39FA9EFDDF707F5E66BAF + 23E9078010A2000000518475FB3FB16EF52A3DEA7DEBCB56A9A6A6261D855B49 + 29BB01A06BE4AE9119734B225BF5FDFC6F8FA80F7CFAF3EAB419B3F4AB008030 + A2000000518475FBBFBDBB76AA63470EEBA8F7D55457AB2DEBD7EA28DC4AD80E + 1071922BFB6FBBE1BDEA07BFFBB3BAFD7B3F52675E7091CACACED6AF0200C28C + 020000B8847AFBBF95CBF5C83B5807E09409A74D510585853A02DA1B336192FA + E2777E1059C5FF6D37DC18DA5D4C0000B15100000097506FFFB7AAF7B7FF732B + 5FBE548F50BC289C8529744C8A96E75DF6E6C8827E334BE6EB590000DAA30000 + 002E61BDFA2FBCB40380B169ED1AD5505FAFA370631D004473C9DBDEAEDEFFA9 + CFAACCCC70AE5B0200881F0500007009EBF67FFBF7EC56470F57E8C83B24F9DF + 50BE5A47E1367BFE02923CB43365E66C3D0200A063140000C012EEEDFFBC77FB + BFC13A00A764E7E4AA6973C2F9FB89D8468D1BAF470000748C02000058C2BCFD + 9F176FFF375807E075EC06005B7A46861A3672948E0000E818050000B08475FB + 3FB1CEC305806D1B3744B604C4A9750064D13740343735F3FB0000881B050000 + D0C2BCFDDFA1FDFB54C5C1033AF29EA6A6264F1728524976A8183166AC8E1076 + 2D2DCDAABAAA4A470000748C0200006861DEFE6FAD879FFF37CA97B30E805152 + BA448F00A5AA2A2BF50800808E510000002DCCDBFFF9E1EA3A0B01BE8E750060 + AB3A79428F0000E818050000D0C2BAFD9FF0F20280C6AE6D5B55E5F1E33A0A37 + D9F62DBF5F3F1D21ECB8030000102F0A0000E008F3F67F470E1D8CAC01E075F2 + AC3377019CD2A74F1F3567C1221D21ECAA4E9ED42300003A460100001CE1DEFE + 6FA5935CB7E8C8DBD650006825BB0100823B000000F1A20000008E306FFFB766 + A57F926AEE00789D3CB222770200552729000000E2C3BF1C00845E98B7FF1365 + CB96EA91F71DD8B33BF2C80294EADBAFBF9A3C7DA68E106655952C020800880F + 050000A117E6EDFFF63B0975C581FD3AF23E7954A18CED005B952C663B40F008 + 0000207E140000845E98AFFE972FF7CFD57F8375005EC73A0010277904000010 + 270A0000422FCCDBFF95F9B000C03A00AF1B3D7E822A1A3A4C47082BEE000000 + C48B020080500BF3F67F723BFDDA15CB75E41FB206C0BEDDBB748492521E0308 + 3B0A00008078510000106A61DEFE6FFBE68DAAF2C4711DF90B7701BCAE64318F + 01841DBB000000E245010040A88579FB3F3FADFEEFE6C7B50B92458A5872270B + C28B3B000000F1A2000020B4C2BEFD9F9F93687974411E6180529999996A66F1 + 3C1D218CB8030000102F0A0000422BCCDBFF353636A80D65AB75E43FF2E8C2B6 + 4D1B75041E0308B7E6E66655535DA523000062A3000020B4C27CF57F437999AA + ABABD5913FF118C0EB8A4B9744EE684178F1180000201E140000845698B7FF0B + 42F25CB6EC353DC2A0A2C16AECC4493A42189DA40000008803050000A114E6ED + FF441092E70DE5AB554343838E5052CA630061567DF2A41E0100101B050000A1 + 14E6EDFFAAAB4EAA6D1B37E8C8BFEAEBEAD4C672FFAE639068AC03106E55274F + E8110000B1510000104A61DEFE6FEDCA15AAA9A94947FE56C63A00AD264E9DA6 + FA170CD411C28647000000F1A000002074C2BEFD5F909E9D2F5F4601C090DFEB + E210AF6B11762C0208008807050000A113E6EDFF44F98A657AE47F5B37AE8F3C + D28053580720BCAA4E52000000748E020080D009F3D5FFA3872BD4DE9D3B74E4 + 7FB2FFF99A0015347A6AF68245A15DDB22ECB8030000100F0A00004227CCDBFF + C9EDFF2D2D2D3A0A86B2E514008CDCBC3C3565D66C1D214C28000000E2410100 + 40A8847DFBBFF20026CBE5015AD32011E6B11B4028D5D654EB110000B1510000 + 102A61DEFE4F940770D5FC7DBB77A923870EEA0825A54BF40861D218909D3D00 + 00C945010040A88479FBBF3D3BB6AB23158774141CF2484319BB01B41A366A74 + 64A14B844B5363A31E0100101B050000A111F6EDFF82B4FABF5BF90A0A00B662 + EE02081D0A004885DA6A1E3501FC8E020080D008FBF67FB20060509505F0D186 + 9E601D80F0A10080643B71EC986A6868D01100BFA200002034C27CF5BFA5A559 + AD5BB54247C173ECF061B57BFB361D61EAECB92A2FBFAF8E10068D4D1400905C + 2F3FF78C1E01F0330A00004223CCDBFF6D59BF5E559D3CA9A3600AE20287DD95 + 9E9EAE66CD5FA023840177008493AC81225B401EDCB757EDDEB13DB2D6CBDE5D + 3BD5FEDDBBD481BD7B9CF97DAAE2C07E75F8E0C1C81A30522C3D71ECA8AA3C7E + 5C559E381EF9DAEAAA93AAA6BA5AD5D5D6A8FABABAC855FEC6C606D5D4D41479 + CFDE9D3BD4DFEFFFB5FAD32F7FAEBF2B003F4BD37D57C8D798AF935E8A08A64F + 775A86EE6599ED2CAB653B2DC769B9569F7BCF5F0EDE5F5434B83B9F2325AE3D + EFCCC8953300FE26DBFFFDF21F4F84760780077F779FFAD3AF7EA1A36092DBDE + 6FB9F35B3AC2F34F3EAE7E7AD7D77484A01B35769CFACEAF1FD011FC4492EEEA + 9327D5C9934E32EE3449CAA5605B15199F38356E9D3B71EABD92B83BBD24EEFC + 3B1578DD05975FA16EBCF9161D794F45C5A196F75F35E43A6758A35BADD5D739 + ADDE6AF2CC8D6CF122155EE9E52F7B8BD50BE9CD382EDD49BCE56BCCD799C4DF + F4140000785289931C7E36C4C9E1573FF571B566E5721D05536E5E7EA4C8D3A7 + 0F37B709795EF7836FBD9CFF868584ECFE70F76FFFA8237885FC3DDCBF7777E4 + 8AFCFE3D7BD4813DBBD5A103FB9D04DE49EC23497C25CFD503094401A073FC2B + 0940288479FB3FB9BAB4716DB98E82ABA6BA4A6D5EB74647E85F50A0264E9DAA + 23041D8F00F49E63470EABF565ABD5F34F3C16B9D3EA0777DCAE6EFDE07BD57B + 2F7FA3FAC05B2E555FFAD807D54FBEF9B5C86DF42F3DFBB4DAB8A62C725BFDF1 + A34748FE01A41C0500008117F6EDFFD697AD520DF552480E3ED601684BEE7C41 + 38500048AEA3872BD4DA552BD4738F3DAAFE70CFCFD4F7BFF245F5F90FBC5BBD + FBD2F3D587DEF626F5FF3EF161F5D36FDD1979DCEA957F3FABB66DDA1079B61E + 00BC86020080C00BFBF67F614A8ACB965100B095945200088B460A000923774D + AD5DB92292CC7FF3F39F5637BEE98DEAC357BD59DD71F3C7D4CFBFF30DF5F01F + EE57AF3EFF9CDABE7993AAAD913B7701C03F28000008BC305FFD17614A8A37AD + 5DA3EAEAE4313A88719326AB418387E80841D6C43680DD262BE24B42FFDBFFFB + A1FAC287DFA7DE73F985EA8E4F7D2C723BFFCAFFFD37B2F81E00040505000081 + 17E6EDFF64A129B94A1516B275D5BA552B750451BC28DC05B0B0686E62B1C7AE + 90EDEDFEF5CF7FA8AF7DE613EA436FBB3C724BFF637FFB93DAB2611D8F530008 + 340A0000024DB6FF9B3EB75847E1B366F9B2D0AD02CF3A006DB10E00708A5CC9 + 7FEEF147D5373EF7A9C873FBF77CF7AEC8FF5FC87EF700101614000004DA8CE2 + 79A1DDFB5F948530192E5BF69A1E41CC2A99AFB2B265275E20DC1EFDF3EFD5CF + BFFD0DB5EAB557B9CA0F20B428000008B4306FFF27C278357CE7D6AD91BDB771 + 8A24FFD3E784F72E180000F03A0A0000022BECDBFF551CD8AF0EECDDA3A3F090 + 471E780CA02D1E0300000082020080C00AFBF67FB2FA7F4B4B8B8EC2A57C0505 + 009B1400A420060000C28D020080C00AFBF67F61BE0A1EA6AD0FE3513464A81A + 356EBC8E00004058510000105861DEFE4F94AF58A647E17368FFBE503EFED091 + 92521E03000020EC28000008A4B06FFFB773EB6675FCE8111D8513EB00B455B2 + 78891E010080B0A200002090C2BEFD5FF9F2F05EFD37780CA0ADD366CC54FDFA + 0FD011000008230A00000229ECDBFFB117BE526B562E0BED2288D1A4A5F55173 + 162ED211000008230A00000227ECDBFF353535A975AB57EA28BC2A8F1F57DB37 + 6FD41104EB000000106E140000044ED8B7FFDBB4768DAAADA9D151B8F128445B + 731696AAF4F4741D010080B0A100002070D8FE8FDBFF0D1E85682BBF6F5F75DA + 8C593A0200006143010040E0847EFB3F56BF6FB5A16CB56A6C6CD01144C9621E + 03000020AC2800000894B06FFF27B7FE6F5AB75647A8ABAB551BCACB74045152 + CA7680000084150500008112F6EDFFD6AD5AA19A1A1B7504C11D116D8D1C3B4E + 0D193E42470000204C2800000894D06FFF47B2DB0EEB00B4C75D000000841305 + 00008111F6EDFF0457BBDBDBB67183AAAE3AA92308D6010000209C280000088C + B06FFF77E2D851B56BDB561DC1686A6A526B562CD71184AC9391939BAB230000 + 10161400000446D8AFFECBEDFF2D2D2D3A828D3B23DA92753266CD5BA0230000 + 10161400000446E8B7FF5B46921B0B6B23B45752CA63000000840D0500008110 + F6EDFF04496E6CFB76ED54472A0EE908A2B874B14A4BE39F0100008409FFE507 + 100861DFFE6FFF9EDDAAE2C07E1DC14D1E8DE03180B60A0615AAF1A79DA62300 + 0010061400000402DBFF91DC76A68C4724DA613B400000C285020000DF63FB3F + 16B98B07E7A83DD6010000205C280000F0BDB06FFF27B7B7AF659BBB4E1D3D5C + A176EFD8AE23880953A6AA82C2421D010080A0A30000C0F7C27EF57FFBE68DAA + F2C4711DA123DC05D05E71C8FFFE00001026140000F85ED8B7FFE3D9F6F8952D + 7B4D8F60942C661D000000C2820200005F63FB3F92DAAE58B76AA56A6E6ED611 + C4ECF90B5566667877D00000204C280000F0B5B06FFFD7D8D8A0369697E9089D + A9AE3AA936AF5FAB2388EC9C5C3575F65C1D01008020A30000C0D7C2BEFDDF06 + 27F9AFABABD511E2C13A00EDCD5BCC6E0000008401050000BEC5F67FDCFEDF1D + E5AC99D04EC9E233227F9F000040B0510000E05B61DFFE4F7035BBEB36AD2DE7 + AE0917F97B3462CC581D010080A0A20000C0B7C27EF55F9E67DFB671838E10AF + 868606B57ED54A1DC1285EC46E000000041D050000BE15F6EDFFD6AE5CA19A9A + 9A7484AE285BBE4C8F60B01D200000C1470100802FB1FD1FCFFFF744F972CE9D + DBD45973547EBF7E3A02000041440100802F857DFB3F51C6F3FFDDB663CB1655 + 79FCB88E20FAF4E9A366CF5FA82300001044140000F852D8B7FF3B7AB842EDDB + B55347E8AA96966655BE82C700DC4A4AD90E10008020A30000C077D8FEEFD4ED + FF2D2D2D3A427794F308453BC5A58B23770200008060E2BFF2007C87EDFFA400 + C0EDFF3D55C63A00EDF4EDD75F4D9E3E534700002068280000F09DB05FFD17E5 + 3CFFDF6307F7ED73DA5E1DC1282E6537000000828A020000DF09FBF67F7B766C + 8FAC01809E6321C5F64A280000001058140000F80ADBFF2916AF4B20D601686F + CC8489AA68C8501D01008020A10000C057D8FEEFD40280480C8A29D1F1180000 + 00C144010080AF847DFB3FD9BE6EEDCA153A424F551E3FAEB66FDAA82318258B + D90E10008020A20000C037D8FE4FA92DEBD7ABEAAA933A422294AF601D00B799 + C5F35476768E8E00004050500000E01B6CFFC7EDFFC9C0968AED656665A91925 + F3740400008282020000DF60FB3FF6AE4F86F565AB546363838E60B01B000000 + C1430100806F847DFBBFFABA3AB5694DB98E902875B5B56A6339E7D54DD60190 + C76E00004070500000E00B6CFF77EA4A75430357AA93A17C398F01B80D2A1AAC + C64E9CA42300001004140000F802DBFF91A426138F5644C776800000040B0500 + 00BE10F6EDFF048BD525CFD60DEB554D75958E609494B21D2000004142010080 + E7B1FD9F52272B4FA8ED9B37E90889D6D4D4A4D6AE5CA1231893A64D57FD0B0A + 74040000FC8E020000CF63FB3FA5D62C5FA65A5A9A758464608BC5F628BE0100 + 102C140000781E09883CA3CEEDFFC9C6398EAE6431EB0000001014140000785E + D8B7FF135C9D4EBEBD3B77A8A3872B740463CE8245A15F80130080A0A00000C0 + D3D8FE4FA98A03FBD5C17D7B75846469696961A7852872F3F2D59459B3750400 + 00FC8C0200004F63FBBF53ABFF4B728AE463A785E84AD80E10008040A00000C0 + D3D8FE4F71553A8538D7D1952C663B4000008280020000CF6205F253CA572CD3 + 2324DB918A436ACF8EED3A82213B710C731A0000F0370A00003C8BEDFF94DAB9 + 75B33A7EF4888E900A145CA22B59C463000000F81D0500009EC5D57FB9259D64 + 34D5D871213AB6030400C0FF280000F02CB6FF2319ED0D6B57AE502D2DCD3A82 + 316D4E716447000000E05F1400007812DBFF29D5D4D4A4D6AD5EA923A44A75D5 + 49B579DD3A1DC1484F4F57B3E72FD0110000F0230A00003C89EDFF94DAB4768D + AAADA9D1115289DD00A22B296537000000FC8C0200004F62FB3F4942B9FDBFB7 + 9471EEA32A2E5DA2D2D2F8A70300007EC57FC501780EDBFF9DC255E8DEB3694D + B9AAAFABD3118CFE05056AE2D4A93A0200007E93A6FBAE90AF315F27BD14114C + 9FEEB40CDDCBBDBB5956CB765A8ED372AD3EF79EBF1CBCBFA86870773E474A5C + 7BDE992C0605A4D888D163D4F7EEFB838EC2EB819FFF9F6A6A6CD2516C2DCEFF + E2D1D212C7FBE2798F23AE3FCB11D7BB12FC3DE3F9F3E2F993DE74CD3BD590E1 + 237404E3EFF7FF5AFDF9D7F7EA085E210B34FEFAD1A7748468FEF4AB5FA8077F + 779F8E0004D105975FA16EBCF9161D794F45C5A196F75F35E43A6728CF784AAB + B57AB9F2506FB506A7C93F041B752F49A9FC13C6F442FA78FE59D3AA3B89B77C + 8DF93A93F89B9E0200801EBBE4AD6F57D77FF4261D01F092ED9B36AACF7FF03D + 3A82575000E81C050020F82800748E470000780EDBFF01DE356EF2696A50D160 + 1D0100003FA10000C053D8FE0FF0BEE245ACD10100801F510000E0296CFF0778 + 5FC962B6030400C08F280000F014B6FF03BC6FE6BCF92A2B5B96F60100007E42 + 01008067B0FD1FE00FD9D9396AFA1C1ED50100C06F280000F08CE1A346AB21C3 + 87EB08809795942ED1230000E017140000780657FF01FF907500E4AE1D0000E0 + 1F1400007806DBFF01FE513474981A356EBC8E0000801F500000E0096CFF07F8 + 4F318F010000E02B1400007802DBFF01FE5352CA76800000F8090500009EC0F6 + 7F80FF4C993953F5EB3F40470000C0EB280000E8756CFF07F8535A5A1F357BC1 + 221D010000AFA30000A0D7B1FD1FE05F258B5907000000BFA00000A0D771F51F + F02FF9FB9B9E9EAE230000E065140000F43AB6FF03FC2BBF6F5F75DA8C593A02 + 00005E46010040AF62FB3FC0FFD80E1000007FA00000A057B1FD1FE07F258BD9 + 0E1000003FA00000A057B1FD1FE07FA3C68E63214F00007C800200805EC3F67F + 4070142FE231000000BC8E0200805EC3F67F4070F018000000DE47010040AFE1 + EA3F101C338A4B544E6EAE8E00008017510000D06BD8FE0F080E59CC73D6BC05 + 3A0200005E44010040AF60FB3F207858070000006FA30000A057B0FD1F103C25 + A54B545A1AFFB40000C0ABF8AF34805EC1F67F40F0141416AAF19327EB080000 + 780D05000029C7F67F40701597F2180000005E45010040CAB1FD1F105C6C0708 + 00807751000090725CFD07826BE29469AA6050A18E0000809750000090726CFF + 07045BF1228A7C0000781105000029C5F67F40F0B10E000000DE440100404AB1 + FD1F107CB3E72F549999FC3D0700C06B2800004829B6FF03822F2737574D9D3D + 57470000C02B2800004819B6FF03C2A384C7000000F01C0A00005286EDFF80F0 + 98B7E48C48D10F0000780705000029C3D57F203C860C1FA1868F1EA3230000E0 + 05140000A40CDBFF01E1C263000000780B05000029C1F67F40F894949EAE4700 + 00C00B2800004809B6FF03C267EAEC392ABF6F5F1D010080DE460100404AB0FD + 1F103E7DFAF451B3172CD2110000E86D140000241DDBFF01E1C53A0000007807 + 05000049C7F67F4078CD5DB4387227000000E87DFC171940D271F51F08AF7EFD + 07A849D366E8080000F4260A0000928EEDFF8070E331000000BC81020080A462 + FB3F00258B29000000E0051400002415DBFF01183361922A1A3254470000A0B7 + 50000090546CFF0740142F622D1000007A1B05000049C3F67F008C92C5A7EB11 + 0000E82D140000240DDBFF01306696CC57D9D9393A020000BD81020080A4E1EA + 3F0023332B4BCD2899A7230000D01B280000481AB6FF03602B663B4000007A15 + 05000049C1F67F00DCE6952E89AC0D0200007A0705000049C1F67F00DC060D1E + A2C64C98A8230000906A1400002405DBFF018886C7000000E83D140000241CDB + FF018885ED000100E83D140000241CDBFF018865F2B419AA7F41818E0000402A + 51000090705CFD07108BDC213467018F080100D01B2800004838B6FF03D0111E + 030000A0775000009050B2FDDFB4396CFF0720B6B90B17A9F48C0C1D01008054 + A1000020A164FBBFCC4CB6FF03105B6E5EBE9A3A73B68E000040AA5000009050 + 6CFF07201E6C07080040EA51000090306CFF07205EAC03000040EA5100009030 + 6CFF07205E23468F51C3468ED211000048050A00001286ABFF00BA82C7000000 + 482D0A00001286EDFF0074450905000000522A4DF75D215F63BE4E7A2922983E + DD69B2AF8FF4B20C7896D5B29D96E3B45CABCFBDE72F07EF2F2A1ADC9DCF9112 + D79E77A66A6969D611805864FBBF7B1F7E821D00B48FBCFD4A75FCE8111D218C + 3EFE852FABD2B3CFD511A2696A6C54EFBBE26255535DAD67D05DB2B3C2AF1F7D + 4A4788E64FBFFA857AF077F7E90840105D70F915EAC69B6FD191F754541C6A79 + FF5543AE738635BAD55A7D9DD3EAADD6E0B426A735EA5E92D216AB17D29B715C + B803004042B0FDDFEB766EDDA28E1C3A18496E68E16DAB5E7B55FF462096F48C + 0C356BDE021D01008064A300002021D8FEEF75E5CB97EA11C26CF5D2FFE9113A + C26E000000A40E0500003DC6F67F6D952D7B4D8F1066870F1E547B766CD71162 + 917500D2D2F8E7080000A9C07F7101F418DBFFBDAEA9A949AD5BBD5247083BEE + 02E85CFF82816AE294A93A020000C9440100408F71F5FF759BD6AE51B535B296 + 0BA05807204E6C070800406A500000D0636CFFF7BAF2E5DCFE8FD7C9DD208D8D + B2882F3A52B29802000000A9400100408FC8F67FD3E614EB0865CB580010AFAB + ABAD551BCA56EB08B18C9F3C450D2C2CD211000048160A00007A84EDFF5E27B7 + FE6F5EBF5647C0293C06109FE2521E25020020D9280000E811B6FF7BDDDA95CB + 23FBBF033616028C4F4929DB010200906C140000741BDBFFB555B69CDBFFD1DE + 8E2D5BD489634775845866CD5FA032B3B27404000092810200806E63FBBFB6CA + 96B10020DA6B696956AB5EE32E80CE6467E7A8E9AC2702004052510000D06D5C + FD7FDDB12387D59E1DDB7504B4C56300F12959CC630000002413050000DDC6F6 + 7FAF93D5FF5B5A5A7404B4C5DD21F129295D1279B40800002407050000DDC2F6 + 7F6D95AFE0F97FC4267788ECD8B259478865F0B0E16AE4D8713A020000894601 + 0040B7B0FD5F5BE52C00884EF018407CE42E000000901C140000740BDBFFBD6E + EFAE9DEAF0C1833A02A2A300101FD60100002079280000E832B6FF6BAB9CE7BB + 1187F565AB547D5D9D8E10CB9499B354DF7EFD7504000012890200802E63FBBF + B6CAB8FD1F7168A8AF57EB56ADD01162494BEBA3E62C58A42300009048140000 + 741957FF5F277BBCAF5DB95C4740C756F118405C4A16B30E000000C940010040 + 97B1FDDFEBB6AC5FAFAA4E9ED411D0B1D5AFBDAA47E8881419D3D3D375040000 + 12850200802EC9CE66FB3F1BFBBBA32BF6ECDCA18E541CD21162C9EFD74F4D9E + 3E434700002051280000E892E9C5256CFF67295B4E0100F16B69696137803895 + 94B21B000000894601004097142FE2F97F435674DFB4A65C47407C2800C487ED + 000100483C0A0000E2C6F67F6DC9B66E0D0D0D3A02E2238F8DC89D00E8D8A871 + E3D5E061EC36020040225100001037B6FF6B8BE7FFD11D95C78FAB6D1B37E808 + 1D292E65370000001289020080B871F5BFADB2E54BF508E81A1E0388CF3C0A00 + 000024140500007163FBBFD7559E38AE766CDEAC23A06B56B11D605CA617CF53 + D939393A0200003D450100405CD8FEAFADF2E5CB544B4BB38E80AED9B4768DAA + ADA9D11162911D476696CCD7110000E8290A0000E2C2F67F6D95F3FC3F7AA0B1 + B141AD59B95C47E808BB0100009038140000C485EDFFDA2A5B4E01003DC36300 + F129295D12D981040000F41C0500009D62FBBFB60EEEDB1769404FB010607C06 + 1616A9B19326EB080000F4040500009D62FBBFB6B8FA8F4438B067B73AB49F42 + 523C4A4A790C00008044A00000A0535CFD6F8BE7FF91082D2D2D3C0610A792C5 + 6C0708004022500000D029B6FF6BAB7CC5323D027A86C700E23369EA743560E0 + 201D010080EEA20000A0436CFFD7D6F64D1B55E5F1E33A027A66CD8A65AAB999 + ED24E341211200809EA30000A0436CFFD756D9F2A57A04F45CD5C9936AF3BA35 + 3A424758070000809EA30000A0436CFFD75619CFFF23C1780C203EB3E72F5419 + 1914230100E8090A00006262FBBFB61A1B1BD486B2D53A021263F56B1400E291 + 9B97A7A6CE9EA3230000D01D140000C4C4F67F6D6D282F537575B53A021263CB + 8675914701D03976030000A0672800008889ABFF6D95F3FC3F92A0A9A989DFAD + 38B10E0000003D430100404CACBADD16CFFF23595807203EC3468E8ADC990400 + 00BA87020080A8D8FEAFADEAAA936ADBC60D3A02128B0240FC4A167317000000 + DD45010040546CFFD7D69A15CB23B76A03C97068FF3EB56FF72E1DA123140000 + 00E83E0A0000A22A5EC8EDFFB6329ED146927117407CA6CE9AA3F2F2FBEA0800 + 007405050000ED44B6FF5BC46ADBB6729EFF4792AD7EED553D4247D2D3D3D5EC + F90B75040000BA8202008076D8FEAFAD23870E727B36926ECDCAE5AAA9B15147 + E808DB010200D03D140000B4C3F67F6D952D5BAA5A5A5A740424476D4D8DDAB0 + A64C47E848F1A225AA4F1FFE0903004057F15F4F00EDB0FD5F5B65CBB9FD1FA9 + C13A00F1E93760809A38759A8E000040BC2800006883EDFFDA2B5FB14C8F80E4 + 621D80F89594B21B0000005D450100401B6CFFD7D6EEEDDBD4B1C387750424D7 + B64D9B54E589E33A4247D80E100080AEA30000A00DB6FF6BAB8CD5FF91422D2D + CDAA6C29BF73F1183B71922A1C3244470000201E140000B462FBBFF6CA962FD5 + 232035562DE5318078C962800000207E140000B462FBBFB69A9B9BD5BA552B74 + 04A4067700C4AFA494020000005D410100402BB6FF6B6BD3DA7255535DAD2320 + 358E541C8AAC3D81CECD2C99AFB2B2B3750400003A430100402BB6FF6BAB6C19 + B7FFA377AC623780B848F23F636E898E000040672800008860FBBFF6CA97732B + 367AC7EAA5FFD3237486DD000000881F050000116CFFD7565D6D8DDABC6E9D8E + 80D45ABF7A956A6868D0113A52527A7A6401530000D0390A000022D8FEAFADB5 + AB56AAC6461230F48EBABA5AB57EF54A1DA123B215E0E8F113740400003A4201 + 0000DBFF4551B68CDBFFD1BB56BDC66300F16237000000E243010000DBFF4551 + BE9C0500D1BB5807207EAC030000407C28000060FB3F9713C78EAA5DDBB6EA08 + E81DBBB66D51C78E1CD6113A3279FA4CD56FC0001D0100805828000060FB3F17 + B9FDBFA5A5454740EF90DF41EE02884FE43126D6310100A0531400809063FBBF + F6CA9671FB3FBC810240FC6437000000D0310A0040C8B1FD5F7B3CFF0FAF58BD + 94C528E33567E122959E91A1230000100D050020E4D8FEAFAD7DBB77A98A8307 + 7404F42E598F62FBA68D3A4247F2F2FBAA293366E9080000444301000831B6FF + 6B8FABFFF01A1E03885FC962FEFF0C00808E500000428CEDFFDA930500012F59 + F5DAAB7A84CEB00E0000001DA300008418DBFFB525ABAEAF59B95C4780376C5C + 53A6EAEA6A75848E8C1833560D1D3152470000C08D020010626CFFD7D6D68DEB + 555565A58E006F686868506B57AED0113A535CCA63000000C44201000829B6FF + 6B8FEDFFE055AC0310BF798B790C0000805828000021C5F67FEDF1FC3FBC8A75 + 00E2377D4EB1CACDCBD3110000B0510000428AEDFFDA6AA8AF8F3C6B0D78D1BE + 5D3BD5E1830775848EA46764A899250B740400006C140080103AB5FD1F0B00DA + D697AD8A1401002F92052A790C207E6C0708004074140080103AB5FDDF081D41 + 70FB3FBC8EC700E25752BA44A5A5F14F1C0000DCF8AF2310426CFFD75EF97216 + 0084B7C9EFA8DC0980CE0D1838488D3FED341D01000083020010426CFFD7D6C9 + CA136AFBE64D3A02BC497E4FB76C58A72374A6A494DD00000070A30000840CDB + FFB5B766F932D5DCDCAC23C0BB56F31840DC4AD80E1000807628000021C3F67F + ED9571FB3F7C828500E337E1B429AAA0B050470000405000004286EDFFDA6301 + 40F8C5A6756B554D75B58ED09962763B0100A00D0A004088B0FD5F7B87F6EF53 + 07F7EDD511E06D4D8D8D2C58D905AC030000405B1400801061FBBFF6CA96B1B2 + 3AFC85C700E2377BFE021E790200C04201000811B6FF6BAF6C39B7FFC35F2800 + C42F3B2797454F0100B05000004284EDFFDA5BB362991E01FE7060EF9E48437C + D80D000080D75100004282EDFFDADBB165B33A71EC988E00FFE02E80F8C93A00 + B2FE090000A000008406DBFFB5C7EAFFF02B0A00F11B327CB81A3166AC8E0000 + 08370A004048B0FD5F7B65ACA60E9F2A5FBE4C353737EB089D29295DA2470000 + 841B05002004D8FEAF3DD94E6DFDEA953A02FCA5A6BA4A6D5C53AE2374867500 + 00003885020010026CFFD7DE863565AAAEB6564780FFF01840FCA6CC9CADF2FB + F5D3110000E14501000801B6FF6BAF7C19B7FFC3DF56BFF6AA1EA1337DFAF451 + 73162CD2110000E14501000801B6FF6BAF6C390B00C2DFB66E5CAFAA2A2B7584 + CEC86E000000841D050020E0D8FEAF3D797E7AEB86F53A02FC491601A490153F + 2984CA9D0000008419FF2504028EEDFFDA5BBB72856A6A6AD211E05FAC0310BF + BEFDFAABC9D367EA08008070A20000041CDBFFB557B68CABA60886D5AF5100E8 + 8A92C56C07080008370A004080B1FD5F7465CB590010C15071F080DABB73878E + D019D6010000841D050020C0D8FEAFBDA3872B489810283C0610BFD1E327A8A2 + A1C374040040F8500000028CEDFFDA93DBFF5B5A5A7404F8DF2AB603EC929252 + 1E0300008417050020C0D8FEAFBDB265DCFE8F6059BB6A856A6A6CD4113A53B2 + 98C7000000E14501000828B6FF8BAE9CE7FF113075B5B56A7DF96A1DA133338A + E7A9EC9C1C1D0100102E1400808062FBBFF676EFD81E590300081A1E03889FFC + FFE2CCE2793A0200205C28000001C5F67FED95B3FD1F028A8500BB86C7000000 + 614501000820B6FF8B8EEDFF10543B366F56278E1DD3113A535CBA24F2FF9300 + 00840D05002080D8FEAFBDE6E666B56ED54A1D01C1D2D2D2CC5D005D30A868B0 + 1A3B71928E0000080F0A004000B1FD5F7B9BD7AF55D555277504040F0580AE29 + 29E531000040F85000000288EDFFDAE3F97F04DDEA651400BA82750000006144 + 01000818B6FF8BAE6C19CFFF23D88E1D3EAC766EDDAC237466E2D469AA7FC140 + 1D0100100E1400808061FBBFF6EAEA6AD5A6B56B740404178F01C44F16012CE6 + 6E290040C85000000286EDFFDA93C5FF1A1B1B740404D7AAD728007405EB0000 + 00C286020010206CFF175D19CFFF2324D697AD520DF5F53A4267662F58A83232 + B8630A00101E1400800061FBBFE8CA97F3FC3FC24192FFB5AB56E8089DC9CDCB + 575366CDD6110000C14701000810B6FF6BEFC4B1636AE7D6AD3A02828F7500BA + 661EBB0100004284020010206CFFD79E5CFD6F6969D611107CAB5E7B558F108F + 92D2257A040040F05100000282EDFFA22B5BCEF3FF08973D3BB6ABA3872B7484 + CE0C1B353AF2F8140000614001000808B6FF8BAE6C19CFFF235C5A5A5AD46A76 + 03E89262EE020000840405002020D8FEAFBDFD7B76AB8A03FB750484C7AAA53C + 06D015AC030000080B0A004000B0FD5F7465ACFE8F9092AD2FE54E00C467EAEC + B9911D010000083A0A004000B0FD5F74E54E12048451E5F1E36ADBA68D3A4267 + D2D3D3D5EC050B75040040705100000280EDFFDA93AB9F6B562CD711103E6C07 + D83525A53C060000083E0A004000B0FD5F7B72F5F364E5091D01E1B39AED00BB + A478D1629596C63F8B0000C1C67FE98000183D7E821EC1E0F67F84DDC635E5AA + AEB64647E84CFF820235FEB4D374040040305100007C4E1600EC3760808E60AC + E2F667845C6363038FC174D1D01123F508008060A20000F85C5676B6CAC8C8D4 + 1144D5C9936A7DD92A1D01E1F5D2B3CFE811E231B0B0488F000008260A0080CF + D5D7D5A9E3478FE808E2A5679E544D8D8D3A02C2EBD5E79F5315070FE8089D39 + 7CE8A01EF94F6D4D0DFFBFD78993C78FEB110084170500C0E764B5FB652FBFA4 + 23ECDCBA593DF0F39FE8080837790CE0EB9FBD591D3D5CA167108B6C9DB86ED5 + 4A1DF94F4B4BB3AF0B18A940310C00944AD37D57C8D798AF935E8A08A64F775A + 86EEE59EE42CAB653B2DC769B9569F7BCF5F0EDE5F5434B83B9F2325AE3DEFCC + C87F54012F933DAC2F7FFB3BD4EC058B54D19061A15A13A0A9A9511D3B7C3892 + E0BCFCDC33EAC5A79F540D0D0DFA550022372F5F9D79E1456AE11967A9418387 + A882418358F15E3B5A7148EDD8BA45FDE537F7AABD3B77E8597F7AC7FB3FACDE + 74EDBB74049BDC29F7C9EBAE5135D5557A0640105D70F915EAC69B6FD191F754 + 541C6A79FF5543AE7386B24AAFB45AABAF735ABDD5E41FB44D4E93DBBBA497A4 + B4C5EA85F4661C97EE24DEF235E6EB4CE26F7A0A00000000BD400A3DB7DC7997 + 9A3EA758CF40C896B03FBDEB4EB5ECE517F50C80A0A200D0B9EE24DEF235E6EB + 4CE26F7A0A00000000BD447686993EB7448D1E375E150E19AAD233E49F64E174 + E2D831557160BF5AF1EA2BAAAAB252CF0208320A009DEB4EE22D5F63BECE24FE + A6A700000000000048390A009D93A41D0000000000041C050000000000004280 + 0200000000000021400100000000008010A00000000000004008500000000000 + 0020042800000000000010021400000000000008010A00000000000084000500 + 000000000042800200000000000021400100000000008010A000000000000040 + 085000000000000020042800000000000010021400000000000008010A000000 + 00000084000500000000000042800200000000000021400100000000008010A0 + 0000000000004008500000000000002004280000000000001002140000000000 + 0008010A00000000000084000500000000000042800200000000000021400100 + 000000008010A000000000000040085000000000000020042800000000000010 + 021400000000000008010A000000000000840005000000000000428002000000 + 00000021400100000000008010A0000000000000400850000000000000200428 + 00000000000010021400000000000008010A0000000000008400050000000000 + 0042800200000000000021400100000000008010A00000000000004008500000 + 0000000020042800000000000010021400000000000008010A00000000000084 + 000500000000000042800200000000000021400100000000008010A000000000 + 000040085000000000000020042800000000000010021400000000000008010A + 0000000000008400050000000000004280020000000000002140010000000000 + 8010A00000000000004008500000000000002004280000000000001002140000 + 0000000008010A00000000000084000500000000000042800200000000000021 + 400100000000008010A000000000000040085000000000000020042800000000 + 000010021400000000000008010A000000000000840005000000000000428002 + 00000000000021400100000000008010A0000000000000400850000000000000 + 20042800000000000010021400000000000008010A0000000000008400050000 + 0000000042800200000000000021400100000000008010A00000000000004008 + 5000000000000020042800000000000010021400000000000008010A00000000 + 00008400050000000000004280020000000000C0FFD2D2F400B15000E8445656 + 961E0100000000BC2A2737578F100B05804EE4E4E5E91100000000C0AB7272C9 + DD3A4301A013549100000000C0FBC8DD3A4701A013B9DC0100000000009E4701 + A07314003AC16D2400000000E07DD93914003A4301A013DC010000000000DEC7 + 1D009DA300D00916010400000000EFA300D0390A009DE00E0000000000F03E1E + 01E81C05804EB0060000000000781F7700748E024027B8030000000000BC8F02 + 40E77AA300D06235CFA3000000000000DEE7A3BBB77B2D274E4501C017897E2C + 3C020000000000DE979D93A347BE95F4DC39957700443B18CF1707B803000000 + 0000BC2D2DAD8FCACCCAD291A7F56A5E9C8C0280FDE13D9FE07726272F5F8F00 + 000000005E24CFFFA7A5A5E9C8D7929A4FB3086027F2F22900000000008097E5 + F7EBA747E848B20B0052B130CD6853C5C8686E6ED2434F1A326C841E01000000 + 00BC68F8A8D17AE45D03B39B1BF5D070E7C9EEDC39E1527D0740FB83C9EF5BAB + 479E346870511016930000000080C0F24301A03EAB5FB4DC37A909BF9B071E01 + A8F17401401693183E7A8C8E00000000005EE3870240536DDCB96FD28A028928 + 00F4ECC3353479BA00204650000000000000CFF2C345DBE69EE7BE3D2E0C24EB + 0E00F960F68733E3761FB8A9A691020000000000A0DB7CF108405343B4DCD7CE + 95A3E5D00995A80240573E9C39B0486B68A9F3410160AC1E0100000000BC243D + 2343150D1DA623EF6A68AA96DCB74D3EECB47875E5BD3125730D00F74145FDC0 + 75F5B5DC010000000000E896A12346AAF4F4741D7957637DD43B00849D2BDB39 + 74C225BA0010EB839A83B05F8FC4F535DE2F000C1FEDFDDB4900000000208CFC + 70FBBFA8AF8BE4BE51F362DDA28935DF2DDD290074F601E2F980ADEF6968F6F6 + 2E00223B27570D1A3C44470000000000AF183ECA1F776CEB0280D1A5BC398678 + FE8C3692F908402CF2215B5B7D6D5D8D4C7ADDC831AC0300000000005EE3973B + B6EB1A7AB406404274B700603E68471FD8FD5AD4AFA9AFABF2FC1D00C20FDB4A + 0000000040D8F8E61180DA4801C0162BAF76C7B6585F139754DC01201F2CE687 + ACADA9F4450180850001000000C07B46F8E41180BA9AAA6877BFDBB972BB7C39 + D192B10860471FDC7E2D32AEA9A6000000000000E8BA9CDC5C3560D0201D795B + D5A9DCB75D4E7C6AD88E792DD6EBDD92EC3B00EC0F6D7F78D3ABDA9A93BE5803 + 60046B000000000080A7C802806969693AF2B6EAEA63F6C56F3B3776B7A44964 + 01C0FEA0661CEBC39B036BA93E79DC170580C2C14354FF82021D01000000007A + DBE41933F5C8FB6A4E9E90DCB759379313BB9939FBB568EFEB964414003AFB30 + F2BA69C28E5B4E561EF5450140AA4A33E696E80800000000D0DBFC94A3B9725F + 931F0B3B47EE4867AF772A197700B87BB736F3C78F1DF2C51A006266C97C3D02 + 00000000F4B6E9738AF5C8FB4E9CA8705FFCEE2C67EE2CB7EEB254AC0160C8D8 + 3411191F3AB8F3E4A9D0FB6614CFD32300000000406F1A3361A2EA3760808EBC + AF62FFF62AA76B9713EB66D8E3844B7401A0B30F6B5E3707D9B271FDABC74F36 + 1EAE8BCC7ADCD0112355E190213A0200000000F496E97EBAFDDFC979376E5C7A + DC19B6E6C2326FF5B174F67A9724AA00E0FE50EE0372B7D7173D686E6E6EAA6C + DAEF8C3D4FD60198C95D0000000000D0EBFCF4FC7FE389C6FD92FB3AC3F639F1 + EBB13461E66CEEB85B92B106809BF9F0E6753B8ECC1D3B7AE080F47EC0630000 + 000000D0BBE4E2ECB4397375E47DC78F1C3417BDDBE5C3562FECB1116DAE5B92 + B9068039A068CDD672A462EF3E3DF6BC1973290000000000406F1A3B7192EADB + AFBF8EBCAFE2F06E2900B4CB853B6849D1930240AC0F65CFBBDF6362E9CD2D0E + CDFBF66EF64D0140D60018366AB48E0000000000A9E6A7E7FFC5FEBD9BF73A5D + 6B0EEC343B378E25D66B1D7D4D8712710740B46FEE9E93D86E72C0ADB66C58EE + 8B35000CD6010000000080DEE3B747B3B76E5CE1CE794D11C06E36772CA2CD75 + 49AA1F0110A66FAD7EAC5EFAA454437C83750000000000A077A4A5F551D366CF + D1913FAC5EFA94DCF5DE9A03CB9CC3CE91DD2D29125500301F30DA07B6E7E440 + ED38D22A2AF6D4D6D49C3CEA8C7D61C6DC623D0200000000A4D2F8D34E5379F9 + 7D75E47D35D5954725E77586ED7261A7B9736461C7F65C8FA5EA0E00C33DD71A + 1F3DBEDF373B01F42F18A8C64C98A8230000000040AA4C9FE3AFE7FF4F1C8DEC + 001033178E44A7D873F67CC224BA0010EB03DBB119DBB73FB454BEBE2D822FF0 + 180000000000A4DECC127FE562475F2F00B4C9817513EEB161CF274432EF0010 + F641D8CD7DD02D87F6EDF4CD4E0062E19967EB1100000000201564EB3FBF1500 + 0E1ED8E1BE03A05D3EEC6A49D3DD0240B40F15EDC39A39D362553A9AF7ECDAE0 + AB02C0D459B3D5E061C375040000000048B6C56F3857656464EAC81FF6EE5C6F + B6008C9A0B5BE36862BD16EBFD1DEAC91D00F607717FF38E5E3307D8A6E2B17E + CDCBBE2A00C8CA93675E70918E0000000000C976E685FECBC1D695BF24B96E6B + EEEB343B27B6C99CE9CDD8E8E8B5B8A5E211007713662C071C69AB973F77A8A9 + F2408333F68DB32E78A31E01000000009269E888916AF2F4993AF287A6CAFD0D + E52B9FAF7086ADB9AFD3A2E5C6764B9A641400A27D78E9DD076C1F784B737343 + 735563CB4167EC1BC3468D56A7F9EC171000000000FCE8CC0BDEA8D2D2D274E4 + 0F954D690724D77586ADB9AFD3EC9CD8348985FD3E339730892C00B83F5CAC0F + 2E63FB04B41EF4F113877DB5138038F38D17EB11000000002059CE38EF423DF2 + 8FE3C722396E6BCEEB343B0F96DE30F3A6D9DC71B725F30E00C38CA31DB01DB7 + 1CDCBF73B7D3FB8A1F17A100000000003F993C7D46E40E6CBFA938B0638FD3B5 + E6BC4E8B95170B890DF37A4225BA0010ED039A0F6E5AB4036E9256B6FCB9754E + EF2BB20DC5BC25A7EB080000000090687E5D80BD6CD9B36B9D2E92EF3ACD9D07 + DBB1696ED1E6BA2D110500F7078AE7434B6C12FFD683FED763BFDC2C8B243863 + 5F61370000000000488EF48C0CB5F89CF374E41F92DB3EFDCF7BB638C348BEEB + 34770E6C33B179AF88F59E6E4BF41A00F60795836A4DEEE3986B3E79F2487DC5 + 89AACDCED857E62E2A55FDFA0FD0110000000020518A172DF665BE25B96D75F5 + F17A67D89AF33A2D5A2E6CCFD94DD8E31E4BC61A006EEE0F2ECD7D025AE31D5B + D7AC777A5F913500969C7BBE8E00000000008972E6F9FEDC7E7DDBF63279C43D + 66EEAB63D384E99326590500FB40A4D907E73E5013474EC2F2654FCA3312BE73 + 16BB01000000004042E5E5F755258BFDB9E6DAAA579F92DC3692E73AADA35C38 + DA6BD2122E157700087300F681DBCD3C07D1FCEF277EB3B5F1D8B15A67EC2B13 + 4E9BAA468C19AB2300000000404FC9AE6B9959593AF28F0627A77DEEA9FBB639 + C37639AFD5EC1C595AD225A300607F78F7D8F4A6B90FBCB9AEAEBAF1D089439B + 9CB1AFA4A5A5A9F32F7BB38E00000000003D75FE9BAED0237F3974E2E026C96D + 9D61BB9C578F4D13761F6D9C30892E00D81FD07C60BB9903B60FDC1E47E26D5B + 57F96E1D0071DE656F623140000000004880390B4BD5F8C95374E42FDBB7AC32 + CFFFBB73617B6CCFB99B618F7BACA70580783EA0FD1EF39A19CB6D10D2CB41CB + 38725BC4D2FF3EEACB7500B27372D5256F7BBB8E0000000000DD75E53BAFD723 + FFF9DF2B8F9802406B9EEB343B079626CCD89E33EC38D67BBA24996B00D81F4E + 7A73C0D29B26B13919A6353DFFF4EF77D41F3959E58C7DE78D57BE35B2500500 + 000000A07BA6CE9A13697E24B9EC7FFEF5C71DCEB05DAEEBB46839B1E985F466 + 9C70C92A00C4FAC0E6604C33076A9F9896E6E686E603C7776D74C6BE23C9BF14 + 010000000000DDE3E7ABFF078E6FDB2839AD333439AF343BF937F9B069D1C49A + EF91441600DC1FD0C4E6A0DCCD5D0D314DE69BB66E5AEECB7500C4256F7DBBCA + CECED11100000000205EF2DCFFEC058B74E43F5B36AF94DBFF2379ADD362E5BC + D1726469C2F4863BEEB664DC01E0FEE0EE26076CC7E6A4B43941AFBEFC902FD7 + 0110FD060CF0ED6A9500000000D09BAE78E7F5915DD6FCEABF2F4672593BD9B7 + 735E3B1796393B364DD8E38449E61A00C23E08BB9993610ED88E2327E895E7FF + BEA7B6B6EA8433F6A5CBAEBE56656666EA0800000000D0991163C6AA85679EA5 + 23FF911CF6D5171EDAEB0CEDC4DFB468B970B49634A95A04D0B00F4A9A7DF0AE + D6DCB477CF960DCED897061616A9732EB95C470000000080CE5CF18EEB545A5A + B2AF5327CFFE3D5BD63BB96CA33334B9ADBB0820CD9D17DBA2CD254CB2CEACFD + 81CD01D82DDA0970CF356D5BBFD4B78F0188375DF34E959E9EAE230000000040 + 2C83870D57A79F7B818EFC69D3FAD7A26DFF272D561EEC6E863D4E984415003A + FBC0F6EBA609333627462A25AD27EAA13F7F775953D30119FB52D1D061EACC0B + 2ED211000000002096C805D48C0C1DF98FE4AE0FFEF93B4B9DA19DE49B5C57FA + 68B9B0DD0CF7D8FD7AB7A5E2DE0AFB034B938337BD7D42EC26734DBB77AE3DB1 + 77E791D5CED8B7DEECF35B580000000020D90A0615AA375C74A98EFC69EFCE83 + ABF7ED5C5FE90C23F9ACD3A2E5B9666CE7C6764BAA6467A6F601D807E43E50FB + 64D827A5E97F2F3DFC8AD3FBD6F051A3D5E273CED51100000000C0EDB2ABAF51 + 9959593AF2A7575F7CF465A76B93CFBA7A770E2C4C6CD8E3844B4601C0FD81CD + 0199660EDC3E317693F9D6F6F73F7C7355FD919355CED8B7DEFEDE0FB0230000 + 000000443164F80875E19BDFAA237F929CF5C13FDE2577AFB7C9679D162BE7B5 + 7363BBD9DC718F25F30E00FB00CCD8DDCCC1BB4F50EBB8BAFA78FD96BDABE439 + 0ADF1A3A62A4BAE29D37E8080000000060BCE7A64FA9ACEC6C1DF9D3E6DDAB5E + 93DCD519B6C967ADB13D172D379626EC71C2F5D6C3E97240D10EDC9C903627EA + F9A7EEF7F563004216B490420000000000E09405679CA58A172DD6917F3DFFF4 + 6F25676DCD61753379AD3BEF35B970CAA5A200600E5298E45E9AB063FB04B569 + 4F3E72CF96C3278E1C74C6BE25CFB3BCF7A64FE90800000000C24DAEFADFF0D1 + 4FE8C8BF8E571C39F0D4A3F76E7586ED7259A7D9B9AE69C21DDB7973D2F4C622 + 80A6C981DA63D3DC27CC69CD8D9BCB5F7CD519FBDA9C85A56AD1D9E7E8080000 + 0000C2EB2DEF7A7764EB74BFDBB04172D5667B4B7B6926B7B573DD68B9B06986 + 3D4EB84417003A3A00F781486C9F0C77B34F5EE3637FFF91ACA8E87B377CE426 + 959D93A32300000000081FD92DEDD2ABAFD591BF3DF2D7BBE5F6FF680580582D + 5A6E6CF742C6A6254CB2170134EC0F6F1FB41D4BB34F589BB67AD933070F1DD8 + BEC919FBDAA0C143D455EFBE514700000000103EEFFDC4A703B153DAC1FDDB37 + 95AF7C4E1E578F9AC7EA66E7BCB1F26269863D4EA854AF0160C6D2EC0396DE3E + 31EE1316692B963EFD5FA7F7BD8BDF72B51A356EBC8E00000000203C4ACF3E57 + CD9AB74047FEB66AE933D116FF33CDCE6FA577E7C1A6097B9C34A9280074440E + D03E787372CC0932E348FBFB0377BDD65479A0C119FB5A7A46867ADFCDB7E808 + 00000000C2411E87BEFE231FD791BF496EFA97DFDD295BD6B7C95B9DE6CE6BED + 7C57FA5E93CA0280396821076E9F0873624C3327CB6E8D07F66D39B9F3D0C1D5 + CED8F7A6CE9AA3CE7EE3C53A0200000080E07BDB0D37461E8B0E825D87F6AF3A + 74607BA533743FFF6F9A3BC735F9AF9913662E25525500B00FC81CA03473E066 + 6C9F28339693D97A425FFDCF8381580C50BCF3831F55F97DFBEA080000000082 + 6BD4D871EA92B75EAD23FFFBEFF30F9ADBFF4DCE6A1702DCF9AD3BFF35CDB0C7 + 4993AC0240470764F7A69913619AFB84498B9CD0BFFFE1AEB29ADA6AA9B2F85E + FF8281EA9AF77D484700000000105CEFFDC467228F4307414D6D55E5DFFFF4ED + 326768E7ACA6D939ADDDEC1C58B87BE17E4F42A56A1140C33E18D3CC89B07B69 + F6096CADA434D455D76F287B393077019C7FF99BD59C058B740400000000C173 + E955D7A8E9738B75E47F1BCB5F7A49725367D82E67D5CDE4B5D1725E7733EC71 + 52F4D61A00666C9A3939F689B24F9E699193FABB7B3EF7741016031469697DD4 + 476FFD921A5858A467000000002038264D9DAEAE7D7F70EE7C6EAADCDF70DFCF + 3EFFB40C9DE64EFC4D8B96E3BAF360618F932E95058068E440ED13614E90DDDC + 27B471CBA6E547366CDBF092330E84FE0505EA135FBA23520C0000000080A0C8 + CBEFAB6EBAFD0E9591E1FF3DFF8D755B36BDB86DCB8AA3CED0E4AAEEDE6EEE7C + 57FA5ED31B19A73978FB04486F8FDD27CC8EA5353E70CFED4F34371F947120C8 + AE006F7FEFFB750400000000FEF7A1CFDEA6860C1FAE23FF931CF4815FDEFAA4 + 339464DFB4488EEAB468B96CB47C577AD3522AD50500FB20EDDE347392EC664E + 5E9B13BCB6FC85439B376C7BD51907C69BDFF12E357BFE421D01000000807FBD + F18AB7AA85679EADA360D8B47EDB7FD797BF74C819BAF3541347CB67ED9C57D8 + BD19A744B20B00E680DC0765CF9B2627C7F4F6C93227D5DD37FEF1BE3B1EAFA8 + 38245F1308F208C0C76E633D0000000000FE367EF214F5AE0F7F5C47C120B9E7 + 9F7EF3E5279CA13BE977373BA7B5735D77B3C59A4FA854DE01600EC43E283336 + CD3E41EE93D826F997B6E2D5C7F61D3BBA6799330E0CD91AF0A6DBBFC27A0000 + 0000007C29372F2FB2C6596666709EFB17C78EEE5EB6E2B527F739C3D69CD469 + EEBCD5B48E927FE11EA7446F6699D10E5E9A9C20BB9913689FE4D613FDF707BE + F698D307CAB4D973D5D5EF799F8E00000000C03F3EF0E9CFAB612347E92838FE + 7AFF9D927B76989F3ACD9DCFDAB9AEB0C729D75B0500FB80CD09709F287302DD + CD9CDCC8897EE5F9BFEDDABE7DED2A671C2857BCF33A356BDE021D0100000080 + F79D7FF9156AF139E7E92838B66F5BB3EAD5FFFC6D9733B4137E3BF177B7FFDF + DE9DC047559FFB1F3F644F20EC847D31EC20288B8808140545ADD75AEBBD6DED + 76FFF6DE6B6B37B57AABD6AAD5D656ADD52E5AB15ABBA8AD7AB56AB15297BA22 + 020AC8BEEF0448C80284100221FFF38CF3A40F3FCF994C809099C9E7FD7A3DAF + DFEFF79C934026832FBFBF7366C6CDB76EF0B7F313E6446F0004FDC0F681D0B9 + 3E40EE837844F8F7EBA08C7FFBCBDD2FF9634A9197007CEBFBB778ED3B758A76 + 000000002071F5291CE07DF9CA6F4757A9E56F4FFE4C32677D068D96CDA8B66C + A69512EE5CD979936B8E3B00DC1F564B1F20DD21D1721F4C7DB0EB1FF07FFEE3 + F7EBB76F5BBBC29FA794C8FB017C9FF7030000000090D8B27372BCAB6EB9DDCB + CACE8E7652C796AD6B5648E6F4A736F4DB4C6ACBCDB336EB6A293B3F21D2A3E3 + 89D2CA1985EDD912927CA564AD732DF9BBD7F7EBEA5AED1973FAF967F8F394D2 + A55B772FBF5D3B6FD1DC39D10E00000000240EB96079F5AD3FF2069F3C22DA49 + 2D4F3DFAC33FAE59396F873F3DE0578D5F7217808EB6741340360682360284BB + 09204ED84640736F00C8E896905182BD8E5AB296BFB3EDC93A7DCDCAB91593A7 + 7D65587EDB0E1DFD754A19306498575B5BEBAD5C9C726F750000000020C95D71 + EDF5DE84B3A74557A965E7F68D6BEFFDF1652FF8D3B0E02F6BF76E0009FC3A6A + E0D7907FC2C27E9044B80340C8DA1EB3A5C1DF867EAD23360372735B578E1C33 + F5747F9E72869F3ADA2B2F2DF136AC591DED0000000040F3FADC57AFF0CEFFCC + BF4757A9E7AF7FB9F3F1154BDED9E64F25E8DB4D00BB1110F47200F7EABF94CE + 9B8D04E744617744EC836577506CE9835C5FCF3CF1D3A565A5DB37FBF394D3AA + 552BEFAB575DE79D367172B40300000000CDE7BC4F5FEA7DEAB22F4557A9A76C + E7964DCF3E71D7527FAA99332CEC4BD9ECAA65336E4238D177005872555FE9DC + 8EB6F42ABFBBB6E5F7EBD2D2D3D22B4E197BCE787F9D72D2D2D2BCB11326792B + 162FF27615EF8C7601000000E0C43A63CAD9DE15D75D9FD26F58FEF4E377FC61 + E5D2C8D57F79EDBF5EEDB773DD1008DA0CB09B00B694BB3E219A6B034042BC1D + 85EDE93C1AEC8F2827F4477E061DD3562E9D5D367EE2A77AB5EFD8BDBBBF4E39 + E91919DE69933E117953C0DDE5E5D12E000000009C18C3478DF1AEFEE11D5E7A + 7A46B4937A36AC5BF4C12FEEF8F2DFFDA9DEEAAFC15FD67A37806E00D8BB0224 + F4CBE8867E1BF64F78F05789B45D631F20DD29B13B275AF260DA07581FF4FA5F + C06FEEFDC6D395874AE51794925AB769E3DD70E7CF239F100000000000274ABF + 8183BC6B6FFF8997999919EDA49ECA83A5071EFCD9D79EF6A747E4CCE8E8E6D1 + A0CC6A33AD564248940D00FBA0D8D13E88F2E0DAD207DD96F40FAE5E3EA764C1 + EB2FBFE8CF5356874E9DBD1BEFBA37F2118100000000D0D40ABAF7F06EF8E93D + 5E6E5EEB6827352D78E31F2FAE5E3977973FD5E01F546E3EB5D93528DBEABC59 + 35D706803E00EE8360FBFAC0E95CCB3EC8FAC0EB2FA1FE17F4AB7BBEFA6A7979 + D1767F9EB2BAF7EAED5DEFFF03CCCEC9897600000000E0F86BDBBE43E40264BB + D4FBD4F52354ECDA5EF4AB7BFEEB557FEA664CBB196033A9CDAA415956CA0AEB + 9F10CDF92680425EBB6F47617B3AD7D7FB4BB9732D59EBFB01A41DAE3DD4AAE6 + C081E231E32F38C35FA7AC8E9DBB7803860CF3DE7DFD55AFEEB03CCF00000000 + E0F8C9C9CDF56EBAE7175EEF7E85D14EEAFAC343D7FF76F5B2397221D97ED49F + 7DFDBF8CBA19602F4A4B1893D10DF8EEBC5925DA06808EC2F66CD90D005D0755 + ABB52BE7EF1E75FA05059DBBF4ECE5AF5356D71E3DBD5E7DFA79F367BFC52600 + 00000080E346C2FF753FBECB1B347C44B493BA56AD9837F7C19F5F2157FF6DE0 + B71B0132EA5D00F1DC09D0EC81DF9588770008DB77E7B622413F3AD6077FBB5E + BB62FEE6B1E77D7E625E464EEABE4B85AF57BF93BC8143877BF3DE7ED3AB3D24 + CF4500000000387AF27E6337DDFD0B6FF0C9A91FFE771DD8BDFF9EEF7FFA81DD + E5C595FE3228F8DB2BFF611B006EF04FB84D80E6DE00B024B8DB51D89E967083 + BECEDD5E7A45F9CE437DBAF73F543870F4707F9DD2E44E809163C779F3DF79D3 + AB3990B21F8200000000A08975EEDACDBBE5DEFBBD3E85FDA39DD4367BD6E3CF + BEFAF78757F85309FBEE1D0061E15F467BE53FD6D5FF84D80C48940D000DF63A + 0ADB73E71AF0756EC3FFC77A0BE7BD5C34E582CB47B6CECB4FF9B7CC97F70418 + 7BE624EF8339B3BDAA7DB2790500000000F1EB7D52A11FFE7FDD623E76BC6CD7 + E6CD3FBCEEFC270E1FAE95E01F6FF8B757FE8382BF3B4F0889BA01A0A3707B12 + EC85ACA534E8EBBC3EF86BF9BFC856FBF6966D1F3074D284BCBC3C3996D2E456 + 9D33CE9AEA2DF960BEB7BBBC3CDA0500000080D8069F3CD2FBFEDDF745DEF5BF + 25282D2DAD7BFCB7D73FB47ECD82627FA9A1DF0DFFB6EC2680047F1925E0C7BA + FA9F3024202722FBA0E903A93B2B769745E6762746EB63BFA8D767FD7EDDCEA2 + 95B3FD798BD0A15367EF96FB1EF0868C1819ED0000000040B8D1679CE9DD78F7 + BD5EEBFCFC6827F5EDDCB66CF6EB2FFF719D3FFD5886F4CBCD99923FDD3CAA73 + CDACC2E6D9849248EF01A0EC157ABDB22F746E4BD8B57BF5DFCED3962F797BD3 + C4E9974FC8C9CACAF2D7294F7ECC09679FE36DDEB0CEDBBE6573B40B00000000 + 47FAC4F4F3BD6FDD788B97D932A25244C5BE7D9577DCF8C9072BF794EDF397EE + 957FF72E00BB111014FE35F0BBE1DF5D37AB44DB0090C06E474B7AEE711935E8 + DBB2E15FC734FF177BA8A04B8FEA8143C6B598CBE2E91919DEF84F9CED959796 + 781BD7AC8E7601000000E023177DEE0BDEFFFBF6355E5A7A225E1F6E3AAFBD38 + E3C9B75E797C953F0D0AFF1AFC6DF8D73B0082C2BF2D65E709215936006C3F56 + 4582BEB3B6FDB4057367154D3AEBB3856DDB77EEE2AF5B84B4B4346FCC1913BD + C3876BBD958B3F8C7601000000B4745FFCDA37BCCF7CF972AF552B894D2DC7B6 + 4D2B97FFE8868BFECFCFE836FCDB72AFFADB0D000DFF0D5DFD4F38C9BA0120EC + DC867E2D7723205A75698B17BDB17AE2D42F8DCBCECECEF17B2D82FC833E79D4 + 18AF4D7E5BEFC3F973A35D000000002D91DC29FCB5EB6EF4CEFDD425D14ECBB1 + BF6A6FC52DFF3BFD577B2A3EF699FF5A12F6DD3B0024F8CB1814FE6D25B444BE + C74382BBA56B0DF542E761A5C15FE791714F45C9C103FB2BB68D3E7DDCB856AD + 5A4BAFC5183074B83774E429914D8003D5FBA35D000000002D857CC6FF0D77DE + E38D1E3F21DA6939EAEA4A0E3FF2C08D0F2E9CFBD2167F29615F3EF64F83BF06 + 7E3B0FBBFAEF867E37FCDB6309235137003494DB70EEF6ECE8CE834A370022F3 + B52BDF2FEF5B787A5AEFBEC306F9EB16A5A07B0F6FD239D3BD8D6BD778C5DB8B + A25D00000000A96EEC9993BC1B7EFA73AF5BCF5ED14ECB32E7CDBFCFFCE38CEF + BDEB4FDDF06FCB0DFF7AE55F370024D807DD01A0EC3CA124D3068090B53C98B6 + 6FCFD5B95EF9B7A15FEA88FE9CB79EDD38E9ECCFF7CF6FD7A9B3BF6E517272F3 + BC89D3A67BE9E9E9DEF20F17F99D847D8E020000003846F2FFFD5FBAF25BDE97 + AFFC8E97959D1DEDB62CDBB6AC5E79F335539FA8AB3BEC067F5DBBA15FD67AE5 + DF5EFDB79B002269C254326E00D863EE7912EC75B4C7EA43BF1DFD5FBCB764E1 + EBABA74CFED2B8CCDC96F7AF40DE1760E829A3FC3AD55B3C7F9E57BD9F970400 + 000000A92672CBFF4F7FEE9D3EF9AC16F7667F6A7FD9DE3DB7DE30FD57BBCB77 + ECF59736F46BF0970ADA049090AFA3067F2D61E7092F91DF0340853D43B5AFA3 + 867FDB8F55918D803D15C587AA0E5416F51D30765C5E5ECB7A3F0055D0AD7BE4 + 25019BD6ADE52501000000400A69E9B7FC8B5DBB4AEA9EFAD3CD333E983B535F + F7EF6E0068E94680867F7BE55F4609FAEE26801BFE837A0923D137003490BBC1 + 5CD6F2A0060576E9695FAFF64B05CD23E3DA55F32A868C38A355EFBE435BDCFB + 01A89CDC5C6FE2B47323EF06BA7C112F09000000009219B7FCFFCBA2792FFDFD + 0F33AE93D7FD6BE89751AFF8DBE0AFE15F460DFF761340C3BF8CC20DFB091FA2 + 92650340E83C680C2A11D4973A620340C6F7DE7C66E3E4A99F1F90DFB653277F + DD22455E1230F2546FD8A9A3BC0FDF9FCB4B020000008024C42DFFFFB275D39A + 55377FF7ECC7EBEA0E6BD897F0DFD00680DEF26F83BF867F0DF96ED84FF8F02F + 92690340043D7BA5A77D3B17BA6EB0E4FD00962E7A73CD94495F3A2D2337AB45 + 6F9175E9D6DD9B7CEE797C4A000000009064C64C9818F988BF967CCBBFAA2EAB + DC73DBF7CFBBBFA27CFB1E7FA9E15F437FACF02F1516FEDD123A26BC64780F00 + 2121DD8E2AAC2F22C1FEA369FD957EA17DADFABB007657ECAC39505BB5BD4FE1 + 9816FB7E002A3B27D79B74CEB95E7EBBF6DEAAA54BBC4307E5DF030000008044 + D426BFADF79FDFBADAFBC215577AD9D939D16ECB1579DDFF13B7FE76FE9C1736 + F94B1BFEDD4D001BFC656E6FFBD70ABAFA1F14FA137E232055360084CCDDF3B4 + 17B6D6F05F5FAB57CC2D1F3EE2CCF45E7D870CF4D72D9ADC2E3460E8306FCAF4 + 0BBC8AF2526FF3FA75D1230000000012C559175CE85DF7A33BBD212346B6F85B + FED5920F5E99F5E803D7BCE34F8382BFCCF5AABF96BDF2AFA1DF067FF72E80A4 + 946CCF0E0DEA4AD7521AE6655343E632669831335A59D1516EF3B725DB64722C + 2723233BF7BE47167FA7679F412D7E13C05AB66881F7C87D3FF38A36CB261A00 + 000080E6D4A77080F75F575FEB0D1A3E22DA81D8BE6DCDEA6FFFE7885F1E3A74 + 40DED4ACDA2F09FD324AF0B725C15FEF02D04D0009FF3A4AE89731D60680BB4E + 68C9720780D2F0AFA392B53CE8B6EFCEC3D6321EF11281C3876BBD658BDF5A3D + F1EC4B476565B7CE8BF65B3CF9B8C0A9175EE465E7E478AB972DF16A6BE5DF02 + 0000008013493EC1EBB22BAEF4AEB8EE06AF4BD76ED12E44E5DE92D2DBBF77E1 + 03E5A54541AFFBD7B906FEA0D0AFC15F4B72A68CC20DFB4913FC55B26E00081B + E0DDD19D079508EACB6680B7BB7CE7C1F5AB17AD3C7DF2256332335AF69B025A + 6969E9DE9011A77893CE99EE95ECDCC1DD00000000C00974C65953BDFFFDF15D + DEC8B1E3FCFF378F441744EDAFDEB7F7CE1F5CFA8BD52BDEDBE92FED157EB734 + F86B69F0B7E15FC3BE867C37EC275DF817C9BC0120DCB5D05E3CA396F8D87AE7 + F6F5FB4BB66F5C3F62C294B159E979F2320244E5B569E34D386B9A57386888B7 + 7AF952AFAAB2327A04000000C0F1D6AD576FEF3B3FB8CDBBE8735FF472F35A47 + BB50072B2AAAEFFFF9D7EE9F3FE785CDFE5242BE5EEDB77700D82BFF76132028 + FCBB9B005A42C7A4936C1B00CA86764BD6F2CBB07D99079DA73D9DDB1291F9A6 + 0D4BF6D6ECABDE7ACAD8D163D2D2DAB0C5E6E8DEBB8F37EDC24F79ADD2D2BC35 + CB9779870FCBBF1300000000C74366569677E9572EF7BE79E32D5EF75EBDA35D + 58B5B53B6BFFF0BB1F3DF4EADF1F5EED2F8382BFBB011074F55FC3BF96E44A0D + 3736FC5B49B711908A1B0061C7947B8E2DE1F65AAD5931B72C33B36369D79EC3 + 4EC9CBCBD3F310959E91E10D1F353A723B52F9AE126F1B2F0B000000008E89BC + 9BBFFCFFF5776FFB8937F6CC495E7A7AB246B7A6555A5A5AF7D25F7FFBC7671E + BF6391BF6C28F8DB0D0009FD7603C06E04D8C01F16FE93522A3C8B6205720DF1 + C2CE953DA6F43CBDDA1F592F59F8DACE1E7D06EE1F3068F4B08FDA70E5B76D17 + F98FD4F84F9CED55EDABF4B66CD8E07753E6DF0A000000D0E4E475FD93A79FEF + 7DFB07B779E7FCDBC55EEBFCFCE8110479FBF5279E79F4FEAB66FB530DFBB201 + 20213F6C23C0BDFAEF5EF597B27337D004F59246B26F000405F830F69C48A8FF + 685A3F0F2A513F7FFFDDBF6D2D1C382AA3679F21FD658D606DDB77F0C64D9AE2 + 4D9C76AE575373C0DBBC61BD57C74B030000008050191999DED44F5EE47DE7E6 + DBBD29E75DE0E5B76B173D823073DF79FE1FF7FDF80B2FFB531BF6DDE0EF5EF9 + 0FBBEA6FCB867F1BF69336F82B0DB9C9CAFEFDDDB9967EC49F6C76C85C462979 + 533FA94C3366999277FED7512BC7FF163977FCF2CDCF0D1D317182BF461C4A8B + 8BBDBF3DF9B8F7DA8B2F78076BE4DF200000000091959DED4DFBB78BBD0BFFE3 + F35EC7CE5DA25D3464E9876FCEFEC155673FE9E775F97C7FF733FE1BDA0890D0 + 6F370224F4CB2801DFDD005061F3A46243733272FFFE76ADE15FC8A8A51B005A + 7603402B6C032052191959B977CE98FBD5C2C25347FA6BC469777999F7E2D37F + F15E7EFE59AF7AFFFE6817000000687972F3F2BCE9177FC6BBE0D2CF46EEA045 + FCD6AF5BB4F87B5F3BFD9143876A2454D8E0AF6537006CF097D0AF1B00B6ECD5 + 7FA19B00CA0DFC6C00343337F8EB68CB6E02D88D00F72E00DD00B0F5B14D80D6 + F91DDADCF5C0FB57F6E855C8CB011AA972EF1E6FD6B34F7B2F3DF394B78F8F0F + 040000400BD226BFAD1FFAFFC30FFF97F2FAFEA350B475DDBA6BBF36E6FEFDFB + 76EFF39712F2E5EABF067EBB011016FEDD970068D8D7D196D051D87952D2B09C + ECDC9F43D71AFEB582360124F8DBB21B0032D7D06F37037264DEA94B9F76773F + F0DE551D3A77EFE1AFD148FBABF679AF3CFF57EFD599CF7BC5DB8BA25D000000 + 20F574EBD9CB9B7AE1A722B7FBCBD57F34DEAED2EDDBAEFFFAF85F94966CDEED + 2F25E0EBADFFBA01604709FB3A4AE8B7E55EF58F27FC0B779D743428A70AFD79 + ECCFA5E15F4A42BF8EBA0160370164AE7701B87702E826806E0844AADFC0515D + 6EFBD9ACABF3DB1674F4D7380A757575DEEA654BBCB75E9EE5CD79FDB5C82708 + 00000000C9AE759B36DE84B3A67993A69FEF0D1C3A3CF2D17E383A957B4B4A6F + BAFA9C7B37ADFB7097BFD42BFD5A36F86BE9957F2909FC36FCDB0D0009F5EE06 + 80D2B9ED25B5547B06EACFE3FE5CB2D6D24D0009FB7613C06E0448F877EF0608 + DD0418316A6A8FEB6E7DE29B6C021C3B7993C00FE6BC13D90C5834778E77984F + 0F000000401291CFEB3FF5F433BCC9E79EEF8D1E3FC1CBCC92F88063B1774F71 + D9DDB75EF6EB250B5F93DB86E30DFF12F6EDD57F0DFE1AFE6594601F16FE85AE + DD7ED2728372AAD0B06FD9F0AFE56E02E85D001AFE83EE04703700226BB913E0 + E6DB675ED9A16B8FEEFE1AC7C19E8A726FF66BAF44360336AC5915ED02000000 + 89A770F09048E8972BFE6DDBB78F7671ACCA776D2FBAEDC64FFE66E39A8525FE + D2067EBB01E0867F2D0DFEEE957F0DFF5ABA0960E9B194E286E454A13F97FBF3 + B91B00B276EF02D0D2BB0024E0BB1B01F5C1DFCEBB74EDD7FEF6BB5EFB9FAE7D + 0A0BFD358EA32D1BD67B6FBF32CBAF7F78E5A572D70F000000D0BCE463FB269D + 739E37E9DCF3BC5E7DFB45BB385E8AB6AE5F77EBB5537F5BB2736385BF74C3BF + CEDDE02F73BDFAAFA1DF96847DF7AABFAC2D0DFE6C002409FB73B9735BBA2110 + B409E0BE14206813C06E00447AF2E900B7FDEC8DFF2C1C34F2647F8DE34C5E12 + B06CE107DEDCB7DEF096FAE38EAD5BA24700000080A6D7BD576FEFE45163BC71 + 93A778C3FD312D4DA2048EB78D6B172EB9E99AA97FD8B7B75CDE20CC067DDD00 + 8815FEB582C2BF067E0DFF5A2A6C9E1224FCA622F7E7B26B99DBD2BB00B4EC06 + 802D7713A0FECABF3B666464E5FEF0EE573E3BECD4C9E3FD359A506971B1B76C + D107914D81250B3EF0CA4A8AA3470000008063D7A9A0C03B79F4D848E81F7EEA + 68AF639782E8113495A58BDF9EF3C3EF4E7BF2D0A19A58EFF2AFA3867F29BDF2 + EF867FBDEAAF65837FACC0EFAE939E0DC6A9C8FE7CEE5C4B42BF8EF16E0248D0 + 77CBB91B202DE7FADB9FB9F0F489179FE3AF7102C8A709EC2CDA16D90C90BB03 + 64DC5321770B01000000F191D7EFCB957D09FC12FC0BBAF7E0DDFB4FA079B39F + 7FF927375DF2A29FD3F5F3FD35EC6BE077AB31E15F02BDBB01A0C2E62925D59F + C9EECF67D71AFA856E0248E8D7517A12FADD8D00DD0008DA08703601BCAC6F5C + FBF059A3C65FFCE94E9D3AB97F173431D910D8BA7183B774C1FB910D81E58B16 + 7AFBABF6458F020000009E97D7BA8D37ECD4511F5DE1F7AB57BF9308FCCDA0B4 + B4B46EC1EC67FEFAC0BD57BCEE2F6DC00F0BFF12F67594D06F4B83BF8C12E675 + 949ED04D00E5067E3600929CFD39DDF9F1D80490B1FE2500CE9875D957EF38ED + 92CF5FFE85F4F4AEF27DD04C6A6B6BBD9DDBB67A455B36476ABB5FDB366F8A8C + 7BF7EC8E9E050000805494DFB69DD7A34F5FAF47EF3E5E77BF6494EADAB357E4 + A3FBD07C6A6B77D63EF397871FFBF3C337BDEF2F35E06BE8B7A30DFD3A1ECFF0 + 9FB2C15FD9309CCADC9FD3AE65DED84D0009FC326AF8D78D80C00D00995FF899 + AB867DF68A9B2E6F93D949FA4830B201603704749340360C64E300000000894F + 82BC047A0DF736F0CB0600124FE5C1D2034FCEF8D1EF663E73DF727F69AFF4BB + 1B001AF835FC4BD8B71B00F23FED321E6DF8176C00A41837F8EBA8251A7B2780 + BB01E09604FEC866C0A4B32E2BBCFCBB0FFD4FFBD6ADDBF86B2481DA4387BCE2 + 1DDBBDE2A26D5ED5BE7DDEFEAA2AAF7A7F5564B4F3EA2AFF983FAF8EF6755EBD + 7F7FF43B010000201E39B9B95E4E5E9E979BEB973FEA3C27AFF547EB68DFCEF3 + 5AB7F60A7AF4F40ABA75F7D233E47FD3910C2AF6EDAB7CE49EFF9EF1CEEB7FDE + E02F35ECDBC0EF966E00D8E01F6FF897B996D051D8794AD3D0DB52B83FAFAE65 + D41247BB09A01B01F6EABFADEC9163CFE971ED0F1EFB7A7EDB828EFE1A29AEAE + EEB077B046FEFB04000080866466657AAD5AC9FF7623D5EDDD535CF6B3DBBFF8 + 9BC5EFBF52E42FC342BFF66DF03FDEE15FB8EB94A581B7A5B13FB7CE65D412C7 + BA09501FFA9D7556BF01A776BEEE9667BED2A357617F7F0D000000002D46D1D6 + F5EBEEBEE592DF6F5CFF61A9BF0C0BFD5AB1C2BF6E0070E53F4E12645B220DF9 + 2A682D4F86586390A02790F48EA88AB21D075EFEDB830BFA168E48CF6DDDA530 + 2F2F2FECFB01000000404A9077FA5FBAF095577E70F59427CA4A8BF6F82DBDE5 + DF96847C77034082FEF10EFF2D524BDD00501ABC8302B80DFB41A30AEA29E905 + F60F1FAE3DFCCEEB4FAEAD3B7C70F349C3CF1C9293952577070000000040CAA9 + D85759F9DC63B73DFAC8AFAF7AC7CF42F219FF12F66DD0774B370234FC4BB8D7 + F168C2BF15D46B11D800387274B9A1DF8EB1E8134A46FB751FB37AF97BA51FCE + 7B69E1C8D1D3FAE4B7EDC8FB02000000004829DBB7AE5A7BC70D9FFCCDBC779E + DBE42FDDA0AF25E15E370564AE65AFF86BF03F96F0DFA2B5F40D002B2CD40785 + FFA027921EB3EC79415F135151B6A3FAE5BFCD58D8BBDFF056B9AD3B17E6E5B5 + 0EFBBB000000004052D8B5ABA4EEC3F767BD72F335D3FE5CB66B9BDCF2EF86FE + A0D2D0EF8E1AFCB524EC4BC68A37FC07F55A1C36003EA2813B2C786BE8B76310 + FB84D27950CF252F09A89BFDC653EB6B6BAB370D1B396970666696BC79200000 + 0000249DFDFB2BF73EF5E8CD8FFEFEC16BDFF5B34E3CB7FB4BC9DC867EADE311 + FEE16303E0E3E2DD048825E8B8F4DCBEF6EA6BCD8A7965F3E7BCB868E4A8A93D + DBB6EBD4C9EF0100000040D2D8B679F59A1F5E77EE83EFCF9DB9D95FEA9BFBE9 + 2640D866806E02D80D0037F84B49D8D7920C154FF8777B2D161B0047D2F01FCF + 2680B24FA6A0275BD868CFB5736F77F9CEEA592F3CB8A057DFA1ADF2DA14F4E7 + 250100000000129DDCF2BFE0BD99FFB8E5BBD3FE5251BE63AFDF0A0AFA52BA09 + 1074D55F4609FA76034042BECE253B3526FCC36003205C50E8962790BB09A0EB + 20F6988C6E89C07E5DDDE1BA77DF7C7AFD8103FB369C3C78F2E0CCDC6C5E1200 + 0000002021ED2FDBBBE72F7FBAE9913F3DF4BDF7FC2C6343BE5EFD8FE7CABF86 + 7E1BFEA5740340B2921BFEED2680559FADF02F6C0004B3E1DED240EF867EDB17 + 7ACC9E133497D13D577B915AB76A7EF9DC79CF2F3C65E4B49E6D3B74E6250100 + 00000012CAD64DAB56DD7AE3393316CCFDFB167F29A13E28F0EBD57E9D6BE8D7 + 5183BF0DFF12EEDDF02FA5D92956F8470036001A166B1340B8C72D394F9F7C76 + 6C682E745DB7A7A2E4C0AC990F2E6CD3AED3DE5EFD869E9499919D1939030000 + 00009A4955F5DEAA97673EFCDC4FBE7FD1B3BBCB77CA2DFF4157F9837ABA01A0 + E1DF961BFE6DE8B7992956F8777B888A155E113BE44B2FEDA369FD5C475BB2C9 + 622BC32909F35A590DAD7BF41AD4E19BD73E72E1D053268EF3D7000000007042 + 959696D6ED285A31EF81BBFE6B66D1D655157ECB0DF50DADC342BF2D0DFDEE28 + ECDCD25ED031F8B803A0F18236032C79B2C939EE93CE7D32068D5A2268EDEDDD + 535AFDDAAC4797EFDCB979EDA021A7F5CACDCBCF8F1C05000000802656B6ABA8 + E8B187AFFFC3EF7EFD9DB7FC6C52E9B7F4AABE947BB5DFAE6DF8B79B0036F0DB + B996CD45B654D81C011A0AB3F888FB38D9B5CC834AEF08904D16BD13C0DE11A0 + 7700C85CAEEEEBDD00F6AE80B03B02E49CAC8C8CACEC2BAE7E60D2F869179FD7 + 26AB136F1208000000A0491CACA8A87E63F6D3B31EBAEF9BEF1C3A54A3C15E43 + BD94AC35DC87057E1925E087857F1D25C83736FC0B770D870454C4CF3E5EEE5C + 4B68F897B2E15F4B3701EC46809606FCA0E01F587DFB9FD2F1CA6B675C3468C8 + E9A3FC35000000001C37AB97CD5DF8C03DFFFDC2A60D4BCAFCA5067B2D7723C0 + 960DFFB634F86BE8D7D2B5067D990B5DDB801F36470C1240113F0DF8CA5D0BE9 + E91330E8B8A5E7C9186B1EB37697EFAC7EF5C58797EED9BD6B53BFC163FBE4E5 + B66EEDF701000000E0A895961717FF69C6FFFEE9C17BAFF8E7EE8AE2A0CFF597 + 3B0124E0BBFDB04D0009F8326AD8773700A424E3E8286CF651768E466828A022 + 987DDCDCC750D6B6F46E003BDA3B02EC9D00F1DE11105A593979395FBF66C694 + 89E3A79E9391DF5D7A0000000010B743878A6BDE7EE395571EBCE77FDEA8A9AE + AA96965F36D487950DFBB634F8BBA15FE712E8DDD19665D7EE31344002291ACF + 7DDC82D641A59B007603C06E0268056D00D8B9BC2440D7813568D8F8CE577CE7 + FE8B0B078D3ED95F030000004083D6AF5EB074C62FBEF1DCEAE5EF95F84B1BEA + E5CABECEB56F7B76B4A5A1DF0DFF52B296101F14FAB5AC86D66880844D1C3D09 + F3CACE5DF2C48C755CD827AFCEED18F48F22EC1FCAE1D292ADFB5F9EF9D0A203 + D5FBB7F6ED3DBC7B6E1B3E2D0000000040B0F29D45DB9F7AEC474FFEF2A75F99 + E567893D7E4B6FE597D1BDD53F682EA35650F8D7C02FA3ADFA0CE397B0B9C6B2 + 6BF718E2D45028456CEEE317B696ABFC42D67A17801DB564434647F74E005DCB + 157E99EBD57E7B2780CCDDBB03FC795AD625977DEFE4E9175D31ADA06BDFDE7E + 0F00000000BC92A24D9B67BD38E3B5679FB873A99FC125C84B70B7413EA8A773 + 09F4DAD3929E8E61C15F02BC3B0A990B37E037B4469CDCC08AA3631F47F731D5 + B58C6EC5BB0960E7B634F4DBB909FEEE989675FEA7AF1C7CFEC5DF9ED6BBCFC0 + 42BF07000000A0052ADABA76DDCC677EF9EA4BCFDDBFDACFDD36E4BBA3DB73E7 + 5A6EF08F27FCBB25745476ED1E432349F8C4B1731FC7A0C7557A5A42C3BF94CE + 7513403700740CDA0090B5067C2D1BF89DF07FE4F1A9E75D5E78D167AF99D6A7 + DFF0C1FE1A000000400BB071DDB295CFFFDF3DAFBE31EBD1F5FE5282BC04F4A0 + 702FA39DEB715DCBD7D99E867E0DFC3A86057F990B5D4BB9DC5ED03968040DA3 + 38BEECE3EA3EC6B2B625215FC8A86B2D0DFE762E01DECEDDB281DFAE03370426 + 4CF9F7DE175F76C3D48E1DFB9CDCA95327F9F301000000A490D2D2D2BAB2B2CD + 4B9F7BE227AFBDFBC6D35BFC960DF46EC80F0AFB76ADA561DFCE25D4DBB99604 + 770DFCBAB665D9B57B0CC788C0D734DCC735681D56762340C3BF96067F7703C0 + CE6D05857EF758A4469D767E8FCF7EE5E6A98386F53FA555AB2EF26701000000 + 48627575258757AD58B7E8A9DFDFF6CF85F35F2AF25B36C00705FBB04D002D0D + FC3AB76503BFAE25C007057E5B56436B1C23099A683AF6F1751F6B596B091935 + 78CB286B09F6DA97B93B4A7897D1CEEB43BD2909FB722C6823E088E343474C2E + F8C2576F3B6BC8C943C6A6A777951E0000008024525BBBB376E5D295EF3FFEC8 + CDAFAF58F256B1DF92402FA13C2CD837745C8EE968E736ECEB28A15DE632CA5A + 685FC8A865D9B57B0CC789864F340DF7F10D7ABCA5A72534FC4BC95CD73A9792 + 601EAB6CB8D7B5867F59876D04D457FF81A33A7EF1BF7F3AA5D7C8D3C776CE6E + 97EBF70000000024B05D0776EFDFBA78EEFB8FFDF6FA37D6AD5958E6B76C880F + 2A0DFE3A9751D75AB28E5512EEB524B8DBB9AE85AEA55C6E2FE81C1C071A3AD1 + B4ECE31CF4984B4F4BC8A8C15FCB6E00684998D7D12D09F23A06951C0BDA1438 + E26BF2F2DA655F78E955278F9F78C998BEFDBB0D4E4B2B90E30000000012C0E1 + C3C5B59B37EC5839E7AD6717CCFCBFFB965655ED96CFEC7703BC8C6ED8D77950 + E93119DD9240AFA35B36E4EB5AD8BEB27315D4C371A481134DCB7D9C831E77ED + C9185412F475D4B984715DCB5CD73A7703BD9DC7EA691DF1B53D7A0D6A7BD17F + 7C77D4A871D3471774EDDBDBEF010000006806C53B376D593877D682179EFEF9 + 82A2ADABF7FA2D09E56E800FAAA063415F2BA39404793BD7B584755DEB5CC6A0 + 123A0A3BB7C2FA384E2444E2C4B38FBBFB3B90B596905142BDD0E06F472D09EB + 76EE960DF43AD6877B6774FB761DA953C79CDBEDBC8BBE3E66F8A8F1A3DBE477 + 6BEFF70000000034A1CABD3B2A962D7C6FC1AC177EF3C1A20F5EDEE1B734984B + 6980B721DE5D37D497D12D1BFA75AEA5015FE6427B428FE95AD9B57B0C4D4C43 + 264E2CF7710FFA3D484F4B48B0D7B5CC85F624946B5FE67613C0CE6D880F9A6B + D00F5BBBE7A7A7A565644E3BFFF2FE9F38E70B63FA0C1D3EA24D56A76CBF0F00 + 0000E038A8AC293DB079C5B2256FBEF2F807AFBEF4BB75870F1FD2DBF7A5DCD0 + AEC1DE867A776DCF0D9A4B8877E71AEC652EA3AE6D494FD89ECBED059D8326A4 + E112CD23E8F1777BB20E2BDD00B0A32D09E93ABA731BEA83E6766CE8DCC8BC4D + DB8E399FFACCD5C3C74DFEF498DE7D0B06F2718200000040E3C9C7F76D5A5FBC + FAFDD97F5DF0FC33F72EABDC5356EDB78302BBEDE9DA3D66CF099B87857EB734 + D8DB795059EE5A04F57002486844F3097BFCDDBEACB5848C1AAE65D4633A97D1 + 968674776D2BAE901FC75C2AAD77DFE1ED3EF999AB4E1D3C6CDC8036BDFA16F2 + 490200000040387907FFCAAD9BD6AF5A3E6FED8BCFDCB768CBA665BBFDB6046D + 0DE6524101DEF6DC75D8DC96867B77AD2561DD1D859DCBA865B96B15D64713D3 + 4089C4607F1FEEEF46D732BA2524D8EB5A83BECC2381DC99078D6EB9A15ED761 + 7DB7EABF6F464656C6B8332FEE79DA840B079E3460D480ECDE05FDBA651664F9 + C7000000801669C7C1E29A035B8A376E58BB70EDFC7767AE9937FBB96D870ED5 + D8902E015BE7B6C2027F583FA8F47BCBA87309E5EE5C4AE71ADAED5C463BB7EC + DA3D8666A2E11189C1FD7D04FD7EA4A7257494C0ADA3F4DC51C2B8AE35A0DB79 + 24AC375061613FACECF7ADFFF3B2B2F2B2CE9CF2EFBD4F39EDBC8103879C5298 + 97D9A16FFBAEDDE47B0300000029A962E78E43FB6ACA37AD5DF5E1FA0FE7CF5A + 33FB8DA7B7D4D454D5F887DC406EC758152BE08795FDFE762E015DE632EADA8E + 4247E969091D2DB717740E9A8186472426FBFB717F57B2D612766D4B42B73BD6 + 87F180B51BDC83D68D29F7FBEA5AC75679796DB3274DFB7CBF9163A60FE83F70 + 78FF2E5DDBF74A4B2B9063000000405292CFE72F29DAB365DDFA25EB177FF08F + B56FBFFAE78D55557BE433FA250C8785712D771D6FC5FA3EFAE768CFAEE5EFE4 + 8E4125DCB5B26BF71812840442242EF7F713F4FB929E96B06BB72474EB185661 + 41DD56BC3D2DFBBDEC5C46F9FB1CB16EDBBE2077CAD42F9E347CF4D9FDBBF7EC + D7BD7D872E5D0ED4B4EAD0B9731739170000004828BB7695D46567D595579497 + 946CDFB671FBB205FF5CF7C66B8F6DD85351BCDF3F2C61D88671772DA3CEB5DC + 75582FA8AF6B19DD7950C9DF47C7B012EEDA727B41E7200110A89243D0EFC9ED + C95A4BD8B55B12B67574E7B66C30B7A3CE6DB9E7851D73CF933F3B687DC4DF29 + 2FAF6DD6B091133B170E185BD0B3CFE082821E7D3B776CDBB34B5A4187CEBCC1 + 200000004E0479A3BEC3C5E5BBCAF66C2B292EDAB46BDBE655C5EBD7BE5FBC7C + F13BBBAAAAF6C8EDFC6EB096F0ADA3F482D67ABEEDD96AE8987BDC8E6EC99FED + CE650C2BE1AE95BB16413D24100959487C61BFA7A0BEF4B484BB9640AD6B9DDB + 51E736846B40D7B281DD1DEDB9BAB6C7ED319DDB9EFB67BBA5FDFAB167EFC16D + 868C9858D0AF706497EEDD077469D7AD67972E1D7B74CE6F5BD7919712000000 + A031E4D6FDBD7B5A95959415EDDABD635BC9F6ED6B4B36AE5F5CB272C93BC5DB + B6ACAAF44F9190EB06680DD5B6A42F415C47F7B8EDD9E0AE658FD9E341A396AE + ED9FADC7746E479D0B5D4B09776D05F544581F09424214924FD0EFCDEDC95A4B + B86B0DD1B63464DB80AD730DEC76AE65D73A777BB1BEC6F6F4FBBB7F1F29F7EF + A4A3CE457D2F232B277DE8B0333AB6EFDC3D2FAF75879CD6ADDB67B7C96F979D + 9DD32627AF757E764E4EEBEC2CBF72B272B232B372B2B3B2F3FC6359D9E959D2 + CBCCCA3C94979D995999959EDF2D33F29D01000090D06AF7EE3878F0609B9A83 + 195507AA6B0ED6D4D6EC3BE04F0E1C3A78A0A6BA66BF3FAFF227FB0E54FB55B5 + 6FAFBFAEACAEDCBBFBC0BE7D15FEBABCBA62D7F6AA15CBE7941DAAA9D6F02CA5 + 01D90DCD3ABA73DBD3EFE3067529DB93B97B8EAEDDF374AE6BFDB3ED5CCAFD3B + C9DA96F484ED0977ADDCB508EA2181495042F209FBBD05F52361385A42470DCC + B276C373D81816CC6DDF0DF6B1D63AD7EF6DE7417F8EEDE95C469D0BDB0B2AE1 + AE857BBC5E4646565A4E5E9B74FF3F9147F47DEE1A00000027D6470134CDABAB + AEAEAAF583BB865AA50155461B5675ED1E0F2AFD9E3644EB5C46776E7B6101DD + 06793B8FB5D6EF678FD9BE7EEFB051E85A684FD7326AB9827A22AC8F04458049 + 0DF6F718F63B95BE96B23DB7DC20ED866E1BD2C3E6B634E0DBB2DF27EC78D03A + 6C14BA0E2BE1AE857B3C88DB0F3B0F0000004DCB0D9E0D055419ED39BA768F07 + 951B9E638D5AEE5A4A43BA0DEBEE71B7A7E787CDF5FBD851CB5DBBA5827A967B + 2E9218012635342698CA312DE5F6C2427450E8D651E7EE0680DB6BCC71F75843 + A3D0B52DA1C775ED1E17766DFBCAED059D03000080A6E706D1A060EA06575DEB + DCAE850466618F4B69DF0DDA61A31BCCC3427B638EBBBDB0D12DE90BDB53413D + 977B2CD6B948020498D4D498F02AA33B0F5ADBB221DB06701D837A3206857F9D + 07AD6D2F68747BC21ED3127A5CD7EE7111B40E12D677C57B1E0000008E146FD0 + 0C3BCFF6651EB4D69E8E4161594AFB4161DBEDD9D196DBB36B99DB90EF1E0B1B + DDB95B226C2D7454EE5A04F590C40828A9A931C1557B32DAB98E766E437450E0 + D6F9B18CF19C2363582FA8849EA3DCE342E7EEE80AEBBBE23D0F000000478A37 + 78869DA77D771432D7523297302DEC71B76285F058633CE7C433EA5C684FD8B9 + 9E2762F5ACA09E08EB234911505A86A0DFB3DBB36B09CB4AFB32DAB99E6383B5 + 0DE2EE71ED3566D4B2EB58C7E22915D60B1AC334741C0000004DABA1E0EA8E42 + E65ACAF61A2A1BC6DD75D8B178479D8BA05ED071A1E7091D859E2B6C5FB86B11 + D4430A21C0B40C61BFE786FA32DA73DCBE2D21A3047261E76E8017B17AEE319D + DB9E70CF13F63C5BC28E413D3B2A77ADE23D0F000000C74758386D28D8EA3A68 + 0CEBB9258202B9EDD963EE3CE8FC787AC2CEF53C5B424711D6B71ADB478A20B4 + B44C41BFF7867A320F5ABBBD868278AC8A27EC8BA0F36C0919EDDF45473B0F1A + 55437D000000240637B486855FB76F47B7D750E8D6D2C06EE7FAB5EE796E2F9E + 12F6EF22DCE32268ED8AB7871446986999C27EEFB19E0FF698CCDDB58EEEDCAE + 6D20B7C71A0AF4B684DD0C9031ECFBBA6B11D41341E7C4AB31E7020000E0E835 + 26B0CAB9F67CF76BF5B87B8EEDB96B1BC665D4D06FCF8B5541E70BF7FBDA63EE + 5CD9BEB07357D8B1585F831444708115F47C88D57347617BEEF17883BA8CC7E3 + 5C11D413BA8E754CB8C744500F000000275E50806D28144B4FCB0AEABBBD7882 + BAAE1B7BAE708F0B1D85DBB3C754BC3DB44004195861CF8758CF137B4CE6EE3A + 6CD4123A6A901741E7C45A0BB767479DABA0735C413D11D6070000C08915166C + 1BEACBE89E637BEE79BA166EAFA1B5080BF8761D340A7B9EB07357D8B1585F83 + 1684208378C41B8E6D4FE6EE39B6E79E2B626D0008BBB663504F479DABB07383 + 847D2D000000128B1B70E309C9EEA8641D764ED8319D0B5DDB9EBB012074EE9E + 2BDC9E7B5CC4DB03EA1168108FB0E74963C373502F68147ABEDB8B350A99BBEB + A0D115D4777B615F0B000080E6E506DFC68463EDBBA390B9BB8E350A996B29F7 + 3C7B4CB8E70B776D851D8BF535008106C7249ED0AC6C5FE7B1BE3EE89CA33D26 + 82D66EAF218D3D1F00000027466383AF9CEF7E4DD8DA1DC5D11E53B1BECE15EB + EB814621D0E058843D7FE2795E059DA33DF798DB8FE76B83CE5161E7C4FA1A00 + 0000242F3730EB3A569076CF093AB7A173E2F9DA58C2CE89E76B818F21F0A029 + 043DAFE279AE8505F2585FEB9E13CFB92AECDC58DF03000000C923DE001D2B50 + EB31770C12764EACAF5141E7C4F37540DC083A680A0D3DAF1AF3BC0B3AD7ED85 + 7DBF78CE0BFB5A000000A4A678827658F08EE7BCB0AF0DD2D0B98DF95E408308 + 3F680EB19E77F13C27C3CE696C3F96A3F91A000000248EA309CF615FD3D8BE15 + EB9CA3F93B02478D9083E610EFF3EE589E9F8DF9DAE3FDEF807F57000000C7C7 + F10EC88DF97EC7F267C7FBB56C00E08422A82091C57A7E36C573977F0F000000 + A9A9298276ACEF49B047424A8F8E40223A96404E98070000C0B120C423E5B001 + 001C898D03000080D472B4419E0D00A41CC20E5219CF6F0000001C0DC23F0000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -2800,8 +2800,8 @@ object SplashScreenForm: TSplashScreenForm 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000000000000000E9C6F3FE3F - D71C5008D1829C820000000049454E44AE426082} + 0000000000000000000000000000000000000000000000000000000000000000 + 008096C6F3FE3F4DE24F1B78A2530E0000000049454E44AE426082} FileName = 'E:\YandexDisk\Development\Delphi\AErender Launcher\src\AErender ' + 'CC\icon_512@2x.png' diff --git a/src/lib/AErenderLauncher.AerenderParser.pas b/src/lib/AErenderLauncher.AerenderParser.pas new file mode 100644 index 0000000..f36c4db --- /dev/null +++ b/src/lib/AErenderLauncher.AerenderParser.pas @@ -0,0 +1,300 @@ +unit AErenderLauncher.AerenderParser; + +(* AErender Data Parser *) +(* Lily Stilson // 2020 *) +(* MIT License *) +(* *) +(* Copyright (c) 2020 Alice Romanets *) +(* *) +(* Permission is hereby granted, free of charge, to any person obtaining a copy *) +(* of this software and associated documentation files (the "Software"), to deal *) +(* in the Software without restriction, including without limitation the rights *) +(* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell *) +(* copies of the Software, and to permit persons to whom the Software is *) +(* furnished to do so, subject to the following conditions: *) +(* *) +(* The above copyright notice and this permission notice shall be included in all *) +(* copies or substantial portions of the Software. *) +(* *) +(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *) +(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) +(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *) +(* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *) +(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, *) +(* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE *) +(* SOFTWARE. *) + +{$EXTENDEDCOMPATIBILITY ON} + +interface + +uses + System.SysUtils; + +type + /// + ///A set of constants that will determine current aerender state. + /// + TAErenderLogType = record + const + Information: Integer = 0; + Rendering: Integer = 1; + Error: Integer = 2; + end; + + /// + ///A more convinient way to call Single-type framerates. + /// + TFrameRate = Real; + + /// + ///Record that represents standard After Effects timecode data. + /// + TTimecode = record + H, MM, SS, FR: Cardinal; + private + {Private declartions} + public + constructor Create(const H, MM, SS, FR: Cardinal); + procedure Clear; + + /// + /// Converts parsed timecode to string with 'H:MM:SS:FR' format. + /// + function ToSingleString: String; + + /// + /// Converts parsed timecode to string with H, MM, SS, FR being separated. + /// + function ToExpandedString(Delimeter: String): String; + + /// + /// Calculates total ammount of seconds from timecode + /// + function ToSeconds(): Cardinal; + + /// + /// Calculates total ammount of frames from timecode + /// + function ToFrames(): Cardinal; + end; + + /// + ///Parsed aerender frame string data type. + /// + TAErenderFrameData = record + Timecode: TTimecode; + Frame: Cardinal; + ElapsedTime: Cardinal; + InitialMessage: String; + end; + + /// + /// Transforms string with 'H:MM:SS:FR' format to TTimecode. + /// + function StrToTimecode (const ITimecodeString: String; var ATimecode: TTimecode): String; + + function TimecodeToFrames (const Timecode: TTimecode; const FrameRate: TFrameRate): Cardinal; + + /// + ///Parses aerender log string and returns record of it's contents. + /// + function ParseAErenderFrameLogString (const ILogString: String): TAErenderFrameData; + + /// + ///Parses aerender log string and returns TTimecode value of render area duration. + /// + function ParseAErenderDurationLogString (const ILogString: String): TTimecode; + + /// + ///Parses aerender log string and returns TFrameRate value of render framerate. + /// + function ParseAErenderFrameRateLogString (const ILogString: String): TFrameRate; + +implementation + +constructor TTimecode.Create(const H, MM, SS, FR: Cardinal); +begin + Self.H := H; + Self.MM := MM; + Self.SS := SS; + Self.FR := FR; +end; + +procedure TTimecode.Clear; +begin + Self.H := 0; + Self.MM := 0; + Self.SS := 0; + Self.FR := 0; +end; + +function TTimecode.ToSingleString(): String; +begin + Result := Result + Self.H.ToString + ':'; + + if Self.MM < 10 then + Result := Result + '0' + Self.MM.ToString + ':' + else + Result := Result + Self.MM.ToString + ':'; + + if Self.SS < 10 then + Result := Result + '0' + Self.SS.ToString + ':' + else + Result := Result + Self.SS.ToString + ':'; + + if Self.FR < 10 then + Result := Result + '0' + Self.FR.ToString + else + Result := Result + Self.FR.ToString; +end; + +function TTimecode.ToExpandedString(Delimeter: String): String; +begin + Result := Result + 'H: ' + Self.H.ToString + Delimeter; + + if Self.MM < 10 then + Result := Result + 'M: ' + '0' + Self.MM.ToString + Delimeter + else + Result := Result + 'M: ' + Self.MM.ToString + ':'; + + if Self.SS < 10 then + Result := Result + 'S: ' + '0' + Self.SS.ToString + Delimeter + else + Result := Result + 'S: ' + Self.SS.ToString + Delimeter; + + if Self.FR < 10 then + Result := Result + 'FR: ' + '0' + Self.FR.ToString + else + Result := Result + 'FR: ' + Self.FR.ToString; +end; + +function TTimecode.ToSeconds(): Cardinal; +begin + // {H -> MM} + {MM -> SS} + SS + Result := (Self.H * 60 * 60) + (Self.MM * 60) + Self.SS; +end; + +function TTimecode.ToFrames(): Cardinal; +begin + // {H -> MM} + {MM -> SS} + SS + Result := (Self.H * 60 * 60) + (Self.MM * 60) + Self.SS + Self.FR; +end; + +function StrToTimecode (const ITimecodeString: String; var ATimecode: TTimecode): String; +var + ATimecodeString: String; +begin + ATimecodeString := ITimecodeString; + + //Read hours from timecode and remove it from temporary string + ATimecode.H := StrToInt(ATimecodeString[1]); + Delete(ATimecodeString, 1, 2); + { AString = '00:00:00 (1): 0 Seconds' } + + //Read minutes from timecode and remove it from temporary string + ATimecode.MM := StrToInt(ATimecodeString[1] + ATimecodeString[2]); + Delete(ATimecodeString, 1, 3); + { AString = '00:00 (1): 0 Seconds' } + + //Read seconds from timecode and remove it from temporary string + ATimecode.SS := StrToInt(ATimecodeString[1] + ATimecodeString[2]); + Delete(ATimecodeString, 1, 3); + { AString = '00 (1): 0 Seconds' } + + //Read frames from timecode and remove it from temporary string + ATimecode.FR := StrToInt(ATimecodeString[1] + ATimecodeString[2]); + Delete(ATimecodeString, 1, 4); + { AString = '1): 0 Seconds' } + + Result := ATimecodeString; +end; + +function TimecodeToFrames (const Timecode: TTimecode; const FrameRate: TFrameRate): Cardinal; +begin + Result := Trunc(Timecode.ToSeconds * FrameRate) + Timecode.FR; +end; + +function ParseAErenderFrameLogString (const ILogString: String): TAErenderFrameData; +var + AString: String; +begin + Result.InitialMessage := ILogString; + AString := ILogString; + { AString = 'PROGRESS: 0:00:00:00 (1): 0 Seconds' } + if ILogString.Contains('PROGRESS: ') then begin + //Get rid of PROGRESS response in initial string + AString := AString.Replace('PROGRESS: ', ''); + { AString = '0:00:00:00 (1): 0 Seconds' } + + AString := StrToTimecode(AString, Result.Timecode); + + //Read current render frame from timecode and remove it from temporary string + var AFrame: String; + while AString[1] <> ')' do begin + AFrame := AFrame + AString[1]; + Delete(AString, 1, 1); + end; + Result.Frame := StrToInt(AFrame); + Delete(AString, 1, 3); + { AString = '0 Seconds' } + + //Read elapsed time to render one frame and clear the string + var AElapsedTime: String; + while AString[2] <> 'S' do begin + AElapsedTime := AElapsedTime + AString[1]; + Delete(AString, 1, 1); + end; + Result.ElapsedTime := StrToInt(AElapsedTime); + { AString = ' Seconds' } + end else begin + raise Exception.Create('Parsing error (-1): Provided string cannot be interpreted as current rendering frame data.'); + end; +end; + +function ParseAErenderDurationLogString (const ILogString: String): TTimecode; +var + AString: String; +begin + AString := ILogString; + { AString = 'PROGRESS: Duration: 0:00:10:00' } + //if AString.Contains ('Duration: ') then begin + AString := AString.Replace('PROGRESS: Duration: ', ''); + { AString = '0:00:10:00' } + + AString := StrToTimecode (AString, Result); + { AString = '' } + {end else begin + raise Exception.Create('Parsing error (-1): Provided string cannot be parsed.'); + end;} + +end; + +function ParseAErenderFrameRateLogString (const ILogString: String): TFrameRate; +var + AString: String; +begin + //Added to get rid of decimal separators + if ILogString.Contains(',') then + AString := ILogString.Replace(',', '.') + else + AString := ILogString; + { AString = 'PROGRESS: Frame Rate: 60.00 (comp)' } + + //if AString.Contains ('Frame Rate: ') then begin + AString := AString.Replace('PROGRESS: Frame Rate: ', ''); + { AString = '60.00 (comp)' } + var AFrameRate: String; + for var i := 1 to Length (AString) do + if AString[i + 1] <> '(' then begin + AFrameRate := AFrameRate + AString[i] + end else begin + break + end; + Result := StrToFloat(AFrameRate); + {end else begin + raise Exception.Create('Parsing error (-1): Provided string cannot be parsed.'); + end;} +end; + +end. diff --git a/src/lib/AErenderLauncher.IO.pas b/src/lib/AErenderLauncher.IO.pas new file mode 100644 index 0000000..d851cf7 --- /dev/null +++ b/src/lib/AErenderLauncher.IO.pas @@ -0,0 +1,99 @@ +unit AErenderLauncher.IO; + +interface + +uses + System.Classes, System.Types, System.SysUtils, + {$IFDEF MSWINDOWS} + Winapi.ShellAPI, Winapi.Windows; + {$ELSE MACOS} + Posix.Stdlib, Posix.Unistd; + {$ENDIF} + + function Open(Path: String; Args: TArray = []): Integer; + function Execute(Path: String): Integer; + function BackgroundExecute(Path: String): Integer; + + procedure CreateCmd(const ACommand, AFile: String); + //function ExecuteAndWait(Path: String; Timeout: Cardinal): WideString; + +implementation + +function Open(Path: String; Args: TArray = []): Integer; +begin + {$IFDEF MSWINDOWS} + var TempPath: String := Path; + for var i := 0 to High(Args) do + TempPath := TempPath + Args[i]; + + Result := ShellExecute(0, 'open', PWideChar(TempPath), nil, nil, SW_SHOW); + {$ELSE MACOS} + var TempArgs: String := ''; + for var i := 0 to High(Args) do + TempArgs := TempArgs + Format('"%s" ', [Args[i]]); + + Result := _system(PAnsiChar(Format('open -a "%s" --args %s & disown', [AnsiString(Path), AnsiString(TempArgs)]))); + {$ENDIF} +end; + +function Execute(Path: String): Integer; +begin + {$IFDEF MSWINDOWS} + Result := ShellExecute(0, 'OPEN', PWideChar(Path), '', '', SW_SHOWNORMAL) + {$ELSE MACOS} + _system(PAnsiChar(Format('chmod +x "%s"', [AnsiString(Path)]))); + Result := _system(PAnsiChar(Format('command "%s"', [AnsiString(Path)]))); + {$ENDIF} +end; + +function BackgroundExecute(Path: String): Integer; +begin + {$IFDEF MSWINDOWS} + Result := ShellExecute(0, 'OPEN', PWideChar(Path), '', '', SW_HIDE); +// var exInfo: SHELLEXECUTEINFO; +// exInfo.lpVerb := 'open'; +// exInfo.lpFile := PWideChar(Path); +// exInfo.nShow := SW_HIDE; +// exInfo.fMask := SEE_MASK_NOCLOSEPROCESS; +// Result := ShellExecuteExA(@exInfo).ToInteger; + {$ELSE MACOS} + _system(PAnsiChar(Format('chmod +x "%s"', [AnsiString(Path)]))); + Result := _system(PAnsiChar(Format('command "%s" & disown', [AnsiString(Path)]))); + {$ENDIF} +end; + +function OpenAndWait(Path: String; Args: TArray; Timeout: Cardinal): WideString; +begin + // +end; + +procedure CreateCmd(const ACommand, AFile: String); +var + F: TextFile; +begin + AssignFile(F, AFile); + Rewrite(F); + Writeln(F, ACommand); + CloseFile(F); +end; + +procedure CreateCmdAndExecute(const ACommand, AFile: String; const Background: Boolean = True); +begin + CreateCmd(ACommand, AFile); + + if Background then + Execute(AFile) + else + BackgroundExecute(AFile); +end; + +procedure CreateCmdAndOpen(const ACommand, AFile: String; const Args: TArray); +begin + CreateCmd(ACommand, AFile); + + Open(AFile, Args); +end; + +//initialization + +end. diff --git a/src/lib/AErenderLauncherLocalization.pas b/src/lib/AErenderLauncher.Localization.pas similarity index 99% rename from src/lib/AErenderLauncherLocalization.pas rename to src/lib/AErenderLauncher.Localization.pas index da0b9ba..b7ff2de 100644 --- a/src/lib/AErenderLauncherLocalization.pas +++ b/src/lib/AErenderLauncher.Localization.pas @@ -1,4 +1,4 @@ -unit AErenderLauncherLocalization; +unit AErenderLauncher.Localization; interface diff --git a/src/MathExpParser.pas b/src/lib/AErenderLauncher.Math.ExpParser.pas similarity index 98% rename from src/MathExpParser.pas rename to src/lib/AErenderLauncher.Math.ExpParser.pas index a8f4cb5..434d67f 100644 --- a/src/MathExpParser.pas +++ b/src/lib/AErenderLauncher.Math.ExpParser.pas @@ -1,9 +1,9 @@ -unit MathExpParser; +unit AErenderLauncher.Math.ExpParser; interface -Uses - Sysutils, Classes, DateUtils, Math, Generics.Collections; +uses + System.SysUtils, System.Classes, System.DateUtils, System.Math, System.Generics.Collections; type TAssociativity = (asNone,asLeft, asRight); diff --git a/src/lib/AErenderLauncher.Math.pas b/src/lib/AErenderLauncher.Math.pas new file mode 100644 index 0000000..19d8cee --- /dev/null +++ b/src/lib/AErenderLauncher.Math.pas @@ -0,0 +1,52 @@ +unit AErenderLauncher.Math; + +interface + + //function IfThen(const AValue: Boolean; const ATrue: Variant): Variant; + + function IfThenElse(const AValue: Boolean; const ATrue: String; const AFalse: String): String; overload; + function IfThenElse(const AValue: Boolean; const ATrue: Integer; const AFalse: Integer): Integer; overload; + function IfThenElse(const AValue: Boolean; const ATrue: Variant; const AFalse: Variant): Variant; overload; + + function IntToCardinal(I: Integer): Cardinal; + +implementation + +{function IfThen(const AValue: Boolean; const ATrue: Variant): Variant; +begin + if AValue then Result := ATrue; +end; } + +function IfThenElse(const AValue: Boolean; const ATrue: String; const AFalse: String): String; overload; +begin + if AValue then + Result := ATrue + else + Result := AFalse; +end; + +function IfThenElse(const AValue: Boolean; const ATrue: Integer; const AFalse: Integer): Integer; overload; +begin + if AValue then + Result := ATrue + else + Result := AFalse; +end; + +function IfThenElse(const AValue: Boolean; const ATrue: Variant; const AFalse: Variant): Variant; overload; +begin + if AValue then + Result := ATrue + else + Result := AFalse; +end; + +function IntToCardinal(I: Integer): Cardinal; +begin + if I < 0 then + Result := 0 + else + Result := I; +end; + +end. diff --git a/src/lib/AErenderLauncher.Rendering.pas b/src/lib/AErenderLauncher.Rendering.pas new file mode 100644 index 0000000..b790c2a --- /dev/null +++ b/src/lib/AErenderLauncher.Rendering.pas @@ -0,0 +1,520 @@ +unit AErenderLauncher.Rendering; + +{$M+} + +interface + +uses + System.SysUtils, System.Classes, System.Generics.Collections, System.JSON, + + AErenderLauncher.Math, + AErenderLauncher.IO, + AErenderLauncher.AerenderParser; + +type + AERParamException = class(Exception); + AERFrameSpanException = class(Exception); + AERCompositionException = class(Exception); + + TRenderState = (RS_WAITING, RS_RENDERING, RS_FINISHED, RS_STOPPED, RS_ERROR); + TRenderMode = (RM_NORMAL, RM_TILED, RM_ALL_AT_ONCE); + + TExecutable = record + Contents: WideString; + Exec: TextFile; + /// Add procedure to start executable + end; + + /// + TFrameSpan = record + StartFrame, EndFrame: Integer; + constructor Create(const StartFrame, EndFrame: Integer); overload; + constructor Create(const StartFrame, EndFrame: String); overload; + function Split(const Division: Integer): TArray; + end; + + /// + TComposition = record + CompName: String; + Frames: TFrameSpan; + Split: Cardinal; + Executable: TExecutable; + IsRendering: Boolean; + constructor Create(const CompName: String; const Frames: TFrameSpan; const Split: Integer = 1); + end; + + /// Rendering Events +// TRenderStartEvent = procedure (Task: TObject) of object; +// TRenderFinishEvent = procedure (Task: TObject) of object; + + /// + /// Structure that contains basic required + /// data for displaying rendering progress + /// ; const ARenderMode: TRenderMode); overload; + //constructor Create(const ALogFile: String; const ATask: TRenderTask); overload; deprecated 'Use non-overloaded constructor'; + end; + + /// + /// Class for storing rendering tasks data + /// + TRenderTask = class(TObject) + private // Declare all the private variables + FProject, + FOutput, + FOutputModule, + FRenderSettings, + FCustomProp: String; + FMissingFiles, + FSound, + FMultiprocessing: Boolean; + FCacheLimit, + FMemoryLimit: Single; + //FFrames: TArray; + FCompositions: TList; + FLogFilePaths: TList; + FState: TRenderState; + + //FRenderThread: TRenderThread; + +// FRenderStartEvent: TRenderStartEvent; +// FRenderFinishEvent: TRenderFinishEvent; + + //procedure TaskTerminate(Sender: TObject); + function ToExec: TList; + published // Make some properties for tasks to use + // Standard + property Project: String read FProject write FProject; + property Output: String read FOutput write FOutput; + property OutputModule: String read FOutputModule write FOutputModule; + property RenderSettings: String read FRenderSettings write FRenderSettings; + + // AErender Properties + property MissingFiles: Boolean read FMissingFiles write FMissingFiles default False; + property Sound: Boolean read FSound write FSound default True; + property Multiprocessing: Boolean read FMultiprocessing write FMultiprocessing default True; + property CustomProperties: String read FCustomProp write FCustomProp; + property CacheLimit: Single read FCacheLimit write FCacheLimit; + property MemoryLimit: Single read FMemoryLimit write FMemoryLimit; + + // Compositions and Frames + //property Frames: TArray read FFrames write FFrames; + property Compositions: TList read FCompositions write FCompositions; + + property LogFilePaths: TList read FLogFilePaths write FLogFilePaths; + property State: TRenderState read FState write FState default TRenderState.RS_WAITING; + +// property OnRenderStart: TRenderStartEvent read FRenderStartEvent write FRenderStartEvent; +// property OnRenderFinish: TRenderFinishEvent read FRenderFinishEvent write FRenderFinishEvent; + + constructor Create (const Project, Output, OutputModule, RenderSettings: String; + const MissingFiles, Sound, Multiprocessing: Boolean; + const CustomProperties: String; + const CacheLimit, MemoryLimit: Single; + const Compositions: TList); + + constructor CreateFromJSON (const Project, Output, OutputModule, RenderSettings: String; + const MissingFiles, Sound, Multiprocessing: Boolean; + const CustomProperties: String; + const CacheLimit, MemoryLimit: Single; + const ProjectJSON: String); + + procedure Render(const ThreadsLimit: Integer = 4{; const Mode: TRenderMode = RM_NORMAL}); + function ToString: String; override; + function Count: Integer; + end; + + function GetTaskByProject(const AProject: String): TRenderTask; + function GetTaskByCompName(const ACompName: String): TRenderTask; deprecated 'Useless in this context, we can get Project without browsing through compositions'; + function GetCompByName(const ATask: TRenderTask; const ACompName: String): TComposition; + function GetCompIndexInTask(const ATask: TRenderTask; const ACompName: String): Integer; + +var + AErenderPath, Errors: String; + RenderTasks: TObjectList; + RenderQueue: TList; + AbortRender: Boolean = False; + TiledRenderThread: TThread; + +implementation + +uses + AErenderLauncher.Types; + +(****************) +(* TFrameSpan *) +(****************) +function TFrameSpan.Split(const Division: Integer): TArray; +var + I, J, K: Integer; +begin + SetLength(Result, Division); + Result[0].StartFrame := StartFrame; + J := EndFrame - StartFrame; + K := J div Division; + Result[0].EndFrame := StartFrame + K; + for I := 1 to Division - 1 do + begin + Result[I].StartFrame := StartFrame + K * I + 1; + Result[I].EndFrame := StartFrame + K * (I + 1); + end; + Result[Division - 1].EndFrame := EndFrame; +end; + +constructor TFrameSpan.Create(const StartFrame, EndFrame: Integer); +begin + Self.StartFrame := StartFrame; + Self.EndFrame := EndFrame; +end; + +constructor TFrameSpan.Create(const StartFrame, EndFrame: String); +begin + if StartFrame <> '' then + Self.StartFrame := StrToInt(StartFrame) + else + Self.StartFrame := 0; + + if EndFrame <> '' then + Self.EndFrame := StrToInt(EndFrame) + else + Self.EndFrame := 0; +end; + +(******************) +(* TComposition *) +(******************) +constructor TComposition.Create(const CompName: String; const Frames: TFrameSpan; const Split: Integer = 1); +begin + if CompName <> '' then + Self.CompName := CompName; + {else + raise AERCompositionException.Create('Composition name cannot be empty');} + + Self.Frames := Frames; + Self.Split := Split; +end; + +(***********************) +(* TRenderQueueObject *) +(***********************) +//function TRenderQueueObject.GetDuration: TTimecode; +//begin +// Result := FDuration; +//end; +// +//procedure TRenderQueueObject.SetDuration(Value: TTimecode); +//begin +// FDuration := Value; +//end; +// +//function TRenderQueueObject.GetFrameRate: TFrameRate; +//begin +// Result := FFrameRate; +//end; +// +//procedure TRenderQueueObject.SetFrameRate(Value: TFrameRate); +//begin +// FFrameRate := Value; +//end; + +constructor TRenderQueueObject.Create(const ATempFilePath: String; const ADuration: TTimecode; const AFrameRate: TFrameRate); +begin + Self.TempFilePath := ATempFilePath; + Self.Duration := ADuration; + Self.FrameRate := AFrameRate; +end; + +//constructor TRenderQueueObject.Create(const ALogFile: String; const ATask: TRenderTask); +//begin +// Self.LogFile := ALogFile; +// Self.Compositions := ATask.Compositions; +// Self.RenderMode := RM_NORMAL; +//end; + +(*****************) +(* TRenderTask *) +(*****************) +function TRenderTask.ToString: String; +begin + var Res: String := Format('(%s, %s, %s, %s, [%s, %s, %s], "%s", %f, %f, ', + [Project, Output, OutputModule, RenderSettings, BoolToStr(MissingFiles, True), BoolToStr(Sound, True), BoolToStr(Multiprocessing, True), CustomProperties, CacheLimit, MemoryLimit]); + for var i := 0 to Compositions.Count - 1 do + with Compositions.Items[i] do + if i = Compositions.Count - 1 then + Res := Res + Format('Comp[%d](%s, [%d, %d], %d)', [i + 1, CompName, Frames.StartFrame, Frames.EndFrame, Split]) + else + Res := Res + Format('Comp[%d](%s, [%d, %d], %d), ', [i + 1, CompName, Frames.StartFrame, Frames.EndFrame, Split]); + Res := Res + ')'; + + Result := Res; +end; + +function TRenderTask.Count: Integer; +begin + var Res: Integer := 0; + for var Comp in Compositions do begin + if Comp.Split > 1 then + Res := Res + Comp.Split + else + Res := Res + 1; + end; + Result := Res; +end; + +/// +/// Creates executable files for Launcher to start and provides a list of +/// paths to them in *.ext format. +/// +/// +/// "ext" must be replaced with a special format!!! +/// +/// +/// A list of paths to executable files +/// ; +begin + // Start with empty string + var TempStr: String := ''; + var List: TList := TList.Create(); + + for var Composition: TComposition in Compositions do begin + for var i := 0 to Composition.Split - 1 do begin + + var SplitFrameSpans: TArray := Composition.Frames.Split(Composition.Split); + SetLength(SplitFrameSpans, Length(SplitFrameSpans)); // Calculate split once, so we don't have to calculate it everytime + + // should match \[(.*?)\]\_\[(.*?)\]\_\[(.*?)\]\_\[(.*?)\]\.bat + var FilePath: String := APPFOLDER + Format('[%s]_[%s]_[%d]_[%d].ext', [ExtractFileName(Project).Replace('.aep', ''), Composition.CompName, SplitFrameSpans[i].StartFrame, SplitFrameSpans[i].EndFrame]); + + // Add Pass output path to temporary wariable + var AdjustedOutput: String := Output; + + // Create folder if '[projectName]/' or '[projectName]\' is used + // Because aerender won't do it for you + if Output.Contains('[projectName]' + PLATFORMPATHSEPARATOR) then + begin + AdjustedOutput := StringReplace(AdjustedOutput, '[projectName]', ExtractFileName(Project), [rfReplaceAll, rfIgnoreCase]); + if not DirectoryExists(ExtractFilePath(AdjustedOutput)) then + CreateDir(ExtractFilePath(AdjustedOutput)); + end; + + // Adjust file output path if split render is enabled + // because they can conflict + if Composition.Split > 1 then + begin + var OutFilePath: String := ExtractFilePath(AdjustedOutput); + var OutFileName: String := StringReplace(ExtractFileName(AdjustedOutput), ExtractFileExt(AdjustedOutput), '', [rfReplaceAll, rfIgnoreCase]); + var OutFileExt: String := ExtractFileExt(AdjustedOutput); + AdjustedOutput := OutFilePath + OutFileName + '_' + i.ToString + OutFileExt; + end; + + // Append all the nesesary information in the beginning + TempStr := Format('"%s" -project "%s" -output "%s" %s %s %s -OMtemplate "%s" -RStemplate "%s" -mem_usage "%d" "%d" %s -comp "%s" -s "%d" -e "%d"', [ + AErenderPath, + Project, + AdjustedOutput, + IfThenElse(Sound, '-sound ON', ''), // yeet + IfThenElse(Multiprocessing, '-mp', ''), // double yeet + IfThenElse(MissingFiles, '-continueOnMissingFootage', ''), // tripple yeet + OutputModule, + RenderSettings, + Trunc(MemoryLimit), + Trunc(CacheLimit), + IfThenElse(CustomProperties.IsEmpty, CustomProperties, ''), // quadruple yeet + Composition.CompName, + SplitFrameSpans[i].StartFrame, + SplitFrameSpans[i].EndFrame + ]); + + if SplitFrameSpans[i].StartFrame = 0 then + if SplitFrameSpans[i].EndFrame = 0 then + TempStr := TempStr.Replace('-s "0" -e "0"', ''); + + CreateCmd( + {$IFDEF MSWINDOWS}'chcp 65001' + #13#10 + {$ENDIF}Format('(%s) > "%s"', [TempStr, FilePath.Replace('.ext', '.log')]), + FilePath.Replace('.ext', {$IFDEF MSWINDOWS}'.bat'{$ELSE MACOS}'.command'{$ENDIF}) + ); + List.Add(FilePath); + end; + end; + + Result := List; + + {for var Comp in Compositions do begin + if Comp.Split = 0 then + // yeet + else + for var FrameSpan in Comp.Frames.Split(Comp.Split) do + TempStr := TempStr + Format('-s %d -e %d ', [FrameSpan.StartFrame, FrameSpan.EndFrame]); + end; } +end; + +procedure TRenderTask.Render(const ThreadsLimit: Integer = 4{; const Mode: TRenderMode = RM_NORMAL}); +begin + var Executables: TList := ToExec; + //var i: Integer := 0; + + /// If files to render count is less than ThreadsLimit + /// then render them all at once, no need for continous execution here + if Executables.Count <= ThreadsLimit then + for var i := 0 to Executables.Count - 1 do begin + BackgroundExecute(Executables[i].Replace('.ext', {$IFDEF MSWINDOWS}'.bat'{$ELSE MACOS}'.command'{$ENDIF})); + RenderQueue.Add(Executables[i]); + end + else begin + /// This thread will launch new renders when the existing ones will finish + /// + /// Will be started only if the ammount of things to render is more than ThreadsLimit const + /// If otherwise, it has a problem of not starting some of the renders, which bothers me... + TiledRenderThread := TThread.CreateAnonymousThread(procedure begin + var i: Integer := 0; /// Counter + + while Executables.Count > 0 do begin + while RenderQueue.Count <> ThreadsLimit do begin + BackgroundExecute(Executables[i].Replace('.ext', {$IFDEF MSWINDOWS}'.bat'{$ELSE MACOS}'.command'{$ENDIF})); + RenderQueue.Add(Executables[i]); + Executables.Delete(i); + inc(i); + + if AbortRender then + exit; + end; + i := 0; + end; + end); + + TiledRenderThread.Start; + end; +end; + +constructor TRenderTask.Create(const Project, Output, OutputModule, RenderSettings: String; + const MissingFiles, Sound, Multiprocessing: Boolean; + const CustomProperties: String; + const CacheLimit, MemoryLimit: Single; + const Compositions: TList); +begin + if (Project.IsEmpty or Output.IsEmpty or (Compositions.Count = 0)) then + raise AERParamException.Create('Internal Error (EI001) - Project, Output or Compositions may be empty.'); + + Self.Project := Project; + Self.Output := Output; + Self.OutputModule := OutputModule; + Self.RenderSettings := RenderSettings; + + Self.MissingFiles := MissingFiles; + Self.Sound := Sound; + Self.Multiprocessing := Multiprocessing; + Self.CustomProperties := CustomProperties; + Self.CacheLimit := CacheLimit; + Self.MemoryLimit := MemoryLimit; + + Self.Compositions := Compositions; +end; + +constructor TRenderTask.CreateFromJSON(const Project, Output, OutputModule, RenderSettings: String; + const MissingFiles, Sound, Multiprocessing: Boolean; + const CustomProperties: String; + const CacheLimit, MemoryLimit: Single; + const ProjectJSON: String); +begin + var ParsedProjectJSON: TJSONValue := TJSONObject.ParseJSONValue(ProjectJSON); + + var Compositions: TList := TList.Create; + + for var i := 0 to (ParsedProjectJSON as TJSONArray).Count - 1 do + + Compositions.Add(TComposition.Create( + ParsedProjectJSON.A[i].P['Name'].Value, + TFrameSpan.Create(ParsedProjectJSON.A[i].P['Frames'].A[0].Value, ParsedProjectJSON.A[i].P['Frames'].A[1].Value), + 1 + )); + + Self.Project := Project; + Self.Output := Output; + + Self.OutputModule := OutputModule; + Self.RenderSettings := RenderSettings; + + Self.MissingFiles := MissingFiles; + Self.Sound := Sound; + Self.Multiprocessing := Multiprocessing; + Self.CustomProperties := CustomProperties; + Self.CacheLimit := CacheLimit; + Self.MemoryLimit := MemoryLimit; + + Self.Compositions := Compositions; +end; + +(*************) +(* Helpers *) +(*************) +function GetTaskByProject(const AProject: String): TRenderTask; +begin + for var Task: TRenderTask in RenderTasks do + if ExtractFileName(Task.Project) = AProject then begin + Result := Task; + exit + end; + Result := nil; +end; + +function GetTaskByCompName(const ACompName: String): TRenderTask; +begin + for var Task: TRenderTask in RenderTasks do + for var Comp in Task.Compositions do + if Comp.CompName = ACompName then begin + Result := Task; + exit; + end; + Result := nil; +end; + +function GetCompByName(const ATask: TRenderTask; const ACompName: String): TComposition; +begin + for var Comp in ATask.Compositions do + if Comp.CompName = ACompName then begin + Result := Comp; + exit + end; + //Result := nil; +end; + +function GetCompIndexInTask(const ATask: TRenderTask; const ACompName: String): Integer; +begin + for var i := 0 to ATask.Compositions.Count - 1 do + if ATask.Compositions[i].CompName = ACompName then begin + Result := i; + exit; + end; + Result := -1; +end; + +(********************) +(* Initialization *) +(********************) +initialization + RenderTasks := TObjectList.Create; + RenderQueue := TList.Create; + Errors := ''; + + +(******************) +(* Finalization *) +(******************) +finalization + if Assigned(RenderTasks) then begin + RenderTasks.OnNotify := nil; + FreeAndNil(RenderTasks); + end; + + if Assigned(RenderQueue) then begin + RenderQueue.OnNotify := nil; + FreeAndNil(RenderQueue); + end; + +end. diff --git a/src/lib/AErenderLauncher.SysUtils.pas b/src/lib/AErenderLauncher.SysUtils.pas new file mode 100644 index 0000000..76b470c --- /dev/null +++ b/src/lib/AErenderLauncher.SysUtils.pas @@ -0,0 +1,97 @@ +unit AErenderLauncher.SysUtils; + +interface + +uses + System.SysUtils, System.IOUtils, + + {$IFDEF MSWINDOWS} + FMX.Platform.Win, Winapi.ShellAPI, Winapi.Windows, Winapi.TlHelp32; + {$ELSE MACOS} + FMX.Platform.Mac, Posix.Stdlib, Posix.Unistd, Posix.SysSysctl, Posix.SysTypes; + {$ENDIF} + + /// + /// Gets system's memory size + /// + /// System's RAM size in bytes + function GetPlatformMemorySize: Int64; + + /// + /// Gets system's CPU threads count + /// + /// System's CPU threads count + /// + /// This function is actually defined in RTL + /// but inaccessable for some reason + /// + function GetPlatformThreadsCount: Integer; + + /// + /// Reads directory contents + /// + /// Path to directory contents of which need to be returned + /// An array of all filepaths in profidd + function GetDirectoryFiles(Directory: String): TArray; + + /// + /// Gets the count of all Launcher's temporary files + /// + /// Count of all Launcher's temporary files + function GetTempFilesCount: Integer; + +implementation + +uses + AErenderLauncher.Types; + +function GetPlatformMemorySize: Int64; +begin + {$IFDEF MSWINDOWS} + var MS_Ex: MemoryStatusEx; + FillChar(MS_Ex, SizeOf(MemoryStatusEx), #0); + MS_Ex.dwLength := SizeOf(MemoryStatusEx); + GlobalMemoryStatusEx(MS_Ex); + Result := MS_Ex.ullTotalPhys; + {$ELSE MACOS} + var len: size_t := SizeOf(Result); + var res: Int64 := SysCtlByName('hw.memsize', @Result, @len, nil, 0); + if res <> 0 then + RaiseLastOSError; + {$ENDIF MACOS} +end; + +function GetPlatformThreadsCount: Integer; +begin + {$IFDEF MSWINDOWS} + var SysInfo: TSystemInfo; + GetSystemInfo(SysInfo); + Result := SysInfo.dwNumberOfProcessors; + {$ELSE MACOS} + Result := sysconf(_SC_NPROCESSORS_ONLN); + {$ENDIF} +end; + +function GetDirectoryFiles(Directory: String): TArray; +var + Files: System.TArray; +begin + Files := TDirectory.GetFiles(Directory); + for var i := 0 to High(Files) do + begin + SetLength(Result, i + 1); + Result[i] := Files[i]; + end; +end; + +function GetTempFilesCount: Integer; +begin + var LauncherDirectory: TArray := GetDirectoryFiles(APPFOLDER); + var Res: Integer := 0; + for var i := 0 to High(LauncherDirectory) do + if (LauncherDirectory[i].Contains('.bat')) or (LauncherDirectory[i].Contains('.command')) or (LauncherDirectory[i].Contains('.log')) then + inc(Res); + Result := Res; +end; + +end. diff --git a/src/lib/AErenderLauncher.Types.pas b/src/lib/AErenderLauncher.Types.pas new file mode 100644 index 0000000..b60d3a3 --- /dev/null +++ b/src/lib/AErenderLauncher.Types.pas @@ -0,0 +1,334 @@ +unit AErenderLauncher.Types; + +interface + +uses + System.SysUtils, System.Generics.Collections, AErenderLauncher.Rendering, + Xml.xmldom, + Xml.XMLIntf, + Xml.adomxmldom, + Xml.XMLDoc, + Xml.omnixmldom; + +type + AERSettingsException = class(Exception); + + OutputModule = record + Module, + Mask: String; + Imported: Boolean; + class operator Equal(a: OutputModule; b: OutputModule): Boolean; + class operator NotEqual(a: OutputModule; b: OutputModule): Boolean; + end; + + TSettings = record + private + procedure InitOutputModules; + public + Language: Integer; + Style: Integer; + AErenderPath: String; + OnRenderStart: Integer; + DefaultProjectPath: String; + DefaultOutputPath: String; + AErenderHandle: Boolean; + DeleteTemporary: Boolean; + + RenderTasks: TList; + + LastProjectPath: String; + LastOutputPath: String; + TemporarySavePath: String; + + MissingFiles: Boolean; + Sound: Boolean; + Multithreaded: Boolean; + CustomPropertiesEnabled: Boolean; + CustomProperties: String; + MemoryLimit: Single; + CacheLimit: Single; + + SelectedOutputModule: Integer; + OutputModules: TArray; + RenderSettings: String; + + RecentProjects: array [0..9] of String; + constructor LoadFromXMLFile(const APath: String; const Skip: Boolean = True); + constructor LoadFromXMLFileLegacy(const APath: String); + procedure SaveToFile(const APath: String); + procedure Reset; + procedure ResetAndSave(const APath: String); + end; + +const + PLATFORMPATHSEPARATOR = {$IFDEF MSWINDOWS}'\'{$ELSE MACOS}'/'{$ENDIF}; + +var + APPFOLDER: String; + Settings: TSettings; + +implementation + +{$REGION ' OutputModule '} + +class operator OutputModule.Equal(a: OutputModule; b: OutputModule): Boolean; +begin + Result := (a.Module = b.Module) and (a.Mask = b.Mask); +end; + +class operator OutputModule.NotEqual(a: OutputModule; b: OutputModule): Boolean; +begin + Result := (a.Module <> b.Module) or (a.Mask <> b.Mask); +end; + +{$ENDREGION} + +{$REGION ' TSettings '} + +procedure TSettings.InitOutputModules; +begin + SetLength(Self.OutputModules, 10); + + Self.OutputModules[0].Module := 'Lossless'; + Self.OutputModules[0].Mask := '[compName].[fileExtension]'; + Self.OutputModules[0].Imported := False; + + Self.OutputModules[1].Module := 'AIFF 48kHz'; + Self.OutputModules[1].Mask := '[compName].[fileExtension]'; + Self.OutputModules[1].Imported := False; + + Self.OutputModules[2].Module := 'Alpha Only'; + Self.OutputModules[2].Mask := '[compName].[fileExtension]'; + Self.OutputModules[2].Imported := False; + + Self.OutputModules[3].Module := 'AVI DV NTSC 48kHz'; + Self.OutputModules[3].Mask := '[compName].[fileExtension]'; + Self.OutputModules[3].Imported := False; + + Self.OutputModules[4].Module := 'AVI DV PAL 48kHz'; + Self.OutputModules[4].Mask := '[compName].[fileExtension]'; + Self.OutputModules[4].Imported := False; + + Self.OutputModules[5].Module := 'Lossless with Alpha'; + Self.OutputModules[5].Mask := '[compName].[fileExtension]'; + Self.OutputModules[5].Imported := False; + + Self.OutputModules[6].Module := 'Multi-Machine Sequence'; + Self.OutputModules[6].Mask := '[compName]_[#####].[fileExtension]'; + Self.OutputModules[6].Imported := False; + + Self.OutputModules[7].Module := 'Photoshop'; + Self.OutputModules[7].Mask := '[compName]_[#####].[fileExtension]'; + Self.OutputModules[7].Imported := False; + + Self.OutputModules[8].Module := 'Save Current Preview'; + Self.OutputModules[8].Mask := '[compName].[fileExtension]'; + Self.OutputModules[8].Imported := False; + + Self.OutputModules[9].Module := 'TIFF Sequence with Alpha'; + Self.OutputModules[9].Mask := '[compName]_[#####].[fileExtension]'; + Self.OutputModules[9].Imported := False; +end; + +constructor TSettings.LoadFromXMLFile(const APath: String; const Skip: Boolean = True); +var + Config: IXMLDocument; + RootNode: IXMLNode; +begin + Config := TXMLDocument.Create(nil); + Config.LoadFromFile(APath); + Config.Active := True; + + RootNode := Config.DocumentElement; + + Self.Language := RootNode.ChildNodes['Language'].Text.ToInteger; + Self.Style := RootNode.ChildNodes['Style'].Text.ToInteger; + Self.AErenderPath := RootNode.ChildNodes['AErenderPath'].Text; + Self.OnRenderStart := RootNode.ChildNodes['OnRenderStart'].Text.ToInteger; + Self.DefaultProjectPath := RootNode.ChildNodes['DefaultProjectPath'].Text; + Self.DefaultOutputPath := RootNode.ChildNodes['DefaultOutputPath'].Text; + Self.AErenderHandle := RootNode.ChildNodes['AErenderHandle'].Text.ToBoolean; + Self.DeleteTemporary := RootNode.ChildNodes['DeleteTemporary'].Text.ToBoolean; + + Self.LastProjectPath := RootNode.ChildNodes['LastProjectPath'].Text; + Self.LastOutputPath := RootNode.ChildNodes['LastOutputPath'].Text; + Self.TemporarySavePath := RootNode.ChildNodes['TemporarySavePath'].Text; + + Self.MissingFiles := RootNode.ChildNodes['MissingFiles'].Text.ToBoolean; + Self.Sound := RootNode.ChildNodes['Sound'].Text.ToBoolean; + Self.Multithreaded := RootNode.ChildNodes['Multithreaded'].Text.ToBoolean; + Self.CustomPropertiesEnabled := StrToBool(RootNode.ChildNodes['CustomProperties'].Attributes['Enabled']); + Self.CustomProperties := RootNode.ChildNodes['CustomProperties'].Text; + Self.MemoryLimit := RootNode.ChildNodes['MemoryLimit'].Text.ToSingle; + Self.CacheLimit := RootNode.ChildNodes['CacheLimit'].Text.ToSingle; + + if RootNode.ChildNodes['OutputModules'].ChildNodes.Count <> 0 then begin + SetLength(Self.OutputModules, RootNode.ChildNodes['OutputModules'].ChildNodes.Count); + for var i := 0 to High(Self.OutputModules) do begin + Self.OutputModules[i].Module := RootNode.ChildNodes['OutputModules'].ChildNodes[i].ChildNodes['Module'].Text; + Self.OutputModules[i].Mask := RootNode.ChildNodes['OutputModules'].ChildNodes[i].ChildNodes['Mask'].Text; + Self.OutputModules[i].Imported := StrToBool(RootNode.ChildNodes['OutputModules'].ChildNodes[i].Attributes['Imported']); + end; + Self.SelectedOutputModule := StrToInt(RootNode.ChildNodes['OutputModules'].Attributes['Selected']); + end else + Self.InitOutputModules; + + Self.RenderSettings := RootNode.ChildNodes['RenderSettings'].Text; + + for var i := 0 to 9 do begin + Self.RecentProjects[i] := RootNode.ChildNodes['RecentProjects'].ChildNodes[i].Text; + end; + +end; + +constructor TSettings.LoadFromXMLFileLegacy(const APath: String); +var + Config: IXMLDocument; + RootNode: IXMLNode; +begin + Config := TXMLDocument.Create(nil); + Config.LoadFromFile(APath); + Config.Active := True; + + RootNode := Config.DocumentElement; + + Self.Language := RootNode.ChildNodes['lang'].Text.ToInteger; + Self.Style := RootNode.ChildNodes['style'].Text.ToInteger; + Self.AErenderPath := RootNode.ChildNodes['aerender'].Text; + Self.OnRenderStart := RootNode.ChildNodes['onRenderStart'].Text.ToInteger; + Self.DefaultProjectPath := RootNode.ChildNodes['defprgpath'].Text; + Self.DefaultOutputPath := RootNode.ChildNodes['defoutpath'].Text; + Self.AErenderHandle := RootNode.ChildNodes['handle'].Text.ToBoolean; + Self.DeleteTemporary := RootNode.ChildNodes['delTempFiles'].Text.ToBoolean; + + Self.LastProjectPath := RootNode.ChildNodes['projectPath'].Text; + Self.LastOutputPath := RootNode.ChildNodes['outputPath'].Text; + Self.TemporarySavePath := RootNode.ChildNodes['tempSavePath'].Text; + + Self.MissingFiles := RootNode.ChildNodes['missingFiles'].Text.ToBoolean; + Self.Sound := RootNode.ChildNodes['sound'].Text.ToBoolean; + Self.Multithreaded := RootNode.ChildNodes['thread'].Text.ToBoolean; + Self.CustomPropertiesEnabled := StrToBool(RootNode.ChildNodes['prop'].Attributes['enabled']); + Self.CustomProperties := RootNode.ChildNodes['prop'].Text; + Self.MemoryLimit := RootNode.ChildNodes['memoryLimit'].Text.ToSingle; + Self.CacheLimit := RootNode.ChildNodes['cacheLimit'].Text.ToSingle; + + if RootNode.ChildNodes['outputModule'].ChildNodes.Count <> 0 then begin + SetLength(Self.OutputModules, RootNode.ChildNodes['outputModule'].ChildNodes.Count); + for var i := 0 to High(Self.OutputModules) do begin + Self.OutputModules[i].Module := RootNode.ChildNodes['outputModule'].ChildNodes[i].ChildNodes['moduleName'].Text; + Self.OutputModules[i].Mask := RootNode.ChildNodes['outputModule'].ChildNodes[i].ChildNodes['filemask'].Text; + Self.OutputModules[i].Imported := StrToBool(RootNode.ChildNodes['outputModule'].ChildNodes[i].Attributes['imported']); + end; + Self.SelectedOutputModule := StrToInt(RootNode.ChildNodes['outputModule'].Attributes['selected']); + end else + Self.InitOutputModules; + + Self.RenderSettings := RootNode.ChildNodes['renderSettings'].Text; + + for var i := 0 to 9 do begin + Self.RecentProjects[i] := RootNode.ChildNodes['recentProjects'].ChildNodes[i].Text; + end; +end; + +procedure TSettings.SaveToFile(const APath: string); +var + Config: IXMLDocument; + RootNode: IXMLNode; +begin + Config := TXMLDocument.Create(nil); + Config.Active := True; + Config.Encoding := 'utf-8'; + Config.Options := [doNodeAutoIndent]; + + RootNode := Config.AddChild('LauncherConfig'); + + RootNode.AddChild('Language').Text := Self.Language.ToString; + RootNode.AddChild('Style').Text := Self.Style.ToString; + RootNode.AddChild('AErenderPath').Text := Self.AErenderPath; + RootNode.AddChild('OnRenderStart').Text := Self.OnRenderStart.ToString; + RootNode.AddChild('DefaultProjectPath').Text := Self.DefaultProjectPath; + RootNode.AddChild('DefaultOutputPath').Text := Self.DefaultOutputPath; + RootNode.AddChild('AErenderHandle').Text := BoolToStr(Self.AErenderHandle, True); + RootNode.AddChild('DeleteTemporary').Text := BoolToStr(Self.DeleteTemporary, True); + + RootNode.AddChild('LastProjectPath').Text := Self.LastProjectPath; + RootNode.AddChild('LastOutputPath').Text := Self.LastOutputPath; + RootNode.AddChild('TemporarySavePath').Text := Self.TemporarySavePath; + + RootNode.AddChild('MissingFiles').Text := BoolToStr(Self.MissingFiles, True); + RootNode.AddChild('Sound').Text := BoolToStr(Self.Sound, True); + RootNode.AddChild('Multithreaded').Text := BoolToStr(Self.Multithreaded, True); + RootNode.AddChild('CustomProperties').Text := Self.CustomProperties; + RootNode.ChildNodes['CustomProperties'].Attributes['Enabled'] := BoolToStr(Self.CustomPropertiesEnabled, True); + + RootNode.AddChild('MemoryLimit').Text := Self.MemoryLimit.ToString; + RootNode.AddChild('CacheLimit').Text := Self.CacheLimit.ToString; + + var ChildNode: IXMLNode := RootNode.AddChild('OutputModules'); + ChildNode.Attributes['Selected'] := Self.SelectedOutputModule; + for var i := 0 to High(OutputModules) do begin + var ModuleNode: IXMLNode := RootNode.ChildNodes['OutputModules'].AddChild('OutputModule'); + ModuleNode.Attributes['Imported'] := BoolToStr(OutputModules[i].Imported, True); + ModuleNode.AddChild('Module').Text := OutputModules[i].Module; + ModuleNode.AddChild('Mask').Text := OutputModules[i].Mask; + end; + + ChildNode := RootNode.AddChild('RenderSettings'); + ChildNode.Text := Self.RenderSettings; + + ChildNode := RootNode.AddChild('RecentProjects'); + for var i := 0 to 9 do begin + if Self.RecentProjects[i] = '' then + ChildNode.AddChild('Project').Text := '(empty)' + else + ChildNode.AddChild('Project').Text := Self.RecentProjects[i] + end; + + Config.SaveToFile(APath); +end; + +procedure TSettings.Reset; +begin + Self.InitOutputModules; + + Self.Language := 0; + Self.Style := 0; + Self.AErenderPath := ''; + Self.OnRenderStart := 0; + Self.DefaultProjectPath := ''; + Self.DefaultOutputPath := ''; + Self.AErenderHandle := True; + Self.DeleteTemporary := True; + + Self.LastProjectPath := ''; + Self.LastOutputPath := ''; + Self.TemporarySavePath := ''; + + Self.MissingFiles := False; + Self.Sound := True; + Self.Multithreaded := False; + Self.CustomPropertiesEnabled := False; + Self.CustomProperties := ''; + Self.MemoryLimit := 100; + Self.CacheLimit := 100; + + Self.RenderSettings := 'Best Settings'; + + for var i := 0 to 9 do begin + Self.RecentProjects[i] := '(empty)'; + end; +end; + +procedure TSettings.ResetAndSave(const APath: string); +begin + Self.Reset; + Self.SaveToFile(APath); +end; + +{$ENDREGION} + +initialization + APPFOLDER := {$IFDEF MSWINDOWS}'C:\ProgramData\AErender'{$ELSE MACOS}GetEnvironmentVariable('HOME') + '/Documents/AErender/'{$ENDIF}; + +end. diff --git a/src/lib/AErenderLauncher.Values.pas b/src/lib/AErenderLauncher.Values.pas new file mode 100644 index 0000000..b23ed65 --- /dev/null +++ b/src/lib/AErenderLauncher.Values.pas @@ -0,0 +1,7 @@ +unit AErenderLauncher.Values; + +interface + +implementation + +end. diff --git a/src/lib/Components/TCompLabel/Package/CompLabel.dpk b/src/lib/Components/TCompLabel/Package/CompLabel.dpk new file mode 100644 index 0000000..4999faa --- /dev/null +++ b/src/lib/Components/TCompLabel/Package/CompLabel.dpk @@ -0,0 +1,42 @@ +package CompLabel; + +{$R *.res} +{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO OFF} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION OFF} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES ON} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DEFINE DEBUG} +{$ENDIF IMPLICITBUILDING} +{$IMPLICITBUILD ON} + +requires + rtl, + fmx, + designide, + vcl, + vclactnband, + vclx, + xmlrtl; + +contains + FMX.CompLabel in 'FMX.CompLabel.pas'; + +end. diff --git a/src/lib/Components/TCompLabel/Package/CompLabel.dproj b/src/lib/Components/TCompLabel/Package/CompLabel.dproj new file mode 100644 index 0000000..b90db7d --- /dev/null +++ b/src/lib/Components/TCompLabel/Package/CompLabel.dproj @@ -0,0 +1,915 @@ + + + {A4E9E299-9B51-4D63-955F-C0270900B84E} + CompLabel.dpk + 19.2 + FMX + True + Debug + Win32 + 4099 + Package + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + true + true + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + All + CompLabel + C:\YandexDisk\Development\Delphi\AErender Launcher\src\lib\Components\TCompLabel\Package;$(DCC_UnitSearchPath) + bpl + + + None + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + rtl;fmx;xmlrtl;$(DCC_UsePackage) + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png + + + None + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + rtl;fmx;xmlrtl;$(DCC_UsePackage) + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png + + + None + rtl;fmx;xmlrtl;$(DCC_UsePackage) + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png + + + None + rtl;fmx;xmlrtl;$(DCC_UsePackage) + + + rtl;fmx;xmlrtl;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + Debug + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + rtl;fmx;vcl;xmlrtl;vclactnband;vclx;$(DCC_UsePackage) + + + rtl;fmx;vcl;xmlrtl;vclactnband;vclx;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + false + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + + MainSource + + + + + + + + + + +
CompLabelRes.res
+
+ + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + Package + + + + CompLabel.dpk + + + + False + False + False + False + True + True + True + + + + + true + + + + + true + + + + + true + + + + + CompLabel.bpl + true + + + + + CompLabel.bpl + true + + + + + 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-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 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 + + + 1 + + + 0 + + + + + 1 + .framework + + + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + + + + + 1 + + + 1 + + + 1 + + + + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + + + + + + + + + + + 12 + + + + +
diff --git a/src/lib/Components/TCompLabel/Package/CompLabel.res b/src/lib/Components/TCompLabel/Package/CompLabel.res new file mode 100644 index 0000000..c224198 Binary files /dev/null and b/src/lib/Components/TCompLabel/Package/CompLabel.res differ diff --git a/src/lib/Components/TCompLabel/Package/CompLabelDesign.style b/src/lib/Components/TCompLabel/Package/CompLabelDesign.style new file mode 100644 index 0000000..cfc5d98 --- /dev/null +++ b/src/lib/Components/TCompLabel/Package/CompLabelDesign.style @@ -0,0 +1,97 @@ +object TRectangle + StyleName = 'complabelstyle' + Align = Center + ClipChildren = True + Fill.Kind = None + HitTest = False + Size.Width = 971.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TText + StyleName = 'comp' + Align = Client + HitTest = False + Margins.Left = 20.000000000000000000 + Size.Width = 439.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + TextSettings.Trimming = Character + TextSettings.WordWrap = False + TextSettings.HorzAlign = Leading + end + object TText + StyleName = 'inframe' + Align = Right + HitTest = False + Position.X = 651.000000000000000000 + Size.Width = 96.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + TextSettings.HorzAlign = Leading + end + object TText + StyleName = 'outframe' + Align = Right + HitTest = False + Position.X = 763.000000000000000000 + Size.Width = 96.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + TextSettings.HorzAlign = Leading + end + object TText + StyleName = 'split' + Align = Right + HitTest = False + Position.X = 875.000000000000000000 + Size.Width = 64.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + TextSettings.HorzAlign = Leading + end + object TLayout + StyleName = 'Layout1' + Align = Right + Position.X = 459.000000000000000000 + Size.Width = 192.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + TabOrder = 0 + object TProgressBar + StyleName = 'progressbar' + Align = Contents + HitTest = False + Orientation = Horizontal + Margins.Top = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Margins.Bottom = 8.000000000000000000 + Size.Width = 184.000000000000000000 + Size.Height = 8.000000000000000000 + Size.PlatformDefault = False + end + object TText + StyleName = 'progress' + Align = Contents + Enabled = False + HitTest = False + Margins.Left = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Size.Width = 176.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + TextSettings.HorzAlign = Leading + Visible = False + end + end +end \ No newline at end of file diff --git a/src/lib/Components/TCompLabel/Package/FMX.CompLabel.pas b/src/lib/Components/TCompLabel/Package/FMX.CompLabel.pas new file mode 100644 index 0000000..fca198f --- /dev/null +++ b/src/lib/Components/TCompLabel/Package/FMX.CompLabel.pas @@ -0,0 +1,239 @@ +unit FMX.CompLabel; + +interface + +uses + System.Types, System.SysUtils, System.Classes, System.UITypes, + FMX.Types, FMX.Controls, FMX.Styles, FMX.StdCtrls, FMX.Objects; + +type + TCompLabel = class(TStyledControl) + private + FComposition, FProgress, FSplit: String; + FValue, FInFrame, FOutFrame: Single; + + function GetCompName: String; + procedure SetCompName(Value: String); + + function GetProgress: String; + procedure SetProgress(Value: String); + + function GetValue: Single; + procedure SetValue(Value: Single); + + function GetInFrame: Single; + procedure SetInFrame(Value: Single); + + function GetOutFrame: Single; + procedure SetOutFrame(Value: Single); + + function GetSplit: String; + procedure SetSplit(Value: String); + + protected + function GetStyleObject: TFmxObject; override; + procedure ApplyStyle; override; + public + constructor Create(AOwner: TComponent); override; + published + property Align default TAlignLayout.None; + property HitTest default False; + property Position; + property Size; + + property Composition: String read GetCompName write SetCompName; + property Progress: String read GetProgress write SetProgress; + property Value: Single read GetValue write SetValue; + property InFrame: Single read GetInFrame write SetInFrame; + property OutFrame: Single read GetOutFrame write SetOutFrame; + property Split: String read GetSplit write SetSplit; + end; + +procedure Register; + +implementation + +{$R *.res} + +{ TCompLabel } + +function TCompLabel.GetStyleObject: TFmxObject; +const + Style = 'complabelstyle'; +begin + if (StyleLookup = '') then + begin + Result := TControl(TStyleStreaming.LoadFromResource(HInstance, Style, RT_RCDATA)); + Exit; + end; + Result := inherited GetStyleObject; +end; + +{$REGION ' Composition '} + +function TCompLabel.GetCompName: String; +begin + var Base: TFmxObject := FindStyleResource('comp'); + if Base <> nil then + FComposition := TText(Base).Text; + + Result := FComposition; +end; + +procedure TCompLabel.SetCompName(Value: String); +begin + FComposition := Value; + var Base: TFmxObject := FindStyleResource('comp'); + if Base <> nil then + TText(Base).Text := Value; +end; + +{$ENDREGION} + +{$REGION ' Progress '} + +function TCompLabel.GetProgress: String; +begin + var Base: TFmxObject := FindStyleResource('progress'); + if Base <> nil then + FProgress := TText(Base).Text; + + Result := FProgress; +end; + +procedure TCompLabel.SetProgress(Value: String); +begin + FProgress := Value; + var Base: TFmxObject := FindStyleResource('progress'); + if Base <> nil then + TText(Base).Text := Value; +end; + +{$ENDREGION} + +{$REGION ' Value '} + +function TCompLabel.GetValue: Single; +begin + var Base: TFmxObject := FindStyleResource('progressbar'); + if Base <> nil then + FValue := TProgressBar(Base).Value; + + Result := FValue; +end; + +procedure TCompLabel.SetValue(Value: Single); +begin + FValue := Value; + var Base: TFmxObject := FindStyleResource('progressbar'); + if Base <> nil then begin + TProgressBar(Base).Value := Value; + TProgressBar(Base).Visible := Value >= FInFrame; + end; +end; + +{$ENDREGION} + +{$REGION ' InFrame '} + +function TCompLabel.GetInFrame: Single; +begin + var Base: TFmxObject := FindStyleResource('inframe'); + if Base <> nil then + FInFrame := StrToFloat(TText(Base).Text); + + Result := FInFrame; +end; + +procedure TCompLabel.SetInFrame(Value: Single); +begin + FInFrame := Value; + var Base: TFmxObject := FindStyleResource('inframe'); + if Base <> nil then + TText(Base).Text := IntToStr(Trunc(Value)); + + var ProgressBarBase: TFmxObject := FindStyleResource('progressbar'); + if ProgressBarBase <> nil then + TProgressBar(ProgressBarBase).Min := FInFrame; +end; + +{$ENDREGION} + +{$REGION ' OutFrame '} + +function TCompLabel.GetOutFrame: Single; +begin + var Base: TFmxObject := FindStyleResource('outframe'); + if Base <> nil then + FOutFrame := StrToFloat(TText(Base).Text); + + Result := FOutFrame; +end; + +procedure TCompLabel.SetOutFrame(Value: Single); +begin + FOutFrame := Value; + var Base: TFmxObject := FindStyleResource('outframe'); + if Base <> nil then + TText(Base).Text := IntToStr(Trunc(Value)); + + var ProgressBarBase: TFmxObject := FindStyleResource('progressbar'); + if ProgressBarBase <> nil then + TProgressBar(ProgressBarBase).Max := FOutFrame; +end; + +{$ENDREGION} + +{$REGION ' Split '} + +function TCompLabel.GetSplit: String; +begin + var Base: TFmxObject := FindStyleResource('split'); + if Base <> nil then + FSplit := TText(Base).Text; + + Result := FSplit; +end; + +procedure TCompLabel.SetSplit(Value: String); +begin + FSplit := Value; + var Base: TFmxObject := FindStyleResource('split'); + if Base <> nil then + TText(Base).Text := Value; +end; + +{$ENDREGION} + +procedure TCompLabel.ApplyStyle; +begin + inherited; + SetCompName(FComposition); + SetProgress(FProgress); + SetValue(FValue); + SetInFrame(FInFrame); + SetOutFrame(FOutFrame); + SetSplit(FSplit); +end; + +constructor TCompLabel.Create(AOwner: TComponent); +begin + inherited; + Height := 24; + Width := 400; + + Composition := ''; + Progress := ''; + Value := -1; + InFrame := 0; + OutFrame := 100; + Split := ''; + HitTest := False; +end; + +procedure Register; +begin + RegisterComponents('AErender Launcher', [TCompLabel]); +end; + +end. diff --git a/src/lib/Components/TCompLabel/Package/FMX.CompLabel.rc b/src/lib/Components/TCompLabel/Package/FMX.CompLabel.rc new file mode 100644 index 0000000..f572f75 --- /dev/null +++ b/src/lib/Components/TCompLabel/Package/FMX.CompLabel.rc @@ -0,0 +1 @@ +complabelstyle RCDATA "CompLabelDesign.style" \ No newline at end of file diff --git a/src/lib/Components/TCompLabel/Package/FMX.CompLabel.res b/src/lib/Components/TCompLabel/Package/FMX.CompLabel.res new file mode 100644 index 0000000..482f46a Binary files /dev/null and b/src/lib/Components/TCompLabel/Package/FMX.CompLabel.res differ diff --git a/src/lib/Components/TCompLabel/TCompLabel.groupproj b/src/lib/Components/TCompLabel/TCompLabel.groupproj new file mode 100644 index 0000000..0ca951a --- /dev/null +++ b/src/lib/Components/TCompLabel/TCompLabel.groupproj @@ -0,0 +1,48 @@ + + + {EE1941E1-8B82-410B-8888-9A849E41EE5E} + + + + + + + + + + + Default.Personality.12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/lib/Components/TCompLabel/Test Project/CompLabelDesign.fmx b/src/lib/Components/TCompLabel/Test Project/CompLabelDesign.fmx new file mode 100644 index 0000000..1396e11 --- /dev/null +++ b/src/lib/Components/TCompLabel/Test Project/CompLabelDesign.fmx @@ -0,0 +1,75 @@ +object Form2: TForm2 + Left = 0 + Top = 0 + Caption = 'Form2' + ClientHeight = 480 + ClientWidth = 640 + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + DesignerMasterStyle = 0 + object StyleBook1: TStyleBook + Styles = < + item + ResourcesBin = { + 464D585F5354594C4520322E3501060E636F6D706C6162656C7374796C6503C5 + 0600545046300A5452656374616E676C6500095374796C654E616D65060E636F + 6D706C6162656C7374796C6505416C69676E070643656E7465720C436C697043 + 68696C6472656E090946696C6C2E4B696E6407044E6F6E650748697454657374 + 080A53697A652E576964746805000000000000C0F208400B53697A652E486569 + 6768740500000000000000C003401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E6500055454657874000953 + 74796C654E616D650604636F6D7005416C69676E0706436C69656E7407486974 + 54657374080C4D617267696E732E4C6566740500000000000000A003400A5369 + 7A652E57696474680500000000000080DB07400B53697A652E48656967687405 + 00000000000000C003401453697A652E506C6174666F726D44656661756C7408 + 0454657874060454657874165465787453657474696E67732E466F6E74436F6C + 6F720708636C615768697465155465787453657474696E67732E5472696D6D69 + 6E670709436861726163746572155465787453657474696E67732E576F726457 + 72617008165465787453657474696E67732E486F727A416C69676E07074C6561 + 64696E67000005545465787400095374796C654E616D650607696E6672616D65 + 05416C69676E070552696768740748697454657374080A506F736974696F6E2E + 5805000000000000C0A208400A53697A652E57696474680500000000000000E0 + 05400B53697A652E4865696768740500000000000000C003401453697A652E50 + 6C6174666F726D44656661756C74080454657874060454657874165465787453 + 657474696E67732E466F6E74436F6C6F720708636C6157686974651654657874 + 53657474696E67732E486F727A416C69676E07074C656164696E670000055454 + 65787400095374796C654E616D6506086F75746672616D6505416C69676E0705 + 52696768740748697454657374080A506F736974696F6E2E5805000000000000 + C0BE08400A53697A652E57696474680500000000000000E005400B53697A652E + 4865696768740500000000000000C003401453697A652E506C6174666F726D44 + 656661756C74080454657874060454657874165465787453657474696E67732E + 466F6E74436F6C6F720708636C615768697465165465787453657474696E6773 + 2E486F727A416C69676E07074C656164696E6700000554546578740009537479 + 6C654E616D65060573706C697405416C69676E07055269676874074869745465 + 7374080A506F736974696F6E2E5805000000000000C0DA08400A53697A652E57 + 696474680500000000000000C005400B53697A652E4865696768740500000000 + 000000C003401453697A652E506C6174666F726D44656661756C740804546578 + 74060454657874165465787453657474696E67732E466F6E74436F6C6F720708 + 636C615768697465165465787453657474696E67732E486F727A416C69676E07 + 074C656164696E67000007544C61796F757400095374796C654E616D6506074C + 61796F75743105416C69676E070552696768740A506F736974696F6E2E580500 + 000000000080E507400A53697A652E57696474680500000000000000C006400B + 53697A652E4865696768740500000000000000C003401453697A652E506C6174 + 666F726D44656661756C7408085461624F726465720200000C5450726F677265 + 737342617200095374796C654E616D65060B70726F677265737362617205416C + 69676E0708436F6E74656E74730748697454657374080B4F7269656E74617469 + 6F6E070A486F72697A6F6E74616C0B4D617267696E732E546F70050000000000 + 00008002400D4D617267696E732E526967687405000000000000008002400E4D + 617267696E732E426F74746F6D05000000000000008002400A53697A652E5769 + 6474680500000000000000B806400B53697A652E486569676874050000000000 + 00008002401453697A652E506C6174666F726D44656661756C74080000055454 + 65787400095374796C654E616D65060870726F677265737305416C69676E0708 + 436F6E74656E747307456E61626C6564080748697454657374080C4D61726769 + 6E732E4C65667405000000000000008002400D4D617267696E732E5269676874 + 05000000000000008002400A53697A652E57696474680500000000000000B006 + 400B53697A652E4865696768740500000000000000C003401453697A652E506C + 6174666F726D44656661756C7408045465787406045465787416546578745365 + 7474696E67732E466F6E74436F6C6F720708636C615768697465165465787453 + 657474696E67732E486F727A416C69676E07074C656164696E67075669736962 + 6C650800000000} + end> + Left = 24 + Top = 24 + end +end diff --git a/src/lib/Components/TCompLabel/Test Project/CompLabelDesign.pas b/src/lib/Components/TCompLabel/Test Project/CompLabelDesign.pas new file mode 100644 index 0000000..6f14306 --- /dev/null +++ b/src/lib/Components/TCompLabel/Test Project/CompLabelDesign.pas @@ -0,0 +1,25 @@ +unit CompLabelDesign; + +interface + +uses + System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, + FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs; + +type + TForm2 = class(TForm) + StyleBook1: TStyleBook; + private + { Private declarations } + public + { Public declarations } + end; + +var + Form2: TForm2; + +implementation + +{$R *.fmx} + +end. diff --git a/src/lib/Components/TCompLabel/Test Project/CompLabelTest.dpr b/src/lib/Components/TCompLabel/Test Project/CompLabelTest.dpr new file mode 100644 index 0000000..742c2d7 --- /dev/null +++ b/src/lib/Components/TCompLabel/Test Project/CompLabelTest.dpr @@ -0,0 +1,17 @@ +program CompLabelTest; + +uses + System.StartUpCopy, + FMX.Forms, + CompLabelUnit in 'CompLabelUnit.pas' {Form1}, + CompLabelDesign in 'CompLabelDesign.pas' {Form2}, + FMX.CompLabel in '..\Package\FMX.CompLabel.pas'; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.CreateForm(TForm2, Form2); + Application.Run; +end. diff --git a/src/lib/Components/TCompLabel/Test Project/CompLabelTest.dproj b/src/lib/Components/TCompLabel/Test Project/CompLabelTest.dproj new file mode 100644 index 0000000..349764e --- /dev/null +++ b/src/lib/Components/TCompLabel/Test Project/CompLabelTest.dproj @@ -0,0 +1,1103 @@ + + + {A4B195DE-B5AE-4ADF-8E60-D326D61BD406} + 19.2 + FMX + True + Debug + Win32 + 37907 + Application + CompLabelTest.dpr + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + 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 + + + true + Cfg_2 + true + true + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + true + true + true + true + true + true + true + true + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\delphi_PROJECTICNS.icns + CompLabelTest + + + DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;FmxTeeUI;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;fgx;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png + + + DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;FmxTeeUI;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;fgx;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png + + + DBXSqliteDriver;RESTComponents;fmxase;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;TMSFMXPackPkgDXE13;FmxTeeUI;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png + + + DBXSqliteDriver;RESTComponents;fmxase;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;FmxTeeUI;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;fgx;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + + + DBXSqliteDriver;RESTComponents;fmxase;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;fmx;FireDACIBDriver;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;FireDACDSDriver;rtl;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;fgx;DBXInformixDriver;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + Debug + true + + + DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;svnui;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;DBXOracleDriver;inetdb;TMSFMXPackPkgDXE13;FmxTeeUI;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;fgx;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;fgx;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + false + true + PerMonitorV2 + + + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + + MainSource + + +
Form1
+ fmx +
+ +
Form2
+ fmx +
+ + + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + Application + + + + CompLabelTest.dpr + + + + True + True + True + False + True + True + True + + + + + true + + + + + true + + + + + true + + + + + CompLabelTest.exe + 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-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 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 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + 1 + + + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 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/src/lib/Components/TCompLabel/Test Project/CompLabelUnit.fmx b/src/lib/Components/TCompLabel/Test Project/CompLabelUnit.fmx new file mode 100644 index 0000000..e3560bc --- /dev/null +++ b/src/lib/Components/TCompLabel/Test Project/CompLabelUnit.fmx @@ -0,0 +1,3414 @@ +object Form1: TForm1 + Left = 0 + Top = 0 + Caption = 'Form1' + ClientHeight = 480 + ClientWidth = 1110 + Fill.Color = xFF1C1C1C + Fill.Kind = Solid + StyleBook = StyleBook1 + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + OnMouseMove = FormMouseMove + DesignerMasterStyle = 0 + object Button1: TButton + Position.X = 312.000000000000000000 + Size.Width = 137.000000000000000000 + Size.Height = 65.000000000000000000 + Size.PlatformDefault = False + Text = 'Button1' + end + object CompLabel1: TCompLabel + Position.X = 32.000000000000000000 + Position.Y = 152.000000000000000000 + Size.Width = 1025.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Composition = 'Composition' + OutFrame = 150.000000000000000000 + Split = '0' + end + object Label1: TLabel + Align = Bottom + StyledSettings = [Family, Size, Style] + Position.Y = 463.000000000000000000 + Size.Width = 1110.000000000000000000 + Size.Height = 17.000000000000000000 + Size.PlatformDefault = False + TextSettings.FontColor = claWhite + Text = 'Label1' + end + object StyleBook1: TStyleBook + Styles = < + item + ResourcesBin = { + 464D585F5354594C4520322E3501060F6261636B67726F756E647374796C6503 + AF00060B627574746F6E7374796C6503BA040609656469747374796C6503A305 + 060A6C6162656C7374796C65031501060D67726F7570626F787374796C650383 + 02060D747261636B6261727374796C65038107060D636865636B626F78737479 + 6C6503880506147363726F6C6C62617268747261636B7374796C65033B010614 + 7363726F6C6C62617276747261636B7374796C65033B0106157363726F6C6C62 + 6172626F74746F6D627574746F6E03220406137363726F6C6C6261726C656674 + 627574746F6E03390406147363726F6C6C6261727269676874627574746F6E03 + 3A0406127363726F6C6C626172746F70627574746F6E033804060E7363726F6C + 6C6261727374796C65035804060A7468756D627374796C65033B02060B737769 + 7463687374796C6503D101060D636F6D626F626F787374796C6503F607060E63 + 6F6D626F656469747374796C65038209060F746162636F6E74726F6C7374796C + 65039C01060B746162646F747374796C65035901060C7461626974656D737479 + 6C6503E404060D7468756D626261727374796C65034F03060C6C697374626F78 + 7374796C6503A207060D6C697374626F78666F6F74657203800106106C697374 + 626F786974656D7374796C65031B0306126C697374626F78706C61696E686561 + 646572033B020609677269647374796C65039808060F6865616465726974656D + 7374796C6503C303061970726F67726573736261726D696E696572726F727374 + 796C65035603061170726F677265737363656C6C7374796C65039A0206106D65 + 6E756261726974656D7374796C6503250B060C6D656E756261727374796C6503 + 6C02060D6D656E756974656D7374796C6503520B06126D656E75736570617261 + 746F727374796C65037801060D6D656E75766965777374796C65039102060E69 + 6D61676563656C6C7374796C65033201060E706F70757063656C6C7374796C65 + 03C603060D7465787463656C6C7374796C65039B0106096D656D6F7374796C65 + 03DC07060E6C696E6B6C6162656C7374796C65034503060E7374617475736261 + 727374796C6503E401060C7370696E626F787374796C65031E08060D73697A65 + 677269707374796C6503F004060C746F6F6C6261727374796C6503CA00061570 + 726F67726573736261726572726F727374796C65036404060F64726F70746172 + 6765747374796C65036804061464726F707461726765746669656C647374796C + 6503890E060C706F706F7665727374796C65032A02060D706F707570626F7873 + 74796C6503320606147374617475736261726E6F677269707374796C6503D400 + 0613736D616C6C7363726F6C6C6261727374796C6503A301060D73706C697474 + 65727374796C650360040610636C6F7365627574746F6E7374796C6503660406 + 0E6D6178627574746F6E7374796C6503F603060E726573627574746F6E737479 + 6C65030F04060E6D696E627574746F6E7374796C65030E04060F746F6F6C7769 + 6E646F777374796C6503B20D061177696E646F77626F726465727374796C6503 + 4A100610726164696F627574746F6E7374796C6503AE050618756C63656E7465 + 72726164696F627574746F6E7374796C650352050617756C7269676874726164 + 696F627574746F6E7374796C650355050616756C6C656674726164696F627574 + 746F6E7374796C65035005061070726F67726573736261727374796C65035F04 + 060D657870616E6465727374796C650366060613657870616E64657262757474 + 6F6E7374796C650376020615657870616E646572636865636B626F787374796C + 6503D005060E6C6162656C66696C6C7374796C6503B8010613636F6D626F6564 + 69746572726F727374796C65038709061E70726F6772657373626172696E6465 + 7465726D696E61626C657374796C650379040611616E69696E64696361746F72 + 7374796C6503BA010615616E69696E64696361746F72686F727A7374796C6503 + 8A02060A70616E656C7374796C65031E01060E6C6F67627574746F6E7374796C + 65038A07061470726F67726573736261726D696E697374796C65035103061B74 + 72656576696577657870616E646572627574746F6E7374796C65037E02061174 + 726565766965776974656D7374796C65031305060D7472656576696577737479 + 6C650336070619616374696F6E746F6F6C627574746F6E6D756C746976696577 + 033407060E616464627574746F6E7374796C65032C070617696E666F746F6F6C + 627574746F6E6D756C74697669657703A90D061B6F7267616E697A65746F6F6C + 627574746F6E6D756C74697669657703EE06061B73657474696E6773746F6F6C + 627574746F6E6D756C746976696577037D13061172656D6F7665627574746F6E + 7374796C6503CF060614706F7075706261636B67726F756E647374796C6503BA + 0000545046300A5452656374616E676C6500095374796C654E616D65060F6261 + 636B67726F756E647374796C6505416C69676E070643656E7465720A46696C6C + 2E436F6C6F7207097846463244324432440A53697A652E576964746805000000 + 000000009407400B53697A652E4865696768740500000000000080D206401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E650756697369626C650800005450463007544C61796F7574000953 + 74796C654E616D65060B627574746F6E7374796C6505416C69676E070643656E + 7465720A53697A652E57696474680500000000000000C805400B53697A652E48 + 65696768740500000000000000C803401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C6508000A5452656374616E676C650009537479 + 6C654E616D65060A6261636B67726F756E6405416C69676E0706436C69656E74 + 0C436C69704368696C6472656E090A436C6970506172656E74090A46696C6C2E + 436F6C6F7207097846463230323032300748697454657374080A53697A652E57 + 696474680500000000000000C805400B53697A652E4865696768740500000000 + 000000C803401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E + 31084475726174696F6E05000000000000000000000C50726F70657274794E61 + 6D65060A46696C6C2E436F6C6F720A537461727456616C756507097846463230 + 323032300953746F7056616C7565070978464634303430343007547269676765 + 72063049734D6F7573654F7665723D747275653B4973507265737365643D6661 + 6C73653B4973466F63757365643D66616C73650E54726967676572496E766572 + 7365063149734D6F7573654F7665723D66616C73653B4973507265737365643D + 66616C73653B4973466F63757365643D66616C736500000F54436F6C6F72416E + 696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F7241 + 6E696D6174696F6E32084475726174696F6E05000000000000000000000C5072 + 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 + 6507097846463430343034300953746F7056616C756507097846463137353739 + 430754726967676572062F4973507265737365643D747275653B49734D6F7573 + 654F7665723D747275653B4973466F63757365643D66616C736500000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E43 + 6F6C6F72416E696D6174696F6E33084475726174696F6E050000000000000000 + 00000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 + 7456616C756507097846463241383245320953746F7056616C75650709784646 + 3137353739430754726967676572062E4973507265737365643D747275653B49 + 734D6F7573654F7665723D747275653B4973466F63757365643D747275650E54 + 726967676572496E7665727365062F4973507265737365643D66616C73653B49 + 734D6F7573654F7665723D747275653B4973466F63757365643D747275650000 + 0005545465787400095374796C654E616D6506047465787405416C69676E0706 + 436C69656E7413456E61626C6544726167486967686C69676874080748697454 + 657374080A53697A652E57696474680500000000000000C805400B53697A652E + 4865696768740500000000000000C803401453697A652E506C6174666F726D44 + 656661756C7408165465787453657474696E67732E466F6E74436F6C6F720708 + 636C6157686974650000005450463007544C61796F757400095374796C654E61 + 6D650609656469747374796C6505416C69676E070643656E7465720A53697A65 + 2E57696474680500000000000000C805400B53697A652E486569676874050000 + 0000000000C803401453697A652E506C6174666F726D44656661756C74080756 + 697369626C6508000C5442727573684F626A65637400095374796C654E616D65 + 060A666F726567726F756E6400000C5442727573684F626A6563740009537479 + 6C654E616D65060973656C656374696F6E0B42727573682E436F6C6F72070978 + 393632413832453200000B54466F6E744F626A65637400095374796C654E616D + 650604666F6E7409466F6E742E53697A650500000000000000D0024000000A54 + 52656374616E676C6500095374796C654E616D65060A6261636B67726F756E64 + 05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646 + 3230323032300748697454657374080A53697A652E5769647468050000000000 + 0000C805400B53697A652E4865696768740500000000000000C803401453697A + 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 + 09784646313531353135000F54436F6C6F72416E696D6174696F6E0009537479 + 6C654E616D650614656469745374726F6B65416E696D6174696F6E3108447572 + 6174696F6E05000000000000000000000C50726F70657274794E616D65060C53 + 74726F6B652E436F6C6F720A537461727456616C756507097846463135313531 + 350953746F7056616C756507097846463241383245320754726967676572060E + 4973466F63757365643D747275650E54726967676572496E7665727365060F49 + 73466F63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E + 00095374796C654E616D650614656469745374726F6B65416E696D6174696F6E + 32084475726174696F6E050000000000000000000007496E7665727365090C50 + 726F70657274794E616D65060C5374726F6B652E436F6C6F720A537461727456 + 616C756507097846463135313531350953746F7056616C756507097846463443 + 344334430754726967676572062149734D6F7573654F7665723D747275653B49 + 73466F63757365643D66616C73653B0E54726967676572496E76657273650622 + 49734D6F7573654F7665723D66616C73653B4973466F63757365643D66616C73 + 653B00000007544C61796F757400095374796C654E616D650607627574746F6E + 7305416C69676E07055269676874064C6F636B6564090B4D617267696E732E54 + 6F7005000000000000008000400D4D617267696E732E52696768740500000000 + 0000008000400E4D617267696E732E426F74746F6D0500000000000000800040 + 0A506F736974696F6E2E580500000000000000C004400A506F736974696F6E2E + 5905000000000000008000400A53697A652E57696474680500000000000000C8 + 04400B53697A652E4865696768740500000000000000A803401453697A652E50 + 6C6174666F726D44656661756C7408000007544C61796F757400095374796C65 + 4E616D650607636F6E74656E7405416C69676E0706436C69656E74064C6F636B + 6564090C4D617267696E732E4C65667405000000000000008001400B4D617267 + 696E732E546F7005000000000000008000400D4D617267696E732E5269676874 + 05000000000000008000400E4D617267696E732E426F74746F6D050000000000 + 00008000400A53697A652E57696474680500000000000000A804400B53697A65 + 2E4865696768740500000000000000A803401453697A652E506C6174666F726D + 44656661756C7408000006544C6162656C00095374796C654E616D6506067072 + 6F6D7074064C6F636B656409074F706163697479050000000000000080FE3F16 + 5465787453657474696E67732E466F6E74436F6C6F720708636C615768697465 + 04546578740604546578740000005450463007544C61796F757400095374796C + 654E616D65060A6C6162656C7374796C6505416C69676E070643656E7465720A + 53697A652E57696474680500000000000000C805400B53697A652E4865696768 + 740500000000000000C803401453697A652E506C6174666F726D44656661756C + 74080756697369626C65080005545465787400095374796C654E616D65060474 + 65787405416C69676E0708436F6E74656E74730748697454657374080A53697A + 652E57696474680500000000000000C805400B53697A652E4865696768740500 + 000000000000C803401453697A652E506C6174666F726D44656661756C740816 + 5465787453657474696E67732E466F6E74436F6C6F720708636C615768697465 + 0000005450463007544C61796F757400095374796C654E616D65060D67726F75 + 70626F787374796C6505416C69676E070643656E7465720A53697A652E576964 + 74680500000000000000F004400B53697A652E48656967687405000000000000 + 00C804401453697A652E506C6174666F726D44656661756C7408075669736962 + 6C6508000A5452656374616E676C6500095374796C654E616D65060A6261636B + 67726F756E6405416C69676E0708436F6E74656E74730946696C6C2E4B696E64 + 07044E6F6E650748697454657374080C4D617267696E732E4C65667405000000 + 00000000C000400B4D617267696E732E546F7005000000000000009002400D4D + 617267696E732E52696768740500000000000000C000400E4D617267696E732E + 426F74746F6D0500000000000000C000400A53697A652E576964746805000000 + 00000000D804400B53697A652E48656967687405000000000000009804401453 + 697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F + 7207097846463135313531350005545465787400095374796C654E616D650604 + 74657874084175746F53697A65090A436C6970506172656E7409074869745465 + 7374080C4D617267696E732E4C6566740500000000000000A002400A506F7369 + 74696F6E2E5805000000000060559502400A506F736974696F6E2E5905000000 + 00004055D501C00A53697A652E576964746805000000000000B8C703400B5369 + 7A652E4865696768740500000000000060FF02401453697A652E506C6174666F + 726D44656661756C7408165465787453657474696E67732E466F6E74436F6C6F + 720708636C615768697465155465787453657474696E67732E576F7264577261 + 7008000000005450463007544C61796F757400095374796C654E616D65060D74 + 7261636B6261727374796C6505416C69676E070643656E7465720A53697A652E + 57696474680500000000000000C805400B53697A652E48656967687405000000 + 00000000C805401453697A652E506C6174666F726D44656661756C7408075669 + 7369626C65080B46697865644865696768740211000A5452656374616E676C65 + 00095374796C654E616D65060668747261636B05416C69676E070A5665727443 + 656E7465720A46696C6C2E436F6C6F7207097846463135313531350748697454 + 657374080A506F736974696F6E2E590500000000000000BC04400A53697A652E + 57696474680500000000000000C805400B53697A652E48656967687405000000 + 00000000A001401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E65000A5452656374616E676C650009537479 + 6C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E + 74730946696C6C2E4B696E6407044E6F6E65064C6F636B656409074869745465 + 7374080C4D617267696E732E4C6566740500000000000000C001400B4D617267 + 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 + 0500000000000000C001400E4D617267696E732E426F74746F6D050000000000 + 000080FF3F0A53697A652E57696474680500000000000000B005400B53697A65 + 2E4865696768740500000000000000C000401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000A545265 + 6374616E676C6500095374796C654E616D650609686967686C6967687405416C + 69676E07044C6566740A46696C6C2E436F6C6F72070978464632413832453207 + 48697454657374080C50616464696E672E4C6566740500000000000000A00240 + 0A53697A652E57696474680500000000000000F003400B53697A652E48656967 + 68740500000000000000A001401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E6500000B54476C6F77456666 + 6563740008536F66746E657373050000000000CDCCCCFC3F09476C6F77436F6C + 6F720709784646324138324532074F706163697479050000000000000080FF3F + 07456E61626C6564080000000A5452656374616E676C6500095374796C654E61 + 6D65060676747261636B05416C69676E070A486F727A43656E7465720A46696C + 6C2E436F6C6F7207097846463135313531350748697454657374080A506F7369 + 74696F6E2E580500000000000000BC04400A53697A652E576964746805000000 + 00000000A001400B53697A652E4865696768740500000000000000C805401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E65000A5452656374616E676C6500095374796C654E616D65060A62 + 61636B67726F756E6405416C69676E0708436F6E74656E74730946696C6C2E4B + 696E6407044E6F6E65064C6F636B6564090748697454657374080C4D61726769 + 6E732E4C6566740500000000000000C001400B4D617267696E732E546F700500 + 00000000000080FF3F0D4D617267696E732E52696768740500000000000000C0 + 01400E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A + 652E576964746805000000000000000000000B53697A652E4865696768740500 + 000000000000C405401453697A652E506C6174666F726D44656661756C74080B + 5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E676C650009 + 5374796C654E616D650609686967686C6967687405416C69676E0703546F700A + 46696C6C2E436F6C6F7207097846463241383245320748697454657374080A53 + 697A652E57696474680500000000000000A001400B53697A652E486569676874 + 0500000000000000F003401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E6500000B54476C6F774566666563 + 740008536F66746E657373050000000000CDCCCCFC3F09476C6F77436F6C6F72 + 0709784646324138324532074F706163697479050000000000000080FF3F0745 + 6E61626C65640800000006545468756D6200095374796C654E616D6506066874 + 68756D62064C6F636B6564090A506F736974696F6E2E580500000000003033AB + 03400A506F736974696F6E2E59050000000000FFFFA304400A53697A652E5769 + 6474680500000000000000F002400B53697A652E486569676874050000000000 + 0000F002401453697A652E506C6174666F726D44656661756C74080B5374796C + 654C6F6F6B7570060D7468756D626261727374796C65000006545468756D6200 + 095374796C654E616D650606767468756D62064C6F636B6564090A506F736974 + 696F6E2E58050000000000CBCCA804400A506F736974696F6E2E590500000000 + 009899B103400A53697A652E57696474680500000000000000F002400B53697A + 652E4865696768740500000000000000F002401453697A652E506C6174666F72 + 6D44656661756C74080B5374796C654C6F6F6B7570060D7468756D6262617273 + 74796C650000005450463007544C61796F757400095374796C654E616D65060D + 636865636B626F787374796C6505416C69676E070643656E7465720A53697A65 + 2E5769647468050000000000ACAA8006400B53697A652E486569676874050000 + 00000058559904401453697A652E506C6174666F726D44656661756C74080756 + 697369626C65080007544C61796F75740005416C69676E07044C6566740A5369 + 7A652E576964746805000000000000009003400B53697A652E48656967687405 + 000000000058559904401453697A652E506C6174666F726D44656661756C7408 + 000A5452656374616E676C6500095374796C654E616D65060A6261636B67726F + 756E6405416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846 + 463230323032300748697454657374080A53697A652E57696474680500000000 + 000000F002400B53697A652E4865696768740500000000000000F00240145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 0709784646313531353135000A5452656374616E676C6500095374796C654E61 + 6D65060A52656374616E676C653105416C69676E0706436C69656E740A46696C + 6C2E436F6C6F720709784646324138324532074869745465737408074F706163 + 69747905000000000000000000000C4D617267696E732E4C6566740500000000 + 0000008000400B4D617267696E732E546F7005000000000000008000400D4D61 + 7267696E732E526967687405000000000000008000400E4D617267696E732E42 + 6F74746F6D05000000000000008000400A53697A652E57696474680500000000 + 000000B002400B53697A652E4865696768740500000000000000B00240145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E65000F54466C6F6174416E696D6174696F6E00095374796C654E616D + 65061B6368656368626F7856697362696C697479416E696D6174696F6E310844 + 75726174696F6E05000000000000000000000C50726F70657274794E616D6506 + 074F7061636974790A537461727456616C756505000000000000000000000953 + 746F7056616C75650500000000000000C805400754726967676572060E497343 + 6865636B65643D747275650E54726967676572496E7665727365060F49734368 + 65636B65643D66616C73650000000F54436F6C6F72416E696D6174696F6E0009 + 5374796C654E616D650618636865636B626F785374726F6B65416E696D617469 + 6F6E31084475726174696F6E05000000000000000000000C50726F7065727479 + 4E616D65060C5374726F6B652E436F6C6F720A537461727456616C7565070978 + 46463135313531350953746F7056616C75650709784646324138324532075472 + 6967676572060E4973436865636B65643D747275650E54726967676572496E76 + 65727365060F4973436865636B65643D66616C736500000F54436F6C6F72416E + 696D6174696F6E00095374796C654E616D650617636865636B626F78436F6C6F + 72416E696D6174696F6E31084475726174696F6E05000000000000000000000C + 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 + 6C756507097846463230323032300953746F7056616C75650709784646343034 + 3034300754726967676572061049734D6F7573654F7665723D747275650E5472 + 6967676572496E7665727365061149734D6F7573654F7665723D66616C736500 + 00000005545465787400095374796C654E616D6506047465787405416C69676E + 0706436C69656E740A53697A652E57696474680500000000005855DD05400B53 + 697A652E48656967687405000000000058559904401453697A652E506C617466 + 6F726D44656661756C7408165465787453657474696E67732E466F6E74436F6C + 6F720708636C615768697465000000545046300A5452656374616E676C650009 + 5374796C654E616D6506147363726F6C6C62617268747261636B7374796C6505 + 416C69676E070643656E7465720A46696C6C2E436F6C6F720709784646313531 + 3531350748697454657374080A53697A652E57696474680500000000000000C8 + 04400B53697A652E4865696768740500000000000000C804401453697A652E50 + 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E + 650756697369626C65080006545468756D6200095374796C654E616D65060574 + 68756D62064C6F636B6564090A53697A652E5769647468050000000000000080 + 03400B53697A652E4865696768740500000000000000C804401453697A652E50 + 6C6174666F726D44656661756C74080B5374796C654C6F6F6B7570060A746875 + 6D627374796C65000000545046300A5452656374616E676C6500095374796C65 + 4E616D6506147363726F6C6C62617276747261636B7374796C6505416C69676E + 070643656E7465720A46696C6C2E436F6C6F7207097846463135313531350748 + 697454657374080A53697A652E57696474680500000000000000C804400B5369 + 7A652E4865696768740500000000000000C804401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6507566973 + 69626C65080006545468756D6200095374796C654E616D6506057468756D6206 + 4C6F636B6564090A53697A652E57696474680500000000000000C804400B5369 + 7A652E48656967687405000000000000008003401453697A652E506C6174666F + 726D44656661756C74080B5374796C654C6F6F6B7570060A7468756D62737479 + 6C650000005450463007544C61796F757400095374796C654E616D6506157363 + 726F6C6C626172626F74746F6D627574746F6E05416C69676E070643656E7465 + 720756697369626C6508000A5452656374616E676C6500095374796C654E616D + 65060A6261636B67726F756E6405416C69676E0706436C69656E740C436C6970 + 4368696C6472656E090A436C6970506172656E74090A46696C6C2E436F6C6F72 + 07097846463230323032300748697454657374080A53697A652E576964746805 + 00000000000000C804400B53697A652E4865696768740500000000000000C804 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C + 654E616D650615627574746F6E436F6C6F72416E696D6174696F6E3108447572 + 6174696F6E05000000000000000000000C50726F70657274794E616D65060A46 + 696C6C2E436F6C6F720A537461727456616C7565070978464632303230323009 + 53746F7056616C75650709784646343034303430075472696767657206204973 + 4D6F7573654F7665723D747275653B4973507265737365643D66616C73650E54 + 726967676572496E7665727365062149734D6F7573654F7665723D66616C7365 + 3B4973507265737365643D66616C736500000F54436F6C6F72416E696D617469 + 6F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174 + 696F6E32084475726174696F6E05000000000000000000000C50726F70657274 + 794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507097846 + 463430343034300953746F7056616C7565070978464631373537394307547269 + 67676572061F4973507265737365643D747275653B49734D6F7573654F766572 + 3D747275650E54726967676572496E766572736506204973507265737365643D + 66616C73653B49734D6F7573654F7665723D7472756500000007544C61796F75 + 7400095374796C654E616D6506074C61796F75743105416C69676E070643656E + 7465720A53697A652E57696474680500000000000000A002400B53697A652E48 + 65696768740500000000000000C001401453697A652E506C6174666F726D4465 + 6661756C74080005545061746800095374796C654E616D650605506174683105 + 416C69676E0706436C69656E7409446174612E506174680A3400000004000000 + 000000000000C8420000C84201000000000096430000C8420100000000004843 + 00009643030000000000C8420000C8420A46696C6C2E436F6C6F720708636C61 + 57686974650748697454657374080A53697A652E576964746805000000000000 + 00A002400B53697A652E4865696768740500000000000000C001401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E65000000005450463007544C61796F757400095374796C654E616D650613 + 7363726F6C6C6261726C656674627574746F6E05416C69676E070643656E7465 + 720756697369626C6508000A5452656374616E676C6500095374796C654E616D + 65060A6261636B67726F756E6405416C69676E0706436C69656E740C436C6970 + 4368696C6472656E090A436C6970506172656E74090A46696C6C2E436F6C6F72 + 07097846463230323032300748697454657374080A53697A652E576964746805 + 00000000000000C804400B53697A652E4865696768740500000000000000C804 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C + 654E616D650615627574746F6E436F6C6F72416E696D6174696F6E3108447572 + 6174696F6E05000000000000000000000C50726F70657274794E616D65060A46 + 696C6C2E436F6C6F720A537461727456616C7565070978464632303230323009 + 53746F7056616C75650709784646343034303430075472696767657206204973 + 4D6F7573654F7665723D747275653B4973507265737365643D66616C73650E54 + 726967676572496E7665727365062149734D6F7573654F7665723D66616C7365 + 3B4973507265737365643D66616C736500000F54436F6C6F72416E696D617469 + 6F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174 + 696F6E32084475726174696F6E05000000000000000000000C50726F70657274 + 794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507097846 + 463430343034300953746F7056616C7565070978464631373537394307547269 + 67676572061F4973507265737365643D747275653B49734D6F7573654F766572 + 3D747275650E54726967676572496E766572736506204973507265737365643D + 66616C73653B49734D6F7573654F7665723D7472756500000007544C61796F75 + 7400095374796C654E616D6506074C61796F75743105416C69676E070643656E + 7465720A53697A652E57696474680500000000000000A002400B53697A652E48 + 65696768740500000000000000C001401453697A652E506C6174666F726D4465 + 6661756C74080005545061746800095374796C654E616D650605506174683105 + 416C69676E0706436C69656E7409446174612E506174680A3400000004000000 + 000000000000C8420000C84201000000000096430000C8420100000000004843 + 00009643030000000000C8420000C8420A46696C6C2E436F6C6F720708636C61 + 57686974650748697454657374080D526F746174696F6E416E676C6505000000 + 00000000B405400A53697A652E57696474680500000000000000A002400B5369 + 7A652E4865696768740500000000000000C001401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000000 + 5450463007544C61796F757400095374796C654E616D6506147363726F6C6C62 + 61727269676874627574746F6E05416C69676E070643656E7465720756697369 + 626C6508000A5452656374616E676C6500095374796C654E616D65060A626163 + 6B67726F756E6405416C69676E0706436C69656E740C436C69704368696C6472 + 656E090A436C6970506172656E74090A46696C6C2E436F6C6F72070978464632 + 30323032300748697454657374080A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000000000C804401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 15627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E05 + 000000000000000000000C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463230323032300953746F705661 + 6C756507097846463430343034300754726967676572062049734D6F7573654F + 7665723D747275653B4973507265737365643D66616C73650E54726967676572 + 496E7665727365062149734D6F7573654F7665723D66616C73653B4973507265 + 737365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E320844 + 75726174696F6E05000000000000000000000C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C756507097846463430343034 + 300953746F7056616C756507097846463137353739430754726967676572061F + 4973507265737365643D747275653B49734D6F7573654F7665723D747275650E + 54726967676572496E766572736506204973507265737365643D66616C73653B + 49734D6F7573654F7665723D7472756500000007544C61796F75740009537479 + 6C654E616D6506074C61796F75743105416C69676E070643656E7465720A5369 + 7A652E57696474680500000000000000A002400B53697A652E48656967687405 + 00000000000000C001401453697A652E506C6174666F726D44656661756C7408 + 0005545061746800095374796C654E616D650605506174683105416C69676E07 + 06436C69656E7409446174612E506174680A3400000004000000000000000000 + C8420000C84201000000000096430000C8420100000000004843000096430300 + 00000000C8420000C8420A46696C6C2E436F6C6F720708636C61576869746507 + 48697454657374080D526F746174696F6E416E676C650500000000000000B405 + C00A53697A652E57696474680500000000000000A002400B53697A652E486569 + 6768740500000000000000C001401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E6500000000545046300754 + 4C61796F757400095374796C654E616D6506127363726F6C6C626172746F7062 + 7574746F6E05416C69676E070643656E7465720756697369626C6508000A5452 + 656374616E676C6500095374796C654E616D65060A6261636B67726F756E6405 + 416C69676E0706436C69656E740C436C69704368696C6472656E090A436C6970 + 506172656E74090A46696C6C2E436F6C6F720709784646323032303230074869 + 7454657374080A53697A652E57696474680500000000000000C804400B53697A + 652E4865696768740500000000000000C804401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E43 + 6F6C6F72416E696D6174696F6E31084475726174696F6E050000000000000000 + 00000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 + 7456616C756507097846463230323032300953746F7056616C75650709784646 + 3430343034300754726967676572062049734D6F7573654F7665723D74727565 + 3B4973507265737365643D66616C73650E54726967676572496E766572736506 + 2149734D6F7573654F7665723D66616C73653B4973507265737365643D66616C + 736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 15627574746F6E436F6C6F72416E696D6174696F6E32084475726174696F6E05 + 000000000000000000000C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463430343034300953746F705661 + 6C756507097846463137353739430754726967676572061F4973507265737365 + 643D747275653B49734D6F7573654F7665723D747275650E5472696767657249 + 6E766572736506204973507265737365643D66616C73653B49734D6F7573654F + 7665723D7472756500000007544C61796F757400095374796C654E616D650607 + 4C61796F75743105416C69676E070643656E7465720A53697A652E5769647468 + 0500000000000000A002400B53697A652E4865696768740500000000000000C0 + 01401453697A652E506C6174666F726D44656661756C74080005545061746800 + 095374796C654E616D650605506174683105416C69676E0706436C69656E7409 + 446174612E506174680A3400000004000000000000000000C8420000C8420100 + 0000000096430000C842010000000000484300009643030000000000C8420000 + C8420A46696C6C2E436F6C6F720708636C615768697465074869745465737408 + 0D526F746174696F6E416E676C650500000000000000B406400A53697A652E57 + 696474680500000000000000A002400B53697A652E4865696768740500000000 + 000000C001401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E65000000005450463007544C61796F75740009 + 5374796C654E616D65060E7363726F6C6C6261727374796C6505416C69676E07 + 0643656E7465720756697369626C6508000754427574746F6E00095374796C65 + 4E616D65060A6C656674627574746F6E05416C69676E07044C656674064C6F63 + 6B6564090A506F736974696F6E2E5905000000000000008003400A53697A652E + 576964746805000000000000008003400B53697A652E48656967687405000000 + 000000009003401453697A652E506C6174666F726D44656661756C74080B5374 + 796C654C6F6F6B757006137363726F6C6C6261726C656674627574746F6E0000 + 0754427574746F6E00095374796C654E616D65060B7269676874627574746F6E + 05416C69676E07055269676874064C6F636B6564090A506F736974696F6E2E58 + 05000000000000008804400A506F736974696F6E2E5905000000000000008003 + 400A53697A652E576964746805000000000000008003400B53697A652E486569 + 67687405000000000000009003401453697A652E506C6174666F726D44656661 + 756C74080B5374796C654C6F6F6B757006147363726F6C6C6261727269676874 + 627574746F6E00000754427574746F6E00095374796C654E616D65060C626F74 + 746F6D627574746F6E05416C69676E0706426F74746F6D064C6F636B6564090A + 506F736974696F6E2E5905000000000000008804400A53697A652E5769647468 + 0500000000000000C804400B53697A652E486569676874050000000000000080 + 03401453697A652E506C6174666F726D44656661756C74080B5374796C654C6F + 6F6B757006157363726F6C6C626172626F74746F6D627574746F6E0000065454 + 7261636B00095374796C654E616D65060668747261636B05416C69676E070643 + 6C69656E74064C6F636B6564090B4F7269656E746174696F6E070A486F72697A + 6F6E74616C0A53697A652E576964746805000000000000009003400B53697A65 + 2E48656967687405000000000000009003401453697A652E506C6174666F726D + 44656661756C74080B5374796C654C6F6F6B757006147363726F6C6C62617268 + 747261636B7374796C6500000654547261636B00095374796C654E616D650606 + 76747261636B05416C69676E0706436C69656E74064C6F636B6564090B4F7269 + 656E746174696F6E070A486F72697A6F6E74616C0A53697A652E576964746805 + 000000000000009003400B53697A652E48656967687405000000000000009003 + 401453697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F + 6B757006147363726F6C6C62617276747261636B7374796C6500000754427574 + 746F6E00095374796C654E616D650609746F70627574746F6E05416C69676E07 + 03546F700A53697A652E57696474680500000000000000C804400B53697A652E + 48656967687405000000000000008003401453697A652E506C6174666F726D44 + 656661756C74080B5374796C654C6F6F6B757006127363726F6C6C626172746F + 70627574746F6E000000545046300A5452656374616E676C6500095374796C65 + 4E616D65060A7468756D627374796C6505416C69676E070643656E7465720A46 + 696C6C2E436F6C6F7207097846463444344434440748697454657374080A5369 + 7A652E57696474680500000000000000C804400B53697A652E48656967687405 + 00000000000000C804401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E650756697369626C6508000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D6506147468756D62436F + 6C6F72416E696D6174696F6E31084475726174696F6E05000000000000000000 + 000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374617274 + 56616C756507097846463444344434440953746F7056616C7565070978464631 + 37353739430754726967676572060E4973507265737365643D747275650E5472 + 6967676572496E7665727365060F4973507265737365643D66616C736500000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F + 72416E696D6174696F6E315374796C65084475726174696F6E05000000000000 + 000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 + 61727456616C756507097846463444344434440953746F7056616C7565070763 + 6C61477261790754726967676572061049734D6F7573654F7665723D74727565 + 0E54726967676572496E7665727365061149734D6F7573654F7665723D66616C + 7365000000545046300D545377697463684F626A65637400095374796C654E61 + 6D65060B7377697463687374796C6505416C69676E070643656E746572044B69 + 6E64070C466164696E67547261636B730A53697A652E57696474680500000000 + 000000C805400B53697A652E4865696768740500000000000000C80340145369 + 7A652E506C6174666F726D44656661756C740812547261636B696E675468756D + 625363616C65050000000000000080FF3F0756697369626C65080A46696C6C2E + 436F6C6F7207097846463230323032300C46696C6C4F6E2E436F6C6F72070978 + 46463137353739430B46696C6C4F6E2E4B696E640705536F6C69640B5374726F + 6B652E4B696E6407044E6F6E650B5468756D622E436F6C6F7207097846463430 + 343034300D5468756D624F6E2E436F6C6F7207097846463241383245320C5468 + 756D624F6E2E4B696E640705536F6C6964105468756D625374726F6B652E4B69 + 6E6407044E6F6E650F5468756D625374726F6B652E4361700705526F756E6410 + 5468756D625374726F6B652E446173680706437573746F6D105468756D625374 + 726F6B652E4A6F696E0705526F756E64165468756D625374726F6B652E437573 + 746F6D446173680A08000000000000000000000000005450463007544C61796F + 757400095374796C654E616D65060D636F6D626F626F787374796C6505416C69 + 676E070643656E7465720A53697A652E57696474680500000000000000C80540 + 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 + 74666F726D44656661756C74080756697369626C6508000C5442727573684F62 + 6A65637400095374796C654E616D65060A666F726567726F756E6400000B5446 + 6F6E744F626A65637400095374796C654E616D650604666F6E7409466F6E742E + 53697A650500000000000000D00240000007544C61796F757400095374796C65 + 4E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E7473 + 0A53697A652E57696474680500000000000000C805400B53697A652E48656967 + 68740500000000000000C803401453697A652E506C6174666F726D4465666175 + 6C7408000A5452656374616E676C6500095374796C654E616D65060A52656374 + 616E676C653105416C69676E0706436C69656E740A46696C6C2E436F6C6F7207 + 097846463230323032300748697454657374080A53697A652E57696474680500 + 000000000000C805400B53697A652E4865696768740500000000000000C80340 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E650007544C61796F757400095374796C654E616D6506114275 + 74746F6E5374796C654F626A65637405416C69676E070846697452696768740B + 4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E52 + 69676874050000000000000080FF3F0E4D617267696E732E426F74746F6D0500 + 00000000000080FF3F0A506F736974696F6E2E580500000000005ED99705400A + 506F736974696F6E2E59050000000000000080FF3F0A53697A652E5769647468 + 050000000000889AB803400B53697A652E4865696768740500000000000000B8 + 03401453697A652E506C6174666F726D44656661756C74080007544C61796F75 + 7400095374796C654E616D6506074C61796F75743105416C69676E070643656E + 7465720C4D617267696E732E4C656674050000000000000080FF3F0A53697A65 + 2E57696474680500000000000000A002400B53697A652E486569676874050000 + 0000000000C001401453697A652E506C6174666F726D44656661756C74080005 + 545061746800095374796C654E616D650605506174683105416C69676E070643 + 6C69656E7409446174612E506174680A3400000004000000000000000000C842 + 0000C84201000000000096430000C84201000000000048430000964303000000 + 0000C8420000C8420A46696C6C2E436F6C6F720708636C615768697465074869 + 7454657374080A53697A652E57696474680500000000000000A002400B53697A + 652E4865696768740500000000000000C001401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D65061562757474 + 6F6E436F6C6F72416E696D6174696F6E31084475726174696F6E050000000000 + 00000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53 + 7461727456616C756507097846463230323032300953746F7056616C75650709 + 7846463430343034300754726967676572063049734D6F7573654F7665723D74 + 7275653B4973507265737365643D66616C73653B4973466F63757365643D6661 + 6C73650E54726967676572496E7665727365063149734D6F7573654F7665723D + 66616C73653B4973507265737365643D66616C73653B4973466F63757365643D + 66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E61 + 6D650615627574746F6E436F6C6F72416E696D6174696F6E3208447572617469 + 6F6E05000000000000000000000C50726F70657274794E616D65060A46696C6C + 2E436F6C6F720A537461727456616C756507097846463430343034300953746F + 7056616C756507097846463137353739430754726967676572062F4973507265 + 737365643D747275653B49734D6F7573654F7665723D747275653B4973466F63 + 757365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E330844 + 75726174696F6E05000000000000000000000C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C756507097846463241383245 + 320953746F7056616C756507097846463137353739430754726967676572062E + 4973507265737365643D747275653B49734D6F7573654F7665723D747275653B + 4973466F63757365643D747275650E54726967676572496E7665727365062F49 + 73507265737365643D66616C73653B49734D6F7573654F7665723D747275653B + 4973466F63757365643D747275650000000007544C61796F757400095374796C + 654E616D650607636F6E74656E7405416C69676E0706436C69656E74064C6F63 + 6B6564090C4D617267696E732E4C65667405000000000000008000400B4D6172 + 67696E732E546F7005000000000000008000400D4D617267696E732E52696768 + 740500000000000000D803400E4D617267696E732E426F74746F6D0500000000 + 0000008000400A53697A652E576964746805000000000000008E05400B53697A + 652E4865696768740500000000000000A803401453697A652E506C6174666F72 + 6D44656661756C74080000005450463007544C61796F757400095374796C654E + 616D65060E636F6D626F656469747374796C6505416C69676E070643656E7465 + 720A53697A652E57696474680500000000000000C805400B53697A652E486569 + 6768740500000000000000C803401453697A652E506C6174666F726D44656661 + 756C74080756697369626C6508000C5442727573684F626A6563740009537479 + 6C654E616D65060A666F726567726F756E6400000B54466F6E744F626A656374 + 00095374796C654E616D650604666F6E7409466F6E742E53697A650500000000 + 000000D00240000007544C61796F757400095374796C654E616D65060A626163 + 6B67726F756E6405416C69676E0708436F6E74656E74730A53697A652E576964 + 74680500000000000000C805400B53697A652E48656967687405000000000000 + 00C803401453697A652E506C6174666F726D44656661756C7408000A54526563 + 74616E676C6500095374796C654E616D65060A52656374616E676C653105416C + 69676E0706436C69656E740A46696C6C2E436F6C6F7207097846463230323032 + 300748697454657374080A53697A652E57696474680500000000000000C80540 + 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 + 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464632 + 3032303230000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650614436F6C6F72416E696D6174696F6E315374796C65084475726174696F6E + 050000000000000000000007496E7665727365090C50726F70657274794E616D + 65060C5374726F6B652E436F6C6F720A537461727456616C7565070978464632 + 30323032300953746F7056616C75650709784646343034303430075472696767 + 6572062049734D6F7573654F7665723D747275653B4973466F63757365643D66 + 616C73650E54726967676572496E7665727365062149734D6F7573654F766572 + 3D66616C73653B4973466F63757365643D66616C736500000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174 + 696F6E325374796C65084475726174696F6E050000000000000000000007496E + 7665727365090C50726F70657274794E616D65060C5374726F6B652E436F6C6F + 720A537461727456616C756507097846463430343034300953746F7056616C75 + 6507097846463241383245320754726967676572061F49734D6F7573654F7665 + 723D747275653B4973466F63757365643D747275650E54726967676572496E76 + 65727365062049734D6F7573654F7665723D747275653B4973466F6375736564 + 3D66616C7365000007544C61796F757400095374796C654E616D650605617272 + 6F7705416C69676E070846697452696768740B4D617267696E732E546F700500 + 00000000000080FF3F0D4D617267696E732E5269676874050000000000000080 + FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A506F73 + 6974696F6E2E580500000000005ED99705400A506F736974696F6E2E59050000 + 000000000080FF3F0A53697A652E5769647468050000000000889AB803400B53 + 697A652E4865696768740500000000000000B803401453697A652E506C617466 + 6F726D44656661756C7408000A5452656374616E676C6500095374796C654E61 + 6D65060A52656374616E676C653105416C69676E0708436F6E74656E74730A46 + 696C6C2E436F6C6F7207097846463330333033300748697454657374080A5369 + 7A652E5769647468050000000000889AB803400B53697A652E48656967687405 + 00000000000000B803401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174 + 696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E3153 + 74796C65084475726174696F6E050000000000000000000007496E7665727365 + 090C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374617274 + 56616C756507097846463330333033300953746F7056616C7565070978464634 + 30343034300754726967676572062049734D6F7573654F7665723D747275653B + 4973466F63757365643D66616C73650E54726967676572496E76657273650621 + 49734D6F7573654F7665723D66616C73653B4973466F63757365643D66616C73 + 6500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614 + 436F6C6F72416E696D6174696F6E325374796C65084475726174696F6E050000 + 00000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F + 720A537461727456616C756507097846463430343034300953746F7056616C75 + 6507097846463137353739430754726967676572061F4973466F63757365643D + 747275653B49734D6F7573654F7665723D7472756500000007544C61796F7574 + 00095374796C654E616D6506074C61796F75743105416C69676E070643656E74 + 65720C4D617267696E732E4C656674050000000000000080FF3F0A53697A652E + 57696474680500000000000000A002400B53697A652E48656967687405000000 + 00000000C001401453697A652E506C6174666F726D44656661756C7408000554 + 5061746800095374796C654E616D650605506174683105416C69676E0706436C + 69656E7409446174612E506174680A3400000004000000000000000000C84200 + 00C84201000000000096430000C8420100000000004843000096430300000000 + 00C8420000C8420A46696C6C2E436F6C6F720708636C61576869746507486974 + 54657374080A53697A652E57696474680500000000000000A002400B53697A65 + 2E4865696768740500000000000000C001401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000000000 + 0C5442727573684F626A65637400095374796C654E616D65060973656C656374 + 696F6E0B42727573682E436F6C6F720709783936324138324532000007544C61 + 796F757400095374796C654E616D650607636F6E74656E7405416C69676E0706 + 436C69656E740C4D617267696E732E4C65667405000000000000008000400B4D + 617267696E732E546F7005000000000000008000400D4D617267696E732E5269 + 6768740500000000000000F003400E4D617267696E732E426F74746F6D050000 + 00000000008000400A53697A652E576964746805000000000000008805400B53 + 697A652E4865696768740500000000000000A803401453697A652E506C617466 + 6F726D44656661756C74080000005450463007544C61796F757400095374796C + 654E616D65060F746162636F6E74726F6C7374796C6505416C69676E07064365 + 6E7465720A53697A652E576964746805000000000000008E06400B53697A652E + 486569676874050000000000FFFFC905401453697A652E506C6174666F726D44 + 656661756C74080756697369626C6508000A5452656374616E676C6500095374 + 796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E7465 + 6E74730A46696C6C2E436F6C6F720709784646333033303330064C6F636B6564 + 090748697454657374080C50616464696E672E4C656674050000000000000080 + 00400B50616464696E672E546F7005000000000000008000400D50616464696E + 672E526967687405000000000000008000400E50616464696E672E426F74746F + 6D05000000000000008000400A53697A652E576964746805000000000000008E + 06400B53697A652E486569676874050000000000FFFFC905401453697A652E50 + 6C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846 + 46313531353135000000545046300A5452656374616E676C6500095374796C65 + 4E616D65060B746162646F747374796C6505416C69676E070643656E7465720A + 46696C6C2E436F6C6F7207097846463135313531350748697454657374080A53 + 697A652E576964746805000000000000008005400B53697A652E486569676874 + 05000000000000008001401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E650756697369626C6508000F5443 + 6F6C6F72416E696D6174696F6E00084475726174696F6E05000000000018B7D1 + F23F0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 + 7456616C756507097846463135313531350953746F7056616C75650709784646 + 3241383245320754726967676572060F497353656C65637465643D747275650E + 54726967676572496E76657273650610497353656C65637465643D66616C7365 + 0000005450463007544C61796F757400095374796C654E616D65060C74616269 + 74656D7374796C6505416C69676E070643656E7465720A53697A652E57696474 + 680500000000000000C804400B53697A652E4865696768740500000000000000 + C803401453697A652E506C6174666F726D44656661756C74080756697369626C + 6508000A5452656374616E676C6500095374796C654E616D650603746F700541 + 6C69676E0708436F6E74656E74730C436C69704368696C6472656E0907436F72 + 6E6572730B07546F704C65667408546F705269676874000A46696C6C2E436F6C + 6F720709784646323032303230064C6F636B6564090748697454657374080553 + 696465730B03546F70044C656674055269676874000A53697A652E5769647468 + 0500000000000000C804400B53697A652E4865696768740500000000000000C8 + 03401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E + 436F6C6F720709784646313531353135000654476C79706800095374796C654E + 616D65060A676C7970687374796C650C4D617267696E732E4C65667405000000 + 000000008001400D4D617267696E732E526967687405000000000000008001C0 + 05416C69676E07044C6566740A53697A652E5769647468050000000000000080 + 03400B53697A652E48656967687405000000000000008003401453697A652E50 + 6C6174666F726D44656661756C7408000005545465787400095374796C654E61 + 6D6506047465787405416C69676E0706436C69656E74064C6F636B6564090748 + 697454657374080C4D617267696E732E4C6566740500000000000000C000400B + 4D617267696E732E546F700500000000000000C000400D4D617267696E732E52 + 696768740500000000000000C000400E4D617267696E732E426F74746F6D0500 + 000000000000C000400A53697A652E57696474680500000000000000B004400B + 53697A652E48656967687405000000000000009803401453697A652E506C6174 + 666F726D44656661756C7408165465787453657474696E67732E466F6E74436F + 6C6F720708636C615768697465155465787453657474696E67732E576F726457 + 7261700800000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650612746162436F6C6F72416E696D6174696F6E310D416E696D6174696F6E54 + 7970650705496E4F7574084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C + 756507097846463230323032300953746F7056616C7565070978464634303430 + 34300754726967676572062149734D6F7573654F7665723D747275653B497353 + 656C65637465643D66616C73650E54726967676572496E766572736506224973 + 4D6F7573654F7665723D66616C73653B497353656C65637465643D66616C7365 + 00000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65061274 + 6162436F6C6F72416E696D6174696F6E32084475726174696F6E050000000000 + 00000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53 + 7461727456616C756507097846463230323032300953746F7056616C75650709 + 7846463241383245320754726967676572060F497353656C65637465643D7472 + 75650E54726967676572496E76657273650610497353656C65637465643D6661 + 6C736500000000545046300A5452656374616E676C6500095374796C654E616D + 65060D7468756D626261727374796C6505416C69676E070643656E7465720A46 + 696C6C2E436F6C6F7207097846463241383245320748697454657374080A5369 + 7A652E57696474680500000000000000A003400B53697A652E48656967687405 + 00000000000000A003401453697A652E506C6174666F726D44656661756C7408 + 0C5374726F6B652E436F6C6F7207097846463135313531350756697369626C65 + 08000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65061474 + 68756D62436F6C6F72416E696D6174696F6E31084475726174696F6E05000000 + 000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F72 + 0A537461727456616C756507097846463241383245320953746F7056616C7565 + 07097846463137353739430754726967676572061F4973507265737365643D74 + 7275653B49734D6F7573654F7665723D747275650E54726967676572496E7665 + 72736506104973507265737365643D66616C73653B00000F54436F6C6F72416E + 696D6174696F6E00095374796C654E616D6506147468756D62436F6C6F72416E + 696D6174696F6E32084475726174696F6E05000000000000000000000C50726F + 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 + 07097846463241383245320953746F7056616C75650709784646343039424646 + 0754726967676572062049734D6F7573654F7665723D747275653B4973507265 + 737365643D66616C73650E54726967676572496E7665727365062149734D6F75 + 73654F7665723D66616C73653B4973507265737365643D66616C736500000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D6506157468756D62 + 5374726F6B65416E696D6174696F6E31084475726174696F6E05000000000000 + 000000000C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A + 537461727456616C756507097846463135313531350953746F7056616C756507 + 097846463137353739430754726967676572061F4973507265737365643D7472 + 75653B49734D6F7573654F7665723D747275650E54726967676572496E766572 + 7365060F4973507265737365643D66616C73650000005450463007544C61796F + 757400095374796C654E616D65060C6C697374626F787374796C6505416C6967 + 6E070643656E7465720A53697A652E5769647468050000000000FFFFE905400B + 53697A652E48656967687405000000000000008306401453697A652E506C6174 + 666F726D44656661756C74080756697369626C6508000C5442727573684F626A + 65637400095374796C654E616D650618416C7465726E6174696E67526F774261 + 636B67726F756E640B42727573682E436F6C6F72070978464632433243324300 + 000A5452656374616E676C6500095374796C654E616D65060A6261636B67726F + 756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709 + 784646323032303230064C6F636B6564090748697454657374080C5061646469 + 6E672E4C65667405000000000000008000400B50616464696E672E546F700500 + 0000000000008000400D50616464696E672E5269676874050000000000000080 + 00400E50616464696E672E426F74746F6D05000000000000008000400A53697A + 652E5769647468050000000000FFFFE905400B53697A652E4865696768740500 + 0000000000008306401453697A652E506C6174666F726D44656661756C74080C + 5374726F6B652E436F6C6F7207097846463135313531350007544C61796F7574 + 00095374796C654E616D650607636F6E74656E7405416C69676E0706436C6965 + 6E740C436C69704368696C6472656E090A53697A652E57696474680500000000 + 00FFFFC105400B53697A652E4865696768740500000000000000DE0540145369 + 7A652E506C6174666F726D44656661756C7408000A5452656374616E676C6500 + 095374796C654E616D65060973656C656374696F6E0A46696C6C2E436F6C6F72 + 07097846463241383245320748697454657374080A53697A652E576964746805 + 00000000000000C804400B53697A652E4865696768740500000000000000C804 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E6500000A5452656374616E676C6500095374796C654E616D + 650610666F637573656473656C656374696F6E0A46696C6C2E436F6C6F720709 + 7846463241383245320748697454657374080A53697A652E5769647468050000 + 0000000000C804400B53697A652E4865696768740500000000000000C8044014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E650B5374726F6B652E446173680703446F740000000A54536372 + 6F6C6C42617200095374796C654E616D65060A767363726F6C6C62617205416C + 69676E070552696768740B536D616C6C4368616E676505000000000000000000 + 000B4F7269656E746174696F6E0708566572746963616C0A506F736974696F6E + 2E58050000000000FFFFC505400A506F736974696F6E2E590500000000000000 + 8000400A53697A652E576964746805000000000000008003400B53697A652E48 + 65696768740500000000000000DE05401453697A652E506C6174666F726D4465 + 6661756C740800000A545363726F6C6C42617200095374796C654E616D65060A + 687363726F6C6C62617205416C69676E0706426F74746F6D0B536D616C6C4368 + 616E676505000000000000000000000B4F7269656E746174696F6E070A486F72 + 697A6F6E74616C0A506F736974696F6E2E5805000000000000008000400A506F + 736974696F6E2E590500000000000000E205400A53697A652E57696474680500 + 00000000FFFFE105400B53697A652E4865696768740500000000000000800340 + 1453697A652E506C6174666F726D44656661756C740800000F54536D616C6C53 + 63726F6C6C42617200095374796C654E616D65060F76736D616C6C7363726F6C + 6C62617205416C69676E070552696768740B536D616C6C4368616E6765050000 + 00000000000000000B4F7269656E746174696F6E0708566572746963616C0C4D + 617267696E732E4C65667405000000000000008000400A506F736974696F6E2E + 580500000000000000C605400A506F736974696F6E2E59050000000000000080 + 00400A53697A652E576964746805000000000000008002400B53697A652E4865 + 6967687405000000000000008002401453697A652E506C6174666F726D446566 + 61756C74080756697369626C650800000F54536D616C6C5363726F6C6C426172 + 00095374796C654E616D65060F68736D616C6C7363726F6C6C62617205416C69 + 676E0706426F74746F6D0B536D616C6C4368616E676505000000000000000000 + 000B4F7269656E746174696F6E070A486F72697A6F6E74616C0B4D617267696E + 732E546F7005000000000000008000400A506F736974696F6E2E580500000000 + 0000008000400A506F736974696F6E2E590500000000000000E205400A53697A + 652E576964746805000000000000009606400B53697A652E4865696768740500 + 0000000000008002401453697A652E506C6174666F726D44656661756C740807 + 56697369626C65080000000B54476C6F774566666563740008536F66746E6573 + 73050000000000CDCCCCFC3F09476C6F77436F6C6F7207097846464636394532 + 44074F7061636974790500000000006666E6FE3F0754726967676572060E4973 + 466F63757365643D7472756507456E61626C6564080000005450463007544C61 + 796F757400095374796C654E616D65060D6C697374626F78666F6F7465720541 + 6C69676E070643656E7465720A53697A652E5769647468050000000000000092 + 05400B53697A652E4865696768740500000000000000D003401453697A652E50 + 6C6174666F726D44656661756C74080756697369626C65080005545465787400 + 095374796C654E616D6506047465787405416C69676E0706436C69656E74064C + 6F636B6564090748697454657374080C4D617267696E732E4C65667405000000 + 00000000A001400B4D617267696E732E546F7005000000000000008000400D4D + 617267696E732E52696768740500000000000000A001400E4D617267696E732E + 426F74746F6D05000000000000008000400A53697A652E576964746805000000 + 00000000FC04400B53697A652E4865696768740500000000000000B003401453 + 697A652E506C6174666F726D44656661756C7408165465787453657474696E67 + 732E466F6E74436F6C6F720708636C6157686974650000005450463007544C61 + 796F757400095374796C654E616D6506106C697374626F786974656D7374796C + 6505416C69676E070643656E7465720A53697A652E5769647468050000000000 + 0000D605400B53697A652E4865696768740500000000000000C003401453697A + 652E506C6174666F726D44656661756C74080756697369626C6508000654476C + 79706800095374796C654E616D65060A676C7970687374796C650C4D61726769 + 6E732E4C65667405000000000000008000400B4D617267696E732E546F700500 + 00000000000080FF3F0D4D617267696E732E5269676874050000000000000080 + 00400E4D617267696E732E426F74746F6D050000000000000080FF3F05416C69 + 676E07044C6566740A53697A652E576964746805000000000000008003400B53 + 697A652E48656967687405000000000000008003401453697A652E506C617466 + 6F726D44656661756C7408000005545465787400095374796C654E616D650604 + 7465787405416C69676E0706436C69656E740748697454657374080C4D617267 + 696E732E4C6566740500000000000000C000400B4D617267696E732E546F7005 + 0000000000000080FF3F0D4D617267696E732E52696768740500000000000000 + C000400E4D617267696E732E426F74746F6D050000000000000080FF3F0A5369 + 7A652E57696474680500000000000000CA05400B53697A652E48656967687405 + 00000000000000B003401453697A652E506C6174666F726D44656661756C7408 + 165465787453657474696E67732E466F6E74436F6C6F720708636C6157686974 + 65155465787453657474696E67732E576F726457726170081654657874536574 + 74696E67732E486F727A416C69676E07074C656164696E670000095443686563 + 6B426F7800095374796C654E616D650605636865636B05416C69676E07084D6F + 73744C6566740843616E466F637573081244697361626C65466F637573456666 + 656374090A53697A652E57696474680500000000000000A003400B53697A652E + 4865696768740500000000000000C003401453697A652E506C6174666F726D44 + 656661756C74080756697369626C65080000005450463007544C61796F757400 + 095374796C654E616D6506126C697374626F78706C61696E6865616465720541 + 6C69676E070643656E7465720A53697A652E5769647468050000000000000092 + 05400B53697A652E4865696768740500000000000000D003401453697A652E50 + 6C6174666F726D44656661756C74080756697369626C6508000A545265637461 + 6E676C6500095374796C654E616D65060A6261636B67726F756E6405416C6967 + 6E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846463244324432 + 44064C6F636B6564090748697454657374080A53697A652E5769647468050000 + 00000000009205400B53697A652E4865696768740500000000000000D0034014 + 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C + 6F720709784646313531353135000005545465787400095374796C654E616D65 + 06047465787405416C69676E0706436C69656E74064C6F636B65640907486974 + 54657374080C4D617267696E732E4C6566740500000000000000A001400B4D61 + 7267696E732E546F7005000000000000008000400D4D617267696E732E526967 + 68740500000000000000A001400E4D617267696E732E426F74746F6D05000000 + 000000008000400A53697A652E57696474680500000000000000FC04400B5369 + 7A652E4865696768740500000000000000B003401453697A652E506C6174666F + 726D44656661756C7408165465787453657474696E67732E466F6E74436F6C6F + 720708636C6157686974650000005450463007544C61796F757400095374796C + 654E616D650609677269647374796C6505416C69676E070643656E7465720A53 + 697A652E5769647468050000000000FFFFE905400B53697A652E486569676874 + 05000000000000008306401453697A652E506C6174666F726D44656661756C74 + 080756697369626C6508000C5442727573684F626A65637400095374796C654E + 616D650618416C7465726E6174696E67526F774261636B67726F756E640B4272 + 7573682E436F6C6F72070978333237383738373800000C5442727573684F626A + 65637400095374796C654E616D6506086C696E6566696C6C0B42727573682E43 + 6F6C6F72070978464631353135313500000A5452656374616E676C6500095374 + 796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E7465 + 6E74730A46696C6C2E436F6C6F720709784646323032303230064C6F636B6564 + 090748697454657374080C50616464696E672E4C656674050000000000000080 + 00400B50616464696E672E546F7005000000000000008000400D50616464696E + 672E526967687405000000000000008000400E50616464696E672E426F74746F + 6D05000000000000008000400A53697A652E5769647468050000000000FFFFE9 + 05400B53697A652E48656967687405000000000000008306401453697A652E50 + 6C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846 + 4631353135313500075448656164657200095374796C654E616D650606686561 + 6465720553696465730B03546F70044C65667406426F74746F6D055269676874 + 0005416C69676E0703546F700748697454657374080A506F736974696F6E2E58 + 05000000000000008000400A506F736974696F6E2E5905000000000000008000 + 400A53697A652E5769647468050000000000FFFFE105400B53697A652E486569 + 6768740500000000000000A803401453697A652E506C6174666F726D44656661 + 756C7408000007544C61796F757400095374796C654E616D650607636F6E7465 + 6E7405416C69676E0706436C69656E740C436C69704368696C6472656E090A53 + 697A652E5769647468050000000000FFFFC105400B53697A652E486569676874 + 0500000000000000B405401453697A652E506C6174666F726D44656661756C74 + 08000A5452656374616E676C6500095374796C654E616D65060973656C656374 + 696F6E0A46696C6C2E436F6C6F72070978464632413832453207486974546573 + 7408074F706163697479050000000000000080FD3F0A53697A652E5769647468 + 0500000000000000C804400B53697A652E4865696768740500000000000000C8 + 04401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E6500000A5452656374616E676C6500095374796C654E61 + 6D650605666F6375730A46696C6C2E436F6C6F72070978414632413832453207 + 48697454657374080C4D617267696E732E4C656674050000000000000080FF3F + 0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E732E + 5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D05 + 0000000000000080FF3F0A53697A652E57696474680500000000000000C80440 + 0B53697A652E4865696768740500000000000000C804401453697A652E506C61 + 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6507 + 595261646975730500000000000000C000400000000A545363726F6C6C426172 + 00095374796C654E616D65060A767363726F6C6C62617205416C69676E070552 + 696768740B536D616C6C4368616E676505000000000000000000000B4F726965 + 6E746174696F6E0708566572746963616C0A506F736974696F6E2E5805000000 + 0000FFFFC505400A506F736974696F6E2E590500000000000000B803400A5369 + 7A652E576964746805000000000000008003400B53697A652E48656967687405 + 00000000000000B405401453697A652E506C6174666F726D44656661756C7408 + 00000A545363726F6C6C42617200095374796C654E616D65060A687363726F6C + 6C62617205416C69676E0706426F74746F6D0B536D616C6C4368616E67650500 + 0000000000000000000B4F7269656E746174696F6E070A486F72697A6F6E7461 + 6C0A506F736974696F6E2E5805000000000000008000400A506F736974696F6E + 2E590500000000000000E205400A53697A652E5769647468050000000000FFFF + E105400B53697A652E48656967687405000000000000008003401453697A652E + 506C6174666F726D44656661756C740800000F54536D616C6C5363726F6C6C42 + 617200095374796C654E616D65060F76736D616C6C7363726F6C6C6261720541 + 6C69676E070552696768740B536D616C6C4368616E6765050000000000000000 + 00000B4F7269656E746174696F6E0708566572746963616C0C4D617267696E73 + 2E4C65667405000000000000008000400A506F736974696F6E2E580500000000 + 000000C605400A506F736974696F6E2E5905000000000000008000400A53697A + 652E576964746805000000000000008002400B53697A652E4865696768740500 + 0000000000008002401453697A652E506C6174666F726D44656661756C740807 + 56697369626C650800000F54536D616C6C5363726F6C6C42617200095374796C + 654E616D65060F68736D616C6C7363726F6C6C62617205416C69676E0706426F + 74746F6D0B536D616C6C4368616E676505000000000000000000000B4F726965 + 6E746174696F6E070A486F72697A6F6E74616C0B4D617267696E732E546F7005 + 000000000000008000400A506F736974696F6E2E580500000000000000800040 + 0A506F736974696F6E2E590500000000000000E205400A53697A652E57696474 + 6805000000000000009606400B53697A652E4865696768740500000000000000 + 8002401453697A652E506C6174666F726D44656661756C74080756697369626C + 6508000000005450463007544C61796F757400095374796C654E616D65060F68 + 65616465726974656D7374796C6505416C69676E070643656E7465720A53697A + 652E576964746805000000000000009205400B53697A652E4865696768740500 + 000000000000D003401453697A652E506C6174666F726D44656661756C740807 + 56697369626C6508000A5452656374616E676C6500095374796C654E616D6506 + 0A6261636B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C + 2E436F6C6F720709784646344334433443064C6F636B65640907486974546573 + 74080A53697A652E576964746805000000000000009205400B53697A652E4865 + 696768740500000000000000D003401453697A652E506C6174666F726D446566 + 61756C74080C5374726F6B652E436F6C6F720709784646313531353135000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D6506156865616465 + 72436F6C6F72416E696D6174696F6E31084475726174696F6E05000000000000 + 000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 + 61727456616C756507097846463443344334430953746F7056616C7565070978 + 46463241383245320754726967676572060E4973507265737365643D74727565 + 0E54726967676572496E7665727365060F4973507265737365643D66616C7365 + 00000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65061668 + 65616465725374726F6B65416E696D6174696F6E31084475726174696F6E0500 + 0000000000000000000C50726F70657274794E616D65060C5374726F6B652E43 + 6F6C6F720A537461727456616C756507097846463135313531350953746F7056 + 616C756507097846463241383245320754726967676572060E49735072657373 + 65643D747275650E54726967676572496E7665727365060F4973507265737365 + 643D66616C736500000005545465787400095374796C654E616D650604746578 + 7405416C69676E0706436C69656E74064C6F636B656409074869745465737408 + 0C4D617267696E732E4C6566740500000000000000A001400B4D617267696E73 + 2E546F7005000000000000008000400D4D617267696E732E5269676874050000 + 0000000000A001400E4D617267696E732E426F74746F6D050000000000000080 + 00400A53697A652E57696474680500000000000000FC04400B53697A652E4865 + 696768740500000000000000B003401453697A652E506C6174666F726D446566 + 61756C7408165465787453657474696E67732E466F6E74436F6C6F720708636C + 6157686974650000005450463007544C61796F757400095374796C654E616D65 + 061970726F67726573736261726D696E696572726F727374796C6505416C6967 + 6E070643656E7465720A53697A652E576964746805000000000033338505400B + 53697A652E4865696768740500000000009999E104401453697A652E506C6174 + 666F726D44656661756C74080756697369626C6508000A5452656374616E676C + 6500095374796C654E616D65060668747261636B05416C69676E0708436F6E74 + 656E74730A46696C6C2E436F6C6F720709784646343034303430064C6F636B65 + 64090748697454657374080A53697A652E576964746805000000000033338505 + 400B53697A652E4865696768740500000000009999E104401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 000A5452656374616E676C6500095374796C654E616D65060A68696E64696361 + 746F7205416C69676E07044C6566740A46696C6C2E436F6C6F72070978464645 + 3232413241064C6F636B6564090748697454657374080A53697A652E57696474 + 680500000000000000C804400B53697A652E4865696768740500000000009999 + E104401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E650000000A5452656374616E676C6500095374796C65 + 4E616D65060676747261636B05416C69676E0708436F6E74656E74730A46696C + 6C2E436F6C6F720709784646343034303430064C6F636B656409074869745465 + 7374080A53697A652E576964746805000000000033338505400B53697A652E48 + 65696768740500000000009999E104401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E65000A545265637461 + 6E676C6500095374796C654E616D65060A76696E64696361746F7205416C6967 + 6E0706426F74746F6D0A46696C6C2E436F6C6F72070978464645323241324106 + 4C6F636B6564090748697454657374080A506F736974696F6E2E590500000000 + 0099998D04400A53697A652E576964746805000000000033338505400B53697A + 652E4865696768740500000000000000A803401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000000054 + 50463007544C61796F757400095374796C654E616D65061170726F6772657373 + 63656C6C7374796C6505416C69676E070643656E7465720A53697A652E576964 + 74680500000000000000F805400B53697A652E48656967687405000000000000 + 00FC05401453697A652E506C6174666F726D44656661756C7408075669736962 + 6C65080007544C61796F757400095374796C654E616D65060668747261636B05 + 416C69676E0708436F6E74656E7473064C6F636B6564090C4D617267696E732E + 4C65667405000000000000008000400B4D617267696E732E546F700500000000 + 0000008000400D4D617267696E732E526967687405000000000000008000400E + 4D617267696E732E426F74746F6D05000000000000008000400A53697A652E57 + 696474680500000000000000F005400B53697A652E4865696768740500000000 + 000000F405401453697A652E506C6174666F726D44656661756C7408000A5452 + 656374616E676C6500095374796C654E616D65060A68696E64696361746F7205 + 416C69676E07044C6566740A46696C6C2E436F6C6F7207097846463241383245 + 32064C6F636B6564090748697454657374080C4D617267696E732E4C65667405 + 0000000000000080FF3F0B4D617267696E732E546F70050000000000000080FF + 3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D61726769 + 6E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E5805 + 0000000000000080FF3F0A506F736974696F6E2E59050000000000000080FF3F + 0A53697A652E57696474680500000000000000C804400B53697A652E48656967 + 68740500000000000000F005401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C + 61796F757400095374796C654E616D6506106D656E756261726974656D737479 + 6C6505416C69676E070643656E7465720C4D617267696E732E4C656674050000 + 000000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D + 4D617267696E732E5269676874050000000000000080FF3F0E4D617267696E73 + 2E426F74746F6D050000000000000080FF3F0A53697A652E5769647468050000 + 00000000009205400B53697A652E4865696768740500000000000000D0034014 + 53697A652E506C6174666F726D44656661756C74080756697369626C6508000A + 5452656374616E676C650005416C69676E0708436F6E74656E74730A46696C6C + 2E436F6C6F720709784646324138324532074869745465737408074F70616369 + 747905000000000017B7D1F13F0A53697A652E57696474680500000000000000 + 9205400B53697A652E4865696768740500000000000000D003401453697A652E + 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F + 6E65000F54466C6F6174416E696D6174696F6E00084475726174696F6E050000 + 00000018B7D1F23F0C50726F70657274794E616D6506074F7061636974790A53 + 7461727456616C756505000000000000000000000953746F7056616C75650500 + 00000000000080FF3F0754726967676572060F497353656C65637465643D7472 + 75650E54726967676572496E76657273650610497353656C65637465643D6661 + 6C73650000000A5452656374616E676C6500095374796C654E616D65060A6261 + 636B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F + 6C6F720709784646324138324532074869745465737408074F70616369747905 + 000000000017B7D1F13F0A53697A652E57696474680500000000000000920540 + 0B53697A652E4865696768740500000000000000D003401453697A652E506C61 + 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500 + 0F54466C6F6174416E696D6174696F6E00084475726174696F6E050000000000 + 18B7D1F23F0C50726F70657274794E616D6506074F7061636974790A53746172 + 7456616C756505000000000000000000000953746F7056616C75650500000000 + 00000080FF3F0754726967676572061049734D6F7573654F7665723D74727565 + 0E54726967676572496E7665727365061149734D6F7573654F7665723D66616C + 736500000007544C61796F757400095374796C654E616D650605676C79706805 + 416C69676E07044C6566740A53697A652E57696474680500000000000000C803 + 400B53697A652E4865696768740500000000000000D003401453697A652E506C + 6174666F726D44656661756C74080007544C61796F757400095374796C654E61 + 6D650609636865636B6D61726B05416C69676E0708436F6E74656E7473074F70 + 61636974790500000000006F1283F53F0A53697A652E57696474680500000000 + 000000C803400B53697A652E4865696768740500000000000000D00340145369 + 7A652E506C6174666F726D44656661756C7408000554506174680005416C6967 + 6E070643656E74657209446174612E506174680A580000000700000000000000 + 56D9524391AE2C43010000009276664365021643010000009F3983432B7C3C43 + 010000009E9AA64382D2B442010000006F1CB04375A4D1420100000026DF8243 + 263F67430300000056D9524391AE2C430A46696C6C2E436F6C6F720708636C61 + 57686974650748697454657374080A53697A652E576964746805000000000000 + 00B002400B53697A652E4865696768740500000000000000B002401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E6500000F54466C6F6174416E696D6174696F6E00084475726174696F6E05 + 0000000000CDCCCCFB3F0C50726F70657274794E616D6506074F706163697479 + 0A537461727456616C756505000000000000000000000953746F7056616C7565 + 050000000000000080FF3F0754726967676572060E4973436865636B65643D74 + 7275650E54726967676572496E7665727365060F4973436865636B65643D6661 + 6C73650000000654476C79706800095374796C654E616D65060A676C79706873 + 74796C650C4D617267696E732E4C656674050000000000000080FF3F0B4D6172 + 67696E732E546F7005000000000000008000400D4D617267696E732E52696768 + 740500000000000000C000400E4D617267696E732E426F74746F6D0500000000 + 00000080FF3F05416C69676E070552696768740A53697A652E57696474680500 + 0000000000008003400B53697A652E4865696768740500000000000000800340 + 1453697A652E506C6174666F726D44656661756C740800000654496D61676500 + 095374796C654E616D6506066269746D61700E4D756C74695265734269746D61 + 700E01000005416C69676E0708436F6E74656E74730C4D617267696E732E4C65 + 667405000000000000008000400B4D617267696E732E546F7005000000000000 + 008000400D4D617267696E732E526967687405000000000000008000400E4D61 + 7267696E732E426F74746F6D05000000000000008000400A53697A652E576964 + 74680500000000000000A803400B53697A652E48656967687405000000000000 + 00B003401453697A652E506C6174666F726D44656661756C7408000000055454 + 65787400095374796C654E616D6506047465787405416C69676E07044C656674 + 064C6F636B6564090748697454657374080C4D617267696E732E4C6566740500 + 0000000000008002400D4D617267696E732E5269676874050000000000000080 + 02400A506F736974696F6E2E5805000000000000008404400A53697A652E5769 + 6474680500000000000000C804400B53697A652E486569676874050000000000 + 0000D003401453697A652E506C6174666F726D44656661756C74081654657874 + 53657474696E67732E466F6E74436F6C6F720708636C61576869746516546578 + 7453657474696E67732E486F727A416C69676E07074C656164696E6700000554 + 5465787400095374796C654E616D65060873686F727463757405416C69676E07 + 055269676874064C6F636B6564090748697454657374080C4D617267696E732E + 4C6566740500000000000000C002400D4D617267696E732E5269676874050000 + 0000000000C001400A506F736974696F6E2E580500000000000000C000C00A53 + 697A652E57696474680500000000000000C804400B53697A652E486569676874 + 0500000000000000D003401453697A652E506C6174666F726D44656661756C74 + 08165465787453657474696E67732E466F6E74436F6C6F720708636C61576869 + 7465165465787453657474696E67732E486F727A416C69676E07074C65616469 + 6E67000007544C61796F757400095374796C654E616D6506077375626D61726B + 05416C69676E070552696768740A506F736974696F6E2E580500000000000000 + D404400A53697A652E57696474680500000000000000A003400B53697A652E48 + 65696768740500000000000000D003401453697A652E506C6174666F726D4465 + 6661756C7408000554506174680005416C69676E070643656E74657209446174 + 612E506174680A34000000040000000000000000000000000000000100000000 + 0000000000803F010000000000803F0000003F0300000000000000000000000A + 46696C6C2E436F6C6F720708636C615768697465064C6F636B65640907486974 + 54657374080A53697A652E57696474680500000000000000E001400B53697A65 + 2E48656967687405000000000000008002401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000005450 + 46300A5452656374616E676C6500095374796C654E616D65060C6D656E756261 + 727374796C6505416C69676E070643656E7465720C436C69704368696C647265 + 6E090946696C6C2E4B696E6407044E6F6E650748697454657374080A53697A65 + 2E57696474680500000000000000C804400B53697A652E486569676874050000 + 0000000000C804401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E650756697369626C6508000A5452656374 + 616E676C650005416C69676E0706436C69656E740A46696C6C2E436F6C6F7207 + 097846463230323032300748697454657374080C4D617267696E732E4C656674 + 050000000000000080FFBF0B4D617267696E732E546F70050000000000000080 + FFBF0D4D617267696E732E5269676874050000000000000080FFBF0A53697A65 + 2E57696474680500000000000000D004400B53697A652E486569676874050000 + 0000000000CC04401453697A652E506C6174666F726D44656661756C74080C53 + 74726F6B652E436F6C6F720709784646313531353135000007544C61796F7574 + 00095374796C654E616D650607636F6E74656E7405416C69676E0706436C6965 + 6E740C4D617267696E732E4C656674050000000000000080FF3F0B4D61726769 + 6E732E546F70050000000000000080FF3F0D4D617267696E732E526967687405 + 0000000000000080FF3F0E4D617267696E732E426F74746F6D05000000000000 + 0080FF3F0A53697A652E57696474680500000000000000C004400B53697A652E + 4865696768740500000000000000C004401453697A652E506C6174666F726D44 + 656661756C74080000005450463007544C61796F757400095374796C654E616D + 65060D6D656E756974656D7374796C6505416C69676E070643656E7465720C4D + 617267696E732E4C656674050000000000000080FF3F0B4D617267696E732E54 + 6F70050000000000000080FF3F0D4D617267696E732E52696768740500000000 + 00000080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F + 0A53697A652E57696474680500000000008EE3F605400B53697A652E48656967 + 68740500000000008EE3F003401453697A652E506C6174666F726D4465666175 + 6C74080756697369626C6508000A5452656374616E676C650005416C69676E07 + 08436F6E74656E74730A46696C6C2E436F6C6F72070978464632413832453207 + 4869745465737408074F70616369747905000000000017B7D1F13F0A53697A65 + 2E57696474680500000000008EE3F605400B53697A652E486569676874050000 + 0000008EE3F003401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F + 6E00084475726174696F6E05000000000018B7D1F23F0C50726F70657274794E + 616D6506074F7061636974790A537461727456616C7565050000000000000000 + 00000953746F7056616C7565050000000000000080FF3F075472696767657206 + 0F497353656C65637465643D747275650E54726967676572496E766572736506 + 10497353656C65637465643D66616C73650000000A5452656374616E676C6500 + 095374796C654E616D65060A6261636B67726F756E6405416C69676E0708436F + 6E74656E74730A46696C6C2E436F6C6F72070978464632413832453207486974 + 5465737408074F70616369747905000000000000000000000A53697A652E5769 + 6474680500000000008EE3F605400B53697A652E486569676874050000000000 + 8EE3F003401453697A652E506C6174666F726D44656661756C74080B5374726F + 6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E0008 + 4475726174696F6E05000000000018B7D1F23F07496E7665727365090C50726F + 70657274794E616D6506074F7061636974790A537461727456616C7565050000 + 00000000000000000953746F7056616C7565050000000000000080FF3F075472 + 6967676572061049734D6F7573654F7665723D747275650E5472696767657249 + 6E7665727365061149734D6F7573654F7665723D66616C736500000007544C61 + 796F757400095374796C654E616D650605676C79706805416C69676E07044C65 + 66740A53697A652E57696474680500000000000000C803400B53697A652E4865 + 696768740500000000008EE3F003401453697A652E506C6174666F726D446566 + 61756C74080007544C61796F757400095374796C654E616D650609636865636B + 6D61726B05416C69676E0708436F6E74656E7473074F70616369747905000000 + 00006F1283F53F0A53697A652E57696474680500000000000000C803400B5369 + 7A652E4865696768740500000000008EE3F003401453697A652E506C6174666F + 726D44656661756C7408000554506174680005416C69676E070643656E746572 + 09446174612E506174680A58000000070000000000000056D9524391AE2C4301 + 0000009276664365021643010000009F3983432B7C3C43010000009E9AA64382 + D2B442010000006F1CB04375A4D1420100000026DF8243263F67430300000056 + D9524391AE2C430A46696C6C2E436F6C6F720708636C61576869746507486974 + 54657374080A53697A652E57696474680500000000000000B002400B53697A65 + 2E4865696768740500000000000000B002401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000F54466C + 6F6174416E696D6174696F6E00084475726174696F6E050000000000CDCCCCFB + 3F0C50726F70657274794E616D6506074F7061636974790A537461727456616C + 756505000000000000000000000953746F7056616C7565050000000000000080 + FF3F0754726967676572060E4973436865636B65643D747275650E5472696767 + 6572496E7665727365060F4973436865636B65643D66616C7365000000065447 + 6C79706800095374796C654E616D65060A676C7970687374796C650C4D617267 + 696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F7005 + 000000000000008000400D4D617267696E732E52696768740500000000000000 + C000400E4D617267696E732E426F74746F6D050000000000000080FF3F05416C + 69676E07044C6566740A53697A652E576964746805000000000000008003400B + 53697A652E48656967687405000000000000008003401453697A652E506C6174 + 666F726D44656661756C740800000654496D61676500095374796C654E616D65 + 06066269746D61700E4D756C74695265734269746D61700E01000005416C6967 + 6E07044C6566740C4D617267696E732E4C65667405000000000000008000400B + 4D617267696E732E546F7005000000000000008000400D4D617267696E732E52 + 6967687405000000000000008000400E4D617267696E732E426F74746F6D0500 + 0000000000008000400A506F736974696F6E2E5805000000000000008000400A + 506F736974696F6E2E5905000000000000008000400A53697A652E5769647468 + 0500000000000000A803400B53697A652E4865696768740500000000008EE3D0 + 03401453697A652E506C6174666F726D44656661756C74080000000554546578 + 7400095374796C654E616D6506047465787405416C69676E07044C656674064C + 6F636B6564090748697454657374080C4D617267696E732E4C65667405000000 + 000000008002400D4D617267696E732E52696768740500000000000000800240 + 0A506F736974696F6E2E5805000000000000008404400A53697A652E57696474 + 680500000000000000C804400B53697A652E4865696768740500000000008EE3 + F003401453697A652E506C6174666F726D44656661756C740816546578745365 + 7474696E67732E466F6E74436F6C6F720708636C615768697465165465787453 + 657474696E67732E486F727A416C69676E07074C656164696E67000005545465 + 787400095374796C654E616D65060873686F727463757405416C69676E070552 + 69676874064C6F636B6564090748697454657374080C4D617267696E732E4C65 + 66740500000000000000C002400D4D617267696E732E52696768740500000000 + 000000C001400A506F736974696F6E2E580500000000001CC7BD04400A53697A + 652E57696474680500000000000000C804400B53697A652E4865696768740500 + 000000008EE3F003401453697A652E506C6174666F726D44656661756C740816 + 5465787453657474696E67732E466F6E74436F6C6F720708636C615768697465 + 165465787453657474696E67732E486F727A416C69676E07074C656164696E67 + 000007544C61796F757400095374796C654E616D6506077375626D61726B0541 + 6C69676E070552696768740A506F736974696F6E2E580500000000008EE3CE05 + 400A53697A652E57696474680500000000000000A003400B53697A652E486569 + 6768740500000000008EE3F003401453697A652E506C6174666F726D44656661 + 756C7408000554506174680005416C69676E070643656E74657209446174612E + 506174680A340000000400000000000000000000000000000001000000000000 + 000000803F010000000000803F0000003F0300000000000000000000000A4669 + 6C6C2E436F6C6F720708636C615768697465064C6F636B656409074869745465 + 7374080A53697A652E57696474680500000000000000C001400B53697A652E48 + 65696768740500000000000000A002401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E650000000054504630 + 07544C61796F757400095374796C654E616D6506126D656E7573657061726174 + 6F727374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 0500000000000000C804400B53697A652E4865696768740500000000000000C8 + 04401453697A652E506C6174666F726D44656661756C74080756697369626C65 + 080005544C696E650005416C69676E0703546F70084C696E6554797065070354 + 6F700C4D617267696E732E4C656674050000000000000080FFBF0B4D61726769 + 6E732E546F7005000000000000008000400D4D617267696E732E526967687405 + 0000000000000080FFBF0A506F736974696F6E2E58050000000000000080FFBF + 0A506F736974696F6E2E5905000000000000008000400A53697A652E57696474 + 680500000000000000D004400B53697A652E4865696768740500000000000000 + 80FF3F1453697A652E506C6174666F726D44656661756C74080C5374726F6B65 + 2E436F6C6F720709784646313531353135000000545046300A5452656374616E + 676C6500095374796C654E616D65060D6D656E75766965777374796C6505416C + 69676E070643656E7465720A46696C6C2E436F6C6F7207097846463230323032 + 300A53697A652E57696474680500000000000000C804400B53697A652E486569 + 6768740500000000000000C804401453697A652E506C6174666F726D44656661 + 756C74080C5374726F6B652E436F6C6F72070978464631353135313507566973 + 69626C6508000A5452656374616E676C650005416C69676E0706436C69656E74 + 0A46696C6C2E436F6C6F7207097846463230323032300748697454657374080A + 53697A652E57696474680500000000000000C804400B53697A652E4865696768 + 740500000000000000C804401453697A652E506C6174666F726D44656661756C + 74080C5374726F6B652E436F6C6F720709784646313531353135000D54536861 + 646F77456666656374000844697374616E636505000000000000008001400944 + 6972656374696F6E0500000000000000B4044008536F66746E65737305000000 + 0000000080FE3F074F706163697479050000000000000080FE3F0B536861646F + 77436F6C6F720708636C61426C61636B00000007544C61796F75740009537479 + 6C654E616D650607636F6E74656E7405416C69676E0706436C69656E740C4D61 + 7267696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F + 70050000000000000080FF3F0D4D617267696E732E5269676874050000000000 + 000080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A + 53697A652E57696474680500000000000000C004400B53697A652E4865696768 + 740500000000000000C004401453697A652E506C6174666F726D44656661756C + 74080000005450463007544C61796F757400095374796C654E616D65060E696D + 61676563656C6C7374796C6505416C69676E070643656E746572075669736962 + 6C6508000654496D61676500095374796C654E616D650605696D6167650E4D75 + 6C74695265734269746D61700E01000005416C69676E0706436C69656E74064C + 6F636B6564090748697454657374080C4D617267696E732E4C65667405000000 + 0000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D + 617267696E732E5269676874050000000000000080FF3F0E4D617267696E732E + 426F74746F6D050000000000000080FF3F0A53697A652E576964746805000000 + 00000000C004400B53697A652E4865696768740500000000000000C004401453 + 697A652E506C6174666F726D44656661756C74080000005450463007544C6179 + 6F757400095374796C654E616D65060E706F70757063656C6C7374796C650541 + 6C69676E070643656E7465720A53697A652E57696474680500000000000000BB + 06400B53697A652E4865696768740500000000000000AE04401453697A652E50 + 6C6174666F726D44656661756C74080756697369626C65080007544C61796F75 + 740005416C69676E070552696768740A506F736974696F6E2E58050000000000 + 0000AC06400A53697A652E57696474680500000000000000F002400B53697A65 + 2E4865696768740500000000000000AE04401453697A652E506C6174666F726D + 44656661756C7408000554506174680005416C69676E070643656E7465720944 + 6174612E506174680A400000000500000000000000000000000000803F010000 + 000000803F0000803F010000000000003F000000000100000000000000000080 + 3F0300000000000000000000000A46696C6C2E436F6C6F720708636C61576869 + 74650748697454657374080B4D617267696E732E546F700500000000000000E0 + 01C00A53697A652E576964746805000000000000008002400B53697A652E4865 + 6967687405000000000000008001401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65000005545061746800 + 05416C69676E070643656E74657209446174612E506174680A34000000040000 + 00000000000000000000000000010000000000803F0000000001000000000000 + 3F0000803F0300000000000000000000000A46696C6C2E436F6C6F720708636C + 6157686974650748697454657374080B4D617267696E732E546F700500000000 + 000000C001400A53697A652E576964746805000000000000008002400B53697A + 652E48656967687405000000000000008001401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000000554 + 5465787400095374796C654E616D6506047465787405416C69676E0706436C69 + 656E74064C6F636B6564090748697454657374080C4D617267696E732E4C6566 + 740500000000000000A001400B4D617267696E732E546F700500000000000000 + 8000400D4D617267696E732E52696768740500000000000000A001400E4D6172 + 67696E732E426F74746F6D05000000000000008000400A53697A652E57696474 + 680500000000000000A206400B53697A652E4865696768740500000000000000 + 9E04401453697A652E506C6174666F726D44656661756C740816546578745365 + 7474696E67732E466F6E74436F6C6F720708636C615768697465000000545046 + 3007544C61796F757400095374796C654E616D65060D7465787463656C6C7374 + 796C6505416C69676E070643656E7465720756697369626C65080007544C6179 + 6F757400095374796C654E616D650607636F6E74656E7405416C69676E070843 + 6F6E74656E7473064C6F636B6564090C4D617267696E732E4C65667405000000 + 000000008001400B4D617267696E732E546F7005000000000000008001400D4D + 617267696E732E526967687405000000000000008001400E4D617267696E732E + 426F74746F6D05000000000000008001400A53697A652E576964746805000000 + 00000000A804400B53697A652E4865696768740500000000000000A804401453 + 697A652E506C6174666F726D44656661756C740800000C5442727573684F626A + 65637400095374796C654E616D65060A666F726567726F756E6400000C544272 + 7573684F626A65637400095374796C654E616D65060973656C656374696F6E0B + 42727573682E436F6C6F72070978393632413832453200000B54466F6E744F62 + 6A65637400095374796C654E616D650604666F6E740000005450463007544C61 + 796F757400095374796C654E616D6506096D656D6F7374796C6505416C69676E + 070643656E7465720A53697A652E5769647468050000000000CCCC8806400B53 + 697A652E4865696768740500000000006666F405401453697A652E506C617466 + 6F726D44656661756C74080756697369626C6508000C5442727573684F626A65 + 637400095374796C654E616D65060A666F726567726F756E6400000C54427275 + 73684F626A65637400095374796C654E616D65060973656C656374696F6E0B42 + 727573682E436F6C6F72070978374634343735394400000B54466F6E744F626A + 65637400095374796C654E616D650604666F6E7400000A5452656374616E676C + 6500095374796C654E616D65060A6261636B67726F756E6405416C69676E0708 + 436F6E74656E74730A46696C6C2E436F6C6F7207097846463230323032300748 + 697454657374080A53697A652E5769647468050000000000CCCC8806400B5369 + 7A652E4865696768740500000000006666F405401453697A652E506C6174666F + 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 + 31350007544C61796F757400095374796C654E616D650607636F6E74656E7405 + 416C69676E0706436C69656E740C4D617267696E732E4C656674050000000000 + 00008000400B4D617267696E732E546F7005000000000000008000400D4D6172 + 67696E732E526967687405000000000000008000400E4D617267696E732E426F + 74746F6D05000000000000008000400A53697A652E5769647468050000000000 + 9899E905400B53697A652E4865696768740500000000006666CC05401453697A + 652E506C6174666F726D44656661756C740800000A545363726F6C6C42617200 + 095374796C654E616D65060A687363726F6C6C62617205416C69676E0706426F + 74746F6D06437572736F72070763724172726F770B536D616C6C4368616E6765 + 05000000000000000000000B4F7269656E746174696F6E070A486F72697A6F6E + 74616C0A506F736974696F6E2E590500000000006666D405400A53697A652E57 + 69647468050000000000CCCC8806400B53697A652E4865696768740500000000 + 0000008003401453697A652E506C6174666F726D44656661756C740800000A54 + 5363726F6C6C42617200095374796C654E616D65060A767363726F6C6C626172 + 05416C69676E0705526967687406437572736F72070763724172726F770B536D + 616C6C4368616E676505000000000000000000000B4F7269656E746174696F6E + 0708566572746963616C0A506F736974696F6E2E580500000000009899F10540 + 0A53697A652E576964746805000000000000008003400B53697A652E48656967 + 68740500000000006666D405401453697A652E506C6174666F726D4465666175 + 6C7408000007544C61796F75740005416C69676E0706436C69656E740A53697A + 652E57696474680500000000009899F105400B53697A652E4865696768740500 + 000000006666D405401453697A652E506C6174666F726D44656661756C740800 + 0F54536D616C6C5363726F6C6C42617200095374796C654E616D65060F76736D + 616C6C7363726F6C6C62617205416C69676E0705526967687406437572736F72 + 070763724172726F770B536D616C6C4368616E67650500000000000000000000 + 0B4F7269656E746174696F6E0708566572746963616C0C4D617267696E732E4C + 65667405000000000000008000400A53697A652E576964746805000000000000 + 008002400B53697A652E48656967687405000000000000008002401453697A65 + 2E506C6174666F726D44656661756C74080756697369626C650800000F54536D + 616C6C5363726F6C6C42617200095374796C654E616D65060F68736D616C6C73 + 63726F6C6C62617205416C69676E0706426F74746F6D06437572736F72070763 + 724172726F770B536D616C6C4368616E676505000000000000000000000B4F72 + 69656E746174696F6E070A486F72697A6F6E74616C0B4D617267696E732E546F + 7005000000000000008000400A53697A652E5769647468050000000000000096 + 06400B53697A652E48656967687405000000000000008002401453697A652E50 + 6C6174666F726D44656661756C74080756697369626C65080000000F54436F6C + 6F72416E696D6174696F6E00095374796C654E616D6506146D656D6F5374726F + 6B65416E696D6174696F6E31084475726174696F6E0500000000000000000000 + 07496E7665727365090C50726F70657274794E616D65060C5374726F6B652E43 + 6F6C6F720A537461727456616C756507097846463135313531350953746F7056 + 616C756507097846463430343034300754726967676572062049734D6F757365 + 4F7665723D747275653B4973466F63757365643D66616C73650E547269676765 + 72496E7665727365062149734D6F7573654F7665723D66616C73653B4973466F + 63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E000953 + 74796C654E616D6506146D656D6F5374726F6B65416E696D6174696F6E320844 + 75726174696F6E05000000000000000000000C50726F70657274794E616D6506 + 0C5374726F6B652E436F6C6F720A537461727456616C75650709784646343034 + 3034300953746F7056616C756507097846463241383245320754726967676572 + 060E4973466F63757365643D747275650E54726967676572496E766572736506 + 0F4973466F63757365643D66616C7365000000005450463007544C61796F7574 + 00095374796C654E616D65060E6C696E6B6C6162656C7374796C6505416C6967 + 6E070643656E7465720A53697A652E5769647468050000000000CCCC8006400B + 53697A652E4865696768740500000000009A998104401453697A652E506C6174 + 666F726D44656661756C74080756697369626C65080005545465787400095374 + 796C654E616D6506047465787405416C69676E0708436F6E74656E7473074869 + 7454657374080A53697A652E5769647468050000000000CCCC8006400B53697A + 652E4865696768740500000000009A998104401453697A652E506C6174666F72 + 6D44656661756C74081A5465787453657474696E67732E466F6E742E5374796C + 654578740A0D0000000404000000000000000400000016546578745365747469 + 6E67732E466F6E74436F6C6F72070D636C61446F64676572626C7565000F5443 + 6F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F7241 + 6E696D6174696F6E315374796C65084475726174696F6E050000000000000000 + 000007496E7665727365090C50726F70657274794E616D650616546578745365 + 7474696E67732E466F6E74436F6C6F720A537461727456616C7565070D636C61 + 446F64676572626C75650953746F7056616C7565070E636C6144656570736B79 + 626C75650754726967676572063049734D6F7573654F7665723D747275653B49 + 73507265737365643D66616C73653B4973466F63757365643D66616C73650E54 + 726967676572496E7665727365063149734D6F7573654F7665723D66616C7365 + 3B4973507265737365643D66616C73653B4973466F63757365643D66616C7365 + 00000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65061443 + 6F6C6F72416E696D6174696F6E325374796C65084475726174696F6E05000000 + 000000000000000C50726F70657274794E616D6506165465787453657474696E + 67732E466F6E74436F6C6F720A537461727456616C7565070E636C6144656570 + 736B79626C75650953746F7056616C7565070978464631373537394307547269 + 67676572062F4973507265737365643D747275653B49734D6F7573654F766572 + 3D747275653B4973466F63757365643D66616C736500000000545046300A5452 + 656374616E676C6500095374796C654E616D65060E7374617475736261727374 + 796C6505416C69676E070643656E7465720C436C69704368696C6472656E090A + 46696C6C2E436F6C6F7207097846463235323532350748697454657374080553 + 696465730B03546F70000A53697A652E57696474680500000000000000F00440 + 0B53697A652E4865696768740500000000000000C804401453697A652E506C61 + 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 + 35313531350756697369626C65080007544C61796F757400095374796C654E61 + 6D6506074C61796F75743105416C69676E070552696768740A506F736974696F + 6E2E5805000000000000008C04400A53697A652E576964746805000000000000 + 00C803400B53697A652E4865696768740500000000000000C804401453697A65 + 2E506C6174666F726D44656661756C740800095453697A654772697000095374 + 796C654E616D65060973697A65677267697005416C69676E0706426F74746F6D + 0A506F736974696F6E2E590500000000000000C803400A53697A652E57696474 + 680500000000000000C803400B53697A652E4865696768740500000000000000 + C803401453697A652E506C6174666F726D44656661756C740800000000545046 + 3007544C61796F757400095374796C654E616D65060C7370696E626F78737479 + 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 + 006666E005400B53697A652E4865696768740500000000000000A80340145369 + 7A652E506C6174666F726D44656661756C74080756697369626C6508000A5452 + 656374616E676C6500095374796C654E616D65060A6261636B67726F756E6405 + 416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978464632 + 30323032300A53697A652E57696474680500000000006666E005400B53697A65 + 2E4865696768740500000000000000A803401453697A652E506C6174666F726D + 44656661756C74080C5374726F6B652E436F6C6F720709784646313531353135 + 000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F + 6C6F72416E696D6174696F6E315374796C65084475726174696F6E0500000000 + 00000000000007496E7665727365090C50726F70657274794E616D65060C5374 + 726F6B652E436F6C6F720A537461727456616C75650709784646313531353135 + 0953746F7056616C756507097846463430343034300754726967676572061049 + 734D6F7573654F7665723D747275650E54726967676572496E76657273650611 + 49734D6F7573654F7665723D66616C73650000000C5442727573684F626A6563 + 7400095374796C654E616D65060A666F726567726F756E640B42727573682E43 + 6F6C6F72070978464645414541454100000C5442727573684F626A6563740009 + 5374796C654E616D65060973656C656374696F6E0B42727573682E436F6C6F72 + 0709783936324138324532000007544C61796F757400095374796C654E616D65 + 0607636F6E74656E7405416C69676E0706436C69656E74064C6F636B6564090C + 4D617267696E732E4C65667405000000000000008000400B4D617267696E732E + 546F7005000000000000008000400D4D617267696E732E526967687405000000 + 000000008000400E4D617267696E732E426F74746F6D05000000000000008000 + 400A53697A652E576964746805000000000070668405400B53697A652E486569 + 67687405000000000000008803401453697A652E506C6174666F726D44656661 + 756C740800000754427574746F6E00095374796C654E616D65060B6D696E7573 + 627574746F6E05416C69676E07074669744C6566740843616E466F6375730806 + 437572736F72070763724172726F770C4D617267696E732E4C65667405000000 + 000000008000400B4D617267696E732E546F7005000000000000008000400D4D + 617267696E732E526967687405000000000000008000400E4D617267696E732E + 426F74746F6D05000000000000008000400A506F736974696F6E2E5805000000 + 000000008000400A506F736974696F6E2E5905000000000000008000400A5369 + 7A652E5769647468050000000000E8FF8703400B53697A652E48656967687405 + 000000000000008803401453697A652E506C6174666F726D44656661756C7408 + 0B5374796C654C6F6F6B7570060B627574746F6E7374796C6500055450617468 + 0005416C69676E0706436C69656E7409446174612E506174680A400000000500 + 0000000000000000803F00000000010000000000803F0000803F010000000000 + 00000000003F010000000000803F00000000030000000000803F000000000A46 + 696C6C2E436F6C6F720708636C6157686974650748697454657374080C4D6172 + 67696E732E4C6566740500000000000000C001400B4D617267696E732E546F70 + 0500000000000000C001400D4D617267696E732E526967687405000000000000 + 00C001400E4D617267696E732E426F74746F6D0500000000000000C001400A53 + 697A652E5769647468050000000000A0FF9F01400B53697A652E486569676874 + 0500000000000000A001401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E650000000754427574746F6E0009 + 5374796C654E616D65060A706C7573627574746F6E05416C69676E0708466974 + 52696768740843616E466F6375730806437572736F72070763724172726F770C + 4D617267696E732E4C65667405000000000000008000400B4D617267696E732E + 546F7005000000000000008000400D4D617267696E732E526967687405000000 + 000000008000400E4D617267696E732E426F74746F6D05000000000000008000 + 400A506F736974696F6E2E580500000000006A66BA05400A506F736974696F6E + 2E5905000000000000008000400A53697A652E5769647468050000000000F0FF + 8703400B53697A652E48656967687405000000000000008803401453697A652E + 506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570060B6275 + 74746F6E7374796C65000554506174680005416C69676E0706436C69656E7409 + 446174612E506174680A34000000040000000000000000000000000000000100 + 0000000000000000803F010000000000803F0000003F03000000000000000000 + 00000A46696C6C2E436F6C6F720708636C615768697465074869745465737408 + 0C4D617267696E732E4C6566740500000000000000C001400B4D617267696E73 + 2E546F700500000000000000C001400D4D617267696E732E5269676874050000 + 0000000000C001400E4D617267696E732E426F74746F6D0500000000000000C0 + 01400A53697A652E5769647468050000000000C0FF9F01400B53697A652E4865 + 696768740500000000000000A001401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65000000005450463007 + 544C61796F757400095374796C654E616D65060D73697A65677269707374796C + 6505416C69676E070643656E7465720A53697A652E5769647468050000000000 + 0000C803400B53697A652E4865696768740500000000000000C803401453697A + 652E506C6174666F726D44656661756C74080756697369626C6508000A545265 + 6374616E676C6500095374796C654E616D65060A52656374616E676C65310541 + 6C69676E070643656E7465720A46696C6C2E436F6C6F72070978464636303630 + 36300A53697A652E57696474680500000000000000A000400B53697A652E4865 + 696768740500000000000000A000401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E6500000A545265637461 + 6E676C6500095374796C654E616D65060A52656374616E676C653205416C6967 + 6E070643656E7465720A46696C6C2E436F6C6F7207097846463630363036300C + 4D617267696E732E4C6566740500000000000000A002400A53697A652E576964 + 74680500000000000000A000400B53697A652E48656967687405000000000000 + 00A000401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E6500000A5452656374616E676C6500095374796C65 + 4E616D65060A52656374616E676C653305416C69676E070643656E7465720A46 + 696C6C2E436F6C6F7207097846463630363036300C4D617267696E732E4C6566 + 740500000000000000A002400B4D617267696E732E546F700500000000000000 + A002400A53697A652E57696474680500000000000000A000400B53697A652E48 + 65696768740500000000000000A000401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374 + 616E676C6500095374796C654E616D65060A52656374616E676C653405416C69 + 676E070643656E7465720A46696C6C2E436F6C6F720709784646363036303630 + 0B4D617267696E732E546F700500000000000000A002400A53697A652E576964 + 74680500000000000000A000400B53697A652E48656967687405000000000000 + 00A000401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E6500000A5452656374616E676C6500095374796C65 + 4E616D65060A52656374616E676C653505416C69676E070643656E7465720A46 + 696C6C2E436F6C6F7207097846463630363036300B4D617267696E732E546F70 + 0500000000000000A002400D4D617267696E732E526967687405000000000000 + 00A002400A53697A652E57696474680500000000000000A000400B53697A652E + 4865696768740500000000000000A000401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000A54526563 + 74616E676C6500095374796C654E616D65060A52656374616E676C653605416C + 69676E070643656E7465720A46696C6C2E436F6C6F7207097846463630363036 + 300C4D617267696E732E4C6566740500000000000000A002400E4D617267696E + 732E426F74746F6D0500000000000000A002400A53697A652E57696474680500 + 000000000000A000400B53697A652E4865696768740500000000000000A00040 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E65000000545046300A5452656374616E676C6500095374796C + 654E616D65060C746F6F6C6261727374796C6505416C69676E070643656E7465 + 720A46696C6C2E436F6C6F720709784646323532353235074869745465737408 + 0553696465730B06426F74746F6D000A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000000000C804401453697A + 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 + 097846463135313531350756697369626C650800005450463007544C61796F75 + 7400095374796C654E616D65061570726F67726573736261726572726F727374 + 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 + 000033338505400B53697A652E4865696768740500000000009999E104401453 + 697A652E506C6174666F726D44656661756C74080756697369626C6508000A54 + 52656374616E676C6500095374796C654E616D65060668747261636B05416C69 + 676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978464632303230 + 3230064C6F636B6564090748697454657374080A53697A652E57696474680500 + 0000000033338505400B53697A652E4865696768740500000000009999E10440 + 1453697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F + 6C6F720709784646313531353135000A5452656374616E676C6500095374796C + 654E616D65060A68696E64696361746F7205416C69676E07044C6566740A4669 + 6C6C2E436F6C6F720709784646453232413241064C6F636B6564090748697454 + 657374080C4D617267696E732E4C656674050000000000000080FF3F0B4D6172 + 67696E732E546F70050000000000000080FF3F0D4D617267696E732E52696768 + 74050000000000000080FF3F0E4D617267696E732E426F74746F6D0500000000 + 00000080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F73 + 6974696F6E2E59050000000000000080FF3F0A53697A652E5769647468050000 + 0000000000C804400B53697A652E4865696768740500000000009999D9044014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E650000000A5452656374616E676C6500095374796C654E616D65 + 060676747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F + 6C6F720709784646323032303230064C6F636B6564090748697454657374080A + 53697A652E576964746805000000000033338505400B53697A652E4865696768 + 740500000000009999E104401453697A652E506C6174666F726D44656661756C + 74080C5374726F6B652E436F6C6F720709784646313531353135000A54526563 + 74616E676C6500095374796C654E616D65060A76696E64696361746F7205416C + 69676E0706426F74746F6D0A46696C6C2E436F6C6F7207097846464532324132 + 41064C6F636B6564090748697454657374080C4D617267696E732E4C65667405 + 0000000000000080FF3F0B4D617267696E732E546F70050000000000000080FF + 3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D61726769 + 6E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E5805 + 0000000000000080FF3F0A506F736974696F6E2E590500000000009999890440 + 0A53697A652E576964746805000000000033338105400B53697A652E48656967 + 68740500000000000000A803401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C + 61796F757400095374796C654E616D65060F64726F707461726765747374796C + 6505416C69676E070643656E7465720A53697A652E5769647468050000000000 + ACAAD905400B53697A652E4865696768740500000000000000CF05401453697A + 652E506C6174666F726D44656661756C74080756697369626C6508000A545265 + 6374616E676C650005416C69676E0708436F6E74656E74730946696C6C2E4B69 + 6E6407044E6F6E650748697454657374080A53697A652E576964746805000000 + 0000ACAAD905400B53697A652E4865696768740500000000000000CF05401453 + 697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F + 720708636C615768697465105374726F6B652E546869636B6E65737305000000 + 000000008001400B5374726F6B652E4461736807044461736807585261646975 + 730500000000000000C0024007595261646975730500000000000000C0024000 + 05545465787400095374796C654E616D6506047465787405416C69676E070642 + 6F74746F6D0748697454657374080C4D617267696E732E4C6566740500000000 + 000000A002400D4D617267696E732E52696768740500000000000000A002400A + 506F736974696F6E2E580500000000000000A002400A506F736974696F6E2E59 + 0500000000000000D604400A53697A652E5769647468050000000000ACAAB105 + 400B53697A652E4865696768740500000000000000C804401453697A652E506C + 6174666F726D44656661756C7408165465787453657474696E67732E466F6E74 + 436F6C6F720708636C6157686974650000001254466C6F61744B6579416E696D + 6174696F6E00084475726174696F6E050000000000999999FE3F044B6579730E + 010001034B6579050000000000000080FE3F0556616C75650500000000000000 + A003C00001034B6579050000000000000080FF3F0000044C6F6F70090C50726F + 70657274794E616D65060B50616464696E672E546F7010537461727446726F6D + 43757272656E74080754726967676572060F4973447261674F7665723D747275 + 6500000554506174680005416C69676E070643656E74657209446174612E5061 + 74680AC4000000100000000000000008EC8343F087A4430100000008EC834308 + 3CFB430200000035BE7143504DF9430200000012835C43A8E6F54302000000F0 + 674943F803F1430100000008EC8343FC0116440100000008EC8343FC51164401 + 00000000408443FC5116440100000010689A43FC412B4401000000081CD043F8 + 03F14302000000915DC64321E0F54302000000919DBB439643F9430200000008 + 7CB043F833FB4301000000087CB043F087A4430100000008EC8343F087A44303 + 00000000000000000000000A46696C6C2E436F6C6F720708636C615768697465 + 0748697454657374080A53697A652E57696474680500000000000000C804400B + 53697A652E4865696768740500000000000100C804401453697A652E506C6174 + 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000 + 005450463007544C61796F757400095374796C654E616D65061464726F707461 + 726765746669656C647374796C6505416C69676E070643656E7465720A53697A + 652E576964746805000000000000A08A07400B53697A652E4865696768740500 + 000000000000B204401453697A652E506C6174666F726D44656661756C740807 + 56697369626C6508000A5452656374616E676C6500095374796C654E616D6506 + 0A52656374616E676C653105416C69676E0706436C69656E740946696C6C2E4B + 696E6407044E6F6E650748697454657374080A53697A652E5769647468050000 + 00000000A08A07400B53697A652E4865696768740500000000000000B2044014 + 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C + 6F7207097846463241383245320005545465787400095374796C654E616D6506 + 047465787405416C69676E0706436C69656E740748697454657374080A53697A + 652E576964746805000000000000809A05400B53697A652E4865696768740500 + 000000000000B204401453697A652E506C6174666F726D44656661756C740816 + 5465787453657474696E67732E466F6E74436F6C6F720708636C615768697465 + 000007544C61796F757400095374796C654E616D6506074C61796F7574310541 + 6C69676E07044C6566740A53697A652E57696474680500000000000000C80540 + 0B53697A652E4865696768740500000000000000B204401453697A652E506C61 + 74666F726D44656661756C74080005545061746800095374796C654E616D6506 + 05506174683105416C69676E070643656E74657209446174612E506174680A24 + 010000180000000000000073B8AC43C14A7843010000006D2717435849DD4302 + 00000086CB0A431078E343020000009683ED421078E34302000000DACED44258 + 49DD43020000009A19BC42081CD743020000009A19BC424C17CD4302000000DA + CED4421DEAC64301000000B4288B4385EB61430100000068D1D4426811584202 + 000000281CBC42CAA1264202000000281CBC42E6FBAC410200000068D1D442D0 + 4D144102000000A886ED429CC245C002000000CCCC0A439CC245C002000000B4 + 281743D04D14410100000016B9AC43918D4B4302000000BECFAF43A5BB514302 + 0000009F5AB143F1D25943020000009F5AB14343EB614302000000A05AB1439C + 046A4302000000FACEAF43711D72430200000073B8AC43C14A78430300000073 + B8AC43C14A78430A46696C6C2E436F6C6F720708636C61576869746507486974 + 54657374080A53697A652E57696474680500000000000000F002400B53697A65 + 2E4865696768740500000000000000F002401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E6508577261704D + 6F64650703466974000005545061746800095374796C654E616D650605506174 + 683205416C69676E070643656E74657209446174612E506174680A2401000018 + 0000000000000073B8AC43C14A7843010000006D2717435849DD430200000086 + CB0A431078E343020000009683ED421078E34302000000DACED4425849DD4302 + 0000009A19BC42081CD743020000009A19BC424C17CD4302000000DACED4421D + EAC64301000000B4288B4385EB61430100000068D1D442681158420200000028 + 1CBC42CAA1264202000000281CBC42E6FBAC410200000068D1D442D04D144102 + 000000A886ED429CC245C002000000CCCC0A439CC245C002000000B4281743D0 + 4D14410100000016B9AC43918D4B4302000000BECFAF43A5BB5143020000009F + 5AB143F1D25943020000009F5AB14343EB614302000000A05AB1439C046A4302 + 000000FACEAF43711D72430200000073B8AC43C14A78430300000073B8AC43C1 + 4A78430A46696C6C2E436F6C6F720708636C6157686974650748697454657374 + 080C4D617267696E732E4C6566740500000000000000A004400A53697A652E57 + 696474680500000000000000F002400B53697A652E4865696768740500000000 + 000000F002401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E6508577261704D6F6465070346697400000554 + 5061746800095374796C654E616D650605506174683305416C69676E07064365 + 6E74657209446174612E506174680A24010000180000000000000073B8AC43C1 + 4A7843010000006D2717435849DD430200000086CB0A431078E3430200000096 + 83ED421078E34302000000DACED4425849DD43020000009A19BC42081CD74302 + 0000009A19BC424C17CD4302000000DACED4421DEAC64301000000B4288B4385 + EB61430100000068D1D4426811584202000000281CBC42CAA126420200000028 + 1CBC42E6FBAC410200000068D1D442D04D144102000000A886ED429CC245C002 + 000000CCCC0A439CC245C002000000B4281743D04D14410100000016B9AC4391 + 8D4B4302000000BECFAF43A5BB5143020000009F5AB143F1D25943020000009F + 5AB14343EB614302000000A05AB1439C046A4302000000FACEAF43711D724302 + 00000073B8AC43C14A78430300000073B8AC43C14A78430A46696C6C2E436F6C + 6F720708636C6157686974650748697454657374080D4D617267696E732E5269 + 6768740500000000000000A004400A53697A652E576964746805000000000000 + 00F002400B53697A652E4865696768740500000000000000F002401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E6508577261704D6F6465070346697400000007544C61796F757400095374 + 796C654E616D6506074C61796F75743205416C69676E070552696768740A506F + 736974696F6E2E580500000000000040B106400A53697A652E57696474680500 + 000000000000C805400B53697A652E4865696768740500000000000000B20440 + 1453697A652E506C6174666F726D44656661756C740800055450617468000953 + 74796C654E616D650605506174683105416C69676E070643656E746572094461 + 74612E506174680A24010000180000000000000073B8AC43C14A784301000000 + 6D2717435849DD430200000086CB0A431078E343020000009683ED421078E343 + 02000000DACED4425849DD43020000009A19BC42081CD743020000009A19BC42 + 4C17CD4302000000DACED4421DEAC64301000000B4288B4385EB614301000000 + 68D1D4426811584202000000281CBC42CAA1264202000000281CBC42E6FBAC41 + 0200000068D1D442D04D144102000000A886ED429CC245C002000000CCCC0A43 + 9CC245C002000000B4281743D04D14410100000016B9AC43918D4B4302000000 + BECFAF43A5BB5143020000009F5AB143F1D25943020000009F5AB14343EB6143 + 02000000A05AB1439C046A4302000000FACEAF43711D72430200000073B8AC43 + C14A78430300000073B8AC43C14A78430A46696C6C2E436F6C6F720708636C61 + 57686974650748697454657374080D526F746174696F6E416E676C6505000000 + 00000000B406400A53697A652E57696474680500000000000000F002400B5369 + 7A652E4865696768740500000000000000F002401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6508577261 + 704D6F64650703466974000005545061746800095374796C654E616D65060550 + 6174683205416C69676E070643656E74657209446174612E506174680A240100 + 00180000000000000073B8AC43C14A7843010000006D2717435849DD43020000 + 0086CB0A431078E343020000009683ED421078E34302000000DACED4425849DD + 43020000009A19BC42081CD743020000009A19BC424C17CD4302000000DACED4 + 421DEAC64301000000B4288B4385EB61430100000068D1D44268115842020000 + 00281CBC42CAA1264202000000281CBC42E6FBAC410200000068D1D442D04D14 + 4102000000A886ED429CC245C002000000CCCC0A439CC245C002000000B42817 + 43D04D14410100000016B9AC43918D4B4302000000BECFAF43A5BB5143020000 + 009F5AB143F1D25943020000009F5AB14343EB614302000000A05AB1439C046A + 4302000000FACEAF43711D72430200000073B8AC43C14A78430300000073B8AC + 43C14A78430A46696C6C2E436F6C6F720708636C615768697465074869745465 + 7374080C4D617267696E732E4C6566740500000000000000A004400D526F7461 + 74696F6E416E676C650500000000000000B406400A53697A652E576964746805 + 00000000000000F002400B53697A652E4865696768740500000000000000F002 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E6508577261704D6F64650703466974000005545061746800 + 095374796C654E616D650605506174683305416C69676E070643656E74657209 + 446174612E506174680A24010000180000000000000073B8AC43C14A78430100 + 00006D2717435849DD430200000086CB0A431078E343020000009683ED421078 + E34302000000DACED4425849DD43020000009A19BC42081CD743020000009A19 + BC424C17CD4302000000DACED4421DEAC64301000000B4288B4385EB61430100 + 000068D1D4426811584202000000281CBC42CAA1264202000000281CBC42E6FB + AC410200000068D1D442D04D144102000000A886ED429CC245C002000000CCCC + 0A439CC245C002000000B4281743D04D14410100000016B9AC43918D4B430200 + 0000BECFAF43A5BB5143020000009F5AB143F1D25943020000009F5AB14343EB + 614302000000A05AB1439C046A4302000000FACEAF43711D72430200000073B8 + AC43C14A78430300000073B8AC43C14A78430A46696C6C2E436F6C6F72070863 + 6C6157686974650748697454657374080D4D617267696E732E52696768740500 + 000000000000A004400D526F746174696F6E416E676C650500000000000000B4 + 06400A53697A652E57696474680500000000000000F002400B53697A652E4865 + 696768740500000000000000F002401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F6465 + 070346697400000000005450463007544C61796F757400095374796C654E616D + 65060C706F706F7665727374796C6505416C69676E070643656E746572075669 + 7369626C6508000A5452656374616E676C6500095374796C654E616D65060262 + 6705416C69676E0706436C69656E740A46696C6C2E436F6C6F72070978464632 + 30323032300748697454657374080A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000000000C804401453697A65 + 2E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709 + 7846463135313531350007544C61796F757400095374796C654E616D65060763 + 6F6E74656E7405416C69676E0706436C69656E740C4D617267696E732E4C6566 + 74050000000000000080FF3F0B4D617267696E732E546F700500000000000000 + 80FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D6172 + 67696E732E426F74746F6D050000000000000080FF3F0A53697A652E57696474 + 680500000000000000C004400B53697A652E4865696768740500000000000000 + C004401453697A652E506C6174666F726D44656661756C740800000D54536861 + 646F77456666656374000844697374616E63650500000000000000C000400944 + 6972656374696F6E0500000000000000B4054008536F66746E65737305000000 + 0000000080FE3F074F706163697479050000000000000080FE3F0B536861646F + 77436F6C6F720708636C61426C61636B000000005450463007544C61796F7574 + 00095374796C654E616D65060D706F707570626F787374796C6505416C69676E + 070643656E7465720A53697A652E57696474680500000000000080C406400B53 + 697A652E4865696768740500000000000000D404401453697A652E506C617466 + 6F726D44656661756C74080756697369626C6508000A5452656374616E676C65 + 00095374796C654E616D65060A6261636B67726F756E6405416C69676E070843 + 6F6E74656E74730A46696C6C2E436F6C6F720709784646323032303230074869 + 7454657374080A53697A652E57696474680500000000000080C406400B53697A + 652E4865696768740500000000000000D404401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E + 696D6174696F6E315374796C65084475726174696F6E05000000000000000000 + 000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374617274 + 56616C756507097846463230323032300953746F7056616C7565070978464634 + 30343034300754726967676572062049734D6F7573654F7665723D747275653B + 4973507265737365643D66616C73650E54726967676572496E76657273650621 + 49734D6F7573654F7665723D66616C73653B4973507265737365643D66616C73 + 6500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614 + 436F6C6F72416E696D6174696F6E325374796C65084475726174696F6E050000 + 00000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F + 720A537461727456616C756507097846463430343034300953746F7056616C75 + 6507097846463241383245320754726967676572062049734D6F7573654F7665 + 723D747275653B4973507265737365643D747275653B0E54726967676572496E + 7665727365062049734D6F7573654F7665723D747275653B4973507265737365 + 643D66616C736500000007544C61796F75740005416C69676E07055269676874 + 0A506F736974696F6E2E580500000000000080B506400A53697A652E57696474 + 680500000000000000F002400B53697A652E4865696768740500000000000000 + D404401453697A652E506C6174666F726D44656661756C740800055450617468 + 0005416C69676E070643656E74657209446174612E506174680A400000000500 + 000000000000000000000000803F010000000000803F0000803F010000000000 + 003F0000000001000000000000000000803F0300000000000000000000000A46 + 696C6C2E436F6C6F720708636C6157686974650748697454657374080B4D6172 + 67696E732E546F700500000000000000E001C00A53697A652E57696474680500 + 0000000000008002400B53697A652E4865696768740500000000000000800140 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E6500000554506174680005416C69676E070643656E74657209 + 446174612E506174680A34000000040000000000000000000000000000000100 + 00000000803F00000000010000000000003F0000803F03000000000000000000 + 00000A46696C6C2E436F6C6F720708636C615768697465074869745465737408 + 0B4D617267696E732E546F700500000000000000C001400A53697A652E576964 + 746805000000000000008002400B53697A652E48656967687405000000000000 + 008001401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E6500000005545465787400095374796C654E616D65 + 06047465787405416C69676E0706436C69656E740748697454657374080C4D61 + 7267696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F + 70050000000000000080FF3F0D4D617267696E732E5269676874050000000000 + 000080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A + 53697A652E57696474680500000000000080B306400B53697A652E4865696768 + 740500000000000000CC04401453697A652E506C6174666F726D44656661756C + 7408165465787453657474696E67732E466F6E74436F6C6F720708636C615768 + 697465000000545046300A5452656374616E676C6500095374796C654E616D65 + 06147374617475736261726E6F677269707374796C6505416C69676E07064365 + 6E7465720C436C69704368696C6472656E090A46696C6C2E436F6C6F72070978 + 46463235323532350553696465730B03546F70000A53697A652E576964746805 + 00000000000000F004400B53697A652E4865696768740500000000000000C804 + 401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E43 + 6F6C6F7207097846463135313531350756697369626C65080000545046300754 + 4C61796F757400095374796C654E616D650613736D616C6C7363726F6C6C6261 + 727374796C6505416C69676E070643656E7465720756697369626C6508000654 + 547261636B00095374796C654E616D65060668747261636B05416C69676E0706 + 436C69656E74064C6F636B6564090B4F7269656E746174696F6E070A486F7269 + 7A6F6E74616C0A53697A652E57696474680500000000000000C804400B53697A + 652E4865696768740500000000000000C804401453697A652E506C6174666F72 + 6D44656661756C74080B5374796C654C6F6F6B757006147363726F6C6C626172 + 68747261636B7374796C6500000654547261636B00095374796C654E616D6506 + 0676747261636B05416C69676E0706436C69656E74064C6F636B6564090B4F72 + 69656E746174696F6E070A486F72697A6F6E74616C0A53697A652E5769647468 + 0500000000000000C804400B53697A652E4865696768740500000000000000C8 + 04401453697A652E506C6174666F726D44656661756C74080B5374796C654C6F + 6F6B757006147363726F6C6C62617276747261636B7374796C65000000545046 + 3007544C61796F757400095374796C654E616D65060D73706C69747465727374 + 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 + 00000000A904400B53697A652E4865696768740500000000000080C105401453 + 697A652E506C6174666F726D44656661756C74080756697369626C6508000A54 + 52656374616E676C6500095374796C654E616D65060A52656374616E676C6531 + 05416C69676E0706436C69656E740A46696C6C2E436F6C6F7207097846463330 + 333033300748697454657374080553696465730B044C65667405526967687400 + 0A53697A652E57696474680500000000000000A904400B53697A652E48656967 + 68740500000000000080C105401453697A652E506C6174666F726D4465666175 + 6C74080C5374726F6B652E436F6C6F720709784646313531353135000007544C + 61796F757400095374796C654E616D6506064C61796F757405416C69676E0706 + 436C69656E740A53697A652E57696474680500000000000000A904400B53697A + 652E4865696768740500000000000080C105401453697A652E506C6174666F72 + 6D44656661756C74080007544C61796F757400095374796C654E616D65060467 + 72697005416C69676E070A5665727443656E746572064C6F636B6564090A506F + 736974696F6E2E5905000000000000008004400A53697A652E57696474680500 + 000000000000A904400B53697A652E4865696768740500000000000000800440 + 1453697A652E506C6174666F726D44656661756C7408000754436972636C6500 + 095374796C654E616D650607436972636C653305416C69676E070643656E7465 + 720A46696C6C2E436F6C6F720709784646343034303430074869745465737408 + 0E4D617267696E732E426F74746F6D0500000000000000A003400A53697A652E + 57696474680500000000000000E001400B53697A652E48656967687405000000 + 00000000E001401453697A652E506C6174666F726D44656661756C74080C5374 + 726F6B652E436F6C6F72070978464631353135313500000754436972636C6500 + 095374796C654E616D650607436972636C653205416C69676E070643656E7465 + 720A46696C6C2E436F6C6F720709784646343034303430074869745465737408 + 0B4D617267696E732E546F700500000000000000A003400A53697A652E576964 + 74680500000000000000E001400B53697A652E48656967687405000000000000 + 00E001401453697A652E506C6174666F726D44656661756C74080C5374726F6B + 652E436F6C6F72070978464631353135313500000754436972636C6500095374 + 796C654E616D650607436972636C653105416C69676E070643656E7465720A46 + 696C6C2E436F6C6F7207097846463430343034300748697454657374080A5369 + 7A652E57696474680500000000000000E001400B53697A652E48656967687405 + 00000000000000E001401453697A652E506C6174666F726D44656661756C7408 + 0C5374726F6B652E436F6C6F7207097846463135313531350000000000545046 + 3007544C61796F757400095374796C654E616D650610636C6F7365627574746F + 6E7374796C6505416C69676E070643656E7465720A53697A652E576964746805 + 00000000000000C804400B53697A652E4865696768740500000000000000C803 + 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 + 000A5452656374616E676C6500095374796C654E616D65060B636C6F73656275 + 74746F6E05416C69676E0706436C69656E740A46696C6C2E436F6C6F72070978 + 46463230323032300748697454657374080A53697A652E576964746805000000 + 00000000C804400B53697A652E4865696768740500000000000000C803401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E61 + 6D650614436F6C6F72416E696D6174696F6E315374796C65084475726174696F + 6E05000000000000000000000C50726F70657274794E616D65060A46696C6C2E + 436F6C6F720A537461727456616C756507097846463230323032300953746F70 + 56616C756507097846464646363135370754726967676572062049734D6F7573 + 654F7665723D747275653B4973507265737365643D66616C73650E5472696767 + 6572496E7665727365062149734D6F7573654F7665723D66616C73653B497350 + 7265737365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009 + 5374796C654E616D650614436F6C6F72416E696D6174696F6E325374796C6508 + 4475726174696F6E05000000000000000000000C50726F70657274794E616D65 + 060A46696C6C2E436F6C6F720A537461727456616C7565070978464646463631 + 35370953746F7056616C75650709784646453234463435075472696767657206 + 1F49734D6F7573654F7665723D747275653B4973507265737365643D74727565 + 0E54726967676572496E7665727365062049734D6F7573654F7665723D747275 + 653B4973507265737365643D66616C736500000005545061746800095374796C + 654E616D650605506174683105416C69676E070643656E74657209446174612E + 506174680AC400000010000000000000000000A0C00000704101000000000070 + 410000A0C001000000000048420000F041010000000000AA420000A0C0010000 + 000000D242000070410100000000008C4200004842010000000000D2420000B4 + 42010000000000AA420000DC42020000003BDF34429E6F8C4202000000FE547D + 427FAAB04202000000000048420000964201000000000070410000DC42010000 + 000000A0C00000B442010000000000F04100005C42010000000000A0C0000070 + 41030000000000A0C0000070410A46696C6C2E436F6C6F720708636C61576869 + 74650748697454657374080A53697A652E57696474680500000000000000A002 + 400B53697A652E4865696768740500000000000000A002401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 0000005450463007544C61796F757400095374796C654E616D65060E6D617862 + 7574746F6E7374796C6505416C69676E070643656E7465720A53697A652E5769 + 6474680500000000000000C804400B53697A652E486569676874050000000000 + 0000C803401453697A652E506C6174666F726D44656661756C74080756697369 + 626C6508000A5452656374616E676C6500095374796C654E616D6506096D6178 + 627574746F6E05416C69676E0706436C69656E740A46696C6C2E436F6C6F7207 + 097846463230323032300748697454657374080A53697A652E57696474680500 + 000000000000C804400B53697A652E4865696768740500000000000000C80340 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C65 + 4E616D650614436F6C6F72416E696D6174696F6E315374796C65084475726174 + 696F6E05000000000000000000000C50726F70657274794E616D65060A46696C + 6C2E436F6C6F720A537461727456616C75650709784646323032303230095374 + 6F7056616C756507097846463241383245320754726967676572062049734D6F + 7573654F7665723D747275653B4973507265737365643D66616C73650E547269 + 67676572496E7665727365062149734D6F7573654F7665723D66616C73653B49 + 73507265737365643D66616C736500000F54436F6C6F72416E696D6174696F6E + 00095374796C654E616D650614436F6C6F72416E696D6174696F6E325374796C + 65084475726174696F6E05000000000000000000000C50726F70657274794E61 + 6D65060A46696C6C2E436F6C6F720A537461727456616C756507097846463241 + 383245320953746F7056616C7565070978464631373537394307547269676765 + 72061F49734D6F7573654F7665723D747275653B4973507265737365643D7472 + 75650E54726967676572496E7665727365062049734D6F7573654F7665723D74 + 7275653B4973507265737365643D66616C736500000005545061746800095374 + 796C654E616D650605506174683105416C69676E070643656E74657209446174 + 612E506174680A5800000007000000000000000000C8420000C8420100000000 + 002F440000C8420100000000002F4400002F4401000000008009440080094401 + 0000000080094400007A430100000000007A4300007A43030000000000C84200 + 00C8420A46696C6C2E436F6C6F720708636C6157686974650748697454657374 + 080A53697A652E57696474680500000000000000A002400B53697A652E486569 + 6768740500000000000000A002401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E650000005450463007544C + 61796F757400095374796C654E616D65060E726573627574746F6E7374796C65 + 05416C69676E070643656E7465720A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000000000C803401453697A65 + 2E506C6174666F726D44656661756C74080756697369626C6508000A54526563 + 74616E676C6500095374796C654E616D650609726573627574746F6E05416C69 + 676E0706436C69656E740A46696C6C2E436F6C6F720709784646323032303230 + 0748697454657374080A53697A652E57696474680500000000000000C804400B + 53697A652E4865696768740500000000000000C803401453697A652E506C6174 + 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F + 72416E696D6174696F6E315374796C65084475726174696F6E05000000000000 + 000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 + 61727456616C756507097846463230323032300953746F7056616C7565070978 + 46463241383245320754726967676572062049734D6F7573654F7665723D7472 + 75653B4973507265737365643D66616C73650E54726967676572496E76657273 + 65062149734D6F7573654F7665723D66616C73653B4973507265737365643D66 + 616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650614436F6C6F72416E696D6174696F6E325374796C65084475726174696F6E + 05000000000000000000000C50726F70657274794E616D65060A46696C6C2E43 + 6F6C6F720A537461727456616C756507097846463241383245320953746F7056 + 616C756507097846463137353739430754726967676572061F49734D6F757365 + 4F7665723D747275653B4973507265737365643D747275650E54726967676572 + 496E7665727365062049734D6F7573654F7665723D747275653B497350726573 + 7365643D66616C736500000005545061746800095374796C654E616D65060550 + 6174683105416C69676E070643656E74657209446174612E506174680A580000 + 0007000000000000000000C8420000C8420100000000002F440000C842010000 + 0000002F4400002F44010000000080094400800944010000000080094400007A + 430100000000007A4300007A43030000000000C8420000C8420A46696C6C2E43 + 6F6C6F720708636C6157686974650748697454657374080D526F746174696F6E + 416E676C650500000000000000B406400A53697A652E57696474680500000000 + 000000A002400B53697A652E4865696768740500000000000000A00240145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E650000005450463007544C61796F757400095374796C654E616D6506 + 0E6D696E627574746F6E7374796C6505416C69676E070643656E7465720A5369 + 7A652E57696474680500000000000000C804400B53697A652E48656967687405 + 00000000000000C803401453697A652E506C6174666F726D44656661756C7408 + 0756697369626C6508000A5452656374616E676C6500095374796C654E616D65 + 06096D696E627574746F6E05416C69676E0706436C69656E740A46696C6C2E43 + 6F6C6F7207097846463230323032300748697454657374080A53697A652E5769 + 6474680500000000000000C804400B53697A652E486569676874050000000000 + 0000C803401453697A652E506C6174666F726D44656661756C74080B5374726F + 6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E0009 + 5374796C654E616D650614436F6C6F72416E696D6174696F6E315374796C6508 + 4475726174696F6E05000000000000000000000C50726F70657274794E616D65 + 060A46696C6C2E436F6C6F720A537461727456616C7565070978464632303230 + 32300953746F7056616C75650709784646324138324532075472696767657206 + 2049734D6F7573654F7665723D747275653B4973507265737365643D66616C73 + 650E54726967676572496E7665727365062149734D6F7573654F7665723D6661 + 6C73653B4973507265737365643D66616C736500000F54436F6C6F72416E696D + 6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E + 325374796C65084475726174696F6E05000000000000000000000C50726F7065 + 7274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709 + 7846463241383245320953746F7056616C756507097846463137353739430754 + 726967676572061F49734D6F7573654F7665723D747275653B49735072657373 + 65643D747275650E54726967676572496E7665727365062049734D6F7573654F + 7665723D747275653B4973507265737365643D66616C73650000000554506174 + 6800095374796C654E616D650605506174683105416C69676E070643656E7465 + 7209446174612E506174680A40000000050000000000000000002F4400800944 + 0100000000002F4400002F44010000000000C84200002F44010000000000C842 + 008009440300000000002F44008009440A46696C6C2E436F6C6F720708636C61 + 57686974650748697454657374080B4D617267696E732E546F70050000000000 + 0000A002400D526F746174696F6E416E676C650500000000000000B406400A53 + 697A652E57696474680500000000000000A002400B53697A652E486569676874 + 0500000000000000C000401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E650000005450463007544C61796F + 757400095374796C654E616D65060F746F6F6C77696E646F777374796C650541 + 6C69676E070643656E7465720A53697A652E576964746805000000000056D5AF + 07400B53697A652E4865696768740500000000000000B306401453697A652E50 + 6C6174666F726D44656661756C74080756697369626C6508000A545265637461 + 6E676C6500095374796C654E616D6506046D61736B05416C69676E0708436F6E + 74656E74730A46696C6C2E436F6C6F7207097846463130313031300A53697A65 + 2E576964746805000000000056D5AF07400B53697A652E486569676874050000 + 0000000000B306401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E650756697369626C6508000007544C6179 + 6F757400095374796C654E616D6506046C65667405416C69676E07084D6F7374 + 4C656674064C6F636B6564090A506F736974696F6E2E590500000000000000C8 + 03400A53697A652E57696474680500000000000000A001400B53697A652E4865 + 6967687405000000000000009A06401453697A652E506C6174666F726D446566 + 61756C7408000A5452656374616E676C650005416C69676E07084D6F73744C65 + 66740A46696C6C2E436F6C6F7207097846463230323032300748697454657374 + 080553696465730B044C656674055269676874000A53697A652E576964746805 + 00000000000000A001400B53697A652E48656967687405000000000000009506 + 401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E43 + 6F6C6F72070978464631353135313500000A5452656374616E676C6500095374 + 796C654E616D65060A52656374616E676C653105416C69676E070A4D6F737442 + 6F74746F6D13456E61626C6544726167486967686C69676874080A46696C6C2E + 436F6C6F7207097846463230323032300748697454657374080A506F73697469 + 6F6E2E5905000000000000009506400553696465730B044C65667406426F7474 + 6F6D000A53697A652E57696474680500000000000000A001400B53697A652E48 + 65696768740500000000000000A001401453697A652E506C6174666F726D4465 + 6661756C74080C5374726F6B652E436F6C6F7207097846463135313531350007 + 544C61796F757400095374796C654E616D6506074C61796F75743305416C6967 + 6E07094D6F737452696768740A506F736974696F6E2E58050000000000000080 + 01400A53697A652E5769647468050000000000000080FF3F0B53697A652E4865 + 696768740500000000000000A001401453697A652E506C6174666F726D446566 + 61756C7408000A5452656374616E676C6500095374796C654E616D65060A5265 + 6374616E676C653105416C69676E0703546F700A46696C6C2E436F6C6F720709 + 7846463135313531350748697454657374080A53697A652E5769647468050000 + 000000000080FF3F0B53697A652E486569676874050000000000000080FF3F14 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E65000000000007544C61796F757400095374796C654E616D6506 + 05726967687405416C69676E07094D6F73745269676874064C6F636B6564090A + 506F736974696F6E2E580500000000005655AD07400A506F736974696F6E2E59 + 0500000000000000C803400A53697A652E57696474680500000000000000A001 + 400B53697A652E48656967687405000000000000009A06401453697A652E506C + 6174666F726D44656661756C7408000A5452656374616E676C650005416C6967 + 6E07094D6F737452696768740A46696C6C2E436F6C6F72070978464632303230 + 32300748697454657374080553696465730B044C656674055269676874000A53 + 697A652E57696474680500000000000000A001400B53697A652E486569676874 + 05000000000000009506401453697A652E506C6174666F726D44656661756C74 + 080C5374726F6B652E436F6C6F72070978464631353135313500000A54526563 + 74616E676C6500095374796C654E616D65060A52656374616E676C653105416C + 69676E070A4D6F7374426F74746F6D13456E61626C6544726167486967686C69 + 676874080A46696C6C2E436F6C6F720709784646323032303230074869745465 + 7374080A506F736974696F6E2E5905000000000000009506400553696465730B + 06426F74746F6D055269676874000A53697A652E576964746805000000000000 + 00A001400B53697A652E4865696768740500000000000000A001401453697A65 + 2E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709 + 7846463135313531350007544C61796F757400095374796C654E616D6506074C + 61796F75743305416C69676E07084D6F73744C6566740A53697A652E57696474 + 68050000000000000080FF3F0B53697A652E4865696768740500000000000000 + A001401453697A652E506C6174666F726D44656661756C7408000A5452656374 + 616E676C6500095374796C654E616D65060A52656374616E676C653105416C69 + 676E0703546F700A46696C6C2E436F6C6F720709784646313531353135074869 + 7454657374080A53697A652E5769647468050000000000000080FF3F0B53697A + 652E486569676874050000000000000080FF3F1453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000000000 + 0A5452656374616E676C650005416C69676E07074D6F7374546F700A46696C6C + 2E436F6C6F720709784646323032303230064C6F636B65640907486974546573 + 74080A53697A652E576964746805000000000056D5AF07400B53697A652E4865 + 696768740500000000000000C803401453697A652E506C6174666F726D446566 + 61756C74080C5374726F6B652E436F6C6F720709784646313531353135000754 + 4C61796F757400095374796C654E616D65060763617074696F6E05416C69676E + 0708436F6E74656E7473064C6F636B6564090748697454657374090A53697A65 + 2E576964746805000000000056D5AF07400B53697A652E486569676874050000 + 0000000000C803401453697A652E506C6174666F726D44656661756C74080000 + 07544C61796F75740005416C69676E0706436C69656E74064C6F636B6564090C + 4D617267696E732E4C656674050000000000000080FF3F0B4D617267696E732E + 546F70050000000000000080FF3F0D4D617267696E732E526967687405000000 + 0000000080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF + 3F0A53697A652E576964746805000000000056D5AE07400B53697A652E486569 + 6768740500000000000000B803401453697A652E506C6174666F726D44656661 + 756C74080007544C61796F75740005416C69676E07044C656674064C6F636B65 + 64090A53697A652E576964746805000000000000009002400B53697A652E4865 + 696768740500000000000000B803401453697A652E506C6174666F726D446566 + 61756C7408000007544C61796F757400095374796C654E616D65060773797362 + 746E7305416C69676E0706436C69656E74064C6F636B6564090A53697A652E57 + 696474680500000000005655AA07400B53697A652E4865696768740500000000 + 000000B803401453697A652E506C6174666F726D44656661756C7408000C5453 + 70656564427574746F6E00095374796C654E616D650605636C6F736505416C69 + 676E07055269676874064C6F636B6564090A506F736974696F6E2E5805000000 + 000056D59D07400A53697A652E57696474680500000000000000C803400B5369 + 7A652E4865696768740500000000000000B803401453697A652E506C6174666F + 726D44656661756C74080B5374796C654C6F6F6B75700610636C6F7365627574 + 746F6E7374796C65000005545465787400095374796C654E616D650605746974 + 6C6505416C69676E0706436C69656E74064C6F636B6564090748697454657374 + 080A53697A652E576964746805000000000056D59D07400B53697A652E486569 + 6768740500000000000000B803401453697A652E506C6174666F726D44656661 + 756C7408045465787406055469746C65165465787453657474696E67732E466F + 6E74436F6C6F720708636C615768697465000000000007544C61796F75740009 + 5374796C654E616D650606636C69656E7405416C69676E0706436C69656E7406 + 4C6F636B6564090748697454657374090A53697A652E57696474680500000000 + 0056D5AA07400B53697A652E4865696768740500000000000000950640145369 + 7A652E506C6174666F726D44656661756C7408000007544C61796F7574000953 + 74796C654E616D650606626F74746F6D05416C69676E0706426F74746F6D064C + 6F636B6564090A506F736974696F6E2E580500000000000000A001400A506F73 + 6974696F6E2E590500000000000000AE06400A53697A652E5769647468050000 + 00000056D5AA07400B53697A652E4865696768740500000000000000A0014014 + 53697A652E506C6174666F726D44656661756C7408000A5452656374616E676C + 6500095374796C654E616D6506047265637405416C69676E0706426F74746F6D + 0A46696C6C2E436F6C6F7207097846463230323032300553696465730B03546F + 7006426F74746F6D000A53697A652E576964746805000000000056D5AA07400B + 53697A652E4865696768740500000000000000A001401453697A652E506C6174 + 666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846463135 + 31353135000000005450463007544C61796F757400095374796C654E616D6506 + 1177696E646F77626F726465727374796C6505416C69676E070643656E746572 + 0A53697A652E576964746805000000000056D5AF07400B53697A652E48656967 + 68740500000000000000B306401453697A652E506C6174666F726D4465666175 + 6C74080756697369626C6508000A5452656374616E676C6500095374796C654E + 616D6506046D61736B05416C69676E0708436F6E74656E74730A46696C6C2E43 + 6F6C6F7207097846463130313031300A53697A652E5769647468050000000000 + 56D5AF07400B53697A652E4865696768740500000000000000B306401453697A + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E650756697369626C6508000007544C61796F757400095374796C654E61 + 6D6506046C65667405416C69676E07084D6F73744C656674064C6F636B656409 + 0A506F736974696F6E2E590500000000000000F003400A53697A652E57696474 + 680500000000000000A001400B53697A652E4865696768740500000000000000 + 9506401453697A652E506C6174666F726D44656661756C7408000A5452656374 + 616E676C650005416C69676E07084D6F73744C6566740A46696C6C2E436F6C6F + 7207097846463230323032300748697454657374080553696465730B044C6566 + 74055269676874000A53697A652E57696474680500000000000000A001400B53 + 697A652E48656967687405000000000000009006401453697A652E506C617466 + 6F726D44656661756C74080C5374726F6B652E436F6C6F720709784646313531 + 35313500000A5452656374616E676C6500095374796C654E616D65060A526563 + 74616E676C653105416C69676E070A4D6F7374426F74746F6D13456E61626C65 + 44726167486967686C69676874080A46696C6C2E436F6C6F7207097846463230 + 323032300748697454657374080A506F736974696F6E2E590500000000000000 + 9006400553696465730B044C65667406426F74746F6D000A53697A652E576964 + 74680500000000000000A001400B53697A652E48656967687405000000000000 + 00A001401453697A652E506C6174666F726D44656661756C74080C5374726F6B + 652E436F6C6F7207097846463135313531350007544C61796F75740009537479 + 6C654E616D6506074C61796F75743305416C69676E07094D6F73745269676874 + 0A506F736974696F6E2E5805000000000000008001400A53697A652E57696474 + 68050000000000000080FF3F0B53697A652E4865696768740500000000000000 + A001401453697A652E506C6174666F726D44656661756C7408000A5452656374 + 616E676C6500095374796C654E616D65060A52656374616E676C653105416C69 + 676E0703546F700A46696C6C2E436F6C6F720709784646313531353135074869 + 7454657374080A53697A652E5769647468050000000000000080FF3F0B53697A + 652E486569676874050000000000000080FF3F1453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000000000 + 07544C61796F757400095374796C654E616D650605726967687405416C69676E + 07094D6F73745269676874064C6F636B6564090A506F736974696F6E2E580500 + 000000005655AD07400A506F736974696F6E2E590500000000000000F003400A + 53697A652E57696474680500000000000000A001400B53697A652E4865696768 + 7405000000000000009506401453697A652E506C6174666F726D44656661756C + 7408000A5452656374616E676C650005416C69676E07094D6F73745269676874 + 0A46696C6C2E436F6C6F72070978464632303230323007486974546573740805 + 53696465730B044C656674055269676874000A53697A652E5769647468050000 + 0000000000A001400B53697A652E486569676874050000000000000090064014 + 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C + 6F72070978464631353135313500000A5452656374616E676C6500095374796C + 654E616D65060A52656374616E676C653105416C69676E070A4D6F7374426F74 + 746F6D13456E61626C6544726167486967686C69676874080A46696C6C2E436F + 6C6F7207097846463230323032300748697454657374080A506F736974696F6E + 2E5905000000000000009006400553696465730B06426F74746F6D0552696768 + 74000A53697A652E57696474680500000000000000A001400B53697A652E4865 + 696768740500000000000000A001401453697A652E506C6174666F726D446566 + 61756C74080C5374726F6B652E436F6C6F720709784646313531353135000754 + 4C61796F757400095374796C654E616D6506074C61796F75743305416C69676E + 07084D6F73744C6566740A53697A652E5769647468050000000000000080FF3F + 0B53697A652E4865696768740500000000000000A001401453697A652E506C61 + 74666F726D44656661756C7408000A5452656374616E676C6500095374796C65 + 4E616D65060A52656374616E676C653105416C69676E0703546F700A46696C6C + 2E436F6C6F7207097846463135313531350748697454657374080A53697A652E + 5769647468050000000000000080FF3F0B53697A652E48656967687405000000 + 0000000080FF3F1453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E6500000000000A5452656374616E676C6500 + 05416C69676E07074D6F7374546F700A46696C6C2E436F6C6F72070978464632 + 3032303230064C6F636B6564090748697454657374080A53697A652E57696474 + 6805000000000056D5AF07400B53697A652E4865696768740500000000000000 + F003401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 + 2E436F6C6F7207097846463135313531350007544C61796F757400095374796C + 654E616D65060763617074696F6E05416C69676E0708436F6E74656E7473064C + 6F636B6564090748697454657374090A53697A652E5769647468050000000000 + 56D5AF07400B53697A652E4865696768740500000000000000F003401453697A + 652E506C6174666F726D44656661756C7408000007544C61796F75740005416C + 69676E0706436C69656E74064C6F636B6564090C4D617267696E732E4C656674 + 050000000000000080FF3F0B4D617267696E732E546F70050000000000000080 + FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D617267 + 696E732E426F74746F6D050000000000000080FF3F0A53697A652E5769647468 + 05000000000056D5AE07400B53697A652E4865696768740500000000000000E0 + 03401453697A652E506C6174666F726D44656661756C74080007544C61796F75 + 740005416C69676E07044C656674064C6F636B6564090A53697A652E57696474 + 6805000000000000009002400B53697A652E4865696768740500000000000000 + E003401453697A652E506C6174666F726D44656661756C7408000007544C6179 + 6F757400095374796C654E616D65060469636F6E064C6F636B6564090A506F73 + 6974696F6E2E5805000000000000009002400A506F736974696F6E2E59050000 + 0000000000E001400A53697A652E57696474680500000000000000C803400B53 + 697A652E4865696768740500000000000000A803401453697A652E506C617466 + 6F726D44656661756C7408000007544C61796F757400095374796C654E616D65 + 060773797362746E7305416C69676E0706436C69656E74064C6F636B6564090A + 53697A652E57696474680500000000005655AA07400B53697A652E4865696768 + 740500000000000000E003401453697A652E506C6174666F726D44656661756C + 7408000C545370656564427574746F6E00095374796C654E616D650605636C6F + 736505416C69676E07055269676874064C6F636B6564090A506F736974696F6E + 2E5805000000000056559107400A53697A652E57696474680500000000000000 + C804400B53697A652E4865696768740500000000000000E003401453697A652E + 506C6174666F726D44656661756C74080B5374796C654C6F6F6B75700610636C + 6F7365627574746F6E7374796C6500000C545370656564427574746F6E000953 + 74796C654E616D6506036D617805416C69676E07055269676874064C6F636B65 + 64090A506F736974696F6E2E5805000000000056558207400A53697A652E5769 + 6474680500000000000000F003400B53697A652E486569676874050000000000 + 0000E003401453697A652E506C6174666F726D44656661756C74080B5374796C + 654C6F6F6B7570060E6D6178627574746F6E7374796C6500000C545370656564 + 427574746F6E00095374796C654E616D65060372657305416C69676E07055269 + 676874064C6F636B6564090A506F736974696F6E2E58050000000000ACAAE606 + 400A53697A652E57696474680500000000000000F003400B53697A652E486569 + 6768740500000000000000E003401453697A652E506C6174666F726D44656661 + 756C74080B5374796C654C6F6F6B7570060E726573627574746F6E7374796C65 + 00000C545370656564427574746F6E00095374796C654E616D6506036D696E05 + 416C69676E07055269676874064C6F636B6564090A506F736974696F6E2E5805 + 0000000000ACAAC806400A53697A652E57696474680500000000000000F00340 + 0B53697A652E4865696768740500000000000000E003401453697A652E506C61 + 74666F726D44656661756C74080B5374796C654C6F6F6B7570060E6D696E6275 + 74746F6E7374796C65000005545465787400095374796C654E616D6506057469 + 746C6505416C69676E0706436C69656E74064C6F636B65640907486974546573 + 74080A53697A652E5769647468050000000000ACAAC806400B53697A652E4865 + 696768740500000000000000E003401453697A652E506C6174666F726D446566 + 61756C7408045465787406055469746C65165465787453657474696E67732E46 + 6F6E74436F6C6F720708636C615768697465000000000007544C61796F757400 + 095374796C654E616D650606636C69656E7405416C69676E0706436C69656E74 + 064C6F636B6564090748697454657374090A53697A652E576964746805000000 + 000056D5AA07400B53697A652E48656967687405000000000000009006401453 + 697A652E506C6174666F726D44656661756C7408000007544C61796F75740009 + 5374796C654E616D650606626F74746F6D05416C69676E0706426F74746F6D06 + 4C6F636B6564090A506F736974696F6E2E580500000000000000A001400A506F + 736974696F6E2E590500000000000000AE06400A53697A652E57696474680500 + 0000000056D5AA07400B53697A652E4865696768740500000000000000A00140 + 1453697A652E506C6174666F726D44656661756C7408000A5452656374616E67 + 6C6500095374796C654E616D6506047265637405416C69676E0706426F74746F + 6D0A46696C6C2E436F6C6F720709784646323032303230074869745465737408 + 0553696465730B03546F7006426F74746F6D000A53697A652E57696474680500 + 0000000056D5AA07400B53697A652E4865696768740500000000000000A00140 + 1453697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F + 6C6F720709784646313531353135000000005450463007544C61796F75740009 + 5374796C654E616D650610726164696F627574746F6E7374796C6505416C6967 + 6E070643656E7465720A53697A652E57696474680500000000000000F205400B + 53697A652E4865696768740500000000000000A803401453697A652E506C6174 + 666F726D44656661756C74080756697369626C65080007544C61796F75740005 + 416C69676E07044C6566740A53697A652E57696474680500000000000000A803 + 400B53697A652E4865696768740500000000000000A803401453697A652E506C + 6174666F726D44656661756C7408000854456C6C6970736500095374796C654E + 616D65060A6261636B67726F756E6405416C69676E070643656E7465720A4669 + 6C6C2E436F6C6F720709784646323032303230064C6F636B6564090748697454 + 657374080A53697A652E57696474680500000000000000F002400B53697A652E + 4865696768740500000000000000F002401453697A652E506C6174666F726D44 + 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313500 + 0854456C6C6970736500095374796C654E616D650609636865636B6D61726B05 + 416C69676E0706436C69656E740A46696C6C2E436F6C6F720709784646324138 + 324532064C6F636B656409074869745465737408074F70616369747905000000 + 000000000000000C4D617267696E732E4C65667405000000000000008000400B + 4D617267696E732E546F7005000000000000008000400D4D617267696E732E52 + 6967687405000000000000008000400E4D617267696E732E426F74746F6D0500 + 0000000000008000400A53697A652E57696474680500000000000000B002400B + 53697A652E4865696768740500000000000000B002401453697A652E506C6174 + 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F + 54466C6F6174416E696D6174696F6E00095374796C654E616D65061A6F706163 + 697479436865636B6D61726B416E696D6174696F6E31084475726174696F6E05 + 000000000000000000000C50726F70657274794E616D6506074F706163697479 + 0A537461727456616C756505000000000000000000000953746F7056616C7565 + 050000000000000080FF3F0754726967676572060E4973436865636B65643D74 + 7275650E54726967676572496E7665727365060F4973436865636B65643D6661 + 6C73650000000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 65061A726164696F627574746F6E436F6C6F72416E696D6174696F6E31084475 + 726174696F6E050000000000000000000007496E7665727365090C50726F7065 + 7274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709 + 7846463230323032300953746F7056616C756507097846463430343034300754 + 726967676572061049734D6F7573654F7665723D747275650E54726967676572 + 496E7665727365061149734D6F7573654F7665723D66616C736500000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E + 696D6174696F6E315374796C65084475726174696F6E05000000000000000000 + 000C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A537461 + 727456616C756507097846463135313531350953746F7056616C756507097846 + 463241383245320754726967676572060E4973436865636B65643D747275650E + 54726967676572496E7665727365060F4973436865636B65643D66616C736500 + 00000005545465787400095374796C654E616D6506047465787405416C69676E + 0706436C69656E74064C6F636B6564090748697454657374080A53697A652E57 + 696474680500000000000000C805400B53697A652E4865696768740500000000 + 000000A803401453697A652E506C6174666F726D44656661756C740816546578 + 7453657474696E67732E466F6E74436F6C6F720708636C615768697465000000 + 5450463007544C61796F757400095374796C654E616D650618756C63656E7465 + 72726164696F627574746F6E7374796C6505416C69676E070643656E7465720A + 53697A652E57696474680500000000005655FB05400B53697A652E4865696768 + 740500000000000000A004401453697A652E506C6174666F726D44656661756C + 74080756697369626C65080007544C61796F75740005416C69676E0706426F74 + 746F6D0A506F736974696F6E2E5905000000000000008804400A53697A652E57 + 696474680500000000005655FB05400B53697A652E4865696768740500000000 + 000000C001401453697A652E506C6174666F726D44656661756C7408000A5452 + 656374616E676C6500095374796C654E616D65060A6261636B67726F756E6405 + 416C69676E0708436F6E74656E747307436F726E6572730B07546F704C656674 + 0A426F74746F6D4C656674000A46696C6C2E436F6C6F72070978464632303230 + 3230064C6F636B6564090748697454657374080A53697A652E57696474680500 + 000000005655FB05400B53697A652E4865696768740500000000000000C00140 + 1453697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F + 6C6F720709784646313531353135000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D6506216261636B67726F756E64556C427574746F6E436F + 6C6F72416E696D6174696F6E31084475726174696F6E05000000000000000000 + 0007496E7665727365090C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463230323032300953746F705661 + 6C756507097846463430343034300754726967676572061049734D6F7573654F + 7665723D747275650E54726967676572496E7665727365061149734D6F757365 + 4F7665723D66616C736500000A5452656374616E676C6500095374796C654E61 + 6D650609636865636B6D61726B05416C69676E0708436F6E74656E747307436F + 726E6572730B07546F704C6566740A426F74746F6D4C656674000A46696C6C2E + 436F6C6F720709784646324138324532064C6F636B6564090748697454657374 + 08074F70616369747905000000000000000000000C4D617267696E732E4C6566 + 74050000000000000080FF3F0B4D617267696E732E546F700500000000000000 + 80FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D6172 + 67696E732E426F74746F6D050000000000000080FF3F0A53697A652E57696474 + 680500000000005655F705400B53697A652E4865696768740500000000000000 + 8001401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E00095374 + 796C654E616D65061A636865636B6D61726B4F706163697479416E696D617469 + 6F6E31084475726174696F6E05000000000000000000000C50726F7065727479 + 4E616D6506074F7061636974790A537461727456616C75650500000000000000 + 0000000953746F7056616C7565050000000000000080FF3F0754726967676572 + 060E4973436865636B65643D747275650E54726967676572496E766572736506 + 0F4973436865636B65643D66616C736500000000000554546578740009537479 + 6C654E616D6506047465787405416C69676E0706436C69656E74064C6F636B65 + 64090748697454657374080A53697A652E57696474680500000000005655FB05 + 400B53697A652E48656967687405000000000000008804401453697A652E506C + 6174666F726D44656661756C7408165465787453657474696E67732E466F6E74 + 436F6C6F720708636C6157686974650000005450463007544C61796F75740009 + 5374796C654E616D650617756C7269676874726164696F627574746F6E737479 + 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 + 005655FB05400B53697A652E4865696768740500000000000000A00440145369 + 7A652E506C6174666F726D44656661756C74080756697369626C65080007544C + 61796F75740005416C69676E0706426F74746F6D0A506F736974696F6E2E5905 + 000000000000008804400A53697A652E57696474680500000000005655FB0540 + 0B53697A652E4865696768740500000000000000C001401453697A652E506C61 + 74666F726D44656661756C7408000A5452656374616E676C6500095374796C65 + 4E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E7473 + 07436F726E6572730B08546F7052696768740B426F74746F6D5269676874000A + 46696C6C2E436F6C6F720709784646323032303230064C6F636B656409074869 + 7454657374080A53697A652E57696474680500000000005655FB05400B53697A + 652E4865696768740500000000000000C001401453697A652E506C6174666F72 + 6D44656661756C74080C5374726F6B652E436F6C6F7207097846463135313531 + 35000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65062162 + 61636B67726F756E64556C427574746F6E436F6C6F72416E696D6174696F6E31 + 084475726174696F6E050000000000000000000007496E7665727365090C5072 + 6F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75 + 6507097846463230323032300953746F7056616C756507097846463430343034 + 300754726967676572061049734D6F7573654F7665723D747275650E54726967 + 676572496E7665727365061149734D6F7573654F7665723D66616C736500000A + 5452656374616E676C6500095374796C654E616D650609636865636B6D61726B + 05416C69676E0708436F6E74656E747307436F726E6572730B08546F70526967 + 68740B426F74746F6D5269676874000A46696C6C2E436F6C6F72070978464632 + 4138324532064C6F636B656409074869745465737408074F7061636974790500 + 0000000000000000000C4D617267696E732E4C656674050000000000000080FF + 3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E73 + 2E5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D + 050000000000000080FF3F0A53697A652E57696474680500000000005655F705 + 400B53697A652E48656967687405000000000000008001401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 000F54466C6F6174416E696D6174696F6E00095374796C654E616D65061A6368 + 65636B6D61726B4F706163697479416E696D6174696F6E31084475726174696F + 6E05000000000000000000000C50726F70657274794E616D6506074F70616369 + 74790A537461727456616C756505000000000000000000000953746F7056616C + 7565050000000000000080FF3F0754726967676572060E4973436865636B6564 + 3D747275650E54726967676572496E7665727365060F4973436865636B65643D + 66616C7365000000000005545465787400095374796C654E616D650604746578 + 7405416C69676E0706436C69656E74064C6F636B656409074869745465737408 + 0A53697A652E57696474680500000000005655FB05400B53697A652E48656967 + 687405000000000000008804401453697A652E506C6174666F726D4465666175 + 6C7408165465787453657474696E67732E466F6E74436F6C6F720708636C6157 + 686974650000005450463007544C61796F757400095374796C654E616D650616 + 756C6C656674726164696F627574746F6E7374796C6505416C69676E07064365 + 6E7465720A53697A652E57696474680500000000005655FB05400B53697A652E + 4865696768740500000000000000A004401453697A652E506C6174666F726D44 + 656661756C74080756697369626C65080007544C61796F75740005416C69676E + 0706426F74746F6D0A506F736974696F6E2E5905000000000000008804400A53 + 697A652E57696474680500000000005655FB05400B53697A652E486569676874 + 0500000000000000C001401453697A652E506C6174666F726D44656661756C74 + 08000A5452656374616E676C6500095374796C654E616D65060A6261636B6772 + 6F756E6405416C69676E0708436F6E74656E747307436F726E6572730B07546F + 704C6566740A426F74746F6D4C656674000A46696C6C2E436F6C6F7207097846 + 46323032303230064C6F636B6564090748697454657374080A53697A652E5769 + 6474680500000000005655FB05400B53697A652E486569676874050000000000 + 0000C001401453697A652E506C6174666F726D44656661756C74080C5374726F + 6B652E436F6C6F720709784646313531353135000F54436F6C6F72416E696D61 + 74696F6E00095374796C654E616D6506216261636B67726F756E64556C427574 + 746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E0500000000 + 00000000000007496E7665727365090C50726F70657274794E616D65060A4669 + 6C6C2E436F6C6F720A537461727456616C756507097846463230323032300953 + 746F7056616C756507097846463430343034300754726967676572061049734D + 6F7573654F7665723D747275650E54726967676572496E766572736506114973 + 4D6F7573654F7665723D66616C736500000A5452656374616E676C6500095374 + 796C654E616D650609636865636B6D61726B05416C69676E0708436F6E74656E + 747307436F726E6572730B07546F704C6566740A426F74746F6D4C656674000A + 46696C6C2E436F6C6F720709784646324138324532064C6F636B656409074869 + 745465737408074F70616369747905000000000000000000000C4D617267696E + 732E4C656674050000000000000080FF3F0B4D617267696E732E546F70050000 + 000000000080FF3F0D4D617267696E732E5269676874050000000000000080FF + 3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A65 + 2E57696474680500000000005655F705400B53697A652E486569676874050000 + 00000000008001401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F + 6E00095374796C654E616D65061A636865636B6D61726B4F706163697479416E + 696D6174696F6E31084475726174696F6E05000000000000000000000C50726F + 70657274794E616D6506074F7061636974790A537461727456616C7565050000 + 00000000000000000953746F7056616C7565050000000000000080FF3F075472 + 6967676572060E4973436865636B65643D747275650E54726967676572496E76 + 65727365060F4973436865636B65643D66616C73650000000000055454657874 + 00095374796C654E616D6506047465787405416C69676E0706436C69656E7406 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 005655FB05400B53697A652E4865696768740500000000000000880440145369 + 7A652E506C6174666F726D44656661756C7408165465787453657474696E6773 + 2E466F6E74436F6C6F720708636C6157686974650000005450463007544C6179 + 6F757400095374796C654E616D65061070726F67726573736261727374796C65 + 05416C69676E070643656E7465720A53697A652E576964746805000000000033 + 338505400B53697A652E4865696768740500000000009999E104401453697A65 + 2E506C6174666F726D44656661756C74080756697369626C6508000A54526563 + 74616E676C6500095374796C654E616D65060668747261636B05416C69676E07 + 08436F6E74656E74730A46696C6C2E436F6C6F72070978464632303230323006 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 0033338505400B53697A652E4865696768740500000000009999E10440145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 0709784646313531353135000A5452656374616E676C6500095374796C654E61 + 6D65060A68696E64696361746F7205416C69676E07044C6566740A46696C6C2E + 436F6C6F720709784646324138324532064C6F636B6564090748697454657374 + 080C4D617267696E732E4C656674050000000000000080FF3F0B4D617267696E + 732E546F70050000000000000080FF3F0D4D617267696E732E52696768740500 + 00000000000080FF3F0E4D617267696E732E426F74746F6D0500000000000000 + 80FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F73697469 + 6F6E2E59050000000000000080FF3F0A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000009999D904401453697A + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E650000000A5452656374616E676C6500095374796C654E616D65060676 + 747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72 + 0709784646323032303230064C6F636B6564090748697454657374080A53697A + 652E576964746805000000000033338505400B53697A652E4865696768740500 + 000000009999E104401453697A652E506C6174666F726D44656661756C74080C + 5374726F6B652E436F6C6F720709784646313531353135000A5452656374616E + 676C6500095374796C654E616D65060A76696E64696361746F7205416C69676E + 0706426F74746F6D0A46696C6C2E436F6C6F720709784646324138324532064C + 6F636B6564090748697454657374080C4D617267696E732E4C65667405000000 + 0000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D + 617267696E732E5269676874050000000000000080FF3F0E4D617267696E732E + 426F74746F6D050000000000000080FF3F0A506F736974696F6E2E5805000000 + 0000000080FF3F0A506F736974696F6E2E5905000000000099998904400A5369 + 7A652E576964746805000000000033338105400B53697A652E48656967687405 + 00000000000000A803401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C61796F + 757400095374796C654E616D65060D657870616E6465727374796C6505416C69 + 676E070643656E7465720A53697A652E576964746805000000000000C0840740 + 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 + 74666F726D44656661756C74080756697369626C6508000A5452656374616E67 + 6C6500095374796C654E616D65060B626772656374616E676C6505416C69676E + 0708436F6E74656E74730C436C69704368696C6472656E090A46696C6C2E436F + 6C6F720709784646324432443244064C6F636B6564090748697454657374080A + 53697A652E576964746805000000000000C08407400B53697A652E4865696768 + 740500000000000000C803401453697A652E506C6174666F726D44656661756C + 74080C5374726F6B652E436F6C6F7207097846463135313531350007544C6179 + 6F757400095374796C654E616D6506074C61796F75743305416C69676E070354 + 6F700A53697A652E576964746805000000000000C08407400B53697A652E4865 + 696768740500000000000000C803401453697A652E506C6174666F726D446566 + 61756C74080007544C61796F757400095374796C654E616D6506074C61796F75 + 743405416C69676E0708436F6E74656E74730A53697A652E5769647468050000 + 00000000C08407400B53697A652E4865696768740500000000000000C8034014 + 53697A652E506C6174666F726D44656661756C7408000A5452656374616E676C + 6500095374796C654E616D65060A52656374616E676C653205416C69676E0708 + 436F6E74656E74730A46696C6C2E436F6C6F720709784646323532353235064C + 6F636B6564090748697454657374080A53697A652E5769647468050000000000 + 00C08407400B53697A652E4865696768740500000000000000C803401453697A + 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 + 0978464631353135313500000A5452656374616E676C6500095374796C654E61 + 6D65060A52656374616E676C653105416C69676E0708436F6E74656E74730A46 + 696C6C2E436F6C6F720709784646313531353135064C6F636B65640907486974 + 54657374080A53697A652E576964746805000000000000C08407400B53697A65 + 2E4865696768740500000000000000C803401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F + 6174416E696D6174696F6E00095374796C654E616D650614466C6F6174416E69 + 6D6174696F6E315374796C65084475726174696F6E050000000000CDCCCCFB3F + 0D496E746572706F6C6174696F6E070843697263756C61720C50726F70657274 + 794E616D6506075363616C652E580A537461727456616C756505000000000000 + 0080FF3F0953746F7056616C7565050000000000000000000007547269676765 + 72060F4973457870616E6465643D747275650E54726967676572496E76657273 + 6506104973457870616E6465643D66616C73650000000007544C61796F757400 + 095374796C654E616D6506074C61796F75743305416C69676E0708436F6E7465 + 6E74730A53697A652E576964746805000000000000C08407400B53697A652E48 + 65696768740500000000000000C803401453697A652E506C6174666F726D4465 + 6661756C74080005545465787400095374796C654E616D650604746578740541 + 6C69676E07044C656674084175746F53697A65090A436C6970506172656E7409 + 064C6F636B6564090748697454657374080C4D617267696E732E4C6566740500 + 000000000000A002400A506F736974696F6E2E580500000000000000A002400A + 53697A652E576964746805000000000000B8C703400B53697A652E4865696768 + 740500000000000000C803401453697A652E506C6174666F726D44656661756C + 7408165465787453657474696E67732E466F6E74436F6C6F720708636C615768 + 697465165465787453657474696E67732E486F727A416C69676E07074C656164 + 696E670000000F54457870616E646572427574746F6E00095374796C654E616D + 650606627574746F6E05416C69676E07055269676874064C6F636B6564090A50 + 6F736974696F6E2E580500000000000080F506400A53697A652E576964746805 + 00000000000000A003400B53697A652E4865696768740500000000000000C803 + 401453697A652E506C6174666F726D44656661756C7408000000000054504630 + 07544C61796F757400095374796C654E616D650613657870616E646572627574 + 746F6E7374796C6505416C69676E070643656E7465720B4D617267696E732E54 + 6F70050000000000000080FF3F0A53697A652E57696474680500000000000000 + B003400B53697A652E4865696768740500000000000000B003401453697A652E + 506C6174666F726D44656661756C74080756697369626C650800055450617468 + 00095374796C654E616D650605506174683105416C69676E070643656E746572 + 09446174612E506174680A3400000004000000000000000000C8420000C84201 + 000000000096430000C842010000000000484300009643030000000000C84200 + 00C8420A46696C6C2E436F6C6F720708636C6157686974650748697454657374 + 080D526F746174696F6E416E676C650500000000000000B405400A53697A652E + 57696474680500000000000000A002400B53697A652E48656967687405000000 + 00000000C001401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E + 00095374796C654E616D650614466C6F6174416E696D6174696F6E315374796C + 65084475726174696F6E050000000000CDCCCCFB3F0D496E746572706F6C6174 + 696F6E070843697263756C61720C50726F70657274794E616D65060D526F7461 + 74696F6E416E676C650A537461727456616C75650500000000000000B4054009 + 53746F7056616C756505000000000000000000000754726967676572060F4973 + 457870616E6465643D747275650E54726967676572496E766572736506104973 + 457870616E6465643D66616C7365000000005450463007544C61796F75740009 + 5374796C654E616D650615657870616E646572636865636B626F787374796C65 + 05416C69676E070643656E7465720A53697A652E576964746805000000000000 + 008406400B53697A652E48656967687405000000000000008404401453697A65 + 2E506C6174666F726D44656661756C74080756697369626C65080007544C6179 + 6F75740005416C69676E07044C6566740A53697A652E57696474680500000000 + 000000C003400B53697A652E4865696768740500000000000000840440145369 + 7A652E506C6174666F726D44656661756C7408000554506174680005416C6967 + 6E0706436C69656E7409446174612E506174680AD80100002700000000000000 + FEC8BA4402E79244020000002592AD4402E79244020000006D5BA544FEB09E44 + 020000006D5BA544FEB09E440200000093A4A4446A0C9F44020000004A80AC44 + FC79AA4402000000046EBA44FC79AA44020000004A00C844FC79AA4402000000 + 0080CF44FEB09E44020000000080CF44FEB09E44020000000080CF44FEB09E44 + 020000004C5BC84402E7924402000000FEC8BA4402E7924400000000FE88BA44 + FE30974402000000B876BF44FE309744020000000277C344EEA09A4402000000 + 0277C34404DE9E44020000000277C344121BA34402000000B876BF44008CA644 + 02000000FE88BA44008CA644020000004C9BB544008CA64402000000009CB144 + 121BA34402000000009CB14404DE9E4402000000009CB144EEA09A4402000000 + 4C9BB544FE30974402000000FE88BA44FE309744000000000080BA44045E9B44 + 02000000146EB844045E9B440200000000C0B64454F79C440200000000C0B644 + 00F09E440200000000C0B644ACE8A04402000000146EB844FC81A24402000000 + 0080BA44FC81A24402000000EC91BC44FC81A244020000000040BE44ACE8A044 + 020000000040BE4400F09E44020000000040BE4454F79C4402000000EC91BC44 + 045E9B44020000000080BA44045E9B440A46696C6C2E436F6C6F720709783630 + 3030303030300748697454657374080C4D617267696E732E4C65667405000000 + 000000008000400B4D617267696E732E546F7005000000000000008000400D4D + 617267696E732E526967687405000000000000008000400E4D617267696E732E + 426F74746F6D05000000000000008000400A53697A652E576964746805000000 + 00000000A003400B53697A652E4865696768740500000000000000E803401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E6508577261704D6F64650703466974000F54436F6C6F72416E696D + 6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F7065 + 7274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709 + 7836303030303030300953746F7056616C75650708636C61426C61636B075472 + 6967676572060E4973436865636B65643D7472756500000F54436F6C6F72416E + 696D6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F + 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 + 0708636C61426C61636B0953746F7056616C7565070978363030303030303007 + 54726967676572060F4973436865636B65643D66616C73650000000005545465 + 787400095374796C654E616D6506047465787405416C69676E0706436C69656E + 74064C6F636B6564090748697454657374080C4D617267696E732E4C65667405 + 000000000000008002400B4D617267696E732E546F7005000000000000008000 + 400D4D617267696E732E5269676874050000000000000080FF3F0A53697A652E + 57696474680500000000000000C605400B53697A652E48656967687405000000 + 00000000F803401453697A652E506C6174666F726D44656661756C7408165465 + 787453657474696E67732E466F6E74436F6C6F72070978464645454545454516 + 5465787453657474696E67732E486F727A416C69676E07074C656164696E6700 + 00005450463007544C61796F757400095374796C654E616D65060E6C6162656C + 66696C6C7374796C6505416C69676E070643656E7465720A53697A652E576964 + 74680500000000000000C805400B53697A652E48656967687405000000000000 + 00C803401453697A652E506C6174666F726D44656661756C7408075669736962 + 6C6508000A5452656374616E676C6500095374796C654E616D65060A52656374 + 616E676C653105416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F + 7207097846463135313531350A53697A652E57696474680500000000000000C8 + 05400B53697A652E4865696768740500000000000000C803401453697A652E50 + 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E + 65000005545465787400095374796C654E616D6506047465787405416C69676E + 0708436F6E74656E74730748697454657374080A53697A652E57696474680500 + 000000000000C805400B53697A652E4865696768740500000000000000C80340 + 1453697A652E506C6174666F726D44656661756C740816546578745365747469 + 6E67732E466F6E74436F6C6F720708636C615768697465000000545046300754 + 4C61796F757400095374796C654E616D650613636F6D626F656469746572726F + 727374796C6505416C69676E070643656E7465720A53697A652E576964746805 + 00000000000000C805400B53697A652E4865696768740500000000000000C803 + 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 + 000C5442727573684F626A65637400095374796C654E616D65060A666F726567 + 726F756E6400000B54466F6E744F626A65637400095374796C654E616D650604 + 666F6E7409466F6E742E53697A650500000000000000D00240000007544C6179 + 6F757400095374796C654E616D65060A6261636B67726F756E6405416C69676E + 0708436F6E74656E74730A53697A652E57696474680500000000000000C80540 + 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 + 74666F726D44656661756C7408000A5452656374616E676C6500095374796C65 + 4E616D65060A52656374616E676C653105416C69676E0706436C69656E740A46 + 696C6C2E436F6C6F7207097846463230323032300748697454657374080A5369 + 7A652E57696474680500000000000000C805400B53697A652E48656967687405 + 00000000000000C803401453697A652E506C6174666F726D44656661756C7408 + 0C5374726F6B652E436F6C6F720709784646323032303230000F54436F6C6F72 + 416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D61 + 74696F6E315374796C65084475726174696F6E05000000000000000000000749 + 6E7665727365090C50726F70657274794E616D65060C5374726F6B652E436F6C + 6F720A537461727456616C756507097846463230323032300953746F7056616C + 756507097846463430343034300754726967676572062049734D6F7573654F76 + 65723D747275653B4973466F63757365643D66616C73650E5472696767657249 + 6E7665727365062149734D6F7573654F7665723D66616C73653B4973466F6375 + 7365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009537479 + 6C654E616D650614436F6C6F72416E696D6174696F6E325374796C6508447572 + 6174696F6E050000000000000000000007496E7665727365090C50726F706572 + 74794E616D65060C5374726F6B652E436F6C6F720A537461727456616C756507 + 097846463430343034300953746F7056616C7565070978464645323241324107 + 54726967676572061F49734D6F7573654F7665723D747275653B4973466F6375 + 7365643D747275650E54726967676572496E7665727365062049734D6F757365 + 4F7665723D747275653B4973466F63757365643D66616C7365000007544C6179 + 6F757400095374796C654E616D6506056172726F7705416C69676E0708466974 + 52696768740B4D617267696E732E546F70050000000000000080FF3F0D4D6172 + 67696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F + 74746F6D050000000000000080FF3F0A506F736974696F6E2E58050000000000 + 5ED99705400A506F736974696F6E2E59050000000000000080FF3F0A53697A65 + 2E5769647468050000000000889AB803400B53697A652E486569676874050000 + 0000000000B803401453697A652E506C6174666F726D44656661756C7408000A + 5452656374616E676C6500095374796C654E616D65060A52656374616E676C65 + 3105416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846 + 463330333033300748697454657374080A53697A652E57696474680500000000 + 00889AB803400B53697A652E4865696768740500000000000000B80340145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650614436F6C6F72416E696D6174696F6E315374796C65084475726174696F6E + 050000000000000000000007496E7665727365090C50726F70657274794E616D + 65060A46696C6C2E436F6C6F720A537461727456616C75650709784646333033 + 3033300953746F7056616C756507097846463430343034300754726967676572 + 062049734D6F7573654F7665723D747275653B4973466F63757365643D66616C + 73650E54726967676572496E7665727365062149734D6F7573654F7665723D66 + 616C73653B4973466F63757365643D66616C736500000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F + 6E325374796C65084475726174696F6E05000000000000000000000C50726F70 + 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 + 097846463430343034300953746F7056616C7565070978464639433137313707 + 54726967676572061F4973466F63757365643D747275653B49734D6F7573654F + 7665723D7472756500000007544C61796F757400095374796C654E616D650607 + 4C61796F75743105416C69676E070643656E7465720C4D617267696E732E4C65 + 6674050000000000000080FF3F0A53697A652E57696474680500000000000000 + A002400B53697A652E4865696768740500000000000000C001401453697A652E + 506C6174666F726D44656661756C74080005545061746800095374796C654E61 + 6D650605506174683105416C69676E0706436C69656E7409446174612E506174 + 680A3400000004000000000000000000C8420000C84201000000000096430000 + C842010000000000484300009643030000000000C8420000C8420A46696C6C2E + 436F6C6F720708636C6157686974650748697454657374080A53697A652E5769 + 6474680500000000000000A002400B53697A652E486569676874050000000000 + 0000C001401453697A652E506C6174666F726D44656661756C74080B5374726F + 6B652E4B696E6407044E6F6E650000000000000C5442727573684F626A656374 + 00095374796C654E616D65060973656C656374696F6E0B42727573682E436F6C + 6F720709783936324138324532000007544C61796F757400095374796C654E61 + 6D650607636F6E74656E7405416C69676E0706436C69656E740C4D617267696E + 732E4C65667405000000000000008000400B4D617267696E732E546F70050000 + 00000000008000400D4D617267696E732E52696768740500000000000000F003 + 400E4D617267696E732E426F74746F6D05000000000000008000400A53697A65 + 2E576964746805000000000000008805400B53697A652E486569676874050000 + 0000000000A803401453697A652E506C6174666F726D44656661756C74080000 + 005450463007544C61796F757400095374796C654E616D65061E70726F677265 + 7373626172696E64657465726D696E61626C657374796C6505416C69676E0706 + 43656E7465720A53697A652E5769647468050000000000ABAAB006400B53697A + 652E4865696768740500000000000000C003401453697A652E506C6174666F72 + 6D44656661756C74080756697369626C6508000A5452656374616E676C650009 + 5374796C654E616D65060676747261636B05416C69676E0708436F6E74656E74 + 7307456E61626C6564080A46696C6C2E436F6C6F720709784646323032303230 + 064C6F636B6564090748697454657374080A53697A652E576964746805000000 + 00000000E006400B53697A652E48656967687405000000000000009404401453 + 697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F + 7207097846463135313531350756697369626C6508000A5452656374616E676C + 6500095374796C654E616D65060A76696E64696361746F7205416C69676E0706 + 426F74746F6D0A46696C6C2E436F6C6F720709784646324138324532064C6F63 + 6B6564090748697454657374080C4D617267696E732E4C656674050000000000 + 000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D6172 + 67696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F + 74746F6D050000000000000080FF3F0A506F736974696F6E2E58050000000000 + 000080FF3F0A506F736974696F6E2E590500000000000000F002400A53697A65 + 2E57696474680500000000000000DE06400B53697A652E486569676874050000 + 0000000000A803401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E6500000007544C61796F75740009537479 + 6C654E616D65060668747261636B05416C69676E0708436F6E74656E74730A53 + 697A652E5769647468050000000000ABAAB006400B53697A652E486569676874 + 0500000000000000C003401453697A652E506C6174666F726D44656661756C74 + 08000A5452656374616E676C6500095374796C654E616D65060A6261636B6772 + 6F756E6405416C69676E0708436F6E74656E74730C436C69704368696C647265 + 6E090A46696C6C2E436F6C6F720709784646324138324532064C6F636B656409 + 0748697454657374080A53697A652E5769647468050000000000ABAAB006400B + 53697A652E4865696768740500000000000000C003401453697A652E506C6174 + 666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846463135 + 31353135000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 + 0614436F6C6F72416E696D6174696F6E315374796C6507456E61626C65640908 + 4475726174696F6E0500000000000000800140044C6F6F70090C50726F706572 + 74794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978 + 46463230323032300953746F7056616C75650709784646324138324532075472 + 6967676572060E497356697369626C653D747275650000000000545046300754 + 4C61796F757400095374796C654E616D650611616E69696E64696361746F7273 + 74796C6505416C69676E070643656E7465720756697369626C65080004544172 + 6300095374796C654E616D65060341726305416C69676E0708436F6E74656E74 + 730748697454657374080D526F746174696F6E416E676C650500000000000000 + B407400A53697A652E57696474680500000000000000C804400B53697A652E48 + 65696768740500000000000000C804401453697A652E506C6174666F726D4465 + 6661756C74080C5374726F6B652E436F6C6F720708636C615768697465105374 + 726F6B652E546869636B6E657373050000000000000080004008456E64416E67 + 6C650500000000000000B405C0000F54466C6F6174416E696D6174696F6E0009 + 5374796C654E616D650603616E6907456E61626C656409084475726174696F6E + 050000000000000080FF3F044C6F6F70090C50726F70657274794E616D65060D + 526F746174696F6E416E676C650A537461727456616C75650500000000000000 + 0000000953746F7056616C75650500000000000000B407400754726967676572 + 060E497356697369626C653D74727565000000005450463007544C61796F7574 + 00095374796C654E616D650615616E69696E64696361746F72686F727A737479 + 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 + 000040C006400B53697A652E4865696768740500000000000000800040145369 + 7A652E506C6174666F726D44656661756C74080756697369626C6508000A5452 + 656374616E676C6500095374796C654E616D65060A52656374616E676C653105 + 416C69676E0706436C69656E740C436C69704368696C6472656E090A46696C6C + 2E436F6C6F7207097846463430343034300A53697A652E576964746805000000 + 00000040C006400B53697A652E48656967687405000000000000008000401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E650005544C696E6500095374796C654E616D6506054C696E653108 + 4C696E65547970650706426F74746F6D0A53697A652E57696474680500000000 + 000000A00B400B53697A652E4865696768740500000000000000800040145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 0709784646324138324532105374726F6B652E546869636B6E65737305000000 + 000000008002400B5374726F6B652E44617368070444617368000F54466C6F61 + 74416E696D6174696F6E00095374796C654E616D650603616E6907456E61626C + 656409084475726174696F6E0500000000000000800340044C6F6F70090C5072 + 6F70657274794E616D65060A506F736974696F6E2E580A537461727456616C75 + 650500000000000000C808C00953746F7056616C756505000000000000000000 + 000754726967676572060E497356697369626C653D7472756500000000005450 + 463007544C61796F757400095374796C654E616D65060A70616E656C7374796C + 6505416C69676E070643656E7465720A53697A652E5769647468050000000000 + 0000C006400B53697A652E4865696768740500000000000000A406401453697A + 652E506C6174666F726D44656661756C74080756697369626C6508000A545265 + 6374616E676C6500095374796C654E616D65060A6261636B67726F756E640541 + 6C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846463230 + 323032300A53697A652E57696474680500000000000000C006400B53697A652E + 4865696768740500000000000000A406401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000054504630 + 07544C61796F757400095374796C654E616D65060E6C6F67627574746F6E7374 + 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 + 00000000C005400B53697A652E4865696768740500000000000000C005401453 + 697A652E506C6174666F726D44656661756C74080756697369626C6508000A54 + 52656374616E676C6500095374796C654E616D65060A6261636B67726F756E64 + 05416C69676E0706436C69656E740C436C69704368696C6472656E090A436C69 + 70506172656E74090A46696C6C2E436F6C6F7207097846463230323032300748 + 697454657374080A53697A652E57696474680500000000000000C005400B5369 + 7A652E4865696768740500000000000000C005401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F5443 + 6F6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E + 436F6C6F72416E696D6174696F6E31084475726174696F6E0500000000000000 + 0000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461 + 727456616C756507097846463230323032300953746F7056616C756507097846 + 463430343034300754726967676572063049734D6F7573654F7665723D747275 + 653B4973507265737365643D66616C73653B4973466F63757365643D66616C73 + 650E54726967676572496E7665727365063149734D6F7573654F7665723D6661 + 6C73653B4973507265737365643D66616C73653B4973466F63757365643D6661 + 6C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 + 0615627574746F6E436F6C6F72416E696D6174696F6E32084475726174696F6E + 05000000000000000000000C50726F70657274794E616D65060A46696C6C2E43 + 6F6C6F720A537461727456616C756507097846463430343034300953746F7056 + 616C756507097846463137353739430754726967676572062F49735072657373 + 65643D747275653B49734D6F7573654F7665723D747275653B4973466F637573 + 65643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C + 654E616D650615627574746F6E436F6C6F72416E696D6174696F6E3308447572 + 6174696F6E05000000000000000000000C50726F70657274794E616D65060A46 + 696C6C2E436F6C6F720A537461727456616C7565070978464632413832453209 + 53746F7056616C756507097846463137353739430754726967676572062E4973 + 507265737365643D747275653B49734D6F7573654F7665723D747275653B4973 + 466F63757365643D747275650E54726967676572496E7665727365062F497350 + 7265737365643D66616C73653B49734D6F7573654F7665723D747275653B4973 + 466F63757365643D74727565000005545061746800095374796C654E616D6506 + 05506174683105416C69676E0706436C69656E7409446174612E506174680A5C + 02000032000000000000000000A841CDCCCC40010000000000A8410000C04101 + 0000000000C03F0000C041010000000000C03F00000000010000009A99694100 + 000000010000000000A841CDCCCC40030000000000A841CDCCCC400000000000 + 009C410000F04001000000000058410000F04001000000000058410000C03F01 + 000000000040400000C03F01000000000040400000B4410100000000009C4100 + 00B4410100000000009C410000F0400300000000009C410000F0400000000000 + 0040410000F04001000000000090400000F04001000000000090400000C04001 + 000000000040410000C04001000000000040410000F040030000000000404100 + 00F0400000000000009040000010410100000000009041000010410100000000 + 0090410000284101000000000090400000284101000000000090400000104103 + 0000000000904000001041000000000000904000004041010000000000904100 + 0040410100000000009041000058410100000000009040000058410100000000 + 0090400000404103000000000090400000404100000000000090400000704101 + 0000000000904100007041010000000000904100008441010000000000904000 + 0084410100000000009040000070410300000000009040000070410000000000 + 00904000009041010000000000904100009041010000000000904100009C4101 + 0000000000904000009C41010000000000904000009041030000000000904000 + 00904100000000000070410000C04001000000333393410000C0400100000000 + 0070416666264001000000000070410000C04003000000000070410000C0400A + 46696C6C2E436F6C6F720708636C6157686974650748697454657374080C4D61 + 7267696E732E4C6566740500000000000000A002400B4D617267696E732E546F + 700500000000000000A002400D4D617267696E732E5269676874050000000000 + 0000A002400E4D617267696E732E426F74746F6D0500000000000000A002400A + 53697A652E576964746805000000000000009805400B53697A652E4865696768 + 7405000000000000009805401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F6465070346 + 6974000000005450463007544C61796F757400095374796C654E616D65061470 + 726F67726573736261726D696E697374796C6505416C69676E070643656E7465 + 720A53697A652E576964746805000000000033338505400B53697A652E486569 + 6768740500000000009999E104401453697A652E506C6174666F726D44656661 + 756C74080756697369626C6508000A5452656374616E676C6500095374796C65 + 4E616D65060668747261636B05416C69676E0708436F6E74656E74730A46696C + 6C2E436F6C6F720709784646343034303430064C6F636B656409074869745465 + 7374080A53697A652E576964746805000000000033338505400B53697A652E48 + 65696768740500000000009999E104401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E65000A545265637461 + 6E676C6500095374796C654E616D65060A68696E64696361746F7205416C6967 + 6E07044C6566740A46696C6C2E436F6C6F720709784646324138324532064C6F + 636B6564090748697454657374080A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000009999E104401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E650000000A5452656374616E676C6500095374796C654E616D6506067674 + 7261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207 + 09784646343034303430064C6F636B6564090748697454657374080A53697A65 + 2E576964746805000000000033338505400B53697A652E486569676874050000 + 0000009999E104401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E65000A5452656374616E676C6500095374 + 796C654E616D65060A76696E64696361746F7205416C69676E0706426F74746F + 6D0A46696C6C2E436F6C6F720709784646324138324532064C6F636B65640907 + 48697454657374080A506F736974696F6E2E5905000000000099998D04400A53 + 697A652E576964746805000000000033338505400B53697A652E486569676874 + 0500000000000000A803401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C6179 + 6F757400095374796C654E616D65061B7472656576696577657870616E646572 + 627574746F6E7374796C6505416C69676E070643656E7465720B4D617267696E + 732E546F70050000000000000080FF3F0A53697A652E57696474680500000000 + 000000B003400B53697A652E4865696768740500000000000000B00340145369 + 7A652E506C6174666F726D44656661756C74080756697369626C650800055450 + 61746800095374796C654E616D650605506174683105416C69676E070643656E + 74657209446174612E506174680A3400000004000000000000000000C8420000 + C84201000000000096430000C842010000000000484300009643030000000000 + C8420000C8420A46696C6C2E436F6C6F720708636C6157686974650748697454 + 657374080D526F746174696F6E416E676C650500000000000000B405C00A5369 + 7A652E57696474680500000000000000A002400B53697A652E48656967687405 + 00000000000000C001401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174 + 696F6E00095374796C654E616D650614466C6F6174416E696D6174696F6E3153 + 74796C65084475726174696F6E05000000000000000000000D496E746572706F + 6C6174696F6E070843697263756C61720C50726F70657274794E616D65060D52 + 6F746174696F6E416E676C650A537461727456616C75650500000000000000B4 + 05C00953746F7056616C75650500000000000000000000075472696767657206 + 0F4973457870616E6465643D747275650E54726967676572496E766572736506 + 104973457870616E6465643D66616C736500000000545046300A545265637461 + 6E676C6500095374796C654E616D65061174726565766965776974656D737479 + 6C6505416C69676E070643656E7465720946696C6C2E4B696E6407044E6F6E65 + 0748697454657374080553696465730B06426F74746F6D000A53697A652E5769 + 6474680500000000000000AE05400B53697A652E486569676874050000000000 + 0000A004401453697A652E506C6174666F726D44656661756C74080C5374726F + 6B652E436F6C6F7207097846463135313531350756697369626C6508000C5453 + 70656564427574746F6E00095374796C654E616D650606627574746F6E05416C + 69676E07044C6566740A53697A652E57696474680500000000000000A003400B + 53697A652E4865696768740500000000000000A004401453697A652E506C6174 + 666F726D44656661756C74080B5374796C654C6F6F6B7570061B747265657669 + 6577657870616E646572627574746F6E7374796C65000007544C61796F757400 + 05416C69676E0708436F6E74656E74730C4D617267696E732E4C656674050000 + 0000000000A003400A53697A652E576964746805000000000000008605400B53 + 697A652E4865696768740500000000000000A004401453697A652E506C617466 + 6F726D44656661756C7408000954436865636B426F7800095374796C654E616D + 650605636865636B05416C69676E07044C6566740843616E466F637573081244 + 697361626C65466F637573456666656374090A53697A652E5769647468050000 + 0000000000A003400B53697A652E4865696768740500000000000000A0044014 + 53697A652E506C6174666F726D44656661756C740800000654476C7970680009 + 5374796C654E616D65060A676C7970687374796C650C4D617267696E732E4C65 + 667405000000000000008000400B4D617267696E732E546F7005000000000000 + 0080FF3F0D4D617267696E732E526967687405000000000000008000400E4D61 + 7267696E732E426F74746F6D050000000000000080FF3F05416C69676E07044C + 6566740A506F736974696F6E2E580500000000000000B003400A506F73697469 + 6F6E2E59050000000000000080FF3F0A53697A652E5769647468050000000000 + 00008003400B53697A652E48656967687405000000000000009804401453697A + 652E506C6174666F726D44656661756C7408000005545465787400095374796C + 654E616D6506047465787405416C69676E0706436C69656E74064C6F636B6564 + 090748697454657374080A53697A652E57696474680500000000000000BC0440 + 0B53697A652E4865696768740500000000000000A004401453697A652E506C61 + 74666F726D44656661756C740804546578740604546578741654657874536574 + 74696E67732E466F6E74436F6C6F720708636C61576869746515546578745365 + 7474696E67732E576F72645772617008165465787453657474696E67732E486F + 727A416C69676E07074C656164696E670000000A5452656374616E676C650005 + 416C69676E07074669744C6566740946696C6C2E4B696E6407044E6F6E650748 + 697454657374080E4D617267696E732E426F74746F6D050000000000000080FF + 3F0553696465730B044C656674000A53697A652E576964746805000000000098 + 6F8905400B53697A652E48656967687405000000000000009C04401453697A65 + 2E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709 + 784646324138324532105374726F6B652E546869636B6E657373050000000000 + 00008000400000005450463007544C61796F757400095374796C654E616D6506 + 0D74726565766965777374796C6505416C69676E070643656E7465720A53697A + 652E57696474680500000000000000E106400B53697A652E4865696768740500 + 0000000000808107401453697A652E506C6174666F726D44656661756C740807 + 56697369626C6508000C5442727573684F626A65637400095374796C654E616D + 650618416C7465726E6174696E67526F774261636B67726F756E640B42727573 + 682E436F6C6F72070978304646464646464600000A5452656374616E676C6500 + 095374796C654E616D65060A6261636B67726F756E6405416C69676E0708436F + 6E74656E74730A46696C6C2E436F6C6F720709784646323032303230064C6F63 + 6B6564090748697454657374080C50616464696E672E4C656674050000000000 + 000080FF3F0D50616464696E672E5269676874050000000000000080FF3F0A53 + 697A652E57696474680500000000000000E106400B53697A652E486569676874 + 05000000000000808107401453697A652E506C6174666F726D44656661756C74 + 080C5374726F6B652E436F6C6F7207097846463135313531350007544C61796F + 757400095374796C654E616D650607636F6E74656E7405416C69676E0706436C + 69656E740C436C69704368696C6472656E090B4D617267696E732E546F700500 + 00000000000080FF3F0A53697A652E57696474680500000000000000CD06400B + 53697A652E4865696768740500000000000000F006401453697A652E506C6174 + 666F726D44656661756C7408000A5452656374616E676C6500095374796C654E + 616D65060973656C656374696F6E0A46696C6C2E436F6C6F7207097846463241 + 383245320748697454657374080A53697A652E57696474680500000000000000 + C804400B53697A652E4865696768740500000000000000C804401453697A652E + 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F + 6E6500000A5452656374616E676C6500095374796C654E616D650610666F6375 + 73656473656C656374696F6E0A46696C6C2E436F6C6F72070978464632413832 + 45320748697454657374080A53697A652E57696474680500000000000000C804 + 400B53697A652E4865696768740500000000000000C804401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 0B5374726F6B652E446173680703446F740000000A545363726F6C6C42617200 + 095374796C654E616D65060A767363726F6C6C62617205416C69676E07055269 + 6768740B536D616C6C4368616E676505000000000000000000000B4F7269656E + 746174696F6E0708566572746963616C0C4D617267696E732E4C656674050000 + 00000000008000400A506F736974696F6E2E580500000000000000D006400A53 + 697A652E576964746805000000000000008003400B53697A652E486569676874 + 0500000000000000F106401453697A652E506C6174666F726D44656661756C74 + 0800000A545363726F6C6C42617200095374796C654E616D65060A687363726F + 6C6C62617205416C69676E0706426F74746F6D0B536D616C6C4368616E676505 + 000000000000000000000B4F7269656E746174696F6E070A486F72697A6F6E74 + 616C0B4D617267696E732E546F7005000000000000008000400A506F73697469 + 6F6E2E58050000000000000080FF3F0A506F736974696F6E2E59050000000000 + 0000F306400A53697A652E57696474680500000000000000DF06400B53697A65 + 2E48656967687405000000000000008003401453697A652E506C6174666F726D + 44656661756C740800000F54536D616C6C5363726F6C6C42617200095374796C + 654E616D65060F76736D616C6C7363726F6C6C62617205416C69676E07055269 + 6768740B536D616C6C4368616E676505000000000000000000000B4F7269656E + 746174696F6E0708566572746963616C0C4D617267696E732E4C656674050000 + 00000000008000400A506F736974696F6E2E580500000000000000C605400A50 + 6F736974696F6E2E5905000000000000008000400A53697A652E576964746805 + 000000000000008002400B53697A652E48656967687405000000000000008002 + 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 + 00000F54536D616C6C5363726F6C6C42617200095374796C654E616D65060F68 + 736D616C6C7363726F6C6C62617205416C69676E0706426F74746F6D0B536D61 + 6C6C4368616E676505000000000000000000000B4F7269656E746174696F6E07 + 0A486F72697A6F6E74616C0B4D617267696E732E546F70050000000000000080 + 00400A506F736974696F6E2E5805000000000000008000400A506F736974696F + 6E2E590500000000000000E205400A53697A652E576964746805000000000000 + 009606400B53697A652E48656967687405000000000000008002401453697A65 + 2E506C6174666F726D44656661756C74080756697369626C6508000000005450 + 463007544C61796F757400095374796C654E616D650619616374696F6E746F6F + 6C627574746F6E6D756C74697669657705416C69676E070643656E7465720A53 + 697A652E57696474680500000000000000C805400B53697A652E486569676874 + 0500000000000000C804401453697A652E506C6174666F726D44656661756C74 + 080756697369626C65080B46697865644865696768740232000654476C797068 + 00095374796C654E616D65060A676C7970687374796C650C4D617267696E732E + 4C65667405000000000000009002400B4D617267696E732E546F700500000000 + 0000009002400E4D617267696E732E426F74746F6D0500000000000000900240 + 05416C69676E07044C6566740A506F736974696F6E2E58050000000000000090 + 02400A506F736974696F6E2E5905000000000000009002400A53697A652E5769 + 64746805000000000000008004400B53697A652E486569676874050000000000 + 00008004401453697A652E506C6174666F726D44656661756C740800000A5452 + 656374616E676C6500095374796C654E616D65060A6261636B67726F756E6405 + 416C69676E0706436C69656E740C436C69704368696C6472656E090A436C6970 + 506172656E74090A46696C6C2E436F6C6F720709784646323032303230074869 + 7454657374080C4D617267696E732E4C6566740500000000000000C804C00A53 + 697A652E57696474680500000000000000C805400B53697A652E486569676874 + 0500000000000000C804401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D61 + 74696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D + 6174696F6E31084475726174696F6E05000000000000000000000C50726F7065 + 7274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709 + 7846463230323032300953746F7056616C756507097846463430343034300754 + 726967676572063049734D6F7573654F7665723D747275653B49735072657373 + 65643D66616C73653B4973466F63757365643D66616C73650E54726967676572 + 496E7665727365063149734D6F7573654F7665723D66616C73653B4973507265 + 737365643D66616C73653B4973466F63757365643D66616C736500000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E43 + 6F6C6F72416E696D6174696F6E33084475726174696F6E050000000000000000 + 00000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 + 7456616C756507097846463241383245320953746F7056616C75650709784646 + 3137353739430754726967676572062E4973507265737365643D747275653B49 + 734D6F7573654F7665723D747275653B4973466F63757365643D747275650E54 + 726967676572496E7665727365062F4973507265737365643D66616C73653B49 + 734D6F7573654F7665723D747275653B4973466F63757365643D747275650000 + 0005545465787400095374796C654E616D6506047465787405416C69676E0706 + 436C69656E740748697454657374080A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000000000C804401453697A + 652E506C6174666F726D44656661756C7408165465787453657474696E67732E + 466F6E74436F6C6F720708636C615768697465000007544C61796F7574000953 + 74796C654E616D6506074C61796F75743205416C69676E07044C6566740A5369 + 7A652E57696474680500000000000000C804400B53697A652E48656967687405 + 00000000000000C804401453697A652E506C6174666F726D44656661756C7408 + 0005545061746800095374796C654E616D65060469636F6E05416C69676E0706 + 43656E74657209446174612E506174680A1801000017000000000000000000C0 + 3F0000C03F010000000000000000000000010000000000404000000000010000 + 000000C03F0000C03F030000000000C03F0000C03F0000000000009040000000 + 000100000000004041000000000100000000004041CDCC4C3F01000000000090 + 40CDCC4C3F010000000000904000000000030000000000904000000000000000 + 0000009040333373400100000000009040000040400100000000004041000040 + 4001000000000040413333734001000000000090403333734003000000000090 + 403333734000000000000090409A99D94001000000000090400000C040010000 + 00000040410000C04001000000000040419A99D94001000000000090409A99D9 + 4003000000000090409A99D9400A46696C6C2E436F6C6F720708636C61576869 + 74650748697454657374080A53697A652E57696474680500000000000000D003 + 400B53697A652E4865696768740500000000000000E003401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 08577261704D6F64650703466974000000005450463007544C61796F75740009 + 5374796C654E616D65060E616464627574746F6E7374796C6505416C69676E07 + 0643656E7465720A53697A652E57696474680500000000000000C805400B5369 + 7A652E4865696768740500000000000000C003401453697A652E506C6174666F + 726D44656661756C74080756697369626C65080B466978656448656967687402 + 18000654476C79706800095374796C654E616D65060A676C7970687374796C65 + 0C4D617267696E732E4C65667405000000000000009002400B4D617267696E73 + 2E546F7005000000000000009002400E4D617267696E732E426F74746F6D0500 + 00000000000090024005416C69676E07044C6566740A506F736974696F6E2E58 + 05000000000000009002400A506F736974696F6E2E5905000000000000009002 + 400A53697A652E576964746805000000000000008004400B53697A652E486569 + 67687405000000000000008004401453697A652E506C6174666F726D44656661 + 756C740800000A5452656374616E676C6500095374796C654E616D65060A6261 + 636B67726F756E6405416C69676E0706436C69656E740C436C69704368696C64 + 72656E090A436C6970506172656E74090A46696C6C2E436F6C6F720709784646 + 3230323032300748697454657374080C4D617267696E732E4C65667405000000 + 00000000C003C00A53697A652E57696474680500000000000000C805400B5369 + 7A652E4865696768740500000000000000C003401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F5443 + 6F6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E + 436F6C6F72416E696D6174696F6E31084475726174696F6E0500000000000000 + 0000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461 + 727456616C756507097846463230323032300953746F7056616C756507097846 + 463430343034300754726967676572063049734D6F7573654F7665723D747275 + 653B4973507265737365643D66616C73653B4973466F63757365643D66616C73 + 650E54726967676572496E7665727365063149734D6F7573654F7665723D6661 + 6C73653B4973507265737365643D66616C73653B4973466F63757365643D6661 + 6C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 + 0615627574746F6E436F6C6F72416E696D6174696F6E33084475726174696F6E + 05000000000000000000000C50726F70657274794E616D65060A46696C6C2E43 + 6F6C6F720A537461727456616C756507097846463241383245320953746F7056 + 616C756507097846463137353739430754726967676572062E49735072657373 + 65643D747275653B49734D6F7573654F7665723D747275653B4973466F637573 + 65643D747275650E54726967676572496E7665727365062F4973507265737365 + 643D66616C73653B49734D6F7573654F7665723D747275653B4973466F637573 + 65643D7472756500000005545465787400095374796C654E616D650604746578 + 7405416C69676E0706436C69656E740748697454657374080A53697A652E5769 + 64746805000000000000009805400B53697A652E486569676874050000000000 + 0000C003401453697A652E506C6174666F726D44656661756C74080454657874 + 060454657874165465787453657474696E67732E466F6E74436F6C6F72070863 + 6C615768697465000007544C61796F757400095374796C654E616D6506074C61 + 796F75743205416C69676E07044C6566740A53697A652E576964746805000000 + 00000000C003400B53697A652E4865696768740500000000000000C003401453 + 697A652E506C6174666F726D44656661756C7408000554506174680009537479 + 6C654E616D65060469636F6E05416C69676E0708436F6E74656E747309446174 + 612E506174680AAC0000000E00000000000000CDCC34410000C0400100000000 + 00C0400000C040010000000000C040CDCC3441010000009A99A940CDCC344101 + 0000009A99A9400000C04001000000000000000000C04001000000000000009A + 99A940010000009A99A9409A99A940010000009A99A940000000000100000000 + 00C04000000000010000000000C0409A99A94001000000CDCC34419A99A94001 + 000000CDCC34410000C04003000000CDCC34410000C0400A46696C6C2E436F6C + 6F720708636C6157686974650748697454657374080C4D617267696E732E4C65 + 667405000000000000008001400B4D617267696E732E546F7005000000000000 + 008001400D4D617267696E732E526967687405000000000000008001400E4D61 + 7267696E732E426F74746F6D05000000000000008001400A53697A652E576964 + 746805000000000000008003400B53697A652E48656967687405000000000000 + 008003401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E6508577261704D6F64650703466974000000005450 + 463007544C61796F757400095374796C654E616D650617696E666F746F6F6C62 + 7574746F6E6D756C74697669657705416C69676E070643656E7465720A53697A + 652E57696474680500000000000000C805400B53697A652E4865696768740500 + 000000000000C804401453697A652E506C6174666F726D44656661756C740807 + 56697369626C65080B46697865644865696768740232000654476C7970680009 + 5374796C654E616D65060A676C7970687374796C650C4D617267696E732E4C65 + 667405000000000000009002400B4D617267696E732E546F7005000000000000 + 009002400E4D617267696E732E426F74746F6D05000000000000009002400541 + 6C69676E07044C6566740A506F736974696F6E2E580500000000000000900240 + 0A506F736974696F6E2E5905000000000000009002400A53697A652E57696474 + 6805000000000000008004400B53697A652E4865696768740500000000000000 + 8004401453697A652E506C6174666F726D44656661756C740800000A54526563 + 74616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C + 69676E0706436C69656E740C436C69704368696C6472656E090A436C69705061 + 72656E74090A46696C6C2E436F6C6F7207097846463230323032300748697454 + 657374080C4D617267696E732E4C6566740500000000000000C804C00A53697A + 652E57696474680500000000000000C805400B53697A652E4865696768740500 + 000000000000C804401453697A652E506C6174666F726D44656661756C74080B + 5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D617469 + 6F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174 + 696F6E31084475726174696F6E05000000000000000000000C50726F70657274 + 794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507097846 + 463230323032300953746F7056616C7565070978464634303430343007547269 + 67676572063049734D6F7573654F7665723D747275653B497350726573736564 + 3D66616C73653B4973466F63757365643D66616C73650E54726967676572496E + 7665727365063149734D6F7573654F7665723D66616C73653B49735072657373 + 65643D66616C73653B4973466F63757365643D66616C736500000F54436F6C6F + 72416E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C + 6F72416E696D6174696F6E33084475726174696F6E0500000000000000000000 + 0C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456 + 616C756507097846463241383245320953746F7056616C756507097846463137 + 353739430754726967676572062E4973507265737365643D747275653B49734D + 6F7573654F7665723D747275653B4973466F63757365643D747275650E547269 + 67676572496E7665727365062F4973507265737365643D66616C73653B49734D + 6F7573654F7665723D747275653B4973466F63757365643D7472756500000005 + 545465787400095374796C654E616D6506047465787405416C69676E0706436C + 69656E740748697454657374080A53697A652E57696474680500000000000000 + C804400B53697A652E4865696768740500000000000000C804401453697A652E + 506C6174666F726D44656661756C740804546578740604546578741654657874 + 53657474696E67732E466F6E74436F6C6F720708636C61576869746500000754 + 4C61796F757400095374796C654E616D6506074C61796F75743205416C69676E + 07044C6566740A53697A652E57696474680500000000000000C804400B53697A + 652E4865696768740500000000000000C804401453697A652E506C6174666F72 + 6D44656661756C74080005545061746800095374796C654E616D65060469636F + 6E05416C69676E070643656E74657209446174612E506174680A84070000A000 + 0000000000009A9987429A99074302000000010076429A990743020000000100 + 5E42CDCC064302000000343347423433054302000000010030429A9903430200 + 000067661A42CE4C01430200000067660642CECCFC4202000000CECCE4410100 + F742020000000100C041CECCEF420200000034339F419B99E74202000000CECC + 7C416866DF4202000000353343413533D64202000000CECC14413533CC420200 + 00009A99C9400000C24202000000000080403333B742020000009A991940CDCC + AB4202000000CDCC4C3F3333A042020000000000000033339442020000000000 + 00009A99874202000000000000000100764202000000CDCC4C3F01005E420200 + 00009A991940CECC4642020000000000804000003042020000009A99C9406666 + 1A42020000003333134166660642020000009A994141CCCCE441020000003333 + 7B41FFFFBF410200000066669E4132339F41020000003333BF41CACC7C410200 + 00000000E441313343410200000000000642CACC14410200000066661A429A99 + C94002000000000030420000804002000000333347429A991940020000000000 + 5E42CDCC4C3F020000006666764200000000020000009A998742000000000200 + 00003433944200000000020000003433A042CDCC4C3F02000000CDCCAB429A99 + 1940020000003333B74200008040020000000000C2429A99C940020000003333 + CC4233331341020000003333D6429A994141020000006666DF4233337B410200 + 00009999E74266669E4102000000CCCCEF423333BF4102000000FFFFF6420000 + E44102000000CCCCFC420000064202000000CC4C014300001A42020000009999 + 03439A992F420200000033330543CDCC464202000000CDCC064300005E420200 + 0000999907430000764202000000999907439A99874202000000999907433433 + 944202000000CCCC06433433A0420200000033330543CDCCAB42020000009999 + 03436766B74202000000CD4C01433333C24202000000CCCCFC423433CC420200 + 0000FFFFF6423433D64202000000CCCCEF426766DF42020000009999E7429A99 + E742020000006666DF42CDCCEF42020000003333D6420000F742020000003333 + CC42CDCCFC42020000003333C242CD4C0143020000006666B7429A9903430200 + 0000CCCCAB4233330543020000003333A042CDCC064302000000333394429A99 + 0743020000009A9987429A990743030000009A9987429A990743000000009A99 + 874200001041020000009A9979420000104102000000CECC644233331B410200 + 0000CECC50429A99314102000000CECC3C42000048410200000001002A420000 + 684102000000CECC184200008841020000003433074200009C41020000003633 + EF41CDCCB441020000006966D2419A99D141020000009C99B5416766EE410200 + 00009C999D41CDCC064202000000D0CC88416666184202000000A09969410000 + 2A4202000000A099494166663C42020000003A333341CCCC5042020000003333 + 1B4133336542020000000000104100007A4202000000000010419A9987420200 + 000000001041343392420200000033331B41CDCC9C42020000009A993141CDCC + A6420200000000004841CDCCB04202000000000068413333BA42020000000000 + 88410000C3420200000000009C41CDCCCB4202000000CDCCB4419A99D3420200 + 00009A99D141CDCCDA42020000006766EE410000E24202000000CDCC06420000 + E84202000000666618423333ED420200000000002A423333F242020000006666 + 3C423333F64202000000666650420000F9420200000066666442CDCCFB420200 + 0000333379423333FD4202000000666687423333FD4202000000333392423333 + FD420200000099999C42CDCCFB42020000009999A6420000F942020000009999 + B0423333F64202000000FFFFB9423333F24202000000CCCCC2423333ED420200 + 00009999CB423333E842020000006666D3420000E242020000009999DA42CDCC + DA4202000000CCCCE1429A99D34202000000CCCCE742CDCCCB4202000000FFFF + EC420000C34202000000FFFFF1423333BA4202000000FFFFF5420000B1420200 + 0000CCCCF8420000A742020000009999FB4200009D4202000000FFFFFC429A99 + 924202000000FFFFFC42CDCC874202000000FFFFFC4200007A42020000009999 + FB423433654202000000CCCCF8423433514202000000FFFFF54234333D420200 + 0000FFFFF14267662A4202000000FFFFEC42CECC184202000000FFFFE7423433 + 074202000000CCCCE1423633EF41020000009999DA426966D241020000006666 + D3429C99B541020000009999CB429C999D4102000000CCCCC242D0CC88410200 + 0000FFFFB942A099694102000000CCCCB042A0994941020000009999A6423A33 + 334102000000CDCC9C4233331B41020000006666924200001041020000009A99 + 874200001041030000009A998742000010410000000033337D42CDCC10420100 + 00009A999042CDCC1042010000009A999042CDCC34420100000034337D42CDCC + 34420100000034337D42CDCC10420300000033337D42CDCC1042000000003333 + 7D4233335942010000009A99904233335942010000009A9990420000C7420100 + 000034337D420000C7420100000034337D42333359420300000033337D423333 + 59420A46696C6C2E436F6C6F720708636C615768697465074869745465737408 + 0A53697A652E57696474680500000000000000D003400B53697A652E48656967 + 68740500000000000000E003401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F64650703 + 466974000000005450463007544C61796F757400095374796C654E616D65061B + 6F7267616E697A65746F6F6C627574746F6E6D756C74697669657705416C6967 + 6E070643656E7465720A53697A652E57696474680500000000000000C805400B + 53697A652E4865696768740500000000000000C804401453697A652E506C6174 + 666F726D44656661756C74080756697369626C65080B46697865644865696768 + 740232000654476C79706800095374796C654E616D65060A676C797068737479 + 6C650C4D617267696E732E4C65667405000000000000009002400B4D61726769 + 6E732E546F7005000000000000009002400E4D617267696E732E426F74746F6D + 050000000000000090024005416C69676E07044C6566740A506F736974696F6E + 2E5805000000000000009002400A506F736974696F6E2E590500000000000000 + 9002400A53697A652E576964746805000000000000008004400B53697A652E48 + 656967687405000000000000008004401453697A652E506C6174666F726D4465 + 6661756C740800000A5452656374616E676C6500095374796C654E616D65060A + 6261636B67726F756E6405416C69676E0706436C69656E740C436C6970436869 + 6C6472656E090A436C6970506172656E74090A46696C6C2E436F6C6F72070978 + 46463230323032300748697454657374080C4D617267696E732E4C6566740500 + 000000000000C804C00A53697A652E57696474680500000000000000C805400B + 53697A652E4865696768740500000000000000C804401453697A652E506C6174 + 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D65061562757474 + 6F6E436F6C6F72416E696D6174696F6E31084475726174696F6E050000000000 + 00000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53 + 7461727456616C756507097846463230323032300953746F7056616C75650709 + 7846463430343034300754726967676572063049734D6F7573654F7665723D74 + 7275653B4973507265737365643D66616C73653B4973466F63757365643D6661 + 6C73650E54726967676572496E7665727365063149734D6F7573654F7665723D + 66616C73653B4973507265737365643D66616C73653B4973466F63757365643D + 66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E61 + 6D650615627574746F6E436F6C6F72416E696D6174696F6E3308447572617469 + 6F6E05000000000000000000000C50726F70657274794E616D65060A46696C6C + 2E436F6C6F720A537461727456616C756507097846463241383245320953746F + 7056616C756507097846463137353739430754726967676572062E4973507265 + 737365643D747275653B49734D6F7573654F7665723D747275653B4973466F63 + 757365643D747275650E54726967676572496E7665727365062F497350726573 + 7365643D66616C73653B49734D6F7573654F7665723D747275653B4973466F63 + 757365643D7472756500000005545465787400095374796C654E616D65060474 + 65787405416C69676E0706436C69656E740748697454657374080A53697A652E + 57696474680500000000000000C804400B53697A652E48656967687405000000 + 00000000C804401453697A652E506C6174666F726D44656661756C7408165465 + 787453657474696E67732E466F6E74436F6C6F720708636C6157686974650000 + 07544C61796F757400095374796C654E616D6506074C61796F75743205416C69 + 676E07044C6566740A53697A652E57696474680500000000000000C804400B53 + 697A652E4865696768740500000000000000C804401453697A652E506C617466 + 6F726D44656661756C74080005545061746800095374796C654E616D65060469 + 636F6E05416C69676E070643656E74657209446174612E506174680AD0000000 + 11000000000000009A99E9409A99C940010000006666664066661E4101000000 + 000000009A99C940010000000000003F9A99B94001000000CDCC4C409A990941 + 01000000CDCC4C40000000000100000000008040000000000100000000008040 + 00000841010000006666D6406666B640010000009A99E9409A99C94003000000 + 9A99E9409A99C940000000009A99993E00004041010000009A99993E33333341 + 010000000000E04033333341010000000000E04000004041010000009A99993E + 00004041030000009A99993E000040410A46696C6C2E436F6C6F720708636C61 + 57686974650748697454657374080A53697A652E576964746805000000000000 + 00D003400B53697A652E4865696768740500000000000000E003401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E6508577261704D6F64650703466974000000005450463007544C61796F75 + 7400095374796C654E616D65061B73657474696E6773746F6F6C627574746F6E + 6D756C74697669657705416C69676E070643656E7465720A53697A652E576964 + 74680500000000000000C805400B53697A652E48656967687405000000000000 + 00C804401453697A652E506C6174666F726D44656661756C7408075669736962 + 6C65080B46697865644865696768740232000654476C79706800095374796C65 + 4E616D65060A676C7970687374796C650C4D617267696E732E4C656674050000 + 00000000009002400B4D617267696E732E546F7005000000000000009002400E + 4D617267696E732E426F74746F6D050000000000000090024005416C69676E07 + 044C6566740A506F736974696F6E2E5805000000000000009002400A506F7369 + 74696F6E2E5905000000000000009002400A53697A652E576964746805000000 + 000000008004400B53697A652E48656967687405000000000000008004401453 + 697A652E506C6174666F726D44656661756C740800000A5452656374616E676C + 6500095374796C654E616D65060A6261636B67726F756E6405416C69676E0706 + 436C69656E740C436C69704368696C6472656E090A436C6970506172656E7409 + 0A46696C6C2E436F6C6F7207097846463230323032300748697454657374080C + 4D617267696E732E4C6566740500000000000000C804C00A53697A652E576964 + 74680500000000000000C805400B53697A652E48656967687405000000000000 + 00C804401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E000953 + 74796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E3108 + 4475726174696F6E05000000000000000000000C50726F70657274794E616D65 + 060A46696C6C2E436F6C6F720A537461727456616C7565070978464632303230 + 32300953746F7056616C75650709784646343034303430075472696767657206 + 3049734D6F7573654F7665723D747275653B4973507265737365643D66616C73 + 653B4973466F63757365643D66616C73650E54726967676572496E7665727365 + 063149734D6F7573654F7665723D66616C73653B4973507265737365643D6661 + 6C73653B4973466F63757365643D66616C736500000F54436F6C6F72416E696D + 6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E69 + 6D6174696F6E33084475726174696F6E05000000000000000000000C50726F70 + 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 + 097846463241383245320953746F7056616C7565070978464631373537394307 + 54726967676572062E4973507265737365643D747275653B49734D6F7573654F + 7665723D747275653B4973466F63757365643D747275650E5472696767657249 + 6E7665727365062F4973507265737365643D66616C73653B49734D6F7573654F + 7665723D747275653B4973466F63757365643D74727565000000055454657874 + 00095374796C654E616D6506047465787405416C69676E0706436C69656E7407 + 48697454657374080A53697A652E57696474680500000000000000C804400B53 + 697A652E4865696768740500000000000000C804401453697A652E506C617466 + 6F726D44656661756C7408045465787406045465787416546578745365747469 + 6E67732E466F6E74436F6C6F720708636C615768697465000007544C61796F75 + 7400095374796C654E616D6506074C61796F75743205416C69676E07044C6566 + 740A53697A652E57696474680500000000000000C804400B53697A652E486569 + 6768740500000000000000C804401453697A652E506C6174666F726D44656661 + 756C74080005545061746800095374796C654E616D65060469636F6E05416C69 + 676E070643656E74657209446174612E506174680A540D00001C010000000000 + 00333351423333E7410200000033335142CDCCE84102000000333351426666EA + 4102000000333351423333EB410200000033335142CDCCEC4102000000333351 + 426666EE4102000000333351423333EF410200000033335142CDCCF041020000 + 00333351426666F24102000000333351423333F3410200000033335142CDCCF4 + 4102000000333351426666F64102000000333351423333F7410100000099996F + 4266660E4201000000CDCC5C4200003C420100000000003A4200003442020000 + 000000384200003642020000000000364200003842020000000000344200003A + 420100000000003C42CDCC5C4201000000CDCC0E429A996F42010000000000F8 + 4133335142020000006666F6413333514202000000CDCCF44133335142020000 + 000000F44133335142020000006666F2413333514202000000CDCCF041333351 + 42020000000000F04133335142020000006666EE413333514202000000CDCCEC + 4133335142020000000000EC4133335142020000006666EA4133335142020000 + 00CDCCE84133335142020000000000E84133335142010000006666C24199996F + 4201000000FFFF4F41CCCC5C4201000000FFFF6F41FFFF394202000000FFFF67 + 41FFFF374202000000FFFF5F41FFFF354202000000FFFF5741FFFF3342010000 + 0098999940FFFF3B420100000000000000CDCC0E42010000003333F3400000F8 + 41020000003333F3406666F641020000003333F340CDCCF441020000003333F3 + 400000F441020000003333F3406666F241020000003333F340CDCCF041020000 + 003333F3400000F041020000003333F3406666EE41020000003333F340CDCCEC + 41020000003333F3400000EC41020000003333F3406666EA41020000003333F3 + 40CDCCE841020000003333F3400000E8410100000000000000CDCCC041010000 + 0066669640CDCC4C410100000066665641CDCC6C410200000066665E41CDCC64 + 410200000066666641CDCC5C410200000066666E41CDCC54410100000066664E + 413433934001000000CDCCC04100000000010000006666E6413333F340020000 + 000000E8413333F340020000009999E9413333F340020000006666EA413333F3 + 40020000000000EC413333F340020000009999ED413333F340020000006666EE + 413333F340020000000000F0413333F340020000009999F1413333F340020000 + 006666F2413333F340020000000000F4413333F340020000009999F5413333F3 + 40020000006666F6413333F34001000000CDCC0E42000000000100000000003C + 4266669640010000000000344266665641020000000000364266665E41020000 + 0000003842666666410200000000003A4266666E4101000000CDCC5C4266664E + 41010000009A996F429A99C14101000000333351423333E74103000000333351 + 423333E7410000000033334342CDCC02420200000033334342CDCC0042020000 + 00999943426766FE4102000000999943426766FA4102000000999943426766F6 + 4102000000FFFF43423433F34102000000FFFF43423433EF4102000000FFFF43 + 423433EB4102000000FFFF43420100E84102000000999943420100E441020000 + 00999943420100E0410200000033334342CECCDC410200000033334342CECCD8 + 4101000000CDCC5E426866B64101000000CDCC54429B99854101000000CDCC34 + 42CECC9441020000006766324234338F4102000000000030429B998941020000 + 0033332D42010084410200000066662A42CECC7C410200000000002842353373 + 4102000000CDCC24429C9969410100000067662C423833D34001000000010014 + 4238338340010000006766024202003041020000006766004202003041020000 + 009B99FD4168662E41020000009B99F94168662E41020000009B99F54168662E + 41020000006866F241CECC2C41020000006866EE41CECC2C41020000006866EA + 41CECC2C41020000003533E741CECC2C41020000003533E34168662E41020000 + 003533DF4168662E41020000000200DC4102003041020000000200D841020030 + 41010000009C99B5413733834001000000CFCC84413733D34001000000020094 + 419C9969410200000068668E413633734102000000CFCC8841CFCC7C41020000 + 0035338341010084410200000036337B419A998941020000009D99714167668E + 410200000004006841CECC9441010000000800D0409B99854101000000080080 + 406866B641010000006A662E419B99D941020000006A662E419B99DD41020000 + 00D0CC2C41CECCE04102000000D0CC2C41CECCE44102000000D0CC2C41CECCE8 + 410200000036332B410100EC410200000036332B410100F0410200000036332B + 410100F4410200000036332B413433F74102000000D0CC2C413433FB41020000 + 00D0CC2C413433FF41020000006A662E4134330142020000006A662E41343303 + 42010000000700804067661442010000000700D040CDCC2C4201000000040068 + 4133332542020000009E997141000028420200000037337B41CDCC2A42020000 + 003533834199992D4202000000CECC884165663042020000009B998D41CCCC32 + 4202000000020094413333354201000000CFCC844133335542010000009C99B5 + 4133335F4201000000CFCCD8419999434202000000CFCCDC4199994342020000 + 000200E041FFFF4342020000000200E441FFFF4342020000000200E841FFFF43 + 42020000003533EB4165664442020000003533EF4165664442020000003533F3 + 4165664442020000006866F64165664442020000006866FA41FFFF4342020000 + 006866FE41FFFF434202000000CECC00429999434202000000CECC0242999943 + 42010000000100144233335F420100000067662C423333554201000000CDCC24 + 4233333542020000009A992742CDCC32420200000067662A4266663042020000 + 0033332D4299992D4202000000FFFF2F42CCCC2A420200000066663242666628 + 4202000000CDCC34423333254201000000CDCC5442CDCC2C4201000000CDCC5E + 42676614420100000033334342CDCC02420300000033334342CDCC0242000000 + 003333EF4133339741020000003333FB4133339741020000009A990342999999 + 4102000000CDCC084266669E410200000000000E423333A34102000000CDCC12 + 429999A94102000000CDCC16429999B14102000000CDCC1A429999B941020000 + 0000001E423333C34102000000676620429999CD4102000000CDCC2242FFFFD7 + 410200000001002442FFFFE34102000000010024420000F04102000000010024 + 420100FC4102000000CECC224200000442020000006766204233330942020000 + 0001001E4266660E4202000000CDCC1A423333134202000000CDCC1642333317 + 4202000000CDCC124233331B420200000000000E4266661E4202000000CDCC08 + 42CDCC2042020000009A99034233332342020000003433FB4167662442020000 + 003433EF4167662442020000003433E34167662442020000003433D741343323 + 4202000000CECCCC41CDCC2042020000006866C24167661E4202000000CECCB8 + 4133331B4202000000CECCB0413333174202000000CECCA84133331342020000 + 006866A24166660E42020000009B999D413333094202000000CECC9841000004 + 4202000000686696410000FC4102000000686696410000F04102000000686696 + 410000E44102000000CECC98410000D841020000009B999D419A99CD41020000 + 006866A2413433C34102000000CECCA8419A99B94102000000CECCB0419A99B1 + 4102000000CECCB8419A99A941020000006866C2413433A34102000000CECCCC + 4167669E41020000000000D8419A999941020000003333E34133339741020000 + 003333EF4133339741030000003333EF4133339741000000003333EF41CDCC16 + 42020000000000F841CDCC1642020000000000004200001642020000009A9903 + 42676614420200000034330742CDCC124202000000CDCC0A4267661042020000 + 009A990D429A990D420200000067661042CDCC0A4202000000CDCC12429A9907 + 4202000000676614429A99034202000000010016420000004202000000CDCC16 + 423433F74102000000CDCC16423433EF4102000000CDCC16426766E641020000 + 00000016426766DE4102000000676614423433D74102000000CDCC12420100D0 + 410200000067661042CECCC841020000009A990D423433C34102000000CDCC0A + 429A99BD41020000009A990742CECCB841020000009A9903429A99B541020000 + 00000000426766B241020000003433F741CDCCB041020000003433EF41CDCCB0 + 41020000006766E641CDCCB041020000006766DE416766B241020000003433D7 + 419A99B541020000000100D041CDCCB84102000000CECCC8419A99BD41020000 + 003433C3413433C341020000009A99BD41CECCC84102000000CECCB8413433CF + 41020000009A99B5413433D741020000006766B2416766DE4102000000CDCCB0 + 413433E74102000000CDCCB0413433EF4102000000CDCCB0410100F841020000 + 006766B24100000042020000009A99B5419A99034202000000CDCCB841343307 + 42020000009A99BD41CDCC0A42020000003433C3419A990D4202000000CECCC8 + 4167661042020000003433CF41CDCC1242020000003433D74167661442020000 + 003333DF4100001642020000003333E741CDCC1642020000003333EF41CDCC16 + 42030000003333EF41CDCC16420A46696C6C2E436F6C6F720708636C61576869 + 74650748697454657374080A53697A652E57696474680500000000000000D003 + 400B53697A652E4865696768740500000000000000E003401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 08577261704D6F64650703466974000000005450463007544C61796F75740009 + 5374796C654E616D65061172656D6F7665627574746F6E7374796C6505416C69 + 676E070643656E7465720A53697A652E57696474680500000000000000C80540 + 0B53697A652E4865696768740500000000000000C003401453697A652E506C61 + 74666F726D44656661756C74080756697369626C65080B466978656448656967 + 68740218000654476C79706800095374796C654E616D65060A676C7970687374 + 796C650C4D617267696E732E4C65667405000000000000009002400B4D617267 + 696E732E546F7005000000000000009002400E4D617267696E732E426F74746F + 6D050000000000000090024005416C69676E07044C6566740A506F736974696F + 6E2E5805000000000000008404400A506F736974696F6E2E5905000000000000 + 009002400A53697A652E576964746805000000000000008004400B53697A652E + 4865696768740500000000000000C001401453697A652E506C6174666F726D44 + 656661756C740800000A5452656374616E676C6500095374796C654E616D6506 + 0A6261636B67726F756E6405416C69676E0706436C69656E740C436C69704368 + 696C6472656E090A436C6970506172656E74090A46696C6C2E436F6C6F720709 + 7846463230323032300748697454657374080C4D617267696E732E4C65667405 + 00000000000000C003C00A53697A652E57696474680500000000000000C80540 + 0B53697A652E4865696768740500000000000000C003401453697A652E506C61 + 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500 + 0F54436F6C6F72416E696D6174696F6E00095374796C654E616D650615627574 + 746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E0500000000 + 0000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A + 537461727456616C756507097846463230323032300953746F7056616C756507 + 097846463430343034300754726967676572063049734D6F7573654F7665723D + 747275653B4973507265737365643D66616C73653B4973466F63757365643D66 + 616C73650E54726967676572496E7665727365063149734D6F7573654F766572 + 3D66616C73653B4973507265737365643D66616C73653B4973466F6375736564 + 3D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E + 616D650615627574746F6E436F6C6F72416E696D6174696F6E33084475726174 + 696F6E05000000000000000000000C50726F70657274794E616D65060A46696C + 6C2E436F6C6F720A537461727456616C75650709784646324138324532095374 + 6F7056616C756507097846463137353739430754726967676572062E49735072 + 65737365643D747275653B49734D6F7573654F7665723D747275653B4973466F + 63757365643D747275650E54726967676572496E7665727365062F4973507265 + 737365643D66616C73653B49734D6F7573654F7665723D747275653B4973466F + 63757365643D7472756500000005545465787400095374796C654E616D650604 + 7465787405416C69676E0706436C69656E740748697454657374080A53697A65 + 2E576964746805000000000000009805400B53697A652E486569676874050000 + 0000000000C003401453697A652E506C6174666F726D44656661756C74080454 + 657874060454657874165465787453657474696E67732E466F6E74436F6C6F72 + 0708636C615768697465000007544C61796F757400095374796C654E616D6506 + 074C61796F75743205416C69676E07044C6566740A53697A652E576964746805 + 00000000000000C003400B53697A652E4865696768740500000000000000C003 + 401453697A652E506C6174666F726D44656661756C7408000554506174680009 + 5374796C654E616D65060469636F6E05416C69676E0708436F6E74656E747309 + 446174612E506174680A4C000000060000000000000000004041CDCC4C3F0100 + 000000000000CDCC4C3F01000000000000000000000001000000000040410000 + 00000100000000004041CDCC4C3F0300000000004041CDCC4C3F0A46696C6C2E + 436F6C6F720708636C6157686974650748697454657374080C4D617267696E73 + 2E4C65667405000000000000008001400B4D617267696E732E546F7005000000 + 000000008001400D4D617267696E732E52696768740500000000000000800140 + 0E4D617267696E732E426F74746F6D05000000000000008001400A53697A652E + 576964746805000000000000008003400B53697A652E48656967687405000000 + 000000008003401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E6508577261704D6F64650703466974000000 + 00545046300A5452656374616E676C6500095374796C654E616D650614706F70 + 75706261636B67726F756E647374796C6505416C69676E070643656E7465720A + 46696C6C2E436F6C6F7207097846463244324432440A53697A652E5769647468 + 05000000000000009407400B53697A652E4865696768740500000000000080D2 + 06401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E + 436F6C6F7207097846463135313531350756697369626C65080000} + end> + Left = 56 + Top = 32 + end +end diff --git a/src/lib/Components/TCompLabel/Test Project/CompLabelUnit.pas b/src/lib/Components/TCompLabel/Test Project/CompLabelUnit.pas new file mode 100644 index 0000000..18bb3d0 --- /dev/null +++ b/src/lib/Components/TCompLabel/Test Project/CompLabelUnit.pas @@ -0,0 +1,38 @@ +unit CompLabelUnit; + +interface + +uses + System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, + FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, + FMX.CompLabel, FMX.Controls.Presentation, FMX.StdCtrls; + +type + TForm1 = class(TForm) + Button1: TButton; + CompLabel1: TCompLabel; + Label1: TLabel; + StyleBook1: TStyleBook; + procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Single); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.fmx} + +procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Single); +begin + if ObjectAtPoint(TPointF.Create(X, Y)) <> nil then + Label1.Text := Format('X = %n; Y = %n; Class = %s', [X, Y, ObjectAtPoint(TPointF.Create(X, Y)).GetObject.ClassName]); +end; + +end. diff --git a/src/lib/Components/TRenderProgress/Package/FMX.RenderProgress.pas b/src/lib/Components/TRenderProgress/Package/FMX.RenderProgress.pas new file mode 100644 index 0000000..24871c9 --- /dev/null +++ b/src/lib/Components/TRenderProgress/Package/FMX.RenderProgress.pas @@ -0,0 +1,318 @@ +unit FMX.RenderProgress; + +interface + +uses + System.Types, System.SysUtils, System.Classes, + FMX.Types, FMX.Controls, FMX.Styles, FMX.StdCtrls, FMX.Objects, FMX.ActnList, FMX.Memo, + AErenderLauncher.AerenderParser; + +type + TRenderProgress = class(TStyledControl) + private + FComposition, FStatus, + FST_WaitingForAErender, FST_Rendering, FST_FinishedRender, FST_RenderError: String; + FLog: TStrings; + FInFrame, FOutFrame, FValue: Single; + FMemoVisible, FIsError: Boolean; + FDuration: TTimecode; + FFrameRate: Real; + + function GetComposition: String; + procedure SetComposition(Value: String); + +// function GetStatus: String; +// procedure SetStatus(Value: String); + + function GetInFrame: Single; + procedure SetInFrame(Value: Single); + + function GetOutFrame: Single; + procedure SetOutFrame(Value: Single); + + function GetValue: Single; + procedure SetValue(Value: Single); + + function GetLog: TStrings; + procedure SetLog(Value: TStrings); + + function GetMemoVisible: Boolean; + procedure SetMemoVisible(Value: Boolean); + + function GetIsError: Boolean; + procedure SetIsError(Value: Boolean); + + procedure LogButtonClick(Sender: TObject); + protected + function GetStyleObject: TFmxObject; override; + procedure ApplyStyle; override; + public + procedure GoToTextEnd; + constructor Create(AOwner: TComponent); override; + published + property Align default TAlignLayout.None; + property Size; + property Position; + property Margins; + + property Composition: String read GetComposition write SetComposition; + + property ST_WaitingForAErender: String read FST_WaitingForAErender write FST_WaitingForAErender; + property ST_Rendering: String read FST_Rendering write FST_Rendering; + property ST_FinishedRender: String read FST_FinishedRender write FST_FinishedRender; + property ST_RenderError: String read FST_RenderError write FST_RenderError; + + property InFrame: Single read GetInFrame write SetInFrame; + property OutFrame: Single read GetOutFrame write SetOutFrame; + property Value: Single read GetValue write SetValue; + property MemoVisible: Boolean read GetMemoVisible write SetMemoVisible; + property IsError: Boolean read GetIsError write SetIsError; + + property Log: TStrings read GetLog write SetLog; + + property Duration: TTimecode read FDuration write FDuration; + property FrameRate: Real read FFrameRate write FFrameRate; + end; + +procedure Register; + +implementation + +{$R *.res} + +{$REGION 'Compoisition'} + +function TRenderProgress.GetComposition: String; +begin + FComposition := StylesData['comp.text'].AsString; + Result := FComposition; +end; + +procedure TRenderProgress.SetComposition(Value: String); +begin + StylesData['comp.text'] := Value; + FComposition := Value; +end; + +{$ENDREGION} + +{$REGION '[DEPRECATED] Status'} +// +//function TRenderProgress.GetStatus: String; +//begin +// FStatus := StylesData['status.text'].AsString; +// Result := FStatus; +//end; +// +//procedure TRenderProgress.SetStatus(Value: String); +//begin +// StylesData['status.text'] := Value; +// FStatus := Value; +//end; +// +{$ENDREGION} + +{$REGION 'InFrame'} + +function TRenderProgress.GetInFrame: Single; +begin + FInFrame := StylesData['progressbar.min'].AsExtended; + Result := FInFrame; +end; + +procedure TRenderProgress.SetInFrame(Value: Single); +begin + StylesData['progressbar.min'] := Value; + FInFrame := Value; + + if FValue = -1 then + StylesData['frames.text'] := '...' + else + StylesData['frames.text'] := Format('%s / %s', [IntToStr(Trunc(FValue)), IntToStr(Trunc(FOutFrame))]) +end; + +{$ENDREGION} + +{$REGION 'OutFrame'} + +function TRenderProgress.GetOutFrame: Single; +begin + FOutFrame := StylesData['progressbar.max'].AsExtended; + Result := FOutFrame; +end; + +procedure TRenderProgress.SetOutFrame(Value: Single); +begin + StylesData['progressbar.max'] := Value; + FOutFrame := Value; + + if FValue = -1 then + StylesData['frames.text'] := '...' + else + StylesData['frames.text'] := Format('%s / %s', [IntToStr(Trunc(FValue)), IntToStr(Trunc(FOutFrame))]) +end; + +{$ENDREGION} + +{$REGION 'Value'} +function TRenderProgress.GetValue: Single; +begin + FValue := StylesData['progressbar.value'].AsExtended; + Result := FValue; +end; + +procedure TRenderProgress.SetValue(Value: Single); +begin + // Set Progressbar value + StylesData['progressbar.value'] := Value; + FValue := Value; + + // Set Progressbar visibility + StylesData['progressbar.visible'] := Trunc(Value) >= 0; + StylesData['ani.visible'] := Trunc(Value) = -1; + + if not FIsError then + if FValue = -1 then begin // Waiting for aerender + StylesData['frames.text'] := '...'; + StylesData['status.text'] := FST_WaitingForAErender; + end else + if (FValue >= 0) and (FValue <= FOutFrame) then begin // Rendering + if FValue = FOutFrame then begin // Finished rendering + StylesData['status.text'] := FST_FinishedRender; + StylesData['progressbar.stylelookup'] := 'progressbarminifinishstyle'; + end else begin // Still rendering + StylesData['status.text'] := FST_Rendering; + StylesData['progressbar.stylelookup'] := 'progressbarministyle'; + end; + StylesData['frames.text'] := Format('%s / %s', [IntToStr(Trunc(FValue)), IntToStr(Trunc(FOutFrame))]) + end; + +end; +{$ENDREGION} + +{$REGION 'Log'} +function TRenderProgress.GetLog: TStrings; +begin + FLog := StylesData['log.lines'].AsType; + Result := FLog; +end; + +procedure TRenderProgress.SetLog(Value: TStrings); +begin + StylesData['log.lines'] := Value; + FLog := Value; + + var memo: TMemo := StylesData['log'].AsType; + if memo <> nil then + memo.GoToTextEnd; +end; +{$ENDREGION} + +{$REGION 'Memo'} +function TRenderProgress.GetMemoVisible: Boolean; +begin + FMemoVisible := StylesData['log.visible'].AsBoolean; + Result := FMemoVisible; +end; + +procedure TRenderProgress.SetMemoVisible(Value: Boolean); +begin + if Value then + Height := 240 + else + Height := 48; + StylesData['log.visible'] := Value; + FMemoVisible := Value; +end; +{$ENDREGION} + +{$REGION 'IsError'} +function TRenderProgress.GetIsError: Boolean; +begin + Result := FIsError; +end; + +procedure TRenderProgress.SetIsError(Value: Boolean); +begin + if Value then begin + StylesData['status.text'] := FST_RenderError; + StylesData['progressbar.stylelookup'] := 'progressbarminierrorstyle'; + //StylesData['frames.text'] := '...'; + end else + if (FValue >= 0) and (FValue < FOutFrame) then begin + StylesData['status.text'] := FST_Rendering; + StylesData['progressbar.stylelookup'] := 'progressbarministyle'; + end else begin + StylesData['status.text'] := FST_FinishedRender; + StylesData['progressbar.stylelookup'] := 'progressbarminifinishstyle'; + end; + + FIsError := Value; +end; +{$ENDREGION} + +function TRenderProgress.GetStyleObject: TFmxObject; +const + Style = 'RenderProgressDesignStyle'; +begin + if StyleLookup = '' then begin + Result := TControl(TStyleStreaming.LoadFromResource(HInstance, Style, RT_RCDATA)); + exit; + end; + Result := inherited GetStyleObject; +end; + +procedure TRenderProgress.ApplyStyle; +var + LogButton: TButton; +begin + inherited; + + if FindStyleResource('logbutton', LogButton) then + if not Assigned(LogButton.OnClick) then + LogButton.OnClick := LogButtonClick; +end; + +procedure TRenderProgress.LogButtonClick(Sender: TObject); +begin + if MemoVisible then + MemoVisible := False + else + MemoVisible := True; +end; + +procedure TRenderProgress.GoToTextEnd; +var + Memo: TMemo; +begin + if FindStyleResource('log', Memo) then + Memo.GoToTextEnd; +end; + +constructor TRenderProgress.Create(AOwner: TComponent); +begin + inherited; + Height := 240; + Width := 480; + Composition := 'comptext'; + ST_WaitingForAErender := 'Waiting for aerender...'; + ST_Rendering := 'Rendering'; + ST_FinishedRender := 'Rendering finished'; + ST_RenderError := 'ERROR: See log for more info'; + InFrame := -1; + OutFrame := 100; + Value := -1; + Log := TStringList.Create; + MemoVisible := False; + + Duration := TTimecode.Create(0, 0, 0, 0); + FrameRate := 0.00; + //Log := TStrings.Create; +end; + +procedure Register; +begin + RegisterComponents('AErender Launcher', [TRenderProgress]); +end; + +end. diff --git a/src/lib/Components/TRenderProgress/Package/FMX.RenderProgress.rc b/src/lib/Components/TRenderProgress/Package/FMX.RenderProgress.rc new file mode 100644 index 0000000..e21c559 --- /dev/null +++ b/src/lib/Components/TRenderProgress/Package/FMX.RenderProgress.rc @@ -0,0 +1 @@ +RenderProgressDesignStyle RCDATA "RenderProgressDesign.style" diff --git a/src/lib/Components/TRenderProgress/Package/RenderProgress.dpk b/src/lib/Components/TRenderProgress/Package/RenderProgress.dpk new file mode 100644 index 0000000..2890643 --- /dev/null +++ b/src/lib/Components/TRenderProgress/Package/RenderProgress.dpk @@ -0,0 +1,38 @@ +package RenderProgress; + +{$R *.res} +{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO OFF} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION OFF} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES ON} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DEFINE DEBUG} +{$ENDIF IMPLICITBUILDING} +{$IMPLICITBUILD ON} + +requires + rtl, + designide, + fmx; + +contains + FMX.RenderProgress in 'FMX.RenderProgress.pas'; + +end. diff --git a/src/lib/Components/TRenderProgress/Package/RenderProgress.dproj b/src/lib/Components/TRenderProgress/Package/RenderProgress.dproj new file mode 100644 index 0000000..d813187 --- /dev/null +++ b/src/lib/Components/TRenderProgress/Package/RenderProgress.dproj @@ -0,0 +1,896 @@ + + + {43162C7F-3069-4108-A170-0A27EE47F323} + RenderProgress.dpk + 19.2 + FMX + True + Debug + Win32 + 1 + Package + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + true + true + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + All + RenderProgress + + + None + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + rtl;fmx;$(DCC_UsePackage) + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png + + + None + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + rtl;fmx;$(DCC_UsePackage) + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png + + + None + rtl;fmx;$(DCC_UsePackage) + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png + + + None + rtl;fmx;$(DCC_UsePackage) + + + rtl;fmx;$(DCC_UsePackage) + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + rtl;fmx;$(DCC_UsePackage) + + + rtl;fmx;$(DCC_UsePackage) + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + false + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + + MainSource + + + + + + +
New1.res
+
+ + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + Package + + + + RenderProgress.dpk + + + + False + False + False + False + False + True + False + + + + + true + + + + + true + + + + + true + + + + + RenderProgress.bpl + true + + + + + 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-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 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 + + + 1 + + + 0 + + + + + 1 + .framework + + + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + + + + + 1 + + + 1 + + + 1 + + + + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + + + + + + + + + + + 12 + + + + +
diff --git a/src/lib/Components/TRenderProgress/Package/RenderProgressDesign.style b/src/lib/Components/TRenderProgress/Package/RenderProgressDesign.style new file mode 100644 index 0000000..5d6c106 --- /dev/null +++ b/src/lib/Components/TRenderProgress/Package/RenderProgressDesign.style @@ -0,0 +1,118 @@ +object TLayout + StyleName = 'renderprogressstyle' + Align = Center + Size.Width = 572.000000000000000000 + Size.Height = 240.000000000000000000 + Size.PlatformDefault = False + object TPanel + StyleName = 'bgpanel' + Align = Contents + Size.Width = 572.000000000000000000 + Size.Height = 240.000000000000000000 + Size.PlatformDefault = False + end + object TLayout + StyleName = 'content' + Align = Contents + Size.Width = 572.000000000000000000 + Size.Height = 240.000000000000000000 + Size.PlatformDefault = False + object TLabel + StyleName = 'comp' + Align = MostLeft + AutoSize = True + StyledSettings = [Family, Style, FontColor] + Margins.Left = 16.000000000000000000 + Margins.Top = 8.000000000000000000 + Margins.Bottom = 8.000000000000000000 + Position.X = 16.000000000000000000 + Position.Y = 8.000000000000000000 + Size.Width = 40.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 16.000000000000000000 + TextSettings.WordWrap = False + Text = 'comp' + end + object TMemo + StyleName = 'log' + Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] + DataDetectorTypes = [] + StyledSettings = [Style, FontColor] + TextSettings.Font.Family = 'Consolas' + Align = MostBottom + Position.Y = 48.000000000000000000 + Size.Width = 572.000000000000000000 + Size.Height = 192.000000000000000000 + Size.PlatformDefault = False + Viewport.Width = 568.000000000000000000 + Viewport.Height = 188.000000000000000000 + end + object TAniIndicator + StyleName = 'ani' + Align = Client + Enabled = True + StyleLookup = 'aniindicatorhorzstyle' + HitTest = False + Margins.Left = 16.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Bottom = 16.000000000000000000 + Size.Width = 380.000000000000000000 + Size.Height = 3.000000000000000000 + Size.PlatformDefault = False + end + object TLabel + StyleName = 'status' + Align = Top + StyledSettings = [Family, Size, FontColor] + Margins.Left = 16.000000000000000000 + Margins.Top = 8.000000000000000000 + Position.X = 72.000000000000000000 + Position.Y = 8.000000000000000000 + Size.Width = 380.000000000000000000 + Size.Height = 17.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.StyleExt = {00070000000000000004000000} + Text = 'status' + end + object TProgressBar + StyleName = 'progressbar' + Align = Client + HitTest = False + Orientation = Horizontal + Margins.Left = 16.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Bottom = 16.000000000000000000 + Size.Width = 391.000000000000000000 + Size.Height = 3.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'progressbarministyle' + Value = 50.000000000000000000 + Visible = False + end + object TButton + StyleName = 'logbutton' + Align = MostRight + Position.X = 524.000000000000000000 + Size.Width = 48.000000000000000000 + Size.Height = 48.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'logbuttonstyle' + end + object TLabel + StyleName = 'frames' + Align = MostRight + AutoSize = True + StyledSettings = [Family, FontColor] + Margins.Left = 8.000000000000000000 + Margins.Right = 16.000000000000000000 + Position.X = 460.000000000000000000 + Size.Width = 48.000000000000000000 + Size.Height = 48.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 16.000000000000000000 + TextSettings.WordWrap = False + Text = 'frames' + end + end +end diff --git a/src/lib/Components/TRenderProgress/RenderProgressComponent.groupproj b/src/lib/Components/TRenderProgress/RenderProgressComponent.groupproj new file mode 100644 index 0000000..693f187 --- /dev/null +++ b/src/lib/Components/TRenderProgress/RenderProgressComponent.groupproj @@ -0,0 +1,48 @@ + + + {C7B9F1BA-6D22-4F9E-B690-1ED1812117BB} + + + + + + + + + + + Default.Personality.12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/lib/Components/TRenderProgress/TRenderProgress.groupproj b/src/lib/Components/TRenderProgress/TRenderProgress.groupproj new file mode 100644 index 0000000..e3f9f09 --- /dev/null +++ b/src/lib/Components/TRenderProgress/TRenderProgress.groupproj @@ -0,0 +1,48 @@ + + + {6DC5DB84-E3A9-48CB-8B52-E81110201511} + + + + + + + + + + + Default.Personality.12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/lib/Components/TRenderProgress/Test Project/RenderProgressTest.dpr b/src/lib/Components/TRenderProgress/Test Project/RenderProgressTest.dpr new file mode 100644 index 0000000..47145b6 --- /dev/null +++ b/src/lib/Components/TRenderProgress/Test Project/RenderProgressTest.dpr @@ -0,0 +1,15 @@ +program RenderProgressTest; + +uses + System.StartUpCopy, + FMX.Forms, + FMX.RenderProgress in '..\Package\FMX.RenderProgress.pas', + RenderProgressUnit in 'RenderProgressUnit.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/src/lib/Components/TRenderProgress/Test Project/RenderProgressTest.dproj b/src/lib/Components/TRenderProgress/Test Project/RenderProgressTest.dproj new file mode 100644 index 0000000..489f74e --- /dev/null +++ b/src/lib/Components/TRenderProgress/Test Project/RenderProgressTest.dproj @@ -0,0 +1,1098 @@ + + + {4F833CCA-91A8-41FF-9C6D-D740C8DD9CF6} + 19.2 + FMX + True + Debug + Win32 + 37907 + Application + RenderProgressTest.dpr + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + 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 + + + true + Cfg_2 + true + true + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + true + true + true + true + true + true + true + true + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\delphi_PROJECTICNS.icns + RenderProgressTest + + + DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;FmxTeeUI;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;fgx;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png + + + DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;FmxTeeUI;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;fgx;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png + + + DBXSqliteDriver;RESTComponents;fmxase;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;TMSFMXPackPkgDXE13;FmxTeeUI;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing bluetooth;NSBluetoothPeripheralUsageDescription=The reason for accessing bluetooth peripherals;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSMotionUsageDescription=The reason for accessing the accelerometer;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImageDark_3x.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImage_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageDark_2x.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_1024x1024.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png + + + DBXSqliteDriver;RESTComponents;fmxase;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;FmxTeeUI;fmx;FireDACIBDriver;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FMXTee;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;fgx;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) + + + DBXSqliteDriver;RESTComponents;fmxase;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;fmx;FireDACIBDriver;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;FireDACDSDriver;rtl;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;fgx;DBXInformixDriver;IndyIPClient;CompLabel;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers + Debug + true + + + DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;svnui;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;DBXOracleDriver;inetdb;TMSFMXPackPkgDXE13;FmxTeeUI;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;fgx;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;CompLabel;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;FmxTeeUI;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;fgx;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;CompLabel;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + false + true + PerMonitorV2 + + + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_NotificationIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SettingIcon_58x58.png + $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png + + + true + PerMonitorV2 + + + true + PerMonitorV2 + + + + MainSource + + + +
Form1
+
+ + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + Application + + + + RenderProgressTest.dpr + + + + True + True + True + False + True + True + True + + + + + true + + + + + true + + + + + true + + + + + RenderProgressTest.exe + 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-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 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 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + 1 + + + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 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/src/lib/Components/TRenderProgress/Test Project/RenderProgressTestUnit.fmx b/src/lib/Components/TRenderProgress/Test Project/RenderProgressTestUnit.fmx new file mode 100644 index 0000000..d6b9aee --- /dev/null +++ b/src/lib/Components/TRenderProgress/Test Project/RenderProgressTestUnit.fmx @@ -0,0 +1,3638 @@ +object Form1: TForm1 + Left = 0 + Top = 0 + Caption = 'Form1' + ClientHeight = 447 + ClientWidth = 1054 + StyleBook = StyleBook2 + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + DesignerMasterStyle = 0 + object Layout1: TLayout + Align = Center + Enabled = False + Size.Width = 690.000000000000000000 + Size.Height = 256.000000000000000000 + Size.PlatformDefault = False + Visible = False + object Panel1: TPanel + Align = Top + Margins.Left = 8.000000000000000000 + Margins.Top = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Position.X = 8.000000000000000000 + Position.Y = 8.000000000000000000 + Size.Width = 674.000000000000000000 + Size.Height = 240.000000000000000000 + Size.PlatformDefault = False + object Label1: TLabel + Align = MostLeft + StyledSettings = [Family, Style, FontColor] + Margins.Left = 16.000000000000000000 + Margins.Top = 8.000000000000000000 + Margins.Bottom = 8.000000000000000000 + Position.X = 16.000000000000000000 + Position.Y = 8.000000000000000000 + Size.Width = 120.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 16.000000000000000000 + Text = 'Composition' + end + object Label2: TLabel + Align = MostRight + AutoSize = True + StyledSettings = [Family, FontColor] + Margins.Left = 8.000000000000000000 + Margins.Right = 16.000000000000000000 + Position.X = 551.000000000000000000 + Size.Width = 59.000000000000000000 + Size.Height = 48.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.Size = 16.000000000000000000 + TextSettings.WordWrap = False + Text = '56 / 600' + end + object Button1: TButton + Align = MostRight + Position.X = 626.000000000000000000 + Size.Width = 48.000000000000000000 + Size.Height = 48.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'logbuttonstyle' + end + object Label3: TLabel + Align = Top + StyledSettings = [Family, Size, FontColor] + Margins.Left = 16.000000000000000000 + Margins.Top = 8.000000000000000000 + Position.X = 152.000000000000000000 + Position.Y = 8.000000000000000000 + Size.Width = 391.000000000000000000 + Size.Height = 17.000000000000000000 + Size.PlatformDefault = False + TextSettings.Font.StyleExt = {00070000000000000004000000} + Text = 'Status Text' + end + object ProgressBar1: TProgressBar + Align = Client + HitTest = False + Orientation = Horizontal + Margins.Left = 16.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Bottom = 16.000000000000000000 + Size.Width = 391.000000000000000000 + Size.Height = 3.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'progressbarministyle' + Value = 50.000000000000000000 + Visible = False + end + object AniIndicator1: TAniIndicator + Align = Client + Enabled = True + StyleLookup = 'aniindicatorhorzstyle' + HitTest = False + Margins.Left = 16.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Bottom = 16.000000000000000000 + Size.Width = 391.000000000000000000 + Size.Height = 3.000000000000000000 + Size.PlatformDefault = False + end + object Memo1: TMemo + Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] + DataDetectorTypes = [] + StyledSettings = [Family, FontColor] + Align = MostBottom + Position.Y = 48.000000000000000000 + Size.Width = 674.000000000000000000 + Size.Height = 192.000000000000000000 + Size.PlatformDefault = False + Viewport.Width = 670.000000000000000000 + Viewport.Height = 188.000000000000000000 + end + end + end + object StyleBook1: TStyleBook + Styles = < + item + ResourcesBin = { + 464D585F5354594C4520322E3501061372656E64657270726F67726573737374 + 796C65037608005450463007544C61796F757400095374796C654E616D650613 + 72656E64657270726F67726573737374796C6505416C69676E070643656E7465 + 720A53697A652E576964746805000000000000008F08400B53697A652E486569 + 6768740500000000000000F006401453697A652E506C6174666F726D44656661 + 756C740800065450616E656C00095374796C654E616D650607626770616E656C + 05416C69676E0706436C69656E740A53697A652E576964746805000000000000 + 008F08400B53697A652E4865696768740500000000000000F006401453697A65 + 2E506C6174666F726D44656661756C74080006544C6162656C00095374796C65 + 4E616D650604636F6D7005416C69676E07084D6F73744C6566740E5374796C65 + 6453657474696E67730B0646616D696C79055374796C6509466F6E74436F6C6F + 72000C4D617267696E732E4C65667405000000000000008003400B4D61726769 + 6E732E546F7005000000000000008002400E4D617267696E732E426F74746F6D + 05000000000000008002400A506F736974696F6E2E5805000000000000008003 + 400A506F736974696F6E2E5905000000000000008002400A53697A652E576964 + 74680500000000000000F005400B53697A652E48656967687405000000000000 + 008004401453697A652E506C6174666F726D44656661756C7408165465787453 + 657474696E67732E466F6E742E53697A65050000000000000080034004546578 + 74060B436F6D706F736974696F6E000006544C6162656C00095374796C654E61 + 6D6506066672616D657305416C69676E07094D6F73745269676874084175746F + 53697A65090E5374796C656453657474696E67730B0646616D696C7909466F6E + 74436F6C6F72000C4D617267696E732E4C65667405000000000000008002400D + 4D617267696E732E526967687405000000000000008003400A506F736974696F + 6E2E580500000000000080E007400A53697A652E576964746805000000000000 + 00EC04400B53697A652E4865696768740500000000000000C004401453697A65 + 2E506C6174666F726D44656661756C7408165465787453657474696E67732E46 + 6F6E742E53697A650500000000000000800340155465787453657474696E6773 + 2E576F72645772617008045465787406083536202F2036303000000754427574 + 746F6E00095374796C654E616D6506096C6F67627574746F6E05416C69676E07 + 094D6F737452696768740A506F736974696F6E2E580500000000000000830840 + 0A53697A652E57696474680500000000000000C004400B53697A652E48656967 + 68740500000000000000C004401453697A652E506C6174666F726D4465666175 + 6C74080B5374796C654C6F6F6B7570060E6C6F67627574746F6E7374796C6500 + 0006544C6162656C00095374796C654E616D65060673746174757305416C6967 + 6E0703546F700E5374796C656453657474696E67730B0646616D696C79045369 + 7A6509466F6E74436F6C6F72000C4D617267696E732E4C656674050000000000 + 00008003400B4D617267696E732E546F7005000000000000008002400A506F73 + 6974696F6E2E5805000000000000009806400A506F736974696F6E2E59050000 + 00000000008002400A53697A652E576964746805000000000000809007400B53 + 697A652E48656967687405000000000000008803401453697A652E506C617466 + 6F726D44656661756C74081A5465787453657474696E67732E466F6E742E5374 + 796C654578740A0D000000000700000000000000040000000454657874060B53 + 7461747573205465787400000C5450726F677265737342617200095374796C65 + 4E616D65060B70726F677265737362617205416C69676E0706436C69656E7407 + 48697454657374080B4F7269656E746174696F6E070A486F72697A6F6E74616C + 0C4D617267696E732E4C65667405000000000000008003400B4D617267696E73 + 2E546F7005000000000000008001400E4D617267696E732E426F74746F6D0500 + 0000000000008003400A53697A652E57696474680500000000000080C307400B + 53697A652E4865696768740500000000000000C000401453697A652E506C6174 + 666F726D44656661756C74080B5374796C654C6F6F6B7570061470726F677265 + 73736261726D696E697374796C650556616C75650500000000000000C8044007 + 56697369626C650800000D54416E69496E64696361746F7200095374796C654E + 616D650603616E6905416C69676E0706436C69656E7407456E61626C6564090B + 5374796C654C6F6F6B75700615616E69696E64696361746F72686F727A737479 + 6C650748697454657374080C4D617267696E732E4C6566740500000000000000 + 8003400B4D617267696E732E546F7005000000000000008001400E4D61726769 + 6E732E426F74746F6D05000000000000008003400A53697A652E576964746805 + 000000000000809007400B53697A652E4865696768740500000000000000C000 + 401453697A652E506C6174666F726D44656661756C7408000005544D656D6F00 + 095374796C654E616D6506036C6F6719546F7563682E496E7465726163746976 + 6547657374757265730B0350616E074C6F6E6754617009446F75626C65546170 + 0011446174614465746563746F7254797065730B000E5374796C656453657474 + 696E67730B055374796C6509466F6E74436F6C6F720018546578745365747469 + 6E67732E466F6E742E46616D696C790608436F6E736F6C617305416C69676E07 + 0A4D6F7374426F74746F6D0A506F736974696F6E2E590500000000000000C004 + 400A53697A652E576964746805000000000000008F08400B53697A652E486569 + 6768740500000000000000C006401453697A652E506C6174666F726D44656661 + 756C74080E56696577706F72742E576964746805000000000000008E08400F56 + 696577706F72742E4865696768740500000000000000BC064000000000} + end> + Left = 24 + Top = 24 + end + object StyleBook2: TStyleBook + Styles = < + item + ResourcesBin = { + 464D585F5354594C4520322E3501060F6261636B67726F756E647374796C6503 + AF00060B627574746F6E7374796C6503BA040609656469747374796C6503A305 + 060A6C6162656C7374796C65031501060D67726F7570626F787374796C650383 + 02060D747261636B6261727374796C65038107060D636865636B626F78737479 + 6C6503880506147363726F6C6C62617268747261636B7374796C65033B010614 + 7363726F6C6C62617276747261636B7374796C65033B0106157363726F6C6C62 + 6172626F74746F6D627574746F6E03220406137363726F6C6C6261726C656674 + 627574746F6E03390406147363726F6C6C6261727269676874627574746F6E03 + 3A0406127363726F6C6C626172746F70627574746F6E033804060E7363726F6C + 6C6261727374796C65035804060A7468756D627374796C65033B02060B737769 + 7463687374796C6503D101060D636F6D626F626F787374796C6503F607060E63 + 6F6D626F656469747374796C65038209060F746162636F6E74726F6C7374796C + 65039C01060B746162646F747374796C65035901060C7461626974656D737479 + 6C6503E404060D7468756D626261727374796C65034F03060C6C697374626F78 + 7374796C6503A207060D6C697374626F78666F6F74657203800106106C697374 + 626F786974656D7374796C65031B0306126C697374626F78706C61696E686561 + 646572033B020609677269647374796C65039808060F6865616465726974656D + 7374796C6503C303061970726F67726573736261726D696E696572726F727374 + 796C65035603061170726F677265737363656C6C7374796C65039A0206106D65 + 6E756261726974656D7374796C6503250B060C6D656E756261727374796C6503 + 6C02060D6D656E756974656D7374796C6503520B06126D656E75736570617261 + 746F727374796C65037801060D6D656E75766965777374796C65039102060E69 + 6D61676563656C6C7374796C65033201060E706F70757063656C6C7374796C65 + 03C603060D7465787463656C6C7374796C65039B0106096D656D6F7374796C65 + 03DC07060E6C696E6B6C6162656C7374796C65034503060E7374617475736261 + 727374796C6503E401060C7370696E626F787374796C65035407060D73697A65 + 677269707374796C6503F004060C746F6F6C6261727374796C6503CA00061570 + 726F67726573736261726572726F727374796C65036404060F64726F70746172 + 6765747374796C65036804061464726F707461726765746669656C647374796C + 6503890E060C706F706F7665727374796C65032A02060D706F707570626F7873 + 74796C6503320606147374617475736261726E6F677269707374796C6503D400 + 0613736D616C6C7363726F6C6C6261727374796C6503A301060D73706C697474 + 65727374796C650360040610636C6F7365627574746F6E7374796C6503660406 + 0E6D6178627574746F6E7374796C6503F603060E726573627574746F6E737479 + 6C65030F04060E6D696E627574746F6E7374796C65030E04060F746F6F6C7769 + 6E646F777374796C6503B20D061177696E646F77626F726465727374796C6503 + 4A100610726164696F627574746F6E7374796C6503AE050618756C63656E7465 + 72726164696F627574746F6E7374796C650352050617756C7269676874726164 + 696F627574746F6E7374796C650355050616756C6C656674726164696F627574 + 746F6E7374796C65035005061670726F677265737362617266696E6973687374 + 796C65036504060D657870616E6465727374796C650366060613657870616E64 + 6572627574746F6E7374796C650376020615657870616E646572636865636B62 + 6F787374796C6503D005060E6C6162656C66696C6C7374796C6503B801061363 + 6F6D626F656469746572726F727374796C65038709061E70726F677265737362 + 6172696E64657465726D696E61626C657374796C650379040611616E69696E64 + 696361746F727374796C6503DF010615616E69696E64696361746F72686F727A + 7374796C65038A02060A70616E656C7374796C65031E01060E6C6F6762757474 + 6F6E7374796C65038A07061470726F67726573736261726D696E697374796C65 + 035103061B7472656576696577657870616E646572627574746F6E7374796C65 + 037E02061174726565766965776974656D7374796C65031405060D7472656576 + 6965777374796C650336070619616374696F6E746F6F6C627574746F6E6D756C + 746976696577033F07060E616464627574746F6E7374796C65032C070617696E + 666F746F6F6C627574746F6E6D756C74697669657703A90D061B6F7267616E69 + 7A65746F6F6C627574746F6E6D756C74697669657703EE06061B73657474696E + 6773746F6F6C627574746F6E6D756C746976696577037D13061172656D6F7665 + 627574746F6E7374796C6503CF060614706F7075706261636B67726F756E6473 + 74796C6503BA00061A70726F67726573736261726D696E6966696E6973687374 + 796C65035703061070726F67726573736261727374796C65035F040054504630 + 0A5452656374616E676C6500095374796C654E616D65060F6261636B67726F75 + 6E647374796C6505416C69676E070643656E7465720A46696C6C2E436F6C6F72 + 07097846463244324432440A53697A652E576964746805000000000000009407 + 400B53697A652E4865696768740500000000000080D206401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 0756697369626C650800005450463007544C61796F757400095374796C654E61 + 6D65060B627574746F6E7374796C6505416C69676E070643656E7465720A5369 + 7A652E57696474680500000000000000C805400B53697A652E48656967687405 + 00000000000000C803401453697A652E506C6174666F726D44656661756C7408 + 0756697369626C6508000A5452656374616E676C6500095374796C654E616D65 + 060A6261636B67726F756E6405416C69676E0706436C69656E740C436C697043 + 68696C6472656E090A436C6970506172656E74090A46696C6C2E436F6C6F7207 + 097846463230323032300748697454657374080A53697A652E57696474680500 + 000000000000C805400B53697A652E4865696768740500000000000000C80340 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C65 + 4E616D650615627574746F6E436F6C6F72416E696D6174696F6E310844757261 + 74696F6E05000000000000000000000C50726F70657274794E616D65060A4669 + 6C6C2E436F6C6F720A537461727456616C756507097846463230323032300953 + 746F7056616C756507097846463430343034300754726967676572063049734D + 6F7573654F7665723D747275653B4973507265737365643D66616C73653B4973 + 466F63757365643D66616C73650E54726967676572496E766572736506314973 + 4D6F7573654F7665723D66616C73653B4973507265737365643D66616C73653B + 4973466F63757365643D66616C736500000F54436F6C6F72416E696D6174696F + 6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D617469 + 6F6E32084475726174696F6E05000000000000000000000C50726F7065727479 + 4E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709784646 + 3430343034300953746F7056616C756507097846463137353739430754726967 + 676572062F4973507265737365643D747275653B49734D6F7573654F7665723D + 747275653B4973466F63757365643D66616C736500000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E + 696D6174696F6E33084475726174696F6E05000000000000000000000C50726F + 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 + 07097846463241383245320953746F7056616C75650709784646313735373943 + 0754726967676572062E4973507265737365643D747275653B49734D6F757365 + 4F7665723D747275653B4973466F63757365643D747275650E54726967676572 + 496E7665727365062F4973507265737365643D66616C73653B49734D6F757365 + 4F7665723D747275653B4973466F63757365643D747275650000000554546578 + 7400095374796C654E616D6506047465787405416C69676E0706436C69656E74 + 13456E61626C6544726167486967686C69676874080748697454657374080A53 + 697A652E57696474680500000000000000C805400B53697A652E486569676874 + 0500000000000000C803401453697A652E506C6174666F726D44656661756C74 + 08165465787453657474696E67732E466F6E74436F6C6F720708636C61576869 + 74650000005450463007544C61796F757400095374796C654E616D6506096564 + 69747374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 0500000000000000C805400B53697A652E4865696768740500000000000000C8 + 03401453697A652E506C6174666F726D44656661756C74080756697369626C65 + 08000C5442727573684F626A65637400095374796C654E616D65060A666F7265 + 67726F756E6400000C5442727573684F626A65637400095374796C654E616D65 + 060973656C656374696F6E0B42727573682E436F6C6F72070978393632413832 + 453200000B54466F6E744F626A65637400095374796C654E616D650604666F6E + 7409466F6E742E53697A650500000000000000D0024000000A5452656374616E + 676C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E + 0708436F6E74656E74730A46696C6C2E436F6C6F720709784646323032303230 + 0748697454657374080A53697A652E57696474680500000000000000C805400B + 53697A652E4865696768740500000000000000C803401453697A652E506C6174 + 666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846463135 + 31353135000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 + 0614656469745374726F6B65416E696D6174696F6E31084475726174696F6E05 + 000000000000000000000C50726F70657274794E616D65060C5374726F6B652E + 436F6C6F720A537461727456616C756507097846463135313531350953746F70 + 56616C756507097846463241383245320754726967676572060E4973466F6375 + 7365643D747275650E54726967676572496E7665727365060F4973466F637573 + 65643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C + 654E616D650614656469745374726F6B65416E696D6174696F6E320844757261 + 74696F6E050000000000000000000007496E7665727365090C50726F70657274 + 794E616D65060C5374726F6B652E436F6C6F720A537461727456616C75650709 + 7846463135313531350953746F7056616C756507097846463443344334430754 + 726967676572062149734D6F7573654F7665723D747275653B4973466F637573 + 65643D66616C73653B0E54726967676572496E7665727365062249734D6F7573 + 654F7665723D66616C73653B4973466F63757365643D66616C73653B00000007 + 544C61796F757400095374796C654E616D650607627574746F6E7305416C6967 + 6E07055269676874064C6F636B6564090B4D617267696E732E546F7005000000 + 000000008000400D4D617267696E732E52696768740500000000000000800040 + 0E4D617267696E732E426F74746F6D05000000000000008000400A506F736974 + 696F6E2E580500000000000000C004400A506F736974696F6E2E590500000000 + 0000008000400A53697A652E57696474680500000000000000C804400B53697A + 652E4865696768740500000000000000A803401453697A652E506C6174666F72 + 6D44656661756C7408000007544C61796F757400095374796C654E616D650607 + 636F6E74656E7405416C69676E0706436C69656E74064C6F636B6564090C4D61 + 7267696E732E4C65667405000000000000008001400B4D617267696E732E546F + 7005000000000000008000400D4D617267696E732E5269676874050000000000 + 00008000400E4D617267696E732E426F74746F6D05000000000000008000400A + 53697A652E57696474680500000000000000A804400B53697A652E4865696768 + 740500000000000000A803401453697A652E506C6174666F726D44656661756C + 7408000006544C6162656C00095374796C654E616D65060670726F6D7074064C + 6F636B656409074F706163697479050000000000000080FE3F16546578745365 + 7474696E67732E466F6E74436F6C6F720708636C615768697465045465787406 + 04546578740000005450463007544C61796F757400095374796C654E616D6506 + 0A6C6162656C7374796C6505416C69676E070643656E7465720A53697A652E57 + 696474680500000000000000C805400B53697A652E4865696768740500000000 + 000000C803401453697A652E506C6174666F726D44656661756C740807566973 + 69626C65080005545465787400095374796C654E616D6506047465787405416C + 69676E0708436F6E74656E74730748697454657374080A53697A652E57696474 + 680500000000000000C805400B53697A652E4865696768740500000000000000 + C803401453697A652E506C6174666F726D44656661756C740816546578745365 + 7474696E67732E466F6E74436F6C6F720708636C615768697465000000545046 + 3007544C61796F757400095374796C654E616D65060D67726F7570626F787374 + 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 + 00000000F004400B53697A652E4865696768740500000000000000C804401453 + 697A652E506C6174666F726D44656661756C74080756697369626C6508000A54 + 52656374616E676C6500095374796C654E616D65060A6261636B67726F756E64 + 05416C69676E0708436F6E74656E74730946696C6C2E4B696E6407044E6F6E65 + 0748697454657374080C4D617267696E732E4C6566740500000000000000C000 + 400B4D617267696E732E546F7005000000000000009002400D4D617267696E73 + 2E52696768740500000000000000C000400E4D617267696E732E426F74746F6D + 0500000000000000C000400A53697A652E57696474680500000000000000D804 + 400B53697A652E48656967687405000000000000009804401453697A652E506C + 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 + 3135313531350005545465787400095374796C654E616D650604746578740841 + 75746F53697A65090A436C6970506172656E74090748697454657374080C4D61 + 7267696E732E4C6566740500000000000000A002400A506F736974696F6E2E58 + 05000000000060559502400A506F736974696F6E2E590500000000004055D501 + C00A53697A652E576964746805000000000000B8C703400B53697A652E486569 + 6768740500000000000060FF02401453697A652E506C6174666F726D44656661 + 756C7408165465787453657474696E67732E466F6E74436F6C6F720708636C61 + 5768697465155465787453657474696E67732E576F7264577261700800000000 + 5450463007544C61796F757400095374796C654E616D65060D747261636B6261 + 727374796C6505416C69676E070643656E7465720A53697A652E576964746805 + 00000000000000C805400B53697A652E4865696768740500000000000000C805 + 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 + 0B46697865644865696768740211000A5452656374616E676C6500095374796C + 654E616D65060668747261636B05416C69676E070A5665727443656E7465720A + 46696C6C2E436F6C6F7207097846463135313531350748697454657374080A50 + 6F736974696F6E2E590500000000000000BC04400A53697A652E576964746805 + 00000000000000C805400B53697A652E4865696768740500000000000000A001 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E65000A5452656374616E676C6500095374796C654E616D65 + 060A6261636B67726F756E6405416C69676E0708436F6E74656E74730946696C + 6C2E4B696E6407044E6F6E65064C6F636B6564090748697454657374080C4D61 + 7267696E732E4C6566740500000000000000C001400B4D617267696E732E546F + 70050000000000000080FF3F0D4D617267696E732E5269676874050000000000 + 0000C001400E4D617267696E732E426F74746F6D050000000000000080FF3F0A + 53697A652E57696474680500000000000000B005400B53697A652E4865696768 + 740500000000000000C000401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E676C + 6500095374796C654E616D650609686967686C6967687405416C69676E07044C + 6566740A46696C6C2E436F6C6F72070978464632413832453207486974546573 + 74080C50616464696E672E4C6566740500000000000000A002400A53697A652E + 57696474680500000000000000F003400B53697A652E48656967687405000000 + 00000000A001401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E6500000B54476C6F77456666656374000853 + 6F66746E657373050000000000CDCCCCFC3F09476C6F77436F6C6F7207097846 + 46324138324532074F706163697479050000000000000080FF3F07456E61626C + 6564080000000A5452656374616E676C6500095374796C654E616D6506067674 + 7261636B05416C69676E070A486F727A43656E7465720A46696C6C2E436F6C6F + 7207097846463135313531350748697454657374080A506F736974696F6E2E58 + 0500000000000000BC04400A53697A652E57696474680500000000000000A001 + 400B53697A652E4865696768740500000000000000C805401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 000A5452656374616E676C6500095374796C654E616D65060A6261636B67726F + 756E6405416C69676E0708436F6E74656E74730946696C6C2E4B696E6407044E + 6F6E65064C6F636B6564090748697454657374080C4D617267696E732E4C6566 + 740500000000000000C001400B4D617267696E732E546F700500000000000000 + 80FF3F0D4D617267696E732E52696768740500000000000000C001400E4D6172 + 67696E732E426F74746F6D050000000000000080FF3F0A53697A652E57696474 + 6805000000000000000000000B53697A652E4865696768740500000000000000 + C405401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E6500000A5452656374616E676C6500095374796C654E + 616D650609686967686C6967687405416C69676E0703546F700A46696C6C2E43 + 6F6C6F7207097846463241383245320748697454657374080A53697A652E5769 + 6474680500000000000000A001400B53697A652E486569676874050000000000 + 0000F003401453697A652E506C6174666F726D44656661756C74080B5374726F + 6B652E4B696E6407044E6F6E6500000B54476C6F774566666563740008536F66 + 746E657373050000000000CDCCCCFC3F09476C6F77436F6C6F72070978464632 + 4138324532074F706163697479050000000000000080FF3F07456E61626C6564 + 0800000006545468756D6200095374796C654E616D650606687468756D62064C + 6F636B6564090A506F736974696F6E2E580500000000003033AB03400A506F73 + 6974696F6E2E59050000000000FFFFA304400A53697A652E5769647468050000 + 0000000000F002400B53697A652E4865696768740500000000000000F0024014 + 53697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B75 + 70060D7468756D626261727374796C65000006545468756D6200095374796C65 + 4E616D650606767468756D62064C6F636B6564090A506F736974696F6E2E5805 + 0000000000CBCCA804400A506F736974696F6E2E590500000000009899B10340 + 0A53697A652E57696474680500000000000000F002400B53697A652E48656967 + 68740500000000000000F002401453697A652E506C6174666F726D4465666175 + 6C74080B5374796C654C6F6F6B7570060D7468756D626261727374796C650000 + 005450463007544C61796F757400095374796C654E616D65060D636865636B62 + 6F787374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 050000000000ACAA8006400B53697A652E486569676874050000000000585599 + 04401453697A652E506C6174666F726D44656661756C74080756697369626C65 + 080007544C61796F75740005416C69676E07044C6566740A53697A652E576964 + 746805000000000000009003400B53697A652E48656967687405000000000058 + 559904401453697A652E506C6174666F726D44656661756C7408000A54526563 + 74616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C + 69676E070643656E7465720A46696C6C2E436F6C6F7207097846463230323032 + 300748697454657374080A53697A652E57696474680500000000000000F00240 + 0B53697A652E4865696768740500000000000000F002401453697A652E506C61 + 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 + 3531353135000A5452656374616E676C6500095374796C654E616D65060A5265 + 6374616E676C653105416C69676E0706436C69656E740A46696C6C2E436F6C6F + 720709784646324138324532074869745465737408074F706163697479050000 + 00000000000000000C4D617267696E732E4C6566740500000000000000800040 + 0B4D617267696E732E546F7005000000000000008000400D4D617267696E732E + 526967687405000000000000008000400E4D617267696E732E426F74746F6D05 + 000000000000008000400A53697A652E57696474680500000000000000B00240 + 0B53697A652E4865696768740500000000000000B002401453697A652E506C61 + 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500 + 0F54466C6F6174416E696D6174696F6E00095374796C654E616D65061B636865 + 6368626F7856697362696C697479416E696D6174696F6E31084475726174696F + 6E05000000000000000000000C50726F70657274794E616D6506074F70616369 + 74790A537461727456616C756505000000000000000000000953746F7056616C + 75650500000000000000C805400754726967676572060E4973436865636B6564 + 3D747275650E54726967676572496E7665727365060F4973436865636B65643D + 66616C73650000000F54436F6C6F72416E696D6174696F6E00095374796C654E + 616D650618636865636B626F785374726F6B65416E696D6174696F6E31084475 + 726174696F6E05000000000000000000000C50726F70657274794E616D65060C + 5374726F6B652E436F6C6F720A537461727456616C7565070978464631353135 + 31350953746F7056616C75650709784646324138324532075472696767657206 + 0E4973436865636B65643D747275650E54726967676572496E7665727365060F + 4973436865636B65643D66616C736500000F54436F6C6F72416E696D6174696F + 6E00095374796C654E616D650617636865636B626F78436F6C6F72416E696D61 + 74696F6E31084475726174696F6E05000000000000000000000C50726F706572 + 74794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978 + 46463230323032300953746F7056616C75650709784646343034303430075472 + 6967676572061049734D6F7573654F7665723D747275650E5472696767657249 + 6E7665727365061149734D6F7573654F7665723D66616C736500000000055454 + 65787400095374796C654E616D6506047465787405416C69676E0706436C6965 + 6E740A53697A652E57696474680500000000005855DD05400B53697A652E4865 + 6967687405000000000058559904401453697A652E506C6174666F726D446566 + 61756C7408165465787453657474696E67732E466F6E74436F6C6F720708636C + 615768697465000000545046300A5452656374616E676C6500095374796C654E + 616D6506147363726F6C6C62617268747261636B7374796C6505416C69676E07 + 0643656E7465720A46696C6C2E436F6C6F720709784646313531353135074869 + 7454657374080A53697A652E57696474680500000000000000C804400B53697A + 652E4865696768740500000000000000C804401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650756697369 + 626C65080006545468756D6200095374796C654E616D6506057468756D62064C + 6F636B6564090A53697A652E576964746805000000000000008003400B53697A + 652E4865696768740500000000000000C804401453697A652E506C6174666F72 + 6D44656661756C74080B5374796C654C6F6F6B7570060A7468756D627374796C + 65000000545046300A5452656374616E676C6500095374796C654E616D650614 + 7363726F6C6C62617276747261636B7374796C6505416C69676E070643656E74 + 65720A46696C6C2E436F6C6F7207097846463135313531350748697454657374 + 080A53697A652E57696474680500000000000000C804400B53697A652E486569 + 6768740500000000000000C804401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E650756697369626C650800 + 06545468756D6200095374796C654E616D6506057468756D62064C6F636B6564 + 090A53697A652E57696474680500000000000000C804400B53697A652E486569 + 67687405000000000000008003401453697A652E506C6174666F726D44656661 + 756C74080B5374796C654C6F6F6B7570060A7468756D627374796C6500000054 + 50463007544C61796F757400095374796C654E616D6506157363726F6C6C6261 + 72626F74746F6D627574746F6E05416C69676E070643656E7465720756697369 + 626C6508000A5452656374616E676C6500095374796C654E616D65060A626163 + 6B67726F756E6405416C69676E0706436C69656E740C436C69704368696C6472 + 656E090A436C6970506172656E74090A46696C6C2E436F6C6F72070978464632 + 30323032300748697454657374080A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000000000C804401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 15627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E05 + 000000000000000000000C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463230323032300953746F705661 + 6C756507097846463430343034300754726967676572062049734D6F7573654F + 7665723D747275653B4973507265737365643D66616C73650E54726967676572 + 496E7665727365062149734D6F7573654F7665723D66616C73653B4973507265 + 737365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E320844 + 75726174696F6E05000000000000000000000C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C756507097846463430343034 + 300953746F7056616C756507097846463137353739430754726967676572061F + 4973507265737365643D747275653B49734D6F7573654F7665723D747275650E + 54726967676572496E766572736506204973507265737365643D66616C73653B + 49734D6F7573654F7665723D7472756500000007544C61796F75740009537479 + 6C654E616D6506074C61796F75743105416C69676E070643656E7465720A5369 + 7A652E57696474680500000000000000A002400B53697A652E48656967687405 + 00000000000000C001401453697A652E506C6174666F726D44656661756C7408 + 0005545061746800095374796C654E616D650605506174683105416C69676E07 + 06436C69656E7409446174612E506174680A3400000004000000000000000000 + C8420000C84201000000000096430000C8420100000000004843000096430300 + 00000000C8420000C8420A46696C6C2E436F6C6F720708636C61576869746507 + 48697454657374080A53697A652E57696474680500000000000000A002400B53 + 697A652E4865696768740500000000000000C001401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000 + 005450463007544C61796F757400095374796C654E616D6506137363726F6C6C + 6261726C656674627574746F6E05416C69676E070643656E7465720756697369 + 626C6508000A5452656374616E676C6500095374796C654E616D65060A626163 + 6B67726F756E6405416C69676E0706436C69656E740C436C69704368696C6472 + 656E090A436C6970506172656E74090A46696C6C2E436F6C6F72070978464632 + 30323032300748697454657374080A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000000000C804401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 15627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E05 + 000000000000000000000C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463230323032300953746F705661 + 6C756507097846463430343034300754726967676572062049734D6F7573654F + 7665723D747275653B4973507265737365643D66616C73650E54726967676572 + 496E7665727365062149734D6F7573654F7665723D66616C73653B4973507265 + 737365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E320844 + 75726174696F6E05000000000000000000000C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C756507097846463430343034 + 300953746F7056616C756507097846463137353739430754726967676572061F + 4973507265737365643D747275653B49734D6F7573654F7665723D747275650E + 54726967676572496E766572736506204973507265737365643D66616C73653B + 49734D6F7573654F7665723D7472756500000007544C61796F75740009537479 + 6C654E616D6506074C61796F75743105416C69676E070643656E7465720A5369 + 7A652E57696474680500000000000000A002400B53697A652E48656967687405 + 00000000000000C001401453697A652E506C6174666F726D44656661756C7408 + 0005545061746800095374796C654E616D650605506174683105416C69676E07 + 06436C69656E7409446174612E506174680A3400000004000000000000000000 + C8420000C84201000000000096430000C8420100000000004843000096430300 + 00000000C8420000C8420A46696C6C2E436F6C6F720708636C61576869746507 + 48697454657374080D526F746174696F6E416E676C650500000000000000B405 + 400A53697A652E57696474680500000000000000A002400B53697A652E486569 + 6768740500000000000000C001401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E6500000000545046300754 + 4C61796F757400095374796C654E616D6506147363726F6C6C62617272696768 + 74627574746F6E05416C69676E070643656E7465720756697369626C6508000A + 5452656374616E676C6500095374796C654E616D65060A6261636B67726F756E + 6405416C69676E0706436C69656E740C436C69704368696C6472656E090A436C + 6970506172656E74090A46696C6C2E436F6C6F72070978464632303230323007 + 48697454657374080A53697A652E57696474680500000000000000C804400B53 + 697A652E4865696768740500000000000000C804401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F + 6E436F6C6F72416E696D6174696F6E31084475726174696F6E05000000000000 + 000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 + 61727456616C756507097846463230323032300953746F7056616C7565070978 + 46463430343034300754726967676572062049734D6F7573654F7665723D7472 + 75653B4973507265737365643D66616C73650E54726967676572496E76657273 + 65062149734D6F7573654F7665723D66616C73653B4973507265737365643D66 + 616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650615627574746F6E436F6C6F72416E696D6174696F6E32084475726174696F + 6E05000000000000000000000C50726F70657274794E616D65060A46696C6C2E + 436F6C6F720A537461727456616C756507097846463430343034300953746F70 + 56616C756507097846463137353739430754726967676572061F497350726573 + 7365643D747275653B49734D6F7573654F7665723D747275650E547269676765 + 72496E766572736506204973507265737365643D66616C73653B49734D6F7573 + 654F7665723D7472756500000007544C61796F757400095374796C654E616D65 + 06074C61796F75743105416C69676E070643656E7465720A53697A652E576964 + 74680500000000000000A002400B53697A652E48656967687405000000000000 + 00C001401453697A652E506C6174666F726D44656661756C7408000554506174 + 6800095374796C654E616D650605506174683105416C69676E0706436C69656E + 7409446174612E506174680A3400000004000000000000000000C8420000C842 + 01000000000096430000C842010000000000484300009643030000000000C842 + 0000C8420A46696C6C2E436F6C6F720708636C61576869746507486974546573 + 74080D526F746174696F6E416E676C650500000000000000B405C00A53697A65 + 2E57696474680500000000000000A002400B53697A652E486569676874050000 + 0000000000C001401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E65000000005450463007544C61796F7574 + 00095374796C654E616D6506127363726F6C6C626172746F70627574746F6E05 + 416C69676E070643656E7465720756697369626C6508000A5452656374616E67 + 6C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E07 + 06436C69656E740C436C69704368696C6472656E090A436C6970506172656E74 + 090A46696C6C2E436F6C6F720709784646323032303230074869745465737408 + 0A53697A652E57696474680500000000000000C804400B53697A652E48656967 + 68740500000000000000C804401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E + 696D6174696F6E31084475726174696F6E05000000000000000000000C50726F + 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 + 07097846463230323032300953746F7056616C75650709784646343034303430 + 0754726967676572062049734D6F7573654F7665723D747275653B4973507265 + 737365643D66616C73650E54726967676572496E7665727365062149734D6F75 + 73654F7665723D66616C73653B4973507265737365643D66616C736500000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F + 6E436F6C6F72416E696D6174696F6E32084475726174696F6E05000000000000 + 000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 + 61727456616C756507097846463430343034300953746F7056616C7565070978 + 46463137353739430754726967676572061F4973507265737365643D74727565 + 3B49734D6F7573654F7665723D747275650E54726967676572496E7665727365 + 06204973507265737365643D66616C73653B49734D6F7573654F7665723D7472 + 756500000007544C61796F757400095374796C654E616D6506074C61796F7574 + 3105416C69676E070643656E7465720A53697A652E5769647468050000000000 + 0000A002400B53697A652E4865696768740500000000000000C001401453697A + 652E506C6174666F726D44656661756C74080005545061746800095374796C65 + 4E616D650605506174683105416C69676E0706436C69656E7409446174612E50 + 6174680A3400000004000000000000000000C8420000C8420100000000009643 + 0000C842010000000000484300009643030000000000C8420000C8420A46696C + 6C2E436F6C6F720708636C6157686974650748697454657374080D526F746174 + 696F6E416E676C650500000000000000B406400A53697A652E57696474680500 + 000000000000A002400B53697A652E4865696768740500000000000000C00140 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E65000000005450463007544C61796F757400095374796C654E + 616D65060E7363726F6C6C6261727374796C6505416C69676E070643656E7465 + 720756697369626C6508000754427574746F6E00095374796C654E616D65060A + 6C656674627574746F6E05416C69676E07044C656674064C6F636B6564090A50 + 6F736974696F6E2E5905000000000000008003400A53697A652E576964746805 + 000000000000008003400B53697A652E48656967687405000000000000009003 + 401453697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F + 6B757006137363726F6C6C6261726C656674627574746F6E0000075442757474 + 6F6E00095374796C654E616D65060B7269676874627574746F6E05416C69676E + 07055269676874064C6F636B6564090A506F736974696F6E2E58050000000000 + 00008804400A506F736974696F6E2E5905000000000000008003400A53697A65 + 2E576964746805000000000000008003400B53697A652E486569676874050000 + 00000000009003401453697A652E506C6174666F726D44656661756C74080B53 + 74796C654C6F6F6B757006147363726F6C6C6261727269676874627574746F6E + 00000754427574746F6E00095374796C654E616D65060C626F74746F6D627574 + 746F6E05416C69676E0706426F74746F6D064C6F636B6564090A506F73697469 + 6F6E2E5905000000000000008804400A53697A652E5769647468050000000000 + 0000C804400B53697A652E48656967687405000000000000008003401453697A + 652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B75700615 + 7363726F6C6C626172626F74746F6D627574746F6E00000654547261636B0009 + 5374796C654E616D65060668747261636B05416C69676E0706436C69656E7406 + 4C6F636B6564090B4F7269656E746174696F6E070A486F72697A6F6E74616C0A + 53697A652E576964746805000000000000009003400B53697A652E4865696768 + 7405000000000000009003401453697A652E506C6174666F726D44656661756C + 74080B5374796C654C6F6F6B757006147363726F6C6C62617268747261636B73 + 74796C6500000654547261636B00095374796C654E616D65060676747261636B + 05416C69676E0706436C69656E74064C6F636B6564090B4F7269656E74617469 + 6F6E070A486F72697A6F6E74616C0A53697A652E576964746805000000000000 + 009003400B53697A652E48656967687405000000000000009003401453697A65 + 2E506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570061473 + 63726F6C6C62617276747261636B7374796C6500000754427574746F6E000953 + 74796C654E616D650609746F70627574746F6E05416C69676E0703546F700A53 + 697A652E57696474680500000000000000C804400B53697A652E486569676874 + 05000000000000008003401453697A652E506C6174666F726D44656661756C74 + 080B5374796C654C6F6F6B757006127363726F6C6C626172746F70627574746F + 6E000000545046300A5452656374616E676C6500095374796C654E616D65060A + 7468756D627374796C6505416C69676E070643656E7465720A46696C6C2E436F + 6C6F7207097846463444344434440748697454657374080A53697A652E576964 + 74680500000000000000C804400B53697A652E48656967687405000000000000 + 00C804401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E650756697369626C6508000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D6506147468756D62436F6C6F72416E69 + 6D6174696F6E31084475726174696F6E05000000000000000000000C50726F70 + 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 + 097846463444344434440953746F7056616C7565070978464631373537394307 + 54726967676572060E4973507265737365643D747275650E5472696767657249 + 6E7665727365060F4973507265737365643D66616C736500000F54436F6C6F72 + 416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D61 + 74696F6E315374796C65084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C + 756507097846463444344434440953746F7056616C75650707636C6147726179 + 0754726967676572061049734D6F7573654F7665723D747275650E5472696767 + 6572496E7665727365061149734D6F7573654F7665723D66616C736500000054 + 5046300D545377697463684F626A65637400095374796C654E616D65060B7377 + 697463687374796C6505416C69676E070643656E746572044B696E64070C4661 + 64696E67547261636B730A53697A652E57696474680500000000000000C80540 + 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 + 74666F726D44656661756C740812547261636B696E675468756D625363616C65 + 050000000000000080FF3F0756697369626C65080A46696C6C2E436F6C6F7207 + 097846463230323032300C46696C6C4F6E2E436F6C6F72070978464631373537 + 39430B46696C6C4F6E2E4B696E640705536F6C69640B5374726F6B652E4B696E + 6407044E6F6E650B5468756D622E436F6C6F7207097846463430343034300D54 + 68756D624F6E2E436F6C6F7207097846463241383245320C5468756D624F6E2E + 4B696E640705536F6C6964105468756D625374726F6B652E4B696E6407044E6F + 6E650F5468756D625374726F6B652E4361700705526F756E64105468756D6253 + 74726F6B652E446173680706437573746F6D105468756D625374726F6B652E4A + 6F696E0705526F756E64165468756D625374726F6B652E437573746F6D446173 + 680A08000000000000000000000000005450463007544C61796F757400095374 + 796C654E616D65060D636F6D626F626F787374796C6505416C69676E07064365 + 6E7465720A53697A652E57696474680500000000000000C805400B53697A652E + 4865696768740500000000000000C803401453697A652E506C6174666F726D44 + 656661756C74080756697369626C6508000C5442727573684F626A6563740009 + 5374796C654E616D65060A666F726567726F756E6400000B54466F6E744F626A + 65637400095374796C654E616D650604666F6E7409466F6E742E53697A650500 + 000000000000D00240000007544C61796F757400095374796C654E616D65060A + 6261636B67726F756E6405416C69676E0708436F6E74656E74730A53697A652E + 57696474680500000000000000C805400B53697A652E48656967687405000000 + 00000000C803401453697A652E506C6174666F726D44656661756C7408000A54 + 52656374616E676C6500095374796C654E616D65060A52656374616E676C6531 + 05416C69676E0706436C69656E740A46696C6C2E436F6C6F7207097846463230 + 323032300748697454657374080A53697A652E57696474680500000000000000 + C805400B53697A652E4865696768740500000000000000C803401453697A652E + 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F + 6E650007544C61796F757400095374796C654E616D650611427574746F6E5374 + 796C654F626A65637405416C69676E070846697452696768740B4D617267696E + 732E546F70050000000000000080FF3F0D4D617267696E732E52696768740500 + 00000000000080FF3F0E4D617267696E732E426F74746F6D0500000000000000 + 80FF3F0A506F736974696F6E2E580500000000005ED99705400A506F73697469 + 6F6E2E59050000000000000080FF3F0A53697A652E5769647468050000000000 + 889AB803400B53697A652E4865696768740500000000000000B803401453697A + 652E506C6174666F726D44656661756C74080007544C61796F75740009537479 + 6C654E616D6506074C61796F75743105416C69676E070643656E7465720C4D61 + 7267696E732E4C656674050000000000000080FF3F0A53697A652E5769647468 + 0500000000000000A002400B53697A652E4865696768740500000000000000C0 + 01401453697A652E506C6174666F726D44656661756C74080005545061746800 + 095374796C654E616D650605506174683105416C69676E0706436C69656E7409 + 446174612E506174680A3400000004000000000000000000C8420000C8420100 + 0000000096430000C842010000000000484300009643030000000000C8420000 + C8420A46696C6C2E436F6C6F720708636C615768697465074869745465737408 + 0A53697A652E57696474680500000000000000A002400B53697A652E48656967 + 68740500000000000000C001401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E65000000000F54436F6C6F72 + 416E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F + 72416E696D6174696F6E31084475726174696F6E05000000000000000000000C + 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 + 6C756507097846463230323032300953746F7056616C75650709784646343034 + 3034300754726967676572063049734D6F7573654F7665723D747275653B4973 + 507265737365643D66616C73653B4973466F63757365643D66616C73650E5472 + 6967676572496E7665727365063149734D6F7573654F7665723D66616C73653B + 4973507265737365643D66616C73653B4973466F63757365643D66616C736500 + 000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506156275 + 74746F6E436F6C6F72416E696D6174696F6E32084475726174696F6E05000000 + 000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F72 + 0A537461727456616C756507097846463430343034300953746F7056616C7565 + 07097846463137353739430754726967676572062F4973507265737365643D74 + 7275653B49734D6F7573654F7665723D747275653B4973466F63757365643D66 + 616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650615627574746F6E436F6C6F72416E696D6174696F6E33084475726174696F + 6E05000000000000000000000C50726F70657274794E616D65060A46696C6C2E + 436F6C6F720A537461727456616C756507097846463241383245320953746F70 + 56616C756507097846463137353739430754726967676572062E497350726573 + 7365643D747275653B49734D6F7573654F7665723D747275653B4973466F6375 + 7365643D747275650E54726967676572496E7665727365062F49735072657373 + 65643D66616C73653B49734D6F7573654F7665723D747275653B4973466F6375 + 7365643D747275650000000007544C61796F757400095374796C654E616D6506 + 07636F6E74656E7405416C69676E0706436C69656E74064C6F636B6564090C4D + 617267696E732E4C65667405000000000000008000400B4D617267696E732E54 + 6F7005000000000000008000400D4D617267696E732E52696768740500000000 + 000000D803400E4D617267696E732E426F74746F6D0500000000000000800040 + 0A53697A652E576964746805000000000000008E05400B53697A652E48656967 + 68740500000000000000A803401453697A652E506C6174666F726D4465666175 + 6C74080000005450463007544C61796F757400095374796C654E616D65060E63 + 6F6D626F656469747374796C6505416C69676E070643656E7465720A53697A65 + 2E57696474680500000000000000C805400B53697A652E486569676874050000 + 0000000000C803401453697A652E506C6174666F726D44656661756C74080756 + 697369626C6508000C5442727573684F626A65637400095374796C654E616D65 + 060A666F726567726F756E6400000B54466F6E744F626A65637400095374796C + 654E616D650604666F6E7409466F6E742E53697A650500000000000000D00240 + 000007544C61796F757400095374796C654E616D65060A6261636B67726F756E + 6405416C69676E0708436F6E74656E74730A53697A652E576964746805000000 + 00000000C805400B53697A652E4865696768740500000000000000C803401453 + 697A652E506C6174666F726D44656661756C7408000A5452656374616E676C65 + 00095374796C654E616D65060A52656374616E676C653105416C69676E070643 + 6C69656E740A46696C6C2E436F6C6F7207097846463230323032300748697454 + 657374080A53697A652E57696474680500000000000000C805400B53697A652E + 4865696768740500000000000000C803401453697A652E506C6174666F726D44 + 656661756C74080C5374726F6B652E436F6C6F72070978464632303230323000 + 0F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C + 6F72416E696D6174696F6E315374796C65084475726174696F6E050000000000 + 000000000007496E7665727365090C50726F70657274794E616D65060C537472 + 6F6B652E436F6C6F720A537461727456616C7565070978464632303230323009 + 53746F7056616C75650709784646343034303430075472696767657206204973 + 4D6F7573654F7665723D747275653B4973466F63757365643D66616C73650E54 + 726967676572496E7665727365062149734D6F7573654F7665723D66616C7365 + 3B4973466F63757365643D66616C736500000F54436F6C6F72416E696D617469 + 6F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E325374 + 796C65084475726174696F6E050000000000000000000007496E766572736509 + 0C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A53746172 + 7456616C756507097846463430343034300953746F7056616C75650709784646 + 3241383245320754726967676572061F49734D6F7573654F7665723D74727565 + 3B4973466F63757365643D747275650E54726967676572496E76657273650620 + 49734D6F7573654F7665723D747275653B4973466F63757365643D66616C7365 + 000007544C61796F757400095374796C654E616D6506056172726F7705416C69 + 676E070846697452696768740B4D617267696E732E546F700500000000000000 + 80FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D6172 + 67696E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E + 580500000000005ED99705400A506F736974696F6E2E59050000000000000080 + FF3F0A53697A652E5769647468050000000000889AB803400B53697A652E4865 + 696768740500000000000000B803401453697A652E506C6174666F726D446566 + 61756C7408000A5452656374616E676C6500095374796C654E616D65060A5265 + 6374616E676C653105416C69676E0708436F6E74656E74730A46696C6C2E436F + 6C6F7207097846463330333033300748697454657374080A53697A652E576964 + 7468050000000000889AB803400B53697A652E48656967687405000000000000 + 00B803401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E000953 + 74796C654E616D650614436F6C6F72416E696D6174696F6E315374796C650844 + 75726174696F6E050000000000000000000007496E7665727365090C50726F70 + 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 + 097846463330333033300953746F7056616C7565070978464634303430343007 + 54726967676572062049734D6F7573654F7665723D747275653B4973466F6375 + 7365643D66616C73650E54726967676572496E7665727365062149734D6F7573 + 654F7665723D66616C73653B4973466F63757365643D66616C736500000F5443 + 6F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F7241 + 6E696D6174696F6E325374796C65084475726174696F6E050000000000000000 + 00000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 + 7456616C756507097846463430343034300953746F7056616C75650709784646 + 3137353739430754726967676572061F4973466F63757365643D747275653B49 + 734D6F7573654F7665723D7472756500000007544C61796F757400095374796C + 654E616D6506074C61796F75743105416C69676E070643656E7465720C4D6172 + 67696E732E4C656674050000000000000080FF3F0A53697A652E576964746805 + 00000000000000A002400B53697A652E4865696768740500000000000000C001 + 401453697A652E506C6174666F726D44656661756C7408000554506174680009 + 5374796C654E616D650605506174683105416C69676E0706436C69656E740944 + 6174612E506174680A3400000004000000000000000000C8420000C842010000 + 00000096430000C842010000000000484300009643030000000000C8420000C8 + 420A46696C6C2E436F6C6F720708636C6157686974650748697454657374080A + 53697A652E57696474680500000000000000A002400B53697A652E4865696768 + 740500000000000000C001401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E650000000000000C5442727573 + 684F626A65637400095374796C654E616D65060973656C656374696F6E0B4272 + 7573682E436F6C6F720709783936324138324532000007544C61796F75740009 + 5374796C654E616D650607636F6E74656E7405416C69676E0706436C69656E74 + 0C4D617267696E732E4C65667405000000000000008000400B4D617267696E73 + 2E546F7005000000000000008000400D4D617267696E732E5269676874050000 + 0000000000F003400E4D617267696E732E426F74746F6D050000000000000080 + 00400A53697A652E576964746805000000000000008805400B53697A652E4865 + 696768740500000000000000A803401453697A652E506C6174666F726D446566 + 61756C74080000005450463007544C61796F757400095374796C654E616D6506 + 0F746162636F6E74726F6C7374796C6505416C69676E070643656E7465720A53 + 697A652E576964746805000000000000008E06400B53697A652E486569676874 + 050000000000FFFFC905401453697A652E506C6174666F726D44656661756C74 + 080756697369626C6508000A5452656374616E676C6500095374796C654E616D + 65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A4669 + 6C6C2E436F6C6F720709784646333033303330064C6F636B6564090748697454 + 657374080C50616464696E672E4C65667405000000000000008000400B506164 + 64696E672E546F7005000000000000008000400D50616464696E672E52696768 + 7405000000000000008000400E50616464696E672E426F74746F6D0500000000 + 0000008000400A53697A652E576964746805000000000000008E06400B53697A + 652E486569676874050000000000FFFFC905401453697A652E506C6174666F72 + 6D44656661756C74080C5374726F6B652E436F6C6F7207097846463135313531 + 35000000545046300A5452656374616E676C6500095374796C654E616D65060B + 746162646F747374796C6505416C69676E070643656E7465720A46696C6C2E43 + 6F6C6F7207097846463135313531350748697454657374080A53697A652E5769 + 64746805000000000000008005400B53697A652E486569676874050000000000 + 00008001401453697A652E506C6174666F726D44656661756C74080B5374726F + 6B652E4B696E6407044E6F6E650756697369626C6508000F54436F6C6F72416E + 696D6174696F6E00084475726174696F6E05000000000018B7D1F23F0C50726F + 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 + 07097846463135313531350953746F7056616C75650709784646324138324532 + 0754726967676572060F497353656C65637465643D747275650E547269676765 + 72496E76657273650610497353656C65637465643D66616C7365000000545046 + 3007544C61796F757400095374796C654E616D65060C7461626974656D737479 + 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 + 000000C804400B53697A652E4865696768740500000000000000C80340145369 + 7A652E506C6174666F726D44656661756C74080756697369626C6508000A5452 + 656374616E676C6500095374796C654E616D650603746F7005416C69676E0708 + 436F6E74656E74730C436C69704368696C6472656E0907436F726E6572730B07 + 546F704C65667408546F705269676874000A46696C6C2E436F6C6F7207097846 + 46323032303230064C6F636B6564090748697454657374080553696465730B03 + 546F70044C656674055269676874000A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000000000C803401453697A + 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 + 09784646313531353135000654476C79706800095374796C654E616D65060A67 + 6C7970687374796C650C4D617267696E732E4C65667405000000000000008001 + 400D4D617267696E732E526967687405000000000000008001C005416C69676E + 07044C6566740A53697A652E576964746805000000000000008003400B53697A + 652E48656967687405000000000000008003401453697A652E506C6174666F72 + 6D44656661756C7408000005545465787400095374796C654E616D6506047465 + 787405416C69676E0706436C69656E74064C6F636B6564090748697454657374 + 080C4D617267696E732E4C6566740500000000000000C000400B4D617267696E + 732E546F700500000000000000C000400D4D617267696E732E52696768740500 + 000000000000C000400E4D617267696E732E426F74746F6D0500000000000000 + C000400A53697A652E57696474680500000000000000B004400B53697A652E48 + 656967687405000000000000009803401453697A652E506C6174666F726D4465 + 6661756C7408165465787453657474696E67732E466F6E74436F6C6F72070863 + 6C615768697465155465787453657474696E67732E576F726457726170080000 + 0F54436F6C6F72416E696D6174696F6E00095374796C654E616D650612746162 + 436F6C6F72416E696D6174696F6E310D416E696D6174696F6E54797065070549 + 6E4F7574084475726174696F6E05000000000000000000000C50726F70657274 + 794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507097846 + 463230323032300953746F7056616C7565070978464634303430343007547269 + 67676572062149734D6F7573654F7665723D747275653B497353656C65637465 + 643D66616C73650E54726967676572496E7665727365062249734D6F7573654F + 7665723D66616C73653B497353656C65637465643D66616C736500000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650612746162436F6C6F + 72416E696D6174696F6E32084475726174696F6E05000000000000000000000C + 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 + 6C756507097846463230323032300953746F7056616C75650709784646324138 + 3245320754726967676572060F497353656C65637465643D747275650E547269 + 67676572496E76657273650610497353656C65637465643D66616C7365000000 + 00545046300A5452656374616E676C6500095374796C654E616D65060D746875 + 6D626261727374796C6505416C69676E070643656E7465720A46696C6C2E436F + 6C6F7207097846463241383245320748697454657374080A53697A652E576964 + 74680500000000000000A003400B53697A652E48656967687405000000000000 + 00A003401453697A652E506C6174666F726D44656661756C74080C5374726F6B + 652E436F6C6F7207097846463135313531350756697369626C6508000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D6506147468756D62436F + 6C6F72416E696D6174696F6E31084475726174696F6E05000000000000000000 + 000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374617274 + 56616C756507097846463241383245320953746F7056616C7565070978464631 + 37353739430754726967676572061F4973507265737365643D747275653B4973 + 4D6F7573654F7665723D747275650E54726967676572496E7665727365061049 + 73507265737365643D66616C73653B00000F54436F6C6F72416E696D6174696F + 6E00095374796C654E616D6506147468756D62436F6C6F72416E696D6174696F + 6E32084475726174696F6E05000000000000000000000C50726F70657274794E + 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464632 + 41383245320953746F7056616C75650709784646343039424646075472696767 + 6572062049734D6F7573654F7665723D747275653B4973507265737365643D66 + 616C73650E54726967676572496E7665727365062149734D6F7573654F766572 + 3D66616C73653B4973507265737365643D66616C736500000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D6506157468756D625374726F6B65 + 416E696D6174696F6E31084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D65060C5374726F6B652E436F6C6F720A537461727456 + 616C756507097846463135313531350953746F7056616C756507097846463137 + 353739430754726967676572061F4973507265737365643D747275653B49734D + 6F7573654F7665723D747275650E54726967676572496E7665727365060F4973 + 507265737365643D66616C73650000005450463007544C61796F757400095374 + 796C654E616D65060C6C697374626F787374796C6505416C69676E070643656E + 7465720A53697A652E5769647468050000000000FFFFE905400B53697A652E48 + 656967687405000000000000008306401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C6508000C5442727573684F626A656374000953 + 74796C654E616D650618416C7465726E6174696E67526F774261636B67726F75 + 6E640B42727573682E436F6C6F72070978464632433243324300000A54526563 + 74616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C + 69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646323032 + 303230064C6F636B6564090748697454657374080C50616464696E672E4C6566 + 7405000000000000008000400B50616464696E672E546F700500000000000000 + 8000400D50616464696E672E526967687405000000000000008000400E506164 + 64696E672E426F74746F6D05000000000000008000400A53697A652E57696474 + 68050000000000FFFFE905400B53697A652E4865696768740500000000000000 + 8306401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 + 2E436F6C6F7207097846463135313531350007544C61796F757400095374796C + 654E616D650607636F6E74656E7405416C69676E0706436C69656E740C436C69 + 704368696C6472656E090A53697A652E5769647468050000000000FFFFC10540 + 0B53697A652E4865696768740500000000000000DE05401453697A652E506C61 + 74666F726D44656661756C7408000A5452656374616E676C6500095374796C65 + 4E616D65060973656C656374696F6E0A46696C6C2E436F6C6F72070978464632 + 41383245320748697454657374080A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000000000C804401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E6500000A5452656374616E676C6500095374796C654E616D650610666F63 + 7573656473656C656374696F6E0A46696C6C2E436F6C6F720709784646324138 + 3245320748697454657374080A53697A652E57696474680500000000000000C8 + 04400B53697A652E4865696768740500000000000000C804401453697A652E50 + 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E + 650B5374726F6B652E446173680703446F740000000A545363726F6C6C426172 + 00095374796C654E616D65060A767363726F6C6C62617205416C69676E070552 + 696768740B536D616C6C4368616E676505000000000000000000000B4F726965 + 6E746174696F6E0708566572746963616C0A506F736974696F6E2E5805000000 + 0000FFFFC505400A506F736974696F6E2E5905000000000000008000400A5369 + 7A652E576964746805000000000000008003400B53697A652E48656967687405 + 00000000000000DE05401453697A652E506C6174666F726D44656661756C7408 + 00000A545363726F6C6C42617200095374796C654E616D65060A687363726F6C + 6C62617205416C69676E0706426F74746F6D0B536D616C6C4368616E67650500 + 0000000000000000000B4F7269656E746174696F6E070A486F72697A6F6E7461 + 6C0A506F736974696F6E2E5805000000000000008000400A506F736974696F6E + 2E590500000000000000E205400A53697A652E5769647468050000000000FFFF + E105400B53697A652E48656967687405000000000000008003401453697A652E + 506C6174666F726D44656661756C740800000F54536D616C6C5363726F6C6C42 + 617200095374796C654E616D65060F76736D616C6C7363726F6C6C6261720541 + 6C69676E070552696768740B536D616C6C4368616E6765050000000000000000 + 00000B4F7269656E746174696F6E0708566572746963616C0C4D617267696E73 + 2E4C65667405000000000000008000400A506F736974696F6E2E580500000000 + 000000C605400A506F736974696F6E2E5905000000000000008000400A53697A + 652E576964746805000000000000008002400B53697A652E4865696768740500 + 0000000000008002401453697A652E506C6174666F726D44656661756C740807 + 56697369626C650800000F54536D616C6C5363726F6C6C42617200095374796C + 654E616D65060F68736D616C6C7363726F6C6C62617205416C69676E0706426F + 74746F6D0B536D616C6C4368616E676505000000000000000000000B4F726965 + 6E746174696F6E070A486F72697A6F6E74616C0B4D617267696E732E546F7005 + 000000000000008000400A506F736974696F6E2E580500000000000000800040 + 0A506F736974696F6E2E590500000000000000E205400A53697A652E57696474 + 6805000000000000009606400B53697A652E4865696768740500000000000000 + 8002401453697A652E506C6174666F726D44656661756C74080756697369626C + 65080000000B54476C6F774566666563740008536F66746E6573730500000000 + 00CDCCCCFC3F09476C6F77436F6C6F720709784646463639453244074F706163 + 6974790500000000006666E6FE3F0754726967676572060E4973466F63757365 + 643D7472756507456E61626C6564080000005450463007544C61796F75740009 + 5374796C654E616D65060D6C697374626F78666F6F74657205416C69676E0706 + 43656E7465720A53697A652E576964746805000000000000009205400B53697A + 652E4865696768740500000000000000D003401453697A652E506C6174666F72 + 6D44656661756C74080756697369626C65080005545465787400095374796C65 + 4E616D6506047465787405416C69676E0706436C69656E74064C6F636B656409 + 0748697454657374080C4D617267696E732E4C6566740500000000000000A001 + 400B4D617267696E732E546F7005000000000000008000400D4D617267696E73 + 2E52696768740500000000000000A001400E4D617267696E732E426F74746F6D + 05000000000000008000400A53697A652E57696474680500000000000000FC04 + 400B53697A652E4865696768740500000000000000B003401453697A652E506C + 6174666F726D44656661756C7408165465787453657474696E67732E466F6E74 + 436F6C6F720708636C6157686974650000005450463007544C61796F75740009 + 5374796C654E616D6506106C697374626F786974656D7374796C6505416C6967 + 6E070643656E7465720A53697A652E57696474680500000000000000D605400B + 53697A652E4865696768740500000000000000C003401453697A652E506C6174 + 666F726D44656661756C74080756697369626C6508000654476C797068000953 + 74796C654E616D65060A676C7970687374796C650C4D617267696E732E4C6566 + 7405000000000000008000400B4D617267696E732E546F700500000000000000 + 80FF3F0D4D617267696E732E526967687405000000000000008000400E4D6172 + 67696E732E426F74746F6D050000000000000080FF3F05416C69676E07044C65 + 66740A53697A652E576964746805000000000000008003400B53697A652E4865 + 6967687405000000000000008003401453697A652E506C6174666F726D446566 + 61756C7408000005545465787400095374796C654E616D650604746578740541 + 6C69676E0706436C69656E740748697454657374080C4D617267696E732E4C65 + 66740500000000000000C000400B4D617267696E732E546F7005000000000000 + 0080FF3F0D4D617267696E732E52696768740500000000000000C000400E4D61 + 7267696E732E426F74746F6D050000000000000080FF3F0A53697A652E576964 + 74680500000000000000CA05400B53697A652E48656967687405000000000000 + 00B003401453697A652E506C6174666F726D44656661756C7408165465787453 + 657474696E67732E466F6E74436F6C6F720708636C6157686974651554657874 + 53657474696E67732E576F72645772617008165465787453657474696E67732E + 486F727A416C69676E07074C656164696E6700000954436865636B426F780009 + 5374796C654E616D650605636865636B05416C69676E07084D6F73744C656674 + 0843616E466F637573081244697361626C65466F637573456666656374090A53 + 697A652E57696474680500000000000000A003400B53697A652E486569676874 + 0500000000000000C003401453697A652E506C6174666F726D44656661756C74 + 080756697369626C65080000005450463007544C61796F757400095374796C65 + 4E616D6506126C697374626F78706C61696E68656164657205416C69676E0706 + 43656E7465720A53697A652E576964746805000000000000009205400B53697A + 652E4865696768740500000000000000D003401453697A652E506C6174666F72 + 6D44656661756C74080756697369626C6508000A5452656374616E676C650009 + 5374796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E + 74656E74730A46696C6C2E436F6C6F720709784646324432443244064C6F636B + 6564090748697454657374080A53697A652E5769647468050000000000000092 + 05400B53697A652E4865696768740500000000000000D003401453697A652E50 + 6C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846 + 46313531353135000005545465787400095374796C654E616D65060474657874 + 05416C69676E0706436C69656E74064C6F636B6564090748697454657374080C + 4D617267696E732E4C6566740500000000000000A001400B4D617267696E732E + 546F7005000000000000008000400D4D617267696E732E526967687405000000 + 00000000A001400E4D617267696E732E426F74746F6D05000000000000008000 + 400A53697A652E57696474680500000000000000FC04400B53697A652E486569 + 6768740500000000000000B003401453697A652E506C6174666F726D44656661 + 756C7408165465787453657474696E67732E466F6E74436F6C6F720708636C61 + 57686974650000005450463007544C61796F757400095374796C654E616D6506 + 09677269647374796C6505416C69676E070643656E7465720A53697A652E5769 + 647468050000000000FFFFE905400B53697A652E486569676874050000000000 + 00008306401453697A652E506C6174666F726D44656661756C74080756697369 + 626C6508000C5442727573684F626A65637400095374796C654E616D65061841 + 6C7465726E6174696E67526F774261636B67726F756E640B42727573682E436F + 6C6F72070978333237383738373800000C5442727573684F626A656374000953 + 74796C654E616D6506086C696E6566696C6C0B42727573682E436F6C6F720709 + 78464631353135313500000A5452656374616E676C6500095374796C654E616D + 65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A4669 + 6C6C2E436F6C6F720709784646323032303230064C6F636B6564090748697454 + 657374080C50616464696E672E4C65667405000000000000008000400B506164 + 64696E672E546F7005000000000000008000400D50616464696E672E52696768 + 7405000000000000008000400E50616464696E672E426F74746F6D0500000000 + 0000008000400A53697A652E5769647468050000000000FFFFE905400B53697A + 652E48656967687405000000000000008306401453697A652E506C6174666F72 + 6D44656661756C74080C5374726F6B652E436F6C6F7207097846463135313531 + 3500075448656164657200095374796C654E616D650606686561646572055369 + 6465730B03546F70044C65667406426F74746F6D0552696768740005416C6967 + 6E0703546F700748697454657374080A506F736974696F6E2E58050000000000 + 00008000400A506F736974696F6E2E5905000000000000008000400A53697A65 + 2E5769647468050000000000FFFFE105400B53697A652E486569676874050000 + 0000000000A803401453697A652E506C6174666F726D44656661756C74080000 + 07544C61796F757400095374796C654E616D650607636F6E74656E7405416C69 + 676E0706436C69656E740C436C69704368696C6472656E090A53697A652E5769 + 647468050000000000FFFFC105400B53697A652E486569676874050000000000 + 0000B405401453697A652E506C6174666F726D44656661756C7408000A545265 + 6374616E676C6500095374796C654E616D65060973656C656374696F6E0A4669 + 6C6C2E436F6C6F720709784646324138324532074869745465737408074F7061 + 63697479050000000000000080FD3F0A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000000000C804401453697A + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E6500000A5452656374616E676C6500095374796C654E616D650605666F + 6375730A46696C6C2E436F6C6F72070978414632413832453207486974546573 + 74080C4D617267696E732E4C656674050000000000000080FF3F0B4D61726769 + 6E732E546F70050000000000000080FF3F0D4D617267696E732E526967687405 + 0000000000000080FF3F0E4D617267696E732E426F74746F6D05000000000000 + 0080FF3F0A53697A652E57696474680500000000000000C804400B53697A652E + 4865696768740500000000000000C804401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6507595261646975 + 730500000000000000C000400000000A545363726F6C6C42617200095374796C + 654E616D65060A767363726F6C6C62617205416C69676E070552696768740B53 + 6D616C6C4368616E676505000000000000000000000B4F7269656E746174696F + 6E0708566572746963616C0A506F736974696F6E2E58050000000000FFFFC505 + 400A506F736974696F6E2E590500000000000000B803400A53697A652E576964 + 746805000000000000008003400B53697A652E48656967687405000000000000 + 00B405401453697A652E506C6174666F726D44656661756C740800000A545363 + 726F6C6C42617200095374796C654E616D65060A687363726F6C6C6261720541 + 6C69676E0706426F74746F6D0B536D616C6C4368616E67650500000000000000 + 0000000B4F7269656E746174696F6E070A486F72697A6F6E74616C0A506F7369 + 74696F6E2E5805000000000000008000400A506F736974696F6E2E5905000000 + 00000000E205400A53697A652E5769647468050000000000FFFFE105400B5369 + 7A652E48656967687405000000000000008003401453697A652E506C6174666F + 726D44656661756C740800000F54536D616C6C5363726F6C6C42617200095374 + 796C654E616D65060F76736D616C6C7363726F6C6C62617205416C69676E0705 + 52696768740B536D616C6C4368616E676505000000000000000000000B4F7269 + 656E746174696F6E0708566572746963616C0C4D617267696E732E4C65667405 + 000000000000008000400A506F736974696F6E2E580500000000000000C60540 + 0A506F736974696F6E2E5905000000000000008000400A53697A652E57696474 + 6805000000000000008002400B53697A652E4865696768740500000000000000 + 8002401453697A652E506C6174666F726D44656661756C74080756697369626C + 650800000F54536D616C6C5363726F6C6C42617200095374796C654E616D6506 + 0F68736D616C6C7363726F6C6C62617205416C69676E0706426F74746F6D0B53 + 6D616C6C4368616E676505000000000000000000000B4F7269656E746174696F + 6E070A486F72697A6F6E74616C0B4D617267696E732E546F7005000000000000 + 008000400A506F736974696F6E2E5805000000000000008000400A506F736974 + 696F6E2E590500000000000000E205400A53697A652E57696474680500000000 + 0000009606400B53697A652E4865696768740500000000000000800240145369 + 7A652E506C6174666F726D44656661756C74080756697369626C650800000000 + 5450463007544C61796F757400095374796C654E616D65060F68656164657269 + 74656D7374796C6505416C69676E070643656E7465720A53697A652E57696474 + 6805000000000000009205400B53697A652E4865696768740500000000000000 + D003401453697A652E506C6174666F726D44656661756C74080756697369626C + 6508000A5452656374616E676C6500095374796C654E616D65060A6261636B67 + 726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72 + 0709784646344334433443064C6F636B6564090748697454657374080A53697A + 652E576964746805000000000000009205400B53697A652E4865696768740500 + 000000000000D003401453697A652E506C6174666F726D44656661756C74080C + 5374726F6B652E436F6C6F720709784646313531353135000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D650615686561646572436F6C6F72 + 416E696D6174696F6E31084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C + 756507097846463443344334430953746F7056616C7565070978464632413832 + 45320754726967676572060E4973507265737365643D747275650E5472696767 + 6572496E7665727365060F4973507265737365643D66616C736500000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D65061668656164657253 + 74726F6B65416E696D6174696F6E31084475726174696F6E0500000000000000 + 0000000C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A53 + 7461727456616C756507097846463135313531350953746F7056616C75650709 + 7846463241383245320754726967676572060E4973507265737365643D747275 + 650E54726967676572496E7665727365060F4973507265737365643D66616C73 + 6500000005545465787400095374796C654E616D6506047465787405416C6967 + 6E0706436C69656E74064C6F636B6564090748697454657374080C4D61726769 + 6E732E4C6566740500000000000000A001400B4D617267696E732E546F700500 + 0000000000008000400D4D617267696E732E52696768740500000000000000A0 + 01400E4D617267696E732E426F74746F6D05000000000000008000400A53697A + 652E57696474680500000000000000FC04400B53697A652E4865696768740500 + 000000000000B003401453697A652E506C6174666F726D44656661756C740816 + 5465787453657474696E67732E466F6E74436F6C6F720708636C615768697465 + 0000005450463007544C61796F757400095374796C654E616D65061970726F67 + 726573736261726D696E696572726F727374796C6505416C69676E070643656E + 7465720A53697A652E576964746805000000000033338505400B53697A652E48 + 65696768740500000000009999E104401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C6508000A5452656374616E676C650009537479 + 6C654E616D65060668747261636B05416C69676E0708436F6E74656E74730A46 + 696C6C2E436F6C6F720709784646343034303430064C6F636B65640907486974 + 54657374080A53697A652E576964746805000000000033338505400B53697A65 + 2E4865696768740500000000009999E104401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000A54526563 + 74616E676C6500095374796C654E616D65060A68696E64696361746F7205416C + 69676E07044C6566740A46696C6C2E436F6C6F72070978464645323241324106 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 000000C804400B53697A652E4865696768740500000000009999E10440145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E650000000A5452656374616E676C6500095374796C654E616D650606 + 76747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F + 720709784646343034303430064C6F636B6564090748697454657374080A5369 + 7A652E576964746805000000000033338505400B53697A652E48656967687405 + 00000000009999E104401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E65000A5452656374616E676C650009 + 5374796C654E616D65060A76696E64696361746F7205416C69676E0706426F74 + 746F6D0A46696C6C2E436F6C6F720709784646453232413241064C6F636B6564 + 090748697454657374080A506F736974696F6E2E5905000000000099998D0440 + 0A53697A652E576964746805000000000033338505400B53697A652E48656967 + 68740500000000000000A803401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C + 61796F757400095374796C654E616D65061170726F677265737363656C6C7374 + 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 + 00000000F805400B53697A652E4865696768740500000000000000FC05401453 + 697A652E506C6174666F726D44656661756C74080756697369626C6508000754 + 4C61796F757400095374796C654E616D65060668747261636B05416C69676E07 + 08436F6E74656E7473064C6F636B6564090C4D617267696E732E4C6566740500 + 0000000000008000400B4D617267696E732E546F700500000000000000800040 + 0D4D617267696E732E526967687405000000000000008000400E4D617267696E + 732E426F74746F6D05000000000000008000400A53697A652E57696474680500 + 000000000000F005400B53697A652E4865696768740500000000000000F40540 + 1453697A652E506C6174666F726D44656661756C7408000A5452656374616E67 + 6C6500095374796C654E616D65060A68696E64696361746F7205416C69676E07 + 044C6566740A46696C6C2E436F6C6F720709784646324138324532064C6F636B + 6564090748697454657374080C4D617267696E732E4C65667405000000000000 + 0080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267 + 696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F74 + 746F6D050000000000000080FF3F0A506F736974696F6E2E5805000000000000 + 0080FF3F0A506F736974696F6E2E59050000000000000080FF3F0A53697A652E + 57696474680500000000000000C804400B53697A652E48656967687405000000 + 00000000F005401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E65000000005450463007544C61796F757400 + 095374796C654E616D6506106D656E756261726974656D7374796C6505416C69 + 676E070643656E7465720C4D617267696E732E4C656674050000000000000080 + FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E + 732E5269676874050000000000000080FF3F0E4D617267696E732E426F74746F + 6D050000000000000080FF3F0A53697A652E5769647468050000000000000092 + 05400B53697A652E4865696768740500000000000000D003401453697A652E50 + 6C6174666F726D44656661756C74080756697369626C6508000A545265637461 + 6E676C650005416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72 + 0709784646324138324532074869745465737408074F70616369747905000000 + 000017B7D1F13F0A53697A652E576964746805000000000000009205400B5369 + 7A652E4865696768740500000000000000D003401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F5446 + 6C6F6174416E696D6174696F6E00084475726174696F6E05000000000018B7D1 + F23F0C50726F70657274794E616D6506074F7061636974790A53746172745661 + 6C756505000000000000000000000953746F7056616C75650500000000000000 + 80FF3F0754726967676572060F497353656C65637465643D747275650E547269 + 67676572496E76657273650610497353656C65637465643D66616C7365000000 + 0A5452656374616E676C6500095374796C654E616D65060A6261636B67726F75 + 6E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978 + 4646324138324532074869745465737408074F70616369747905000000000017 + B7D1F13F0A53697A652E576964746805000000000000009205400B53697A652E + 4865696768740500000000000000D003401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F61 + 74416E696D6174696F6E00084475726174696F6E05000000000018B7D1F23F0C + 50726F70657274794E616D6506074F7061636974790A537461727456616C7565 + 05000000000000000000000953746F7056616C7565050000000000000080FF3F + 0754726967676572061049734D6F7573654F7665723D747275650E5472696767 + 6572496E7665727365061149734D6F7573654F7665723D66616C736500000007 + 544C61796F757400095374796C654E616D650605676C79706805416C69676E07 + 044C6566740A53697A652E57696474680500000000000000C803400B53697A65 + 2E4865696768740500000000000000D003401453697A652E506C6174666F726D + 44656661756C74080007544C61796F757400095374796C654E616D6506096368 + 65636B6D61726B05416C69676E0708436F6E74656E7473074F70616369747905 + 00000000006F1283F53F0A53697A652E57696474680500000000000000C80340 + 0B53697A652E4865696768740500000000000000D003401453697A652E506C61 + 74666F726D44656661756C7408000554506174680005416C69676E070643656E + 74657209446174612E506174680A58000000070000000000000056D9524391AE + 2C43010000009276664365021643010000009F3983432B7C3C43010000009E9A + A64382D2B442010000006F1CB04375A4D1420100000026DF8243263F67430300 + 000056D9524391AE2C430A46696C6C2E436F6C6F720708636C61576869746507 + 48697454657374080A53697A652E57696474680500000000000000B002400B53 + 697A652E4865696768740500000000000000B002401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000F + 54466C6F6174416E696D6174696F6E00084475726174696F6E050000000000CD + CCCCFB3F0C50726F70657274794E616D6506074F7061636974790A5374617274 + 56616C756505000000000000000000000953746F7056616C7565050000000000 + 000080FF3F0754726967676572060E4973436865636B65643D747275650E5472 + 6967676572496E7665727365060F4973436865636B65643D66616C7365000000 + 0654476C79706800095374796C654E616D65060A676C7970687374796C650C4D + 617267696E732E4C656674050000000000000080FF3F0B4D617267696E732E54 + 6F7005000000000000008000400D4D617267696E732E52696768740500000000 + 000000C000400E4D617267696E732E426F74746F6D050000000000000080FF3F + 05416C69676E070552696768740A53697A652E57696474680500000000000000 + 8003400B53697A652E48656967687405000000000000008003401453697A652E + 506C6174666F726D44656661756C740800000654496D61676500095374796C65 + 4E616D6506066269746D61700E4D756C74695265734269746D61700E01000005 + 416C69676E0708436F6E74656E74730C4D617267696E732E4C65667405000000 + 000000008000400B4D617267696E732E546F7005000000000000008000400D4D + 617267696E732E526967687405000000000000008000400E4D617267696E732E + 426F74746F6D05000000000000008000400A53697A652E576964746805000000 + 00000000A803400B53697A652E4865696768740500000000000000B003401453 + 697A652E506C6174666F726D44656661756C7408000000055454657874000953 + 74796C654E616D6506047465787405416C69676E07044C656674064C6F636B65 + 64090748697454657374080C4D617267696E732E4C6566740500000000000000 + 8002400D4D617267696E732E526967687405000000000000008002400A506F73 + 6974696F6E2E5805000000000000008404400A53697A652E5769647468050000 + 0000000000C804400B53697A652E4865696768740500000000000000D0034014 + 53697A652E506C6174666F726D44656661756C7408165465787453657474696E + 67732E466F6E74436F6C6F720708636C61576869746516546578745365747469 + 6E67732E486F727A416C69676E07074C656164696E6700000554546578740009 + 5374796C654E616D65060873686F727463757405416C69676E07055269676874 + 064C6F636B6564090748697454657374080C4D617267696E732E4C6566740500 + 000000000000C002400D4D617267696E732E52696768740500000000000000C0 + 01400A506F736974696F6E2E580500000000000000C000C00A53697A652E5769 + 6474680500000000000000C804400B53697A652E486569676874050000000000 + 0000D003401453697A652E506C6174666F726D44656661756C74081654657874 + 53657474696E67732E466F6E74436F6C6F720708636C61576869746516546578 + 7453657474696E67732E486F727A416C69676E07074C656164696E6700000754 + 4C61796F757400095374796C654E616D6506077375626D61726B05416C69676E + 070552696768740A506F736974696F6E2E580500000000000000D404400A5369 + 7A652E57696474680500000000000000A003400B53697A652E48656967687405 + 00000000000000D003401453697A652E506C6174666F726D44656661756C7408 + 000554506174680005416C69676E070643656E74657209446174612E50617468 + 0A34000000040000000000000000000000000000000100000000000000000080 + 3F010000000000803F0000003F0300000000000000000000000A46696C6C2E43 + 6F6C6F720708636C615768697465064C6F636B6564090748697454657374080A + 53697A652E57696474680500000000000000E001400B53697A652E4865696768 + 7405000000000000008002401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E6500000000545046300A545265 + 6374616E676C6500095374796C654E616D65060C6D656E756261727374796C65 + 05416C69676E070643656E7465720C436C69704368696C6472656E090946696C + 6C2E4B696E6407044E6F6E650748697454657374080A53697A652E5769647468 + 0500000000000000C804400B53697A652E4865696768740500000000000000C8 + 04401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E650756697369626C6508000A5452656374616E676C6500 + 05416C69676E0706436C69656E740A46696C6C2E436F6C6F7207097846463230 + 323032300748697454657374080C4D617267696E732E4C656674050000000000 + 000080FFBF0B4D617267696E732E546F70050000000000000080FFBF0D4D6172 + 67696E732E5269676874050000000000000080FFBF0A53697A652E5769647468 + 0500000000000000D004400B53697A652E4865696768740500000000000000CC + 04401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E + 436F6C6F720709784646313531353135000007544C61796F757400095374796C + 654E616D650607636F6E74656E7405416C69676E0706436C69656E740C4D6172 + 67696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F70 + 050000000000000080FF3F0D4D617267696E732E526967687405000000000000 + 0080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53 + 697A652E57696474680500000000000000C004400B53697A652E486569676874 + 0500000000000000C004401453697A652E506C6174666F726D44656661756C74 + 080000005450463007544C61796F757400095374796C654E616D65060D6D656E + 756974656D7374796C6505416C69676E070643656E7465720C4D617267696E73 + 2E4C656674050000000000000080FF3F0B4D617267696E732E546F7005000000 + 0000000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F + 0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E + 57696474680500000000008EE3F605400B53697A652E48656967687405000000 + 00008EE3F003401453697A652E506C6174666F726D44656661756C7408075669 + 7369626C6508000A5452656374616E676C650005416C69676E0708436F6E7465 + 6E74730A46696C6C2E436F6C6F72070978464632413832453207486974546573 + 7408074F70616369747905000000000017B7D1F13F0A53697A652E5769647468 + 0500000000008EE3F605400B53697A652E4865696768740500000000008EE3F0 + 03401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E0008447572 + 6174696F6E05000000000018B7D1F23F0C50726F70657274794E616D6506074F + 7061636974790A537461727456616C756505000000000000000000000953746F + 7056616C7565050000000000000080FF3F0754726967676572060F497353656C + 65637465643D747275650E54726967676572496E76657273650610497353656C + 65637465643D66616C73650000000A5452656374616E676C6500095374796C65 + 4E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E7473 + 0A46696C6C2E436F6C6F72070978464632413832453207486974546573740807 + 4F70616369747905000000000000000000000A53697A652E5769647468050000 + 0000008EE3F605400B53697A652E4865696768740500000000008EE3F0034014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E65000F54466C6F6174416E696D6174696F6E0008447572617469 + 6F6E05000000000018B7D1F23F07496E7665727365090C50726F70657274794E + 616D6506074F7061636974790A537461727456616C7565050000000000000000 + 00000953746F7056616C7565050000000000000080FF3F075472696767657206 + 1049734D6F7573654F7665723D747275650E54726967676572496E7665727365 + 061149734D6F7573654F7665723D66616C736500000007544C61796F75740009 + 5374796C654E616D650605676C79706805416C69676E07044C6566740A53697A + 652E57696474680500000000000000C803400B53697A652E4865696768740500 + 000000008EE3F003401453697A652E506C6174666F726D44656661756C740800 + 07544C61796F757400095374796C654E616D650609636865636B6D61726B0541 + 6C69676E0708436F6E74656E7473074F7061636974790500000000006F1283F5 + 3F0A53697A652E57696474680500000000000000C803400B53697A652E486569 + 6768740500000000008EE3F003401453697A652E506C6174666F726D44656661 + 756C7408000554506174680005416C69676E070643656E74657209446174612E + 506174680A58000000070000000000000056D9524391AE2C4301000000927666 + 4365021643010000009F3983432B7C3C43010000009E9AA64382D2B442010000 + 006F1CB04375A4D1420100000026DF8243263F67430300000056D9524391AE2C + 430A46696C6C2E436F6C6F720708636C6157686974650748697454657374080A + 53697A652E57696474680500000000000000B002400B53697A652E4865696768 + 740500000000000000B002401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E6500000F54466C6F6174416E69 + 6D6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F70 + 657274794E616D6506074F7061636974790A537461727456616C756505000000 + 000000000000000953746F7056616C7565050000000000000080FF3F07547269 + 67676572060E4973436865636B65643D747275650E54726967676572496E7665 + 727365060F4973436865636B65643D66616C73650000000654476C7970680009 + 5374796C654E616D65060A676C7970687374796C650C4D617267696E732E4C65 + 6674050000000000000080FF3F0B4D617267696E732E546F7005000000000000 + 008000400D4D617267696E732E52696768740500000000000000C000400E4D61 + 7267696E732E426F74746F6D050000000000000080FF3F05416C69676E07044C + 6566740A53697A652E576964746805000000000000008003400B53697A652E48 + 656967687405000000000000008003401453697A652E506C6174666F726D4465 + 6661756C740800000654496D61676500095374796C654E616D6506066269746D + 61700E4D756C74695265734269746D61700E01000005416C69676E07044C6566 + 740C4D617267696E732E4C65667405000000000000008000400B4D617267696E + 732E546F7005000000000000008000400D4D617267696E732E52696768740500 + 0000000000008000400E4D617267696E732E426F74746F6D0500000000000000 + 8000400A506F736974696F6E2E5805000000000000008000400A506F73697469 + 6F6E2E5905000000000000008000400A53697A652E5769647468050000000000 + 0000A803400B53697A652E4865696768740500000000008EE3D003401453697A + 652E506C6174666F726D44656661756C74080000000554546578740009537479 + 6C654E616D6506047465787405416C69676E07044C656674064C6F636B656409 + 0748697454657374080C4D617267696E732E4C65667405000000000000008002 + 400D4D617267696E732E526967687405000000000000008002400A506F736974 + 696F6E2E5805000000000000008404400A53697A652E57696474680500000000 + 000000C804400B53697A652E4865696768740500000000008EE3F00340145369 + 7A652E506C6174666F726D44656661756C7408165465787453657474696E6773 + 2E466F6E74436F6C6F720708636C615768697465165465787453657474696E67 + 732E486F727A416C69676E07074C656164696E67000005545465787400095374 + 796C654E616D65060873686F727463757405416C69676E07055269676874064C + 6F636B6564090748697454657374080C4D617267696E732E4C65667405000000 + 00000000C002400D4D617267696E732E52696768740500000000000000C00140 + 0A506F736974696F6E2E580500000000001CC7BD04400A53697A652E57696474 + 680500000000000000C804400B53697A652E4865696768740500000000008EE3 + F003401453697A652E506C6174666F726D44656661756C740816546578745365 + 7474696E67732E466F6E74436F6C6F720708636C615768697465165465787453 + 657474696E67732E486F727A416C69676E07074C656164696E67000007544C61 + 796F757400095374796C654E616D6506077375626D61726B05416C69676E0705 + 52696768740A506F736974696F6E2E580500000000008EE3CE05400A53697A65 + 2E57696474680500000000000000A003400B53697A652E486569676874050000 + 0000008EE3F003401453697A652E506C6174666F726D44656661756C74080005 + 54506174680005416C69676E070643656E74657209446174612E506174680A34 + 0000000400000000000000000000000000000001000000000000000000803F01 + 0000000000803F0000003F0300000000000000000000000A46696C6C2E436F6C + 6F720708636C615768697465064C6F636B6564090748697454657374080A5369 + 7A652E57696474680500000000000000C001400B53697A652E48656967687405 + 00000000000000A002401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C61796F + 757400095374796C654E616D6506126D656E75736570617261746F727374796C + 6505416C69676E070643656E7465720A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000000000C804401453697A + 652E506C6174666F726D44656661756C74080756697369626C65080005544C69 + 6E650005416C69676E0703546F70084C696E65547970650703546F700C4D6172 + 67696E732E4C656674050000000000000080FFBF0B4D617267696E732E546F70 + 05000000000000008000400D4D617267696E732E526967687405000000000000 + 0080FFBF0A506F736974696F6E2E58050000000000000080FFBF0A506F736974 + 696F6E2E5905000000000000008000400A53697A652E57696474680500000000 + 000000D004400B53697A652E486569676874050000000000000080FF3F145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 0709784646313531353135000000545046300A5452656374616E676C65000953 + 74796C654E616D65060D6D656E75766965777374796C6505416C69676E070643 + 656E7465720A46696C6C2E436F6C6F7207097846463230323032300A53697A65 + 2E57696474680500000000000000C804400B53697A652E486569676874050000 + 0000000000C804401453697A652E506C6174666F726D44656661756C74080C53 + 74726F6B652E436F6C6F7207097846463135313531350756697369626C650800 + 0A5452656374616E676C650005416C69676E0706436C69656E740A46696C6C2E + 436F6C6F7207097846463230323032300748697454657374080A53697A652E57 + 696474680500000000000000C804400B53697A652E4865696768740500000000 + 000000C804401453697A652E506C6174666F726D44656661756C74080C537472 + 6F6B652E436F6C6F720709784646313531353135000D54536861646F77456666 + 656374000844697374616E636505000000000000008001400944697265637469 + 6F6E0500000000000000B4044008536F66746E657373050000000000000080FE + 3F074F706163697479050000000000000080FE3F0B536861646F77436F6C6F72 + 0708636C61426C61636B00000007544C61796F757400095374796C654E616D65 + 0607636F6E74656E7405416C69676E0706436C69656E740C4D617267696E732E + 4C656674050000000000000080FF3F0B4D617267696E732E546F700500000000 + 00000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E + 4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E57 + 696474680500000000000000C004400B53697A652E4865696768740500000000 + 000000C004401453697A652E506C6174666F726D44656661756C740800000054 + 50463007544C61796F757400095374796C654E616D65060E696D61676563656C + 6C7374796C6505416C69676E070643656E7465720756697369626C6508000654 + 496D61676500095374796C654E616D650605696D6167650E4D756C7469526573 + 4269746D61700E01000005416C69676E0706436C69656E74064C6F636B656409 + 0748697454657374080C4D617267696E732E4C656674050000000000000080FF + 3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E73 + 2E5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D + 050000000000000080FF3F0A53697A652E57696474680500000000000000C004 + 400B53697A652E4865696768740500000000000000C004401453697A652E506C + 6174666F726D44656661756C74080000005450463007544C61796F7574000953 + 74796C654E616D65060E706F70757063656C6C7374796C6505416C69676E0706 + 43656E7465720A53697A652E57696474680500000000000000BB06400B53697A + 652E4865696768740500000000000000AE04401453697A652E506C6174666F72 + 6D44656661756C74080756697369626C65080007544C61796F75740005416C69 + 676E070552696768740A506F736974696F6E2E580500000000000000AC06400A + 53697A652E57696474680500000000000000F002400B53697A652E4865696768 + 740500000000000000AE04401453697A652E506C6174666F726D44656661756C + 7408000554506174680005416C69676E070643656E74657209446174612E5061 + 74680A400000000500000000000000000000000000803F010000000000803F00 + 00803F010000000000003F0000000001000000000000000000803F0300000000 + 000000000000000A46696C6C2E436F6C6F720708636C61576869746507486974 + 54657374080B4D617267696E732E546F700500000000000000E001C00A53697A + 652E576964746805000000000000008002400B53697A652E4865696768740500 + 0000000000008001401453697A652E506C6174666F726D44656661756C74080B + 5374726F6B652E4B696E6407044E6F6E6500000554506174680005416C69676E + 070643656E74657209446174612E506174680A34000000040000000000000000 + 00000000000000010000000000803F00000000010000000000003F0000803F03 + 00000000000000000000000A46696C6C2E436F6C6F720708636C615768697465 + 0748697454657374080B4D617267696E732E546F700500000000000000C00140 + 0A53697A652E576964746805000000000000008002400B53697A652E48656967 + 687405000000000000008001401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E650000000554546578740009 + 5374796C654E616D6506047465787405416C69676E0706436C69656E74064C6F + 636B6564090748697454657374080C4D617267696E732E4C6566740500000000 + 000000A001400B4D617267696E732E546F7005000000000000008000400D4D61 + 7267696E732E52696768740500000000000000A001400E4D617267696E732E42 + 6F74746F6D05000000000000008000400A53697A652E57696474680500000000 + 000000A206400B53697A652E48656967687405000000000000009E0440145369 + 7A652E506C6174666F726D44656661756C7408165465787453657474696E6773 + 2E466F6E74436F6C6F720708636C6157686974650000005450463007544C6179 + 6F757400095374796C654E616D65060D7465787463656C6C7374796C6505416C + 69676E070643656E7465720756697369626C65080007544C61796F7574000953 + 74796C654E616D650607636F6E74656E7405416C69676E0708436F6E74656E74 + 73064C6F636B6564090C4D617267696E732E4C65667405000000000000008001 + 400B4D617267696E732E546F7005000000000000008001400D4D617267696E73 + 2E526967687405000000000000008001400E4D617267696E732E426F74746F6D + 05000000000000008001400A53697A652E57696474680500000000000000A804 + 400B53697A652E4865696768740500000000000000A804401453697A652E506C + 6174666F726D44656661756C740800000C5442727573684F626A656374000953 + 74796C654E616D65060A666F726567726F756E6400000C5442727573684F626A + 65637400095374796C654E616D65060973656C656374696F6E0B42727573682E + 436F6C6F72070978393632413832453200000B54466F6E744F626A6563740009 + 5374796C654E616D650604666F6E740000005450463007544C61796F75740009 + 5374796C654E616D6506096D656D6F7374796C6505416C69676E070643656E74 + 65720A53697A652E5769647468050000000000CCCC8806400B53697A652E4865 + 696768740500000000006666F405401453697A652E506C6174666F726D446566 + 61756C74080756697369626C6508000C5442727573684F626A65637400095374 + 796C654E616D65060A666F726567726F756E6400000C5442727573684F626A65 + 637400095374796C654E616D65060973656C656374696F6E0B42727573682E43 + 6F6C6F72070978374634343735394400000B54466F6E744F626A656374000953 + 74796C654E616D650604666F6E7400000A5452656374616E676C650009537479 + 6C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E + 74730A46696C6C2E436F6C6F7207097846463230323032300748697454657374 + 080A53697A652E5769647468050000000000CCCC8806400B53697A652E486569 + 6768740500000000006666F405401453697A652E506C6174666F726D44656661 + 756C74080C5374726F6B652E436F6C6F7207097846463135313531350007544C + 61796F757400095374796C654E616D650607636F6E74656E7405416C69676E07 + 06436C69656E740C4D617267696E732E4C65667405000000000000008000400B + 4D617267696E732E546F7005000000000000008000400D4D617267696E732E52 + 6967687405000000000000008000400E4D617267696E732E426F74746F6D0500 + 0000000000008000400A53697A652E57696474680500000000009899E905400B + 53697A652E4865696768740500000000006666CC05401453697A652E506C6174 + 666F726D44656661756C740800000A545363726F6C6C42617200095374796C65 + 4E616D65060A687363726F6C6C62617205416C69676E0706426F74746F6D0643 + 7572736F72070763724172726F770B536D616C6C4368616E6765050000000000 + 00000000000B4F7269656E746174696F6E070A486F72697A6F6E74616C0A506F + 736974696F6E2E590500000000006666D405400A53697A652E57696474680500 + 00000000CCCC8806400B53697A652E4865696768740500000000000000800340 + 1453697A652E506C6174666F726D44656661756C740800000A545363726F6C6C + 42617200095374796C654E616D65060A767363726F6C6C62617205416C69676E + 0705526967687406437572736F72070763724172726F770B536D616C6C436861 + 6E676505000000000000000000000B4F7269656E746174696F6E070856657274 + 6963616C0A506F736974696F6E2E580500000000009899F105400A53697A652E + 576964746805000000000000008003400B53697A652E48656967687405000000 + 00006666D405401453697A652E506C6174666F726D44656661756C7408000007 + 544C61796F75740005416C69676E0706436C69656E740A53697A652E57696474 + 680500000000009899F105400B53697A652E4865696768740500000000006666 + D405401453697A652E506C6174666F726D44656661756C7408000F54536D616C + 6C5363726F6C6C42617200095374796C654E616D65060F76736D616C6C736372 + 6F6C6C62617205416C69676E0705526967687406437572736F72070763724172 + 726F770B536D616C6C4368616E676505000000000000000000000B4F7269656E + 746174696F6E0708566572746963616C0C4D617267696E732E4C656674050000 + 00000000008000400A53697A652E576964746805000000000000008002400B53 + 697A652E48656967687405000000000000008002401453697A652E506C617466 + 6F726D44656661756C74080756697369626C650800000F54536D616C6C536372 + 6F6C6C42617200095374796C654E616D65060F68736D616C6C7363726F6C6C62 + 617205416C69676E0706426F74746F6D06437572736F72070763724172726F77 + 0B536D616C6C4368616E676505000000000000000000000B4F7269656E746174 + 696F6E070A486F72697A6F6E74616C0B4D617267696E732E546F700500000000 + 0000008000400A53697A652E576964746805000000000000009606400B53697A + 652E48656967687405000000000000008002401453697A652E506C6174666F72 + 6D44656661756C74080756697369626C65080000000F54436F6C6F72416E696D + 6174696F6E00095374796C654E616D6506146D656D6F5374726F6B65416E696D + 6174696F6E31084475726174696F6E050000000000000000000007496E766572 + 7365090C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A53 + 7461727456616C756507097846463135313531350953746F7056616C75650709 + 7846463430343034300754726967676572062049734D6F7573654F7665723D74 + 7275653B4973466F63757365643D66616C73650E54726967676572496E766572 + 7365062149734D6F7573654F7665723D66616C73653B4973466F63757365643D + 66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E61 + 6D6506146D656D6F5374726F6B65416E696D6174696F6E32084475726174696F + 6E05000000000000000000000C50726F70657274794E616D65060C5374726F6B + 652E436F6C6F720A537461727456616C75650709784646343034303430095374 + 6F7056616C756507097846463241383245320754726967676572060E4973466F + 63757365643D747275650E54726967676572496E7665727365060F4973466F63 + 757365643D66616C7365000000005450463007544C61796F757400095374796C + 654E616D65060E6C696E6B6C6162656C7374796C6505416C69676E070643656E + 7465720A53697A652E5769647468050000000000CCCC8006400B53697A652E48 + 65696768740500000000009A998104401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C65080005545465787400095374796C654E616D + 6506047465787405416C69676E0708436F6E74656E7473074869745465737408 + 0A53697A652E5769647468050000000000CCCC8006400B53697A652E48656967 + 68740500000000009A998104401453697A652E506C6174666F726D4465666175 + 6C74081A5465787453657474696E67732E466F6E742E5374796C654578740A0D + 00000004040000000000000004000000165465787453657474696E67732E466F + 6E74436F6C6F72070D636C61446F64676572626C7565000F54436F6C6F72416E + 696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D617469 + 6F6E315374796C65084475726174696F6E050000000000000000000007496E76 + 65727365090C50726F70657274794E616D6506165465787453657474696E6773 + 2E466F6E74436F6C6F720A537461727456616C7565070D636C61446F64676572 + 626C75650953746F7056616C7565070E636C6144656570736B79626C75650754 + 726967676572063049734D6F7573654F7665723D747275653B49735072657373 + 65643D66616C73653B4973466F63757365643D66616C73650E54726967676572 + 496E7665727365063149734D6F7573654F7665723D66616C73653B4973507265 + 737365643D66616C73653B4973466F63757365643D66616C736500000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E + 696D6174696F6E325374796C65084475726174696F6E05000000000000000000 + 000C50726F70657274794E616D6506165465787453657474696E67732E466F6E + 74436F6C6F720A537461727456616C7565070E636C6144656570736B79626C75 + 650953746F7056616C756507097846463137353739430754726967676572062F + 4973507265737365643D747275653B49734D6F7573654F7665723D747275653B + 4973466F63757365643D66616C736500000000545046300A5452656374616E67 + 6C6500095374796C654E616D65060E7374617475736261727374796C6505416C + 69676E070643656E7465720C436C69704368696C6472656E090A46696C6C2E43 + 6F6C6F7207097846463235323532350748697454657374080553696465730B03 + 546F70000A53697A652E57696474680500000000000000F004400B53697A652E + 4865696768740500000000000000C804401453697A652E506C6174666F726D44 + 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313507 + 56697369626C65080007544C61796F757400095374796C654E616D6506074C61 + 796F75743105416C69676E070552696768740A506F736974696F6E2E58050000 + 00000000008C04400A53697A652E57696474680500000000000000C803400B53 + 697A652E4865696768740500000000000000C804401453697A652E506C617466 + 6F726D44656661756C740800095453697A654772697000095374796C654E616D + 65060973697A65677267697005416C69676E0706426F74746F6D0A506F736974 + 696F6E2E590500000000000000C803400A53697A652E57696474680500000000 + 000000C803400B53697A652E4865696768740500000000000000C80340145369 + 7A652E506C6174666F726D44656661756C7408000000005450463007544C6179 + 6F757400095374796C654E616D65060C7370696E626F787374796C6505416C69 + 676E070643656E7465720A53697A652E57696474680500000000006666E00540 + 0B53697A652E4865696768740500000000000000C003401453697A652E506C61 + 74666F726D44656661756C74080756697369626C6508000A5452656374616E67 + 6C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E07 + 08436F6E74656E74730A46696C6C2E436F6C6F7207097846463230323032300A + 53697A652E57696474680500000000006666E005400B53697A652E4865696768 + 740500000000000000C003401453697A652E506C6174666F726D44656661756C + 74080C5374726F6B652E436F6C6F720709784646313531353135000F54436F6C + 6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E69 + 6D6174696F6E315374796C65084475726174696F6E0500000000000000000000 + 07496E7665727365090C50726F70657274794E616D65060C5374726F6B652E43 + 6F6C6F720A537461727456616C756507097846463135313531350953746F7056 + 616C756507097846463430343034300754726967676572061049734D6F757365 + 4F7665723D747275650E54726967676572496E7665727365061149734D6F7573 + 654F7665723D66616C73650000000C5442727573684F626A6563740009537479 + 6C654E616D65060A666F726567726F756E640B42727573682E436F6C6F720709 + 78464645414541454100000C5442727573684F626A65637400095374796C654E + 616D65060973656C656374696F6E0B42727573682E436F6C6F72070978393632 + 4138324532000007544C61796F757400095374796C654E616D650607636F6E74 + 656E7405416C69676E0706436C69656E74064C6F636B6564090C4D617267696E + 732E4C65667405000000000000008000400B4D617267696E732E546F70050000 + 00000000008000400D4D617267696E732E526967687405000000000000008000 + 400E4D617267696E732E426F74746F6D05000000000000008000400A53697A65 + 2E5769647468050000000000CCCCF004400B53697A652E486569676874050000 + 0000000000A003401453697A652E506C6174666F726D44656661756C74080000 + 0754427574746F6E00095374796C654E616D65060B6D696E7573627574746F6E + 05416C69676E07044C6566740843616E466F6375730806437572736F72070763 + 724172726F770C4D617267696E732E4C65667405000000000000008000400B4D + 617267696E732E546F7005000000000000008000400D4D617267696E732E5269 + 67687405000000000000008000400E4D617267696E732E426F74746F6D050000 + 00000000008000400A506F736974696F6E2E5805000000000000008000400A50 + 6F736974696F6E2E5905000000000000008000400A53697A652E576964746805 + 00000000000000A003400B53697A652E4865696768740500000000000000A003 + 401453697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F + 6B7570060B627574746F6E7374796C65000554506174680005416C69676E0706 + 43656E74657209446174612E506174680A400000000500000000000000000080 + 3F00000000010000000000803F0000803F01000000000000000000003F010000 + 000000803F00000000030000000000803F000000000A46696C6C2E436F6C6F72 + 0708636C6157686974650748697454657374080A53697A652E57696474680500 + 0000000000008002400B53697A652E4865696768740500000000000000800240 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E650000000754427574746F6E00095374796C654E616D65060A + 706C7573627574746F6E05416C69676E070552696768740843616E466F637573 + 0806437572736F72070763724172726F770C4D617267696E732E4C6566740500 + 0000000000008000400B4D617267696E732E546F700500000000000000800040 + 0D4D617267696E732E526967687405000000000000008000400E4D617267696E + 732E426F74746F6D05000000000000008000400A506F736974696F6E2E580500 + 000000006666B405400A506F736974696F6E2E5905000000000000008000400A + 53697A652E57696474680500000000000000A003400B53697A652E4865696768 + 740500000000000000A003401453697A652E506C6174666F726D44656661756C + 74080B5374796C654C6F6F6B7570060B627574746F6E7374796C650005545061 + 74680005416C69676E070643656E74657209446174612E506174680A34000000 + 0400000000000000000000000000000001000000000000000000803F01000000 + 0000803F0000003F0300000000000000000000000A46696C6C2E436F6C6F7207 + 08636C6157686974650748697454657374080A53697A652E5769647468050000 + 00000000008002400B53697A652E486569676874050000000000000080024014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E65000000005450463007544C61796F757400095374796C654E61 + 6D65060D73697A65677269707374796C6505416C69676E070643656E7465720A + 53697A652E57696474680500000000000000C803400B53697A652E4865696768 + 740500000000000000C803401453697A652E506C6174666F726D44656661756C + 74080756697369626C6508000A5452656374616E676C6500095374796C654E61 + 6D65060A52656374616E676C653105416C69676E070643656E7465720A46696C + 6C2E436F6C6F7207097846463630363036300A53697A652E5769647468050000 + 0000000000A000400B53697A652E4865696768740500000000000000A0004014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E6500000A5452656374616E676C6500095374796C654E616D6506 + 0A52656374616E676C653205416C69676E070643656E7465720A46696C6C2E43 + 6F6C6F7207097846463630363036300C4D617267696E732E4C65667405000000 + 00000000A002400A53697A652E57696474680500000000000000A000400B5369 + 7A652E4865696768740500000000000000A000401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000A54 + 52656374616E676C6500095374796C654E616D65060A52656374616E676C6533 + 05416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846463630 + 363036300C4D617267696E732E4C6566740500000000000000A002400B4D6172 + 67696E732E546F700500000000000000A002400A53697A652E57696474680500 + 000000000000A000400B53697A652E4865696768740500000000000000A00040 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E6500000A5452656374616E676C6500095374796C654E616D65 + 060A52656374616E676C653405416C69676E070643656E7465720A46696C6C2E + 436F6C6F7207097846463630363036300B4D617267696E732E546F7005000000 + 00000000A002400A53697A652E57696474680500000000000000A000400B5369 + 7A652E4865696768740500000000000000A000401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000A54 + 52656374616E676C6500095374796C654E616D65060A52656374616E676C6535 + 05416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846463630 + 363036300B4D617267696E732E546F700500000000000000A002400D4D617267 + 696E732E52696768740500000000000000A002400A53697A652E576964746805 + 00000000000000A000400B53697A652E4865696768740500000000000000A000 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E6500000A5452656374616E676C6500095374796C654E616D + 65060A52656374616E676C653605416C69676E070643656E7465720A46696C6C + 2E436F6C6F7207097846463630363036300C4D617267696E732E4C6566740500 + 000000000000A002400E4D617267696E732E426F74746F6D0500000000000000 + A002400A53697A652E57696474680500000000000000A000400B53697A652E48 + 65696768740500000000000000A000401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E65000000545046300A + 5452656374616E676C6500095374796C654E616D65060C746F6F6C6261727374 + 796C6505416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846 + 463235323532350748697454657374080553696465730B06426F74746F6D000A + 53697A652E57696474680500000000000000C804400B53697A652E4865696768 + 740500000000000000C804401453697A652E506C6174666F726D44656661756C + 74080C5374726F6B652E436F6C6F720709784646313531353135075669736962 + 6C650800005450463007544C61796F757400095374796C654E616D6506157072 + 6F67726573736261726572726F727374796C6505416C69676E070643656E7465 + 720A53697A652E576964746805000000000033338505400B53697A652E486569 + 6768740500000000009999E104401453697A652E506C6174666F726D44656661 + 756C74080756697369626C6508000A5452656374616E676C6500095374796C65 + 4E616D65060668747261636B05416C69676E0708436F6E74656E74730A46696C + 6C2E436F6C6F720709784646323032303230064C6F636B656409074869745465 + 7374080A53697A652E576964746805000000000033338505400B53697A652E48 + 65696768740500000000009999E104401453697A652E506C6174666F726D4465 + 6661756C74080C5374726F6B652E436F6C6F720709784646313531353135000A + 5452656374616E676C6500095374796C654E616D65060A68696E64696361746F + 7205416C69676E07044C6566740A46696C6C2E436F6C6F720709784646453232 + 413241064C6F636B6564090748697454657374080C4D617267696E732E4C6566 + 74050000000000000080FF3F0B4D617267696E732E546F700500000000000000 + 80FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D6172 + 67696E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E + 58050000000000000080FF3F0A506F736974696F6E2E59050000000000000080 + FF3F0A53697A652E57696474680500000000000000C804400B53697A652E4865 + 696768740500000000009999D904401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E650000000A5452656374 + 616E676C6500095374796C654E616D65060676747261636B05416C69676E0708 + 436F6E74656E74730A46696C6C2E436F6C6F720709784646323032303230064C + 6F636B6564090748697454657374080A53697A652E5769647468050000000000 + 33338505400B53697A652E4865696768740500000000009999E104401453697A + 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 + 09784646313531353135000A5452656374616E676C6500095374796C654E616D + 65060A76696E64696361746F7205416C69676E0706426F74746F6D0A46696C6C + 2E436F6C6F720709784646453232413241064C6F636B65640907486974546573 + 74080C4D617267696E732E4C656674050000000000000080FF3F0B4D61726769 + 6E732E546F70050000000000000080FF3F0D4D617267696E732E526967687405 + 0000000000000080FF3F0E4D617267696E732E426F74746F6D05000000000000 + 0080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F736974 + 696F6E2E5905000000000099998904400A53697A652E57696474680500000000 + 0033338105400B53697A652E4865696768740500000000000000A80340145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E65000000005450463007544C61796F757400095374796C654E616D65 + 060F64726F707461726765747374796C6505416C69676E070643656E7465720A + 53697A652E5769647468050000000000ACAAD905400B53697A652E4865696768 + 740500000000000000CF05401453697A652E506C6174666F726D44656661756C + 74080756697369626C6508000A5452656374616E676C650005416C69676E0708 + 436F6E74656E74730946696C6C2E4B696E6407044E6F6E650748697454657374 + 080A53697A652E5769647468050000000000ACAAD905400B53697A652E486569 + 6768740500000000000000CF05401453697A652E506C6174666F726D44656661 + 756C74080C5374726F6B652E436F6C6F720708636C615768697465105374726F + 6B652E546869636B6E65737305000000000000008001400B5374726F6B652E44 + 61736807044461736807585261646975730500000000000000C0024007595261 + 646975730500000000000000C002400005545465787400095374796C654E616D + 6506047465787405416C69676E0706426F74746F6D0748697454657374080C4D + 617267696E732E4C6566740500000000000000A002400D4D617267696E732E52 + 696768740500000000000000A002400A506F736974696F6E2E58050000000000 + 0000A002400A506F736974696F6E2E590500000000000000D604400A53697A65 + 2E5769647468050000000000ACAAB105400B53697A652E486569676874050000 + 0000000000C804401453697A652E506C6174666F726D44656661756C74081654 + 65787453657474696E67732E466F6E74436F6C6F720708636C61576869746500 + 00001254466C6F61744B6579416E696D6174696F6E00084475726174696F6E05 + 0000000000999999FE3F044B6579730E010001034B6579050000000000000080 + FE3F0556616C75650500000000000000A003C00001034B657905000000000000 + 0080FF3F0000044C6F6F70090C50726F70657274794E616D65060B5061646469 + 6E672E546F7010537461727446726F6D43757272656E74080754726967676572 + 060F4973447261674F7665723D7472756500000554506174680005416C69676E + 070643656E74657209446174612E506174680AC4000000100000000000000008 + EC8343F087A4430100000008EC8343083CFB430200000035BE7143504DF94302 + 00000012835C43A8E6F54302000000F0674943F803F1430100000008EC8343FC + 0116440100000008EC8343FC5116440100000000408443FC5116440100000010 + 689A43FC412B4401000000081CD043F803F14302000000915DC64321E0F54302 + 000000919DBB439643F94302000000087CB043F833FB4301000000087CB043F0 + 87A4430100000008EC8343F087A4430300000000000000000000000A46696C6C + 2E436F6C6F720708636C6157686974650748697454657374080A53697A652E57 + 696474680500000000000000C804400B53697A652E4865696768740500000000 + 000100C804401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E650000005450463007544C61796F7574000953 + 74796C654E616D65061464726F707461726765746669656C647374796C650541 + 6C69676E070643656E7465720A53697A652E576964746805000000000000A08A + 07400B53697A652E4865696768740500000000000000B204401453697A652E50 + 6C6174666F726D44656661756C74080756697369626C6508000A545265637461 + 6E676C6500095374796C654E616D65060A52656374616E676C653105416C6967 + 6E0706436C69656E740946696C6C2E4B696E6407044E6F6E6507486974546573 + 74080A53697A652E576964746805000000000000A08A07400B53697A652E4865 + 696768740500000000000000B204401453697A652E506C6174666F726D446566 + 61756C74080C5374726F6B652E436F6C6F720709784646324138324532000554 + 5465787400095374796C654E616D6506047465787405416C69676E0706436C69 + 656E740748697454657374080A53697A652E576964746805000000000000809A + 05400B53697A652E4865696768740500000000000000B204401453697A652E50 + 6C6174666F726D44656661756C7408165465787453657474696E67732E466F6E + 74436F6C6F720708636C615768697465000007544C61796F757400095374796C + 654E616D6506074C61796F75743105416C69676E07044C6566740A53697A652E + 57696474680500000000000000C805400B53697A652E48656967687405000000 + 00000000B204401453697A652E506C6174666F726D44656661756C7408000554 + 5061746800095374796C654E616D650605506174683105416C69676E07064365 + 6E74657209446174612E506174680A24010000180000000000000073B8AC43C1 + 4A7843010000006D2717435849DD430200000086CB0A431078E3430200000096 + 83ED421078E34302000000DACED4425849DD43020000009A19BC42081CD74302 + 0000009A19BC424C17CD4302000000DACED4421DEAC64301000000B4288B4385 + EB61430100000068D1D4426811584202000000281CBC42CAA126420200000028 + 1CBC42E6FBAC410200000068D1D442D04D144102000000A886ED429CC245C002 + 000000CCCC0A439CC245C002000000B4281743D04D14410100000016B9AC4391 + 8D4B4302000000BECFAF43A5BB5143020000009F5AB143F1D25943020000009F + 5AB14343EB614302000000A05AB1439C046A4302000000FACEAF43711D724302 + 00000073B8AC43C14A78430300000073B8AC43C14A78430A46696C6C2E436F6C + 6F720708636C6157686974650748697454657374080A53697A652E5769647468 + 0500000000000000F002400B53697A652E4865696768740500000000000000F0 + 02401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E6508577261704D6F646507034669740000055450617468 + 00095374796C654E616D650605506174683205416C69676E070643656E746572 + 09446174612E506174680A24010000180000000000000073B8AC43C14A784301 + 0000006D2717435849DD430200000086CB0A431078E343020000009683ED4210 + 78E34302000000DACED4425849DD43020000009A19BC42081CD743020000009A + 19BC424C17CD4302000000DACED4421DEAC64301000000B4288B4385EB614301 + 00000068D1D4426811584202000000281CBC42CAA1264202000000281CBC42E6 + FBAC410200000068D1D442D04D144102000000A886ED429CC245C002000000CC + CC0A439CC245C002000000B4281743D04D14410100000016B9AC43918D4B4302 + 000000BECFAF43A5BB5143020000009F5AB143F1D25943020000009F5AB14343 + EB614302000000A05AB1439C046A4302000000FACEAF43711D72430200000073 + B8AC43C14A78430300000073B8AC43C14A78430A46696C6C2E436F6C6F720708 + 636C6157686974650748697454657374080C4D617267696E732E4C6566740500 + 000000000000A004400A53697A652E57696474680500000000000000F002400B + 53697A652E4865696768740500000000000000F002401453697A652E506C6174 + 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650857 + 7261704D6F64650703466974000005545061746800095374796C654E616D6506 + 05506174683305416C69676E070643656E74657209446174612E506174680A24 + 010000180000000000000073B8AC43C14A7843010000006D2717435849DD4302 + 00000086CB0A431078E343020000009683ED421078E34302000000DACED44258 + 49DD43020000009A19BC42081CD743020000009A19BC424C17CD4302000000DA + CED4421DEAC64301000000B4288B4385EB61430100000068D1D4426811584202 + 000000281CBC42CAA1264202000000281CBC42E6FBAC410200000068D1D442D0 + 4D144102000000A886ED429CC245C002000000CCCC0A439CC245C002000000B4 + 281743D04D14410100000016B9AC43918D4B4302000000BECFAF43A5BB514302 + 0000009F5AB143F1D25943020000009F5AB14343EB614302000000A05AB1439C + 046A4302000000FACEAF43711D72430200000073B8AC43C14A78430300000073 + B8AC43C14A78430A46696C6C2E436F6C6F720708636C61576869746507486974 + 54657374080D4D617267696E732E52696768740500000000000000A004400A53 + 697A652E57696474680500000000000000F002400B53697A652E486569676874 + 0500000000000000F002401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F646507034669 + 7400000007544C61796F757400095374796C654E616D6506074C61796F757432 + 05416C69676E070552696768740A506F736974696F6E2E580500000000000040 + B106400A53697A652E57696474680500000000000000C805400B53697A652E48 + 65696768740500000000000000B204401453697A652E506C6174666F726D4465 + 6661756C74080005545061746800095374796C654E616D650605506174683105 + 416C69676E070643656E74657209446174612E506174680A2401000018000000 + 0000000073B8AC43C14A7843010000006D2717435849DD430200000086CB0A43 + 1078E343020000009683ED421078E34302000000DACED4425849DD4302000000 + 9A19BC42081CD743020000009A19BC424C17CD4302000000DACED4421DEAC643 + 01000000B4288B4385EB61430100000068D1D4426811584202000000281CBC42 + CAA1264202000000281CBC42E6FBAC410200000068D1D442D04D144102000000 + A886ED429CC245C002000000CCCC0A439CC245C002000000B4281743D04D1441 + 0100000016B9AC43918D4B4302000000BECFAF43A5BB5143020000009F5AB143 + F1D25943020000009F5AB14343EB614302000000A05AB1439C046A4302000000 + FACEAF43711D72430200000073B8AC43C14A78430300000073B8AC43C14A7843 + 0A46696C6C2E436F6C6F720708636C6157686974650748697454657374080D52 + 6F746174696F6E416E676C650500000000000000B406400A53697A652E576964 + 74680500000000000000F002400B53697A652E48656967687405000000000000 + 00F002401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E6508577261704D6F64650703466974000005545061 + 746800095374796C654E616D650605506174683205416C69676E070643656E74 + 657209446174612E506174680A24010000180000000000000073B8AC43C14A78 + 43010000006D2717435849DD430200000086CB0A431078E343020000009683ED + 421078E34302000000DACED4425849DD43020000009A19BC42081CD743020000 + 009A19BC424C17CD4302000000DACED4421DEAC64301000000B4288B4385EB61 + 430100000068D1D4426811584202000000281CBC42CAA1264202000000281CBC + 42E6FBAC410200000068D1D442D04D144102000000A886ED429CC245C0020000 + 00CCCC0A439CC245C002000000B4281743D04D14410100000016B9AC43918D4B + 4302000000BECFAF43A5BB5143020000009F5AB143F1D25943020000009F5AB1 + 4343EB614302000000A05AB1439C046A4302000000FACEAF43711D7243020000 + 0073B8AC43C14A78430300000073B8AC43C14A78430A46696C6C2E436F6C6F72 + 0708636C6157686974650748697454657374080C4D617267696E732E4C656674 + 0500000000000000A004400D526F746174696F6E416E676C6505000000000000 + 00B406400A53697A652E57696474680500000000000000F002400B53697A652E + 4865696768740500000000000000F002401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F + 64650703466974000005545061746800095374796C654E616D65060550617468 + 3305416C69676E070643656E74657209446174612E506174680A240100001800 + 00000000000073B8AC43C14A7843010000006D2717435849DD430200000086CB + 0A431078E343020000009683ED421078E34302000000DACED4425849DD430200 + 00009A19BC42081CD743020000009A19BC424C17CD4302000000DACED4421DEA + C64301000000B4288B4385EB61430100000068D1D4426811584202000000281C + BC42CAA1264202000000281CBC42E6FBAC410200000068D1D442D04D14410200 + 0000A886ED429CC245C002000000CCCC0A439CC245C002000000B4281743D04D + 14410100000016B9AC43918D4B4302000000BECFAF43A5BB5143020000009F5A + B143F1D25943020000009F5AB14343EB614302000000A05AB1439C046A430200 + 0000FACEAF43711D72430200000073B8AC43C14A78430300000073B8AC43C14A + 78430A46696C6C2E436F6C6F720708636C615768697465074869745465737408 + 0D4D617267696E732E52696768740500000000000000A004400D526F74617469 + 6F6E416E676C650500000000000000B406400A53697A652E5769647468050000 + 0000000000F002400B53697A652E4865696768740500000000000000F0024014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E6508577261704D6F646507034669740000000000545046300754 + 4C61796F757400095374796C654E616D65060C706F706F7665727374796C6505 + 416C69676E070643656E7465720756697369626C6508000A5452656374616E67 + 6C6500095374796C654E616D650602626705416C69676E0706436C69656E740A + 46696C6C2E436F6C6F7207097846463230323032300748697454657374080A53 + 697A652E57696474680500000000000000C804400B53697A652E486569676874 + 0500000000000000C804401453697A652E506C6174666F726D44656661756C74 + 080C5374726F6B652E436F6C6F7207097846463135313531350007544C61796F + 757400095374796C654E616D650607636F6E74656E7405416C69676E0706436C + 69656E740C4D617267696E732E4C656674050000000000000080FF3F0B4D6172 + 67696E732E546F70050000000000000080FF3F0D4D617267696E732E52696768 + 74050000000000000080FF3F0E4D617267696E732E426F74746F6D0500000000 + 00000080FF3F0A53697A652E57696474680500000000000000C004400B53697A + 652E4865696768740500000000000000C004401453697A652E506C6174666F72 + 6D44656661756C740800000D54536861646F7745666665637400084469737461 + 6E63650500000000000000C0004009446972656374696F6E0500000000000000 + B4054008536F66746E657373050000000000000080FE3F074F70616369747905 + 0000000000000080FE3F0B536861646F77436F6C6F720708636C61426C61636B + 000000005450463007544C61796F757400095374796C654E616D65060D706F70 + 7570626F787374796C6505416C69676E070643656E7465720A53697A652E5769 + 6474680500000000000080C406400B53697A652E486569676874050000000000 + 0000D404401453697A652E506C6174666F726D44656661756C74080756697369 + 626C6508000A5452656374616E676C6500095374796C654E616D65060A626163 + 6B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C + 6F7207097846463230323032300748697454657374080A53697A652E57696474 + 680500000000000080C406400B53697A652E4865696768740500000000000000 + D404401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650614436F6C6F72416E696D6174696F6E315374796C65084475 + 726174696F6E05000000000000000000000C50726F70657274794E616D65060A + 46696C6C2E436F6C6F720A537461727456616C75650709784646323032303230 + 0953746F7056616C756507097846463430343034300754726967676572062049 + 734D6F7573654F7665723D747275653B4973507265737365643D66616C73650E + 54726967676572496E7665727365062149734D6F7573654F7665723D66616C73 + 653B4973507265737365643D66616C736500000F54436F6C6F72416E696D6174 + 696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E3253 + 74796C65084475726174696F6E05000000000000000000000C50726F70657274 + 794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507097846 + 463430343034300953746F7056616C7565070978464632413832453207547269 + 67676572062049734D6F7573654F7665723D747275653B497350726573736564 + 3D747275653B0E54726967676572496E7665727365062049734D6F7573654F76 + 65723D747275653B4973507265737365643D66616C736500000007544C61796F + 75740005416C69676E070552696768740A506F736974696F6E2E580500000000 + 000080B506400A53697A652E57696474680500000000000000F002400B53697A + 652E4865696768740500000000000000D404401453697A652E506C6174666F72 + 6D44656661756C7408000554506174680005416C69676E070643656E74657209 + 446174612E506174680A400000000500000000000000000000000000803F0100 + 00000000803F0000803F010000000000003F0000000001000000000000000000 + 803F0300000000000000000000000A46696C6C2E436F6C6F720708636C615768 + 6974650748697454657374080B4D617267696E732E546F700500000000000000 + E001C00A53697A652E576964746805000000000000008002400B53697A652E48 + 656967687405000000000000008001401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E650000055450617468 + 0005416C69676E070643656E74657209446174612E506174680A340000000400 + 0000000000000000000000000000010000000000803F00000000010000000000 + 003F0000803F0300000000000000000000000A46696C6C2E436F6C6F72070863 + 6C6157686974650748697454657374080B4D617267696E732E546F7005000000 + 00000000C001400A53697A652E576964746805000000000000008002400B5369 + 7A652E48656967687405000000000000008001401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000005 + 545465787400095374796C654E616D6506047465787405416C69676E0706436C + 69656E740748697454657374080C4D617267696E732E4C656674050000000000 + 000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D6172 + 67696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F + 74746F6D050000000000000080FF3F0A53697A652E5769647468050000000000 + 0080B306400B53697A652E4865696768740500000000000000CC04401453697A + 652E506C6174666F726D44656661756C7408165465787453657474696E67732E + 466F6E74436F6C6F720708636C615768697465000000545046300A5452656374 + 616E676C6500095374796C654E616D6506147374617475736261726E6F677269 + 707374796C6505416C69676E070643656E7465720C436C69704368696C647265 + 6E090A46696C6C2E436F6C6F7207097846463235323532350553696465730B03 + 546F70000A53697A652E57696474680500000000000000F004400B53697A652E + 4865696768740500000000000000C804401453697A652E506C6174666F726D44 + 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313507 + 56697369626C650800005450463007544C61796F757400095374796C654E616D + 650613736D616C6C7363726F6C6C6261727374796C6505416C69676E07064365 + 6E7465720756697369626C6508000654547261636B00095374796C654E616D65 + 060668747261636B05416C69676E0706436C69656E74064C6F636B6564090B4F + 7269656E746174696F6E070A486F72697A6F6E74616C0A53697A652E57696474 + 680500000000000000C804400B53697A652E4865696768740500000000000000 + C804401453697A652E506C6174666F726D44656661756C74080B5374796C654C + 6F6F6B757006147363726F6C6C62617268747261636B7374796C650000065454 + 7261636B00095374796C654E616D65060676747261636B05416C69676E070643 + 6C69656E74064C6F636B6564090B4F7269656E746174696F6E070A486F72697A + 6F6E74616C0A53697A652E57696474680500000000000000C804400B53697A65 + 2E4865696768740500000000000000C804401453697A652E506C6174666F726D + 44656661756C74080B5374796C654C6F6F6B757006147363726F6C6C62617276 + 747261636B7374796C650000005450463007544C61796F757400095374796C65 + 4E616D65060D73706C69747465727374796C6505416C69676E070643656E7465 + 720A53697A652E57696474680500000000000000A904400B53697A652E486569 + 6768740500000000000080C105401453697A652E506C6174666F726D44656661 + 756C74080756697369626C6508000A5452656374616E676C6500095374796C65 + 4E616D65060A52656374616E676C653105416C69676E0706436C69656E740A46 + 696C6C2E436F6C6F720709784646333033303330074869745465737408055369 + 6465730B044C656674055269676874000A53697A652E57696474680500000000 + 000000A904400B53697A652E4865696768740500000000000080C10540145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 0709784646313531353135000007544C61796F757400095374796C654E616D65 + 06064C61796F757405416C69676E0706436C69656E740A53697A652E57696474 + 680500000000000000A904400B53697A652E4865696768740500000000000080 + C105401453697A652E506C6174666F726D44656661756C74080007544C61796F + 757400095374796C654E616D6506046772697005416C69676E070A5665727443 + 656E746572064C6F636B6564090A506F736974696F6E2E590500000000000000 + 8004400A53697A652E57696474680500000000000000A904400B53697A652E48 + 656967687405000000000000008004401453697A652E506C6174666F726D4465 + 6661756C7408000754436972636C6500095374796C654E616D65060743697263 + 6C653305416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846 + 463430343034300748697454657374080E4D617267696E732E426F74746F6D05 + 00000000000000A003400A53697A652E57696474680500000000000000E00140 + 0B53697A652E4865696768740500000000000000E001401453697A652E506C61 + 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 + 353135313500000754436972636C6500095374796C654E616D65060743697263 + 6C653205416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846 + 463430343034300748697454657374080B4D617267696E732E546F7005000000 + 00000000A003400A53697A652E57696474680500000000000000E001400B5369 + 7A652E4865696768740500000000000000E001401453697A652E506C6174666F + 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 + 313500000754436972636C6500095374796C654E616D650607436972636C6531 + 05416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846463430 + 343034300748697454657374080A53697A652E57696474680500000000000000 + E001400B53697A652E4865696768740500000000000000E001401453697A652E + 506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72070978 + 464631353135313500000000005450463007544C61796F757400095374796C65 + 4E616D650610636C6F7365627574746F6E7374796C6505416C69676E07064365 + 6E7465720A53697A652E57696474680500000000000000C804400B53697A652E + 4865696768740500000000000000C803401453697A652E506C6174666F726D44 + 656661756C74080756697369626C6508000A5452656374616E676C6500095374 + 796C654E616D65060B636C6F7365627574746F6E05416C69676E0706436C6965 + 6E740A46696C6C2E436F6C6F7207097846463230323032300748697454657374 + 080A53697A652E57696474680500000000000000C804400B53697A652E486569 + 6768740500000000000000C803401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E + 696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D617469 + 6F6E315374796C65084475726174696F6E05000000000000000000000C50726F + 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 + 07097846463230323032300953746F7056616C75650709784646464636313537 + 0754726967676572062049734D6F7573654F7665723D747275653B4973507265 + 737365643D66616C73650E54726967676572496E7665727365062149734D6F75 + 73654F7665723D66616C73653B4973507265737365643D66616C736500000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72 + 416E696D6174696F6E325374796C65084475726174696F6E0500000000000000 + 0000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461 + 727456616C756507097846464646363135370953746F7056616C756507097846 + 464532344634350754726967676572061F49734D6F7573654F7665723D747275 + 653B4973507265737365643D747275650E54726967676572496E766572736506 + 2049734D6F7573654F7665723D747275653B4973507265737365643D66616C73 + 6500000005545061746800095374796C654E616D650605506174683105416C69 + 676E070643656E74657209446174612E506174680AC400000010000000000000 + 000000A0C00000704101000000000070410000A0C001000000000048420000F0 + 41010000000000AA420000A0C0010000000000D242000070410100000000008C + 4200004842010000000000D2420000B442010000000000AA420000DC42020000 + 003BDF34429E6F8C4202000000FE547D427FAAB0420200000000004842000096 + 4201000000000070410000DC42010000000000A0C00000B442010000000000F0 + 4100005C42010000000000A0C000007041030000000000A0C0000070410A4669 + 6C6C2E436F6C6F720708636C6157686974650748697454657374080A53697A65 + 2E57696474680500000000000000A002400B53697A652E486569676874050000 + 0000000000A002401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E650000005450463007544C61796F757400 + 095374796C654E616D65060E6D6178627574746F6E7374796C6505416C69676E + 070643656E7465720A53697A652E57696474680500000000000000C804400B53 + 697A652E4865696768740500000000000000C803401453697A652E506C617466 + 6F726D44656661756C74080756697369626C6508000A5452656374616E676C65 + 00095374796C654E616D6506096D6178627574746F6E05416C69676E0706436C + 69656E740A46696C6C2E436F6C6F720709784646323032303230074869745465 + 7374080A53697A652E57696474680500000000000000C804400B53697A652E48 + 65696768740500000000000000C803401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72 + 416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D61 + 74696F6E315374796C65084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C + 756507097846463230323032300953746F7056616C7565070978464632413832 + 45320754726967676572062049734D6F7573654F7665723D747275653B497350 + 7265737365643D66616C73650E54726967676572496E7665727365062149734D + 6F7573654F7665723D66616C73653B4973507265737365643D66616C73650000 + 0F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C + 6F72416E696D6174696F6E325374796C65084475726174696F6E050000000000 + 00000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53 + 7461727456616C756507097846463241383245320953746F7056616C75650709 + 7846463137353739430754726967676572061F49734D6F7573654F7665723D74 + 7275653B4973507265737365643D747275650E54726967676572496E76657273 + 65062049734D6F7573654F7665723D747275653B4973507265737365643D6661 + 6C736500000005545061746800095374796C654E616D65060550617468310541 + 6C69676E070643656E74657209446174612E506174680A580000000700000000 + 0000000000C8420000C8420100000000002F440000C8420100000000002F4400 + 002F44010000000080094400800944010000000080094400007A430100000000 + 007A4300007A43030000000000C8420000C8420A46696C6C2E436F6C6F720708 + 636C6157686974650748697454657374080A53697A652E576964746805000000 + 00000000A002400B53697A652E4865696768740500000000000000A002401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E650000005450463007544C61796F757400095374796C654E616D65 + 060E726573627574746F6E7374796C6505416C69676E070643656E7465720A53 + 697A652E57696474680500000000000000C804400B53697A652E486569676874 + 0500000000000000C803401453697A652E506C6174666F726D44656661756C74 + 080756697369626C6508000A5452656374616E676C6500095374796C654E616D + 650609726573627574746F6E05416C69676E0706436C69656E740A46696C6C2E + 436F6C6F7207097846463230323032300748697454657374080A53697A652E57 + 696474680500000000000000C804400B53697A652E4865696768740500000000 + 000000C803401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D650614436F6C6F72416E696D6174696F6E315374796C65 + 084475726174696F6E05000000000000000000000C50726F70657274794E616D + 65060A46696C6C2E436F6C6F720A537461727456616C75650709784646323032 + 3032300953746F7056616C756507097846463241383245320754726967676572 + 062049734D6F7573654F7665723D747275653B4973507265737365643D66616C + 73650E54726967676572496E7665727365062149734D6F7573654F7665723D66 + 616C73653B4973507265737365643D66616C736500000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F + 6E325374796C65084475726174696F6E05000000000000000000000C50726F70 + 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 + 097846463241383245320953746F7056616C7565070978464631373537394307 + 54726967676572061F49734D6F7573654F7665723D747275653B497350726573 + 7365643D747275650E54726967676572496E7665727365062049734D6F757365 + 4F7665723D747275653B4973507265737365643D66616C736500000005545061 + 746800095374796C654E616D650605506174683105416C69676E070643656E74 + 657209446174612E506174680A5800000007000000000000000000C8420000C8 + 420100000000002F440000C8420100000000002F4400002F4401000000008009 + 4400800944010000000080094400007A430100000000007A4300007A43030000 + 000000C8420000C8420A46696C6C2E436F6C6F720708636C6157686974650748 + 697454657374080D526F746174696F6E416E676C650500000000000000B40640 + 0A53697A652E57696474680500000000000000A002400B53697A652E48656967 + 68740500000000000000A002401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E650000005450463007544C61 + 796F757400095374796C654E616D65060E6D696E627574746F6E7374796C6505 + 416C69676E070643656E7465720A53697A652E57696474680500000000000000 + C804400B53697A652E4865696768740500000000000000C803401453697A652E + 506C6174666F726D44656661756C74080756697369626C6508000A5452656374 + 616E676C6500095374796C654E616D6506096D696E627574746F6E05416C6967 + 6E0706436C69656E740A46696C6C2E436F6C6F72070978464632303230323007 + 48697454657374080A53697A652E57696474680500000000000000C804400B53 + 697A652E4865696768740500000000000000C803401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72 + 416E696D6174696F6E315374796C65084475726174696F6E0500000000000000 + 0000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461 + 727456616C756507097846463230323032300953746F7056616C756507097846 + 463241383245320754726967676572062049734D6F7573654F7665723D747275 + 653B4973507265737365643D66616C73650E54726967676572496E7665727365 + 062149734D6F7573654F7665723D66616C73653B4973507265737365643D6661 + 6C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 + 0614436F6C6F72416E696D6174696F6E325374796C65084475726174696F6E05 + 000000000000000000000C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463241383245320953746F705661 + 6C756507097846463137353739430754726967676572061F49734D6F7573654F + 7665723D747275653B4973507265737365643D747275650E5472696767657249 + 6E7665727365062049734D6F7573654F7665723D747275653B49735072657373 + 65643D66616C736500000005545061746800095374796C654E616D6506055061 + 74683105416C69676E070643656E74657209446174612E506174680A40000000 + 050000000000000000002F44008009440100000000002F4400002F4401000000 + 0000C84200002F44010000000000C842008009440300000000002F4400800944 + 0A46696C6C2E436F6C6F720708636C6157686974650748697454657374080B4D + 617267696E732E546F700500000000000000A002400D526F746174696F6E416E + 676C650500000000000000B406400A53697A652E576964746805000000000000 + 00A002400B53697A652E4865696768740500000000000000C000401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E650000005450463007544C61796F757400095374796C654E616D65060F74 + 6F6F6C77696E646F777374796C6505416C69676E070643656E7465720A53697A + 652E576964746805000000000056D5AF07400B53697A652E4865696768740500 + 000000000000B306401453697A652E506C6174666F726D44656661756C740807 + 56697369626C6508000A5452656374616E676C6500095374796C654E616D6506 + 046D61736B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72 + 07097846463130313031300A53697A652E576964746805000000000056D5AF07 + 400B53697A652E4865696768740500000000000000B306401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 0756697369626C6508000007544C61796F757400095374796C654E616D650604 + 6C65667405416C69676E07084D6F73744C656674064C6F636B6564090A506F73 + 6974696F6E2E590500000000000000C803400A53697A652E5769647468050000 + 0000000000A001400B53697A652E48656967687405000000000000009A064014 + 53697A652E506C6174666F726D44656661756C7408000A5452656374616E676C + 650005416C69676E07084D6F73744C6566740A46696C6C2E436F6C6F72070978 + 46463230323032300748697454657374080553696465730B044C656674055269 + 676874000A53697A652E57696474680500000000000000A001400B53697A652E + 48656967687405000000000000009506401453697A652E506C6174666F726D44 + 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313500 + 000A5452656374616E676C6500095374796C654E616D65060A52656374616E67 + 6C653105416C69676E070A4D6F7374426F74746F6D13456E61626C6544726167 + 486967686C69676874080A46696C6C2E436F6C6F720709784646323032303230 + 0748697454657374080A506F736974696F6E2E59050000000000000095064005 + 53696465730B044C65667406426F74746F6D000A53697A652E57696474680500 + 000000000000A001400B53697A652E4865696768740500000000000000A00140 + 1453697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F + 6C6F7207097846463135313531350007544C61796F757400095374796C654E61 + 6D6506074C61796F75743305416C69676E07094D6F737452696768740A506F73 + 6974696F6E2E5805000000000000008001400A53697A652E5769647468050000 + 000000000080FF3F0B53697A652E4865696768740500000000000000A0014014 + 53697A652E506C6174666F726D44656661756C7408000A5452656374616E676C + 6500095374796C654E616D65060A52656374616E676C653105416C69676E0703 + 546F700A46696C6C2E436F6C6F72070978464631353135313507486974546573 + 74080A53697A652E5769647468050000000000000080FF3F0B53697A652E4865 + 69676874050000000000000080FF3F1453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65000000000007544C61 + 796F757400095374796C654E616D650605726967687405416C69676E07094D6F + 73745269676874064C6F636B6564090A506F736974696F6E2E58050000000000 + 5655AD07400A506F736974696F6E2E590500000000000000C803400A53697A65 + 2E57696474680500000000000000A001400B53697A652E486569676874050000 + 00000000009A06401453697A652E506C6174666F726D44656661756C7408000A + 5452656374616E676C650005416C69676E07094D6F737452696768740A46696C + 6C2E436F6C6F7207097846463230323032300748697454657374080553696465 + 730B044C656674055269676874000A53697A652E576964746805000000000000 + 00A001400B53697A652E48656967687405000000000000009506401453697A65 + 2E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709 + 78464631353135313500000A5452656374616E676C6500095374796C654E616D + 65060A52656374616E676C653105416C69676E070A4D6F7374426F74746F6D13 + 456E61626C6544726167486967686C69676874080A46696C6C2E436F6C6F7207 + 097846463230323032300748697454657374080A506F736974696F6E2E590500 + 0000000000009506400553696465730B06426F74746F6D055269676874000A53 + 697A652E57696474680500000000000000A001400B53697A652E486569676874 + 0500000000000000A001401453697A652E506C6174666F726D44656661756C74 + 080C5374726F6B652E436F6C6F7207097846463135313531350007544C61796F + 757400095374796C654E616D6506074C61796F75743305416C69676E07084D6F + 73744C6566740A53697A652E5769647468050000000000000080FF3F0B53697A + 652E4865696768740500000000000000A001401453697A652E506C6174666F72 + 6D44656661756C7408000A5452656374616E676C6500095374796C654E616D65 + 060A52656374616E676C653105416C69676E0703546F700A46696C6C2E436F6C + 6F7207097846463135313531350748697454657374080A53697A652E57696474 + 68050000000000000080FF3F0B53697A652E4865696768740500000000000000 + 80FF3F1453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E6500000000000A5452656374616E676C650005416C69 + 676E07074D6F7374546F700A46696C6C2E436F6C6F7207097846463230323032 + 30064C6F636B6564090748697454657374080A53697A652E5769647468050000 + 00000056D5AF07400B53697A652E4865696768740500000000000000C8034014 + 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C + 6F7207097846463135313531350007544C61796F757400095374796C654E616D + 65060763617074696F6E05416C69676E0708436F6E74656E7473064C6F636B65 + 64090748697454657374090A53697A652E576964746805000000000056D5AF07 + 400B53697A652E4865696768740500000000000000C803401453697A652E506C + 6174666F726D44656661756C7408000007544C61796F75740005416C69676E07 + 06436C69656E74064C6F636B6564090C4D617267696E732E4C65667405000000 + 0000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D + 617267696E732E5269676874050000000000000080FF3F0E4D617267696E732E + 426F74746F6D050000000000000080FF3F0A53697A652E576964746805000000 + 000056D5AE07400B53697A652E4865696768740500000000000000B803401453 + 697A652E506C6174666F726D44656661756C74080007544C61796F7574000541 + 6C69676E07044C656674064C6F636B6564090A53697A652E5769647468050000 + 00000000009002400B53697A652E4865696768740500000000000000B8034014 + 53697A652E506C6174666F726D44656661756C7408000007544C61796F757400 + 095374796C654E616D65060773797362746E7305416C69676E0706436C69656E + 74064C6F636B6564090A53697A652E57696474680500000000005655AA07400B + 53697A652E4865696768740500000000000000B803401453697A652E506C6174 + 666F726D44656661756C7408000C545370656564427574746F6E00095374796C + 654E616D650605636C6F736505416C69676E07055269676874064C6F636B6564 + 090A506F736974696F6E2E5805000000000056D59D07400A53697A652E576964 + 74680500000000000000C803400B53697A652E48656967687405000000000000 + 00B803401453697A652E506C6174666F726D44656661756C74080B5374796C65 + 4C6F6F6B75700610636C6F7365627574746F6E7374796C650000055454657874 + 00095374796C654E616D6506057469746C6505416C69676E0706436C69656E74 + 064C6F636B6564090748697454657374080A53697A652E576964746805000000 + 000056D59D07400B53697A652E4865696768740500000000000000B803401453 + 697A652E506C6174666F726D44656661756C7408045465787406055469746C65 + 165465787453657474696E67732E466F6E74436F6C6F720708636C6157686974 + 65000000000007544C61796F757400095374796C654E616D650606636C69656E + 7405416C69676E0706436C69656E74064C6F636B656409074869745465737409 + 0A53697A652E576964746805000000000056D5AA07400B53697A652E48656967 + 687405000000000000009506401453697A652E506C6174666F726D4465666175 + 6C7408000007544C61796F757400095374796C654E616D650606626F74746F6D + 05416C69676E0706426F74746F6D064C6F636B6564090A506F736974696F6E2E + 580500000000000000A001400A506F736974696F6E2E590500000000000000AE + 06400A53697A652E576964746805000000000056D5AA07400B53697A652E4865 + 696768740500000000000000A001401453697A652E506C6174666F726D446566 + 61756C7408000A5452656374616E676C6500095374796C654E616D6506047265 + 637405416C69676E0706426F74746F6D0A46696C6C2E436F6C6F720709784646 + 3230323032300553696465730B03546F7006426F74746F6D000A53697A652E57 + 6964746805000000000056D5AA07400B53697A652E4865696768740500000000 + 000000A001401453697A652E506C6174666F726D44656661756C74080C537472 + 6F6B652E436F6C6F720709784646313531353135000000005450463007544C61 + 796F757400095374796C654E616D65061177696E646F77626F72646572737479 + 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 + 0056D5AF07400B53697A652E4865696768740500000000000000B30640145369 + 7A652E506C6174666F726D44656661756C74080756697369626C6508000A5452 + 656374616E676C6500095374796C654E616D6506046D61736B05416C69676E07 + 08436F6E74656E74730A46696C6C2E436F6C6F7207097846463130313031300A + 53697A652E576964746805000000000056D5AF07400B53697A652E4865696768 + 740500000000000000B306401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E650756697369626C6508000007 + 544C61796F757400095374796C654E616D6506046C65667405416C69676E0708 + 4D6F73744C656674064C6F636B6564090A506F736974696F6E2E590500000000 + 000000F003400A53697A652E57696474680500000000000000A001400B53697A + 652E48656967687405000000000000009506401453697A652E506C6174666F72 + 6D44656661756C7408000A5452656374616E676C650005416C69676E07084D6F + 73744C6566740A46696C6C2E436F6C6F72070978464632303230323007486974 + 54657374080553696465730B044C656674055269676874000A53697A652E5769 + 6474680500000000000000A001400B53697A652E486569676874050000000000 + 00009006401453697A652E506C6174666F726D44656661756C74080C5374726F + 6B652E436F6C6F72070978464631353135313500000A5452656374616E676C65 + 00095374796C654E616D65060A52656374616E676C653105416C69676E070A4D + 6F7374426F74746F6D13456E61626C6544726167486967686C69676874080A46 + 696C6C2E436F6C6F7207097846463230323032300748697454657374080A506F + 736974696F6E2E5905000000000000009006400553696465730B044C65667406 + 426F74746F6D000A53697A652E57696474680500000000000000A001400B5369 + 7A652E4865696768740500000000000000A001401453697A652E506C6174666F + 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 + 31350007544C61796F757400095374796C654E616D6506074C61796F75743305 + 416C69676E07094D6F737452696768740A506F736974696F6E2E580500000000 + 0000008001400A53697A652E5769647468050000000000000080FF3F0B53697A + 652E4865696768740500000000000000A001401453697A652E506C6174666F72 + 6D44656661756C7408000A5452656374616E676C6500095374796C654E616D65 + 060A52656374616E676C653105416C69676E0703546F700A46696C6C2E436F6C + 6F7207097846463135313531350748697454657374080A53697A652E57696474 + 68050000000000000080FF3F0B53697A652E4865696768740500000000000000 + 80FF3F1453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E65000000000007544C61796F757400095374796C654E + 616D650605726967687405416C69676E07094D6F73745269676874064C6F636B + 6564090A506F736974696F6E2E580500000000005655AD07400A506F73697469 + 6F6E2E590500000000000000F003400A53697A652E5769647468050000000000 + 0000A001400B53697A652E48656967687405000000000000009506401453697A + 652E506C6174666F726D44656661756C7408000A5452656374616E676C650005 + 416C69676E07094D6F737452696768740A46696C6C2E436F6C6F720709784646 + 3230323032300748697454657374080553696465730B044C6566740552696768 + 74000A53697A652E57696474680500000000000000A001400B53697A652E4865 + 6967687405000000000000009006401453697A652E506C6174666F726D446566 + 61756C74080C5374726F6B652E436F6C6F72070978464631353135313500000A + 5452656374616E676C6500095374796C654E616D65060A52656374616E676C65 + 3105416C69676E070A4D6F7374426F74746F6D13456E61626C65447261674869 + 67686C69676874080A46696C6C2E436F6C6F7207097846463230323032300748 + 697454657374080A506F736974696F6E2E590500000000000000900640055369 + 6465730B06426F74746F6D055269676874000A53697A652E5769647468050000 + 0000000000A001400B53697A652E4865696768740500000000000000A0014014 + 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C + 6F7207097846463135313531350007544C61796F757400095374796C654E616D + 6506074C61796F75743305416C69676E07084D6F73744C6566740A53697A652E + 5769647468050000000000000080FF3F0B53697A652E48656967687405000000 + 00000000A001401453697A652E506C6174666F726D44656661756C7408000A54 + 52656374616E676C6500095374796C654E616D65060A52656374616E676C6531 + 05416C69676E0703546F700A46696C6C2E436F6C6F7207097846463135313531 + 350748697454657374080A53697A652E5769647468050000000000000080FF3F + 0B53697A652E486569676874050000000000000080FF3F1453697A652E506C61 + 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500 + 000000000A5452656374616E676C650005416C69676E07074D6F7374546F700A + 46696C6C2E436F6C6F720709784646323032303230064C6F636B656409074869 + 7454657374080A53697A652E576964746805000000000056D5AF07400B53697A + 652E4865696768740500000000000000F003401453697A652E506C6174666F72 + 6D44656661756C74080C5374726F6B652E436F6C6F7207097846463135313531 + 350007544C61796F757400095374796C654E616D65060763617074696F6E0541 + 6C69676E0708436F6E74656E7473064C6F636B6564090748697454657374090A + 53697A652E576964746805000000000056D5AF07400B53697A652E4865696768 + 740500000000000000F003401453697A652E506C6174666F726D44656661756C + 7408000007544C61796F75740005416C69676E0706436C69656E74064C6F636B + 6564090C4D617267696E732E4C656674050000000000000080FF3F0B4D617267 + 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 + 050000000000000080FF3F0E4D617267696E732E426F74746F6D050000000000 + 000080FF3F0A53697A652E576964746805000000000056D5AE07400B53697A65 + 2E4865696768740500000000000000E003401453697A652E506C6174666F726D + 44656661756C74080007544C61796F75740005416C69676E07044C656674064C + 6F636B6564090A53697A652E576964746805000000000000009002400B53697A + 652E4865696768740500000000000000E003401453697A652E506C6174666F72 + 6D44656661756C7408000007544C61796F757400095374796C654E616D650604 + 69636F6E064C6F636B6564090A506F736974696F6E2E58050000000000000090 + 02400A506F736974696F6E2E590500000000000000E001400A53697A652E5769 + 6474680500000000000000C803400B53697A652E486569676874050000000000 + 0000A803401453697A652E506C6174666F726D44656661756C7408000007544C + 61796F757400095374796C654E616D65060773797362746E7305416C69676E07 + 06436C69656E74064C6F636B6564090A53697A652E5769647468050000000000 + 5655AA07400B53697A652E4865696768740500000000000000E003401453697A + 652E506C6174666F726D44656661756C7408000C545370656564427574746F6E + 00095374796C654E616D650605636C6F736505416C69676E0705526967687406 + 4C6F636B6564090A506F736974696F6E2E5805000000000056559107400A5369 + 7A652E57696474680500000000000000C804400B53697A652E48656967687405 + 00000000000000E003401453697A652E506C6174666F726D44656661756C7408 + 0B5374796C654C6F6F6B75700610636C6F7365627574746F6E7374796C650000 + 0C545370656564427574746F6E00095374796C654E616D6506036D617805416C + 69676E07055269676874064C6F636B6564090A506F736974696F6E2E58050000 + 00000056558207400A53697A652E57696474680500000000000000F003400B53 + 697A652E4865696768740500000000000000E003401453697A652E506C617466 + 6F726D44656661756C74080B5374796C654C6F6F6B7570060E6D617862757474 + 6F6E7374796C6500000C545370656564427574746F6E00095374796C654E616D + 65060372657305416C69676E07055269676874064C6F636B6564090A506F7369 + 74696F6E2E58050000000000ACAAE606400A53697A652E576964746805000000 + 00000000F003400B53697A652E4865696768740500000000000000E003401453 + 697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570 + 060E726573627574746F6E7374796C6500000C545370656564427574746F6E00 + 095374796C654E616D6506036D696E05416C69676E07055269676874064C6F63 + 6B6564090A506F736974696F6E2E58050000000000ACAAC806400A53697A652E + 57696474680500000000000000F003400B53697A652E48656967687405000000 + 00000000E003401453697A652E506C6174666F726D44656661756C74080B5374 + 796C654C6F6F6B7570060E6D696E627574746F6E7374796C6500000554546578 + 7400095374796C654E616D6506057469746C6505416C69676E0706436C69656E + 74064C6F636B6564090748697454657374080A53697A652E5769647468050000 + 000000ACAAC806400B53697A652E4865696768740500000000000000E0034014 + 53697A652E506C6174666F726D44656661756C7408045465787406055469746C + 65165465787453657474696E67732E466F6E74436F6C6F720708636C61576869 + 7465000000000007544C61796F757400095374796C654E616D650606636C6965 + 6E7405416C69676E0706436C69656E74064C6F636B6564090748697454657374 + 090A53697A652E576964746805000000000056D5AA07400B53697A652E486569 + 67687405000000000000009006401453697A652E506C6174666F726D44656661 + 756C7408000007544C61796F757400095374796C654E616D650606626F74746F + 6D05416C69676E0706426F74746F6D064C6F636B6564090A506F736974696F6E + 2E580500000000000000A001400A506F736974696F6E2E590500000000000000 + AE06400A53697A652E576964746805000000000056D5AA07400B53697A652E48 + 65696768740500000000000000A001401453697A652E506C6174666F726D4465 + 6661756C7408000A5452656374616E676C6500095374796C654E616D65060472 + 65637405416C69676E0706426F74746F6D0A46696C6C2E436F6C6F7207097846 + 463230323032300748697454657374080553696465730B03546F7006426F7474 + 6F6D000A53697A652E576964746805000000000056D5AA07400B53697A652E48 + 65696768740500000000000000A001401453697A652E506C6174666F726D4465 + 6661756C74080C5374726F6B652E436F6C6F7207097846463135313531350000 + 00005450463007544C61796F757400095374796C654E616D650610726164696F + 627574746F6E7374796C6505416C69676E070643656E7465720A53697A652E57 + 696474680500000000000000F205400B53697A652E4865696768740500000000 + 000000A803401453697A652E506C6174666F726D44656661756C740807566973 + 69626C65080007544C61796F75740005416C69676E07044C6566740A53697A65 + 2E57696474680500000000000000A803400B53697A652E486569676874050000 + 0000000000A803401453697A652E506C6174666F726D44656661756C74080008 + 54456C6C6970736500095374796C654E616D65060A6261636B67726F756E6405 + 416C69676E070643656E7465720A46696C6C2E436F6C6F720709784646323032 + 303230064C6F636B6564090748697454657374080A53697A652E576964746805 + 00000000000000F002400B53697A652E4865696768740500000000000000F002 + 401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E43 + 6F6C6F720709784646313531353135000854456C6C6970736500095374796C65 + 4E616D650609636865636B6D61726B05416C69676E0706436C69656E740A4669 + 6C6C2E436F6C6F720709784646324138324532064C6F636B6564090748697454 + 65737408074F70616369747905000000000000000000000C4D617267696E732E + 4C65667405000000000000008000400B4D617267696E732E546F700500000000 + 0000008000400D4D617267696E732E526967687405000000000000008000400E + 4D617267696E732E426F74746F6D05000000000000008000400A53697A652E57 + 696474680500000000000000B002400B53697A652E4865696768740500000000 + 000000B002401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E00 + 095374796C654E616D65061A6F706163697479436865636B6D61726B416E696D + 6174696F6E31084475726174696F6E05000000000000000000000C50726F7065 + 7274794E616D6506074F7061636974790A537461727456616C75650500000000 + 0000000000000953746F7056616C7565050000000000000080FF3F0754726967 + 676572060E4973436865636B65643D747275650E54726967676572496E766572 + 7365060F4973436865636B65643D66616C73650000000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D65061A726164696F627574746F6E436F + 6C6F72416E696D6174696F6E31084475726174696F6E05000000000000000000 + 0007496E7665727365090C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463230323032300953746F705661 + 6C756507097846463430343034300754726967676572061049734D6F7573654F + 7665723D747275650E54726967676572496E7665727365061149734D6F757365 + 4F7665723D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650614436F6C6F72416E696D6174696F6E315374796C65084475 + 726174696F6E05000000000000000000000C50726F70657274794E616D65060C + 5374726F6B652E436F6C6F720A537461727456616C7565070978464631353135 + 31350953746F7056616C75650709784646324138324532075472696767657206 + 0E4973436865636B65643D747275650E54726967676572496E7665727365060F + 4973436865636B65643D66616C73650000000005545465787400095374796C65 + 4E616D6506047465787405416C69676E0706436C69656E74064C6F636B656409 + 0748697454657374080A53697A652E57696474680500000000000000C805400B + 53697A652E4865696768740500000000000000A803401453697A652E506C6174 + 666F726D44656661756C7408165465787453657474696E67732E466F6E74436F + 6C6F720708636C6157686974650000005450463007544C61796F757400095374 + 796C654E616D650618756C63656E746572726164696F627574746F6E7374796C + 6505416C69676E070643656E7465720A53697A652E5769647468050000000000 + 5655FB05400B53697A652E4865696768740500000000000000A004401453697A + 652E506C6174666F726D44656661756C74080756697369626C65080007544C61 + 796F75740005416C69676E0706426F74746F6D0A506F736974696F6E2E590500 + 0000000000008804400A53697A652E57696474680500000000005655FB05400B + 53697A652E4865696768740500000000000000C001401453697A652E506C6174 + 666F726D44656661756C7408000A5452656374616E676C6500095374796C654E + 616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E747307 + 436F726E6572730B07546F704C6566740A426F74746F6D4C656674000A46696C + 6C2E436F6C6F720709784646323032303230064C6F636B656409074869745465 + 7374080A53697A652E57696474680500000000005655FB05400B53697A652E48 + 65696768740500000000000000C001401453697A652E506C6174666F726D4465 + 6661756C74080C5374726F6B652E436F6C6F720709784646313531353135000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D6506216261636B + 67726F756E64556C427574746F6E436F6C6F72416E696D6174696F6E31084475 + 726174696F6E050000000000000000000007496E7665727365090C50726F7065 + 7274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709 + 7846463230323032300953746F7056616C756507097846463430343034300754 + 726967676572061049734D6F7573654F7665723D747275650E54726967676572 + 496E7665727365061149734D6F7573654F7665723D66616C736500000A545265 + 6374616E676C6500095374796C654E616D650609636865636B6D61726B05416C + 69676E0708436F6E74656E747307436F726E6572730B07546F704C6566740A42 + 6F74746F6D4C656674000A46696C6C2E436F6C6F720709784646324138324532 + 064C6F636B656409074869745465737408074F70616369747905000000000000 + 000000000C4D617267696E732E4C656674050000000000000080FF3F0B4D6172 + 67696E732E546F70050000000000000080FF3F0D4D617267696E732E52696768 + 74050000000000000080FF3F0E4D617267696E732E426F74746F6D0500000000 + 00000080FF3F0A53697A652E57696474680500000000005655F705400B53697A + 652E48656967687405000000000000008001401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C + 6F6174416E696D6174696F6E00095374796C654E616D65061A636865636B6D61 + 726B4F706163697479416E696D6174696F6E31084475726174696F6E05000000 + 000000000000000C50726F70657274794E616D6506074F7061636974790A5374 + 61727456616C756505000000000000000000000953746F7056616C7565050000 + 000000000080FF3F0754726967676572060E4973436865636B65643D74727565 + 0E54726967676572496E7665727365060F4973436865636B65643D66616C7365 + 000000000005545465787400095374796C654E616D6506047465787405416C69 + 676E0706436C69656E74064C6F636B6564090748697454657374080A53697A65 + 2E57696474680500000000005655FB05400B53697A652E486569676874050000 + 00000000008804401453697A652E506C6174666F726D44656661756C74081654 + 65787453657474696E67732E466F6E74436F6C6F720708636C61576869746500 + 00005450463007544C61796F757400095374796C654E616D650617756C726967 + 6874726164696F627574746F6E7374796C6505416C69676E070643656E746572 + 0A53697A652E57696474680500000000005655FB05400B53697A652E48656967 + 68740500000000000000A004401453697A652E506C6174666F726D4465666175 + 6C74080756697369626C65080007544C61796F75740005416C69676E0706426F + 74746F6D0A506F736974696F6E2E5905000000000000008804400A53697A652E + 57696474680500000000005655FB05400B53697A652E48656967687405000000 + 00000000C001401453697A652E506C6174666F726D44656661756C7408000A54 + 52656374616E676C6500095374796C654E616D65060A6261636B67726F756E64 + 05416C69676E0708436F6E74656E747307436F726E6572730B08546F70526967 + 68740B426F74746F6D5269676874000A46696C6C2E436F6C6F72070978464632 + 3032303230064C6F636B6564090748697454657374080A53697A652E57696474 + 680500000000005655FB05400B53697A652E4865696768740500000000000000 + C001401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 + 2E436F6C6F720709784646313531353135000F54436F6C6F72416E696D617469 + 6F6E00095374796C654E616D6506216261636B67726F756E64556C427574746F + 6E436F6C6F72416E696D6174696F6E31084475726174696F6E05000000000000 + 0000000007496E7665727365090C50726F70657274794E616D65060A46696C6C + 2E436F6C6F720A537461727456616C756507097846463230323032300953746F + 7056616C756507097846463430343034300754726967676572061049734D6F75 + 73654F7665723D747275650E54726967676572496E7665727365061149734D6F + 7573654F7665723D66616C736500000A5452656374616E676C6500095374796C + 654E616D650609636865636B6D61726B05416C69676E0708436F6E74656E7473 + 07436F726E6572730B08546F7052696768740B426F74746F6D5269676874000A + 46696C6C2E436F6C6F720709784646324138324532064C6F636B656409074869 + 745465737408074F70616369747905000000000000000000000C4D617267696E + 732E4C656674050000000000000080FF3F0B4D617267696E732E546F70050000 + 000000000080FF3F0D4D617267696E732E5269676874050000000000000080FF + 3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A65 + 2E57696474680500000000005655F705400B53697A652E486569676874050000 + 00000000008001401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F + 6E00095374796C654E616D65061A636865636B6D61726B4F706163697479416E + 696D6174696F6E31084475726174696F6E05000000000000000000000C50726F + 70657274794E616D6506074F7061636974790A537461727456616C7565050000 + 00000000000000000953746F7056616C7565050000000000000080FF3F075472 + 6967676572060E4973436865636B65643D747275650E54726967676572496E76 + 65727365060F4973436865636B65643D66616C73650000000000055454657874 + 00095374796C654E616D6506047465787405416C69676E0706436C69656E7406 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 005655FB05400B53697A652E4865696768740500000000000000880440145369 + 7A652E506C6174666F726D44656661756C7408165465787453657474696E6773 + 2E466F6E74436F6C6F720708636C6157686974650000005450463007544C6179 + 6F757400095374796C654E616D650616756C6C656674726164696F627574746F + 6E7374796C6505416C69676E070643656E7465720A53697A652E576964746805 + 00000000005655FB05400B53697A652E4865696768740500000000000000A004 + 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 + 0007544C61796F75740005416C69676E0706426F74746F6D0A506F736974696F + 6E2E5905000000000000008804400A53697A652E576964746805000000000056 + 55FB05400B53697A652E4865696768740500000000000000C001401453697A65 + 2E506C6174666F726D44656661756C7408000A5452656374616E676C65000953 + 74796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74 + 656E747307436F726E6572730B07546F704C6566740A426F74746F6D4C656674 + 000A46696C6C2E436F6C6F720709784646323032303230064C6F636B65640907 + 48697454657374080A53697A652E57696474680500000000005655FB05400B53 + 697A652E4865696768740500000000000000C001401453697A652E506C617466 + 6F726D44656661756C74080C5374726F6B652E436F6C6F720709784646313531 + 353135000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 216261636B67726F756E64556C427574746F6E436F6C6F72416E696D6174696F + 6E31084475726174696F6E050000000000000000000007496E7665727365090C + 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 + 6C756507097846463230323032300953746F7056616C75650709784646343034 + 3034300754726967676572061049734D6F7573654F7665723D747275650E5472 + 6967676572496E7665727365061149734D6F7573654F7665723D66616C736500 + 000A5452656374616E676C6500095374796C654E616D650609636865636B6D61 + 726B05416C69676E0708436F6E74656E747307436F726E6572730B07546F704C + 6566740A426F74746F6D4C656674000A46696C6C2E436F6C6F72070978464632 + 4138324532064C6F636B656409074869745465737408074F7061636974790500 + 0000000000000000000C4D617267696E732E4C656674050000000000000080FF + 3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E73 + 2E5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D + 050000000000000080FF3F0A53697A652E57696474680500000000005655F705 + 400B53697A652E48656967687405000000000000008001401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 000F54466C6F6174416E696D6174696F6E00095374796C654E616D65061A6368 + 65636B6D61726B4F706163697479416E696D6174696F6E31084475726174696F + 6E05000000000000000000000C50726F70657274794E616D6506074F70616369 + 74790A537461727456616C756505000000000000000000000953746F7056616C + 7565050000000000000080FF3F0754726967676572060E4973436865636B6564 + 3D747275650E54726967676572496E7665727365060F4973436865636B65643D + 66616C7365000000000005545465787400095374796C654E616D650604746578 + 7405416C69676E0706436C69656E74064C6F636B656409074869745465737408 + 0A53697A652E57696474680500000000005655FB05400B53697A652E48656967 + 687405000000000000008804401453697A652E506C6174666F726D4465666175 + 6C7408165465787453657474696E67732E466F6E74436F6C6F720708636C6157 + 686974650000005450463007544C61796F757400095374796C654E616D650616 + 70726F677265737362617266696E6973687374796C6505416C69676E07064365 + 6E7465720A53697A652E576964746805000000000033338505400B53697A652E + 4865696768740500000000009999E104401453697A652E506C6174666F726D44 + 656661756C74080756697369626C6508000A5452656374616E676C6500095374 + 796C654E616D65060668747261636B05416C69676E0708436F6E74656E74730A + 46696C6C2E436F6C6F720709784646323032303230064C6F636B656409074869 + 7454657374080A53697A652E576964746805000000000033338505400B53697A + 652E4865696768740500000000009999E104401453697A652E506C6174666F72 + 6D44656661756C74080C5374726F6B652E436F6C6F7207097846463135313531 + 35000A5452656374616E676C6500095374796C654E616D65060A68696E646963 + 61746F7205416C69676E07044C6566740A46696C6C2E436F6C6F720709784646 + 324345323434064C6F636B6564090748697454657374080C4D617267696E732E + 4C656674050000000000000080FF3F0B4D617267696E732E546F700500000000 + 00000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E + 4D617267696E732E426F74746F6D050000000000000080FF3F0A506F73697469 + 6F6E2E58050000000000000080FF3F0A506F736974696F6E2E59050000000000 + 000080FF3F0A53697A652E57696474680500000000000000C804400B53697A65 + 2E4865696768740500000000009999D904401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000000A5452 + 656374616E676C6500095374796C654E616D65060676747261636B05416C6967 + 6E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846463230323032 + 30064C6F636B6564090748697454657374080A53697A652E5769647468050000 + 00000033338505400B53697A652E4865696768740500000000009999E1044014 + 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C + 6F720709784646313531353135000A5452656374616E676C6500095374796C65 + 4E616D65060A76696E64696361746F7205416C69676E0706426F74746F6D0A46 + 696C6C2E436F6C6F720709784646324345323434064C6F636B65640907486974 + 54657374080C4D617267696E732E4C656674050000000000000080FF3F0B4D61 + 7267696E732E546F70050000000000000080FF3F0D4D617267696E732E526967 + 6874050000000000000080FF3F0E4D617267696E732E426F74746F6D05000000 + 0000000080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F + 736974696F6E2E5905000000000099998904400A53697A652E57696474680500 + 0000000033338105400B53697A652E4865696768740500000000000000A80340 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E65000000005450463007544C61796F757400095374796C654E + 616D65060D657870616E6465727374796C6505416C69676E070643656E746572 + 0A53697A652E576964746805000000000000C08407400B53697A652E48656967 + 68740500000000000000C803401453697A652E506C6174666F726D4465666175 + 6C74080756697369626C6508000A5452656374616E676C6500095374796C654E + 616D65060B626772656374616E676C6505416C69676E0708436F6E74656E7473 + 0C436C69704368696C6472656E090A46696C6C2E436F6C6F7207097846463244 + 32443244064C6F636B6564090748697454657374080A53697A652E5769647468 + 05000000000000C08407400B53697A652E4865696768740500000000000000C8 + 03401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E + 436F6C6F7207097846463135313531350007544C61796F757400095374796C65 + 4E616D6506074C61796F75743305416C69676E0703546F700A53697A652E5769 + 64746805000000000000C08407400B53697A652E486569676874050000000000 + 0000C803401453697A652E506C6174666F726D44656661756C74080007544C61 + 796F757400095374796C654E616D6506074C61796F75743405416C69676E0708 + 436F6E74656E74730A53697A652E576964746805000000000000C08407400B53 + 697A652E4865696768740500000000000000C803401453697A652E506C617466 + 6F726D44656661756C7408000A5452656374616E676C6500095374796C654E61 + 6D65060A52656374616E676C653205416C69676E0708436F6E74656E74730A46 + 696C6C2E436F6C6F720709784646323532353235064C6F636B65640907486974 + 54657374080A53697A652E576964746805000000000000C08407400B53697A65 + 2E4865696768740500000000000000C803401453697A652E506C6174666F726D + 44656661756C74080C5374726F6B652E436F6C6F720709784646313531353135 + 00000A5452656374616E676C6500095374796C654E616D65060A52656374616E + 676C653105416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207 + 09784646313531353135064C6F636B6564090748697454657374080A53697A65 + 2E576964746805000000000000C08407400B53697A652E486569676874050000 + 0000000000C803401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F + 6E00095374796C654E616D650614466C6F6174416E696D6174696F6E31537479 + 6C65084475726174696F6E050000000000CDCCCCFB3F0D496E746572706F6C61 + 74696F6E070843697263756C61720C50726F70657274794E616D650607536361 + 6C652E580A537461727456616C7565050000000000000080FF3F0953746F7056 + 616C756505000000000000000000000754726967676572060F4973457870616E + 6465643D747275650E54726967676572496E766572736506104973457870616E + 6465643D66616C73650000000007544C61796F757400095374796C654E616D65 + 06074C61796F75743305416C69676E0708436F6E74656E74730A53697A652E57 + 6964746805000000000000C08407400B53697A652E4865696768740500000000 + 000000C803401453697A652E506C6174666F726D44656661756C740800055454 + 65787400095374796C654E616D6506047465787405416C69676E07044C656674 + 084175746F53697A65090A436C6970506172656E7409064C6F636B6564090748 + 697454657374080C4D617267696E732E4C6566740500000000000000A002400A + 506F736974696F6E2E580500000000000000A002400A53697A652E5769647468 + 05000000000000B8C703400B53697A652E4865696768740500000000000000C8 + 03401453697A652E506C6174666F726D44656661756C74081654657874536574 + 74696E67732E466F6E74436F6C6F720708636C61576869746516546578745365 + 7474696E67732E486F727A416C69676E07074C656164696E670000000F544578 + 70616E646572427574746F6E00095374796C654E616D650606627574746F6E05 + 416C69676E07055269676874064C6F636B6564090A506F736974696F6E2E5805 + 00000000000080F506400A53697A652E57696474680500000000000000A00340 + 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 + 74666F726D44656661756C740800000000005450463007544C61796F75740009 + 5374796C654E616D650613657870616E646572627574746F6E7374796C650541 + 6C69676E070643656E7465720B4D617267696E732E546F700500000000000000 + 80FF3F0A53697A652E57696474680500000000000000B003400B53697A652E48 + 65696768740500000000000000B003401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C65080005545061746800095374796C654E616D + 650605506174683105416C69676E070643656E74657209446174612E50617468 + 0A3400000004000000000000000000C8420000C84201000000000096430000C8 + 42010000000000484300009643030000000000C8420000C8420A46696C6C2E43 + 6F6C6F720708636C6157686974650748697454657374080D526F746174696F6E + 416E676C650500000000000000B405400A53697A652E57696474680500000000 + 000000A002400B53697A652E4865696768740500000000000000C00140145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E65000F54466C6F6174416E696D6174696F6E00095374796C654E616D + 650614466C6F6174416E696D6174696F6E315374796C65084475726174696F6E + 050000000000CDCCCCFB3F0D496E746572706F6C6174696F6E07084369726375 + 6C61720C50726F70657274794E616D65060D526F746174696F6E416E676C650A + 537461727456616C75650500000000000000B405400953746F7056616C756505 + 000000000000000000000754726967676572060F4973457870616E6465643D74 + 7275650E54726967676572496E766572736506104973457870616E6465643D66 + 616C7365000000005450463007544C61796F757400095374796C654E616D6506 + 15657870616E646572636865636B626F787374796C6505416C69676E07064365 + 6E7465720A53697A652E576964746805000000000000008406400B53697A652E + 48656967687405000000000000008404401453697A652E506C6174666F726D44 + 656661756C74080756697369626C65080007544C61796F75740005416C69676E + 07044C6566740A53697A652E57696474680500000000000000C003400B53697A + 652E48656967687405000000000000008404401453697A652E506C6174666F72 + 6D44656661756C7408000554506174680005416C69676E0706436C69656E7409 + 446174612E506174680AD80100002700000000000000FEC8BA4402E792440200 + 00002592AD4402E79244020000006D5BA544FEB09E44020000006D5BA544FEB0 + 9E440200000093A4A4446A0C9F44020000004A80AC44FC79AA4402000000046E + BA44FC79AA44020000004A00C844FC79AA44020000000080CF44FEB09E440200 + 00000080CF44FEB09E44020000000080CF44FEB09E44020000004C5BC84402E7 + 924402000000FEC8BA4402E7924400000000FE88BA44FE30974402000000B876 + BF44FE309744020000000277C344EEA09A44020000000277C34404DE9E440200 + 00000277C344121BA34402000000B876BF44008CA64402000000FE88BA44008C + A644020000004C9BB544008CA64402000000009CB144121BA34402000000009C + B14404DE9E4402000000009CB144EEA09A44020000004C9BB544FE3097440200 + 0000FE88BA44FE309744000000000080BA44045E9B4402000000146EB844045E + 9B440200000000C0B64454F79C440200000000C0B64400F09E440200000000C0 + B644ACE8A04402000000146EB844FC81A244020000000080BA44FC81A2440200 + 0000EC91BC44FC81A244020000000040BE44ACE8A044020000000040BE4400F0 + 9E44020000000040BE4454F79C4402000000EC91BC44045E9B44020000000080 + BA44045E9B440A46696C6C2E436F6C6F72070978363030303030303007486974 + 54657374080C4D617267696E732E4C65667405000000000000008000400B4D61 + 7267696E732E546F7005000000000000008000400D4D617267696E732E526967 + 687405000000000000008000400E4D617267696E732E426F74746F6D05000000 + 000000008000400A53697A652E57696474680500000000000000A003400B5369 + 7A652E4865696768740500000000000000E803401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6508577261 + 704D6F64650703466974000F54436F6C6F72416E696D6174696F6E0008447572 + 6174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46 + 696C6C2E436F6C6F720A537461727456616C7565070978363030303030303009 + 53746F7056616C75650708636C61426C61636B0754726967676572060E497343 + 6865636B65643D7472756500000F54436F6C6F72416E696D6174696F6E000844 + 75726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C75650708636C61426C61636B + 0953746F7056616C756507097836303030303030300754726967676572060F49 + 73436865636B65643D66616C73650000000005545465787400095374796C654E + 616D6506047465787405416C69676E0706436C69656E74064C6F636B65640907 + 48697454657374080C4D617267696E732E4C6566740500000000000000800240 + 0B4D617267696E732E546F7005000000000000008000400D4D617267696E732E + 5269676874050000000000000080FF3F0A53697A652E57696474680500000000 + 000000C605400B53697A652E4865696768740500000000000000F80340145369 + 7A652E506C6174666F726D44656661756C7408165465787453657474696E6773 + 2E466F6E74436F6C6F720709784646454545454545165465787453657474696E + 67732E486F727A416C69676E07074C656164696E670000005450463007544C61 + 796F757400095374796C654E616D65060E6C6162656C66696C6C7374796C6505 + 416C69676E070643656E7465720A53697A652E57696474680500000000000000 + C805400B53697A652E4865696768740500000000000000C803401453697A652E + 506C6174666F726D44656661756C74080756697369626C6508000A5452656374 + 616E676C6500095374796C654E616D65060A52656374616E676C653105416C69 + 676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978464631353135 + 31350A53697A652E57696474680500000000000000C805400B53697A652E4865 + 696768740500000000000000C803401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65000005545465787400 + 095374796C654E616D6506047465787405416C69676E0708436F6E74656E7473 + 0748697454657374080A53697A652E57696474680500000000000000C805400B + 53697A652E4865696768740500000000000000C803401453697A652E506C6174 + 666F726D44656661756C7408165465787453657474696E67732E466F6E74436F + 6C6F720708636C6157686974650000005450463007544C61796F757400095374 + 796C654E616D650613636F6D626F656469746572726F727374796C6505416C69 + 676E070643656E7465720A53697A652E57696474680500000000000000C80540 + 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 + 74666F726D44656661756C74080756697369626C6508000C5442727573684F62 + 6A65637400095374796C654E616D65060A666F726567726F756E6400000B5446 + 6F6E744F626A65637400095374796C654E616D650604666F6E7409466F6E742E + 53697A650500000000000000D00240000007544C61796F757400095374796C65 + 4E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E7473 + 0A53697A652E57696474680500000000000000C805400B53697A652E48656967 + 68740500000000000000C803401453697A652E506C6174666F726D4465666175 + 6C7408000A5452656374616E676C6500095374796C654E616D65060A52656374 + 616E676C653105416C69676E0706436C69656E740A46696C6C2E436F6C6F7207 + 097846463230323032300748697454657374080A53697A652E57696474680500 + 000000000000C805400B53697A652E4865696768740500000000000000C80340 + 1453697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F + 6C6F720709784646323032303230000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D650614436F6C6F72416E696D6174696F6E315374796C65 + 084475726174696F6E050000000000000000000007496E7665727365090C5072 + 6F70657274794E616D65060C5374726F6B652E436F6C6F720A53746172745661 + 6C756507097846463230323032300953746F7056616C75650709784646343034 + 3034300754726967676572062049734D6F7573654F7665723D747275653B4973 + 466F63757365643D66616C73650E54726967676572496E766572736506214973 + 4D6F7573654F7665723D66616C73653B4973466F63757365643D66616C736500 + 000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F + 6C6F72416E696D6174696F6E325374796C65084475726174696F6E0500000000 + 00000000000007496E7665727365090C50726F70657274794E616D65060C5374 + 726F6B652E436F6C6F720A537461727456616C75650709784646343034303430 + 0953746F7056616C756507097846464532324132410754726967676572061F49 + 734D6F7573654F7665723D747275653B4973466F63757365643D747275650E54 + 726967676572496E7665727365062049734D6F7573654F7665723D747275653B + 4973466F63757365643D66616C7365000007544C61796F757400095374796C65 + 4E616D6506056172726F7705416C69676E070846697452696768740B4D617267 + 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 + 050000000000000080FF3F0E4D617267696E732E426F74746F6D050000000000 + 000080FF3F0A506F736974696F6E2E580500000000005ED99705400A506F7369 + 74696F6E2E59050000000000000080FF3F0A53697A652E576964746805000000 + 0000889AB803400B53697A652E4865696768740500000000000000B803401453 + 697A652E506C6174666F726D44656661756C7408000A5452656374616E676C65 + 00095374796C654E616D65060A52656374616E676C653105416C69676E070843 + 6F6E74656E74730A46696C6C2E436F6C6F720709784646333033303330074869 + 7454657374080A53697A652E5769647468050000000000889AB803400B53697A + 652E4865696768740500000000000000B803401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E + 696D6174696F6E315374796C65084475726174696F6E05000000000000000000 + 0007496E7665727365090C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463330333033300953746F705661 + 6C756507097846463430343034300754726967676572062049734D6F7573654F + 7665723D747275653B4973466F63757365643D66616C73650E54726967676572 + 496E7665727365062149734D6F7573654F7665723D66616C73653B4973466F63 + 757365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650614436F6C6F72416E696D6174696F6E325374796C65084475 + 726174696F6E05000000000000000000000C50726F70657274794E616D65060A + 46696C6C2E436F6C6F720A537461727456616C75650709784646343034303430 + 0953746F7056616C756507097846463943313731370754726967676572061F49 + 73466F63757365643D747275653B49734D6F7573654F7665723D747275650000 + 0007544C61796F757400095374796C654E616D6506074C61796F75743105416C + 69676E070643656E7465720C4D617267696E732E4C6566740500000000000000 + 80FF3F0A53697A652E57696474680500000000000000A002400B53697A652E48 + 65696768740500000000000000C001401453697A652E506C6174666F726D4465 + 6661756C74080005545061746800095374796C654E616D650605506174683105 + 416C69676E0706436C69656E7409446174612E506174680A3400000004000000 + 000000000000C8420000C84201000000000096430000C8420100000000004843 + 00009643030000000000C8420000C8420A46696C6C2E436F6C6F720708636C61 + 57686974650748697454657374080A53697A652E576964746805000000000000 + 00A002400B53697A652E4865696768740500000000000000C001401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E650000000000000C5442727573684F626A65637400095374796C654E616D + 65060973656C656374696F6E0B42727573682E436F6C6F720709783936324138 + 324532000007544C61796F757400095374796C654E616D650607636F6E74656E + 7405416C69676E0706436C69656E740C4D617267696E732E4C65667405000000 + 000000008000400B4D617267696E732E546F7005000000000000008000400D4D + 617267696E732E52696768740500000000000000F003400E4D617267696E732E + 426F74746F6D05000000000000008000400A53697A652E576964746805000000 + 000000008805400B53697A652E4865696768740500000000000000A803401453 + 697A652E506C6174666F726D44656661756C74080000005450463007544C6179 + 6F757400095374796C654E616D65061E70726F6772657373626172696E646574 + 65726D696E61626C657374796C6505416C69676E070643656E7465720A53697A + 652E5769647468050000000000ABAAB006400B53697A652E4865696768740500 + 000000000000C003401453697A652E506C6174666F726D44656661756C740807 + 56697369626C6508000A5452656374616E676C6500095374796C654E616D6506 + 0676747261636B05416C69676E0708436F6E74656E747307456E61626C656408 + 0A46696C6C2E436F6C6F720709784646323032303230064C6F636B6564090748 + 697454657374080A53697A652E57696474680500000000000000E006400B5369 + 7A652E48656967687405000000000000009404401453697A652E506C6174666F + 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 + 31350756697369626C6508000A5452656374616E676C6500095374796C654E61 + 6D65060A76696E64696361746F7205416C69676E0706426F74746F6D0A46696C + 6C2E436F6C6F720709784646324138324532064C6F636B656409074869745465 + 7374080C4D617267696E732E4C656674050000000000000080FF3F0B4D617267 + 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 + 050000000000000080FF3F0E4D617267696E732E426F74746F6D050000000000 + 000080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F7369 + 74696F6E2E590500000000000000F002400A53697A652E576964746805000000 + 00000000DE06400B53697A652E4865696768740500000000000000A803401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E6500000007544C61796F757400095374796C654E616D6506066874 + 7261636B05416C69676E0708436F6E74656E74730A53697A652E576964746805 + 0000000000ABAAB006400B53697A652E4865696768740500000000000000C003 + 401453697A652E506C6174666F726D44656661756C7408000A5452656374616E + 676C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E + 0708436F6E74656E74730C436C69704368696C6472656E090A46696C6C2E436F + 6C6F720709784646324138324532064C6F636B6564090748697454657374080A + 53697A652E5769647468050000000000ABAAB006400B53697A652E4865696768 + 740500000000000000C003401453697A652E506C6174666F726D44656661756C + 74080C5374726F6B652E436F6C6F720709784646313531353135000F54436F6C + 6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E69 + 6D6174696F6E315374796C6507456E61626C656409084475726174696F6E0500 + 000000000000800140044C6F6F70090C50726F70657274794E616D65060A4669 + 6C6C2E436F6C6F720A537461727456616C756507097846463230323032300953 + 746F7056616C756507097846463241383245320754726967676572060E497356 + 697369626C653D7472756500000000005450463007544C61796F757400095374 + 796C654E616D650611616E69696E64696361746F727374796C6505416C69676E + 070643656E7465720756697369626C650800045441726300095374796C654E61 + 6D65060341726305416C69676E0708436F6E74656E7473074869745465737408 + 0D526F746174696F6E416E676C650500000000000000B407400A53697A652E57 + 696474680500000000000000C804400B53697A652E4865696768740500000000 + 000000C804401453697A652E506C6174666F726D44656661756C74080C537472 + 6F6B652E436F6C6F720708636C615768697465105374726F6B652E546869636B + 6E65737305000000000000008001400A5374726F6B652E4361700705526F756E + 640B5374726F6B652E4A6F696E0705426576656C08456E64416E676C65050000 + 0000000000B405C0000F54466C6F6174416E696D6174696F6E00095374796C65 + 4E616D650603616E6907456E61626C656409084475726174696F6E0500000000 + 00000080FF3F044C6F6F70090C50726F70657274794E616D65060D526F746174 + 696F6E416E676C650A537461727456616C756505000000000000000000000953 + 746F7056616C75650500000000000000B407400754726967676572060E497356 + 697369626C653D74727565000000005450463007544C61796F75740009537479 + 6C654E616D650615616E69696E64696361746F72686F727A7374796C6505416C + 69676E070643656E7465720A53697A652E57696474680500000000000040C006 + 400B53697A652E48656967687405000000000000008000401453697A652E506C + 6174666F726D44656661756C74080756697369626C6508000A5452656374616E + 676C6500095374796C654E616D65060A52656374616E676C653105416C69676E + 0706436C69656E740C436C69704368696C6472656E090A46696C6C2E436F6C6F + 7207097846463430343034300A53697A652E57696474680500000000000040C0 + 06400B53697A652E48656967687405000000000000008000401453697A652E50 + 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E + 650005544C696E6500095374796C654E616D6506054C696E6531084C696E6554 + 7970650706426F74746F6D0A53697A652E57696474680500000000000000A00B + 400B53697A652E48656967687405000000000000008000401453697A652E506C + 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 + 324138324532105374726F6B652E546869636B6E657373050000000000000080 + 02400B5374726F6B652E44617368070444617368000F54466C6F6174416E696D + 6174696F6E00095374796C654E616D650603616E6907456E61626C6564090844 + 75726174696F6E0500000000000000800340044C6F6F70090C50726F70657274 + 794E616D65060A506F736974696F6E2E580A537461727456616C756505000000 + 00000000C808C00953746F7056616C7565050000000000000000000007547269 + 67676572060E497356697369626C653D7472756500000000005450463007544C + 61796F757400095374796C654E616D65060A70616E656C7374796C6505416C69 + 676E070643656E7465720A53697A652E57696474680500000000000000C00640 + 0B53697A652E4865696768740500000000000000A406401453697A652E506C61 + 74666F726D44656661756C74080756697369626C6508000A5452656374616E67 + 6C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E07 + 08436F6E74656E74730A46696C6C2E436F6C6F7207097846463230323032300A + 53697A652E57696474680500000000000000C006400B53697A652E4865696768 + 740500000000000000A406401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E650000005450463007544C6179 + 6F757400095374796C654E616D65060E6C6F67627574746F6E7374796C650541 + 6C69676E070643656E7465720A53697A652E57696474680500000000000000C0 + 05400B53697A652E4865696768740500000000000000C005401453697A652E50 + 6C6174666F726D44656661756C74080756697369626C6508000A545265637461 + 6E676C6500095374796C654E616D65060A6261636B67726F756E6405416C6967 + 6E0706436C69656E740C436C69704368696C6472656E090A436C697050617265 + 6E74090A46696C6C2E436F6C6F72070978464632303230323007486974546573 + 74080A53697A652E57696474680500000000000000C005400B53697A652E4865 + 696768740500000000000000C005401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72 + 416E696D6174696F6E31084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C + 756507097846463230323032300953746F7056616C7565070978464634303430 + 34300754726967676572063049734D6F7573654F7665723D747275653B497350 + 7265737365643D66616C73653B4973466F63757365643D66616C73650E547269 + 67676572496E7665727365063149734D6F7573654F7665723D66616C73653B49 + 73507265737365643D66616C73653B4973466F63757365643D66616C73650000 + 0F54436F6C6F72416E696D6174696F6E00095374796C654E616D650615627574 + 746F6E436F6C6F72416E696D6174696F6E32084475726174696F6E0500000000 + 0000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A + 537461727456616C756507097846463430343034300953746F7056616C756507 + 097846463137353739430754726967676572062F4973507265737365643D7472 + 75653B49734D6F7573654F7665723D747275653B4973466F63757365643D6661 + 6C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 + 0615627574746F6E436F6C6F72416E696D6174696F6E33084475726174696F6E + 05000000000000000000000C50726F70657274794E616D65060A46696C6C2E43 + 6F6C6F720A537461727456616C756507097846463241383245320953746F7056 + 616C756507097846463137353739430754726967676572062E49735072657373 + 65643D747275653B49734D6F7573654F7665723D747275653B4973466F637573 + 65643D747275650E54726967676572496E7665727365062F4973507265737365 + 643D66616C73653B49734D6F7573654F7665723D747275653B4973466F637573 + 65643D74727565000005545061746800095374796C654E616D65060550617468 + 3105416C69676E0706436C69656E7409446174612E506174680A5C0200003200 + 0000000000000000A841CDCCCC40010000000000A8410000C041010000000000 + C03F0000C041010000000000C03F00000000010000009A996941000000000100 + 00000000A841CDCCCC40030000000000A841CDCCCC400000000000009C410000 + F04001000000000058410000F04001000000000058410000C03F010000000000 + 40400000C03F01000000000040400000B4410100000000009C410000B4410100 + 000000009C410000F0400300000000009C410000F04000000000000040410000 + F04001000000000090400000F04001000000000090400000C040010000000000 + 40410000C04001000000000040410000F04003000000000040410000F0400000 + 0000000090400000104101000000000090410000104101000000000090410000 + 2841010000000000904000002841010000000000904000001041030000000000 + 9040000010410000000000009040000040410100000000009041000040410100 + 0000000090410000584101000000000090400000584101000000000090400000 + 4041030000000000904000004041000000000000904000007041010000000000 + 9041000070410100000000009041000084410100000000009040000084410100 + 0000000090400000704103000000000090400000704100000000000090400000 + 9041010000000000904100009041010000000000904100009C41010000000000 + 904000009C410100000000009040000090410300000000009040000090410000 + 0000000070410000C04001000000333393410000C04001000000000070416666 + 264001000000000070410000C04003000000000070410000C0400A46696C6C2E + 436F6C6F720708636C6157686974650748697454657374080C4D617267696E73 + 2E4C6566740500000000000000A002400B4D617267696E732E546F7005000000 + 00000000A002400D4D617267696E732E52696768740500000000000000A00240 + 0E4D617267696E732E426F74746F6D0500000000000000A002400A53697A652E + 576964746805000000000000009805400B53697A652E48656967687405000000 + 000000009805401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E6508577261704D6F64650703466974000000 + 005450463007544C61796F757400095374796C654E616D65061470726F677265 + 73736261726D696E697374796C6505416C69676E070643656E7465720A53697A + 652E576964746805000000000033338505400B53697A652E4865696768740500 + 000000009999E104401453697A652E506C6174666F726D44656661756C740807 + 56697369626C6508000A5452656374616E676C6500095374796C654E616D6506 + 0668747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C + 6F720709784646343034303430064C6F636B6564090748697454657374080A53 + 697A652E576964746805000000000033338505400B53697A652E486569676874 + 0500000000009999E104401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E65000A5452656374616E676C6500 + 095374796C654E616D65060A68696E64696361746F7205416C69676E07044C65 + 66740A46696C6C2E436F6C6F720709784646324138324532064C6F636B656409 + 0748697454657374080A53697A652E57696474680500000000000000C804400B + 53697A652E4865696768740500000000009999E104401453697A652E506C6174 + 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000 + 000A5452656374616E676C6500095374796C654E616D65060676747261636B05 + 416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978464634 + 3034303430064C6F636B6564090748697454657374080A53697A652E57696474 + 6805000000000033338505400B53697A652E4865696768740500000000009999 + E104401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E65000A5452656374616E676C6500095374796C654E61 + 6D65060A76696E64696361746F7205416C69676E0706426F74746F6D0A46696C + 6C2E436F6C6F720709784646324138324532064C6F636B656409074869745465 + 7374080A506F736974696F6E2E5905000000000099998D04400A53697A652E57 + 6964746805000000000033338505400B53697A652E4865696768740500000000 + 000000A803401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E65000000005450463007544C61796F75740009 + 5374796C654E616D65061B7472656576696577657870616E646572627574746F + 6E7374796C6505416C69676E070643656E7465720B4D617267696E732E546F70 + 050000000000000080FF3F0A53697A652E57696474680500000000000000B003 + 400B53697A652E4865696768740500000000000000B003401453697A652E506C + 6174666F726D44656661756C74080756697369626C6508000554506174680009 + 5374796C654E616D650605506174683105416C69676E070643656E7465720944 + 6174612E506174680A3400000004000000000000000000C8420000C842010000 + 00000096430000C842010000000000484300009643030000000000C8420000C8 + 420A46696C6C2E436F6C6F720708636C6157686974650748697454657374080D + 526F746174696F6E416E676C650500000000000000B405C00A53697A652E5769 + 6474680500000000000000A002400B53697A652E486569676874050000000000 + 0000C001401453697A652E506C6174666F726D44656661756C74080B5374726F + 6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E0009 + 5374796C654E616D650614466C6F6174416E696D6174696F6E315374796C6508 + 4475726174696F6E05000000000000000000000D496E746572706F6C6174696F + 6E070843697263756C61720C50726F70657274794E616D65060D526F74617469 + 6F6E416E676C650A537461727456616C75650500000000000000B405C0095374 + 6F7056616C756505000000000000000000000754726967676572060F49734578 + 70616E6465643D747275650E54726967676572496E7665727365061049734578 + 70616E6465643D66616C736500000000545046300A5452656374616E676C6500 + 095374796C654E616D65061174726565766965776974656D7374796C6505416C + 69676E070643656E7465720946696C6C2E4B696E6407044E6F6E650748697454 + 657374080553696465730B06426F74746F6D000A53697A652E57696474680500 + 000000000000AE05400B53697A652E4865696768740500000000000000A00440 + 1453697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F + 6C6F7207097846463135313531350756697369626C6508000C54537065656442 + 7574746F6E00095374796C654E616D650606627574746F6E05416C69676E0704 + 4C6566740A53697A652E57696474680500000000000000A003400B53697A652E + 4865696768740500000000000000A004401453697A652E506C6174666F726D44 + 656661756C74080B5374796C654C6F6F6B7570061B7472656576696577657870 + 616E646572627574746F6E7374796C65000007544C61796F75740005416C6967 + 6E0708436F6E74656E74730C4D617267696E732E4C6566740500000000000000 + A003400A53697A652E576964746805000000000000008605400B53697A652E48 + 65696768740500000000000000A004401453697A652E506C6174666F726D4465 + 6661756C7408000954436865636B426F7800095374796C654E616D6506056368 + 65636B05416C69676E07044C6566740843616E466F637573081244697361626C + 65466F637573456666656374090A53697A652E57696474680500000000000000 + A003400B53697A652E4865696768740500000000000000A004401453697A652E + 506C6174666F726D44656661756C740800000654476C79706800095374796C65 + 4E616D65060A676C7970687374796C650C4D617267696E732E4C656674050000 + 00000000008000400B4D617267696E732E546F70050000000000000080FF3F0D + 4D617267696E732E526967687405000000000000008000400E4D617267696E73 + 2E426F74746F6D050000000000000080FF3F05416C69676E07044C6566740A50 + 6F736974696F6E2E580500000000000000B003400A506F736974696F6E2E5905 + 0000000000000080FF3F0A53697A652E57696474680500000000000000800340 + 0B53697A652E48656967687405000000000000009804401453697A652E506C61 + 74666F726D44656661756C7408000005545465787400095374796C654E616D65 + 06047465787405416C69676E0706436C69656E74064C6F636B65640907486974 + 54657374080A53697A652E57696474680500000000000000BC04400B53697A65 + 2E4865696768740500000000000000A004401453697A652E506C6174666F726D + 44656661756C74080454657874060454657874165465787453657474696E6773 + 2E466F6E74436F6C6F720708636C615768697465155465787453657474696E67 + 732E576F72645772617008165465787453657474696E67732E486F727A416C69 + 676E07074C656164696E670000000A5452656374616E676C650005416C69676E + 0708436F6E74656E74730946696C6C2E4B696E6407044E6F6E65074869745465 + 7374080E4D617267696E732E426F74746F6D050000000000000080FF3F055369 + 6465730B044C656674000A53697A652E57696474680500000000000000AE0540 + 0B53697A652E48656967687405000000000000009C04401453697A652E506C61 + 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464632 + 4138324532105374726F6B652E546869636B6E65737305000000000000008000 + 400000005450463007544C61796F757400095374796C654E616D65060D747265 + 65766965777374796C6505416C69676E070643656E7465720A53697A652E5769 + 6474680500000000000000E106400B53697A652E486569676874050000000000 + 00808107401453697A652E506C6174666F726D44656661756C74080756697369 + 626C6508000C5442727573684F626A65637400095374796C654E616D65061841 + 6C7465726E6174696E67526F774261636B67726F756E640B42727573682E436F + 6C6F72070978304646464646464600000A5452656374616E676C650009537479 + 6C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E + 74730A46696C6C2E436F6C6F720709784646323032303230064C6F636B656409 + 0748697454657374080C50616464696E672E4C656674050000000000000080FF + 3F0D50616464696E672E5269676874050000000000000080FF3F0A53697A652E + 57696474680500000000000000E106400B53697A652E48656967687405000000 + 000000808107401453697A652E506C6174666F726D44656661756C74080C5374 + 726F6B652E436F6C6F7207097846463135313531350007544C61796F75740009 + 5374796C654E616D650607636F6E74656E7405416C69676E0706436C69656E74 + 0C436C69704368696C6472656E090B4D617267696E732E546F70050000000000 + 000080FF3F0A53697A652E57696474680500000000000000CD06400B53697A65 + 2E4865696768740500000000000000F006401453697A652E506C6174666F726D + 44656661756C7408000A5452656374616E676C6500095374796C654E616D6506 + 0973656C656374696F6E0A46696C6C2E436F6C6F720709784646324138324532 + 0748697454657374080A53697A652E57696474680500000000000000C804400B + 53697A652E4865696768740500000000000000C804401453697A652E506C6174 + 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000 + 0A5452656374616E676C6500095374796C654E616D650610666F637573656473 + 656C656374696F6E0A46696C6C2E436F6C6F7207097846463241383245320748 + 697454657374080A53697A652E57696474680500000000000000C804400B5369 + 7A652E4865696768740500000000000000C804401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650B537472 + 6F6B652E446173680703446F740000000A545363726F6C6C4261720009537479 + 6C654E616D65060A767363726F6C6C62617205416C69676E070552696768740B + 536D616C6C4368616E676505000000000000000000000B4F7269656E74617469 + 6F6E0708566572746963616C0C4D617267696E732E4C65667405000000000000 + 008000400A506F736974696F6E2E580500000000000000D006400A53697A652E + 576964746805000000000000008003400B53697A652E48656967687405000000 + 00000000F106401453697A652E506C6174666F726D44656661756C740800000A + 545363726F6C6C42617200095374796C654E616D65060A687363726F6C6C6261 + 7205416C69676E0706426F74746F6D0B536D616C6C4368616E67650500000000 + 0000000000000B4F7269656E746174696F6E070A486F72697A6F6E74616C0B4D + 617267696E732E546F7005000000000000008000400A506F736974696F6E2E58 + 050000000000000080FF3F0A506F736974696F6E2E590500000000000000F306 + 400A53697A652E57696474680500000000000000DF06400B53697A652E486569 + 67687405000000000000008003401453697A652E506C6174666F726D44656661 + 756C740800000F54536D616C6C5363726F6C6C42617200095374796C654E616D + 65060F76736D616C6C7363726F6C6C62617205416C69676E070552696768740B + 536D616C6C4368616E676505000000000000000000000B4F7269656E74617469 + 6F6E0708566572746963616C0C4D617267696E732E4C65667405000000000000 + 008000400A506F736974696F6E2E580500000000000000C605400A506F736974 + 696F6E2E5905000000000000008000400A53697A652E57696474680500000000 + 0000008002400B53697A652E4865696768740500000000000000800240145369 + 7A652E506C6174666F726D44656661756C74080756697369626C650800000F54 + 536D616C6C5363726F6C6C42617200095374796C654E616D65060F68736D616C + 6C7363726F6C6C62617205416C69676E0706426F74746F6D0B536D616C6C4368 + 616E676505000000000000000000000B4F7269656E746174696F6E070A486F72 + 697A6F6E74616C0B4D617267696E732E546F7005000000000000008000400A50 + 6F736974696F6E2E5805000000000000008000400A506F736974696F6E2E5905 + 00000000000000E205400A53697A652E57696474680500000000000000960640 + 0B53697A652E48656967687405000000000000008002401453697A652E506C61 + 74666F726D44656661756C74080756697369626C650800000000545046300754 + 4C61796F757400095374796C654E616D650619616374696F6E746F6F6C627574 + 746F6E6D756C74697669657705416C69676E070643656E7465720A53697A652E + 57696474680500000000000000C805400B53697A652E48656967687405000000 + 00000000C804401453697A652E506C6174666F726D44656661756C7408075669 + 7369626C65080B46697865644865696768740232000654476C79706800095374 + 796C654E616D65060A676C7970687374796C650C4D617267696E732E4C656674 + 05000000000000009002400B4D617267696E732E546F70050000000000000090 + 02400E4D617267696E732E426F74746F6D050000000000000090024005416C69 + 676E07044C6566740A506F736974696F6E2E5805000000000000009002400A50 + 6F736974696F6E2E5905000000000000009002400A53697A652E576964746805 + 000000000000008004400B53697A652E48656967687405000000000000008004 + 401453697A652E506C6174666F726D44656661756C740800000A545265637461 + 6E676C6500095374796C654E616D65060A6261636B67726F756E6405416C6967 + 6E0706436C69656E740C436C69704368696C6472656E090A436C697050617265 + 6E74090A46696C6C2E436F6C6F72070978464632303230323007486974546573 + 74080C4D617267696E732E4C6566740500000000000000C804C00A53697A652E + 57696474680500000000000000C805400B53697A652E48656967687405000000 + 00000000C804401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E + 00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F + 6E31084475726174696F6E05000000000000000000000C50726F70657274794E + 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464632 + 30323032300953746F7056616C75650709784646343034303430075472696767 + 6572063049734D6F7573654F7665723D747275653B4973507265737365643D66 + 616C73653B4973466F63757365643D66616C73650E54726967676572496E7665 + 727365063149734D6F7573654F7665723D66616C73653B497350726573736564 + 3D66616C73653B4973466F63757365643D66616C736500000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72 + 416E696D6174696F6E33084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C + 756507097846463241383245320953746F7056616C7565070978464631373537 + 39430754726967676572062E4973507265737365643D747275653B49734D6F75 + 73654F7665723D747275653B4973466F63757365643D747275650E5472696767 + 6572496E7665727365062F4973507265737365643D66616C73653B49734D6F75 + 73654F7665723D747275653B4973466F63757365643D74727565000000055454 + 65787400095374796C654E616D6506047465787405416C69676E0706436C6965 + 6E740748697454657374080A53697A652E57696474680500000000000000C804 + 400B53697A652E4865696768740500000000000000C804401453697A652E506C + 6174666F726D44656661756C7408045465787406045465787416546578745365 + 7474696E67732E466F6E74436F6C6F720708636C615768697465000007544C61 + 796F757400095374796C654E616D6506074C61796F75743205416C69676E0704 + 4C6566740A53697A652E57696474680500000000000000C804400B53697A652E + 4865696768740500000000000000C804401453697A652E506C6174666F726D44 + 656661756C74080005545061746800095374796C654E616D65060469636F6E05 + 416C69676E070643656E74657209446174612E506174680A1801000017000000 + 000000000000C03F0000C03F0100000000000000000000000100000000004040 + 00000000010000000000C03F0000C03F030000000000C03F0000C03F00000000 + 00009040000000000100000000004041000000000100000000004041CDCC4C3F + 0100000000009040CDCC4C3F0100000000009040000000000300000000009040 + 0000000000000000000090403333734001000000000090400000404001000000 + 0000404100004040010000000000404133337340010000000000904033337340 + 03000000000090403333734000000000000090409A99D9400100000000009040 + 0000C04001000000000040410000C04001000000000040419A99D94001000000 + 000090409A99D94003000000000090409A99D9400A46696C6C2E436F6C6F7207 + 08636C6157686974650748697454657374080A53697A652E5769647468050000 + 0000000000D003400B53697A652E4865696768740500000000000000E0034014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E6508577261704D6F64650703466974000000005450463007544C + 61796F757400095374796C654E616D65060E616464627574746F6E7374796C65 + 05416C69676E070643656E7465720A53697A652E576964746805000000000000 + 00C805400B53697A652E4865696768740500000000000000C003401453697A65 + 2E506C6174666F726D44656661756C74080756697369626C65080B4669786564 + 4865696768740218000654476C79706800095374796C654E616D65060A676C79 + 70687374796C650C4D617267696E732E4C65667405000000000000009002400B + 4D617267696E732E546F7005000000000000009002400E4D617267696E732E42 + 6F74746F6D050000000000000090024005416C69676E07044C6566740A506F73 + 6974696F6E2E5805000000000000009002400A506F736974696F6E2E59050000 + 00000000009002400A53697A652E576964746805000000000000008004400B53 + 697A652E48656967687405000000000000008004401453697A652E506C617466 + 6F726D44656661756C740800000A5452656374616E676C6500095374796C654E + 616D65060A6261636B67726F756E6405416C69676E0706436C69656E740C436C + 69704368696C6472656E090A436C6970506172656E74090A46696C6C2E436F6C + 6F7207097846463230323032300748697454657374080C4D617267696E732E4C + 6566740500000000000000C003C00A53697A652E576964746805000000000000 + 00C805400B53697A652E4865696768740500000000000000C003401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 15627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E05 + 000000000000000000000C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463230323032300953746F705661 + 6C756507097846463430343034300754726967676572063049734D6F7573654F + 7665723D747275653B4973507265737365643D66616C73653B4973466F637573 + 65643D66616C73650E54726967676572496E7665727365063149734D6F757365 + 4F7665723D66616C73653B4973507265737365643D66616C73653B4973466F63 + 757365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E330844 + 75726174696F6E05000000000000000000000C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C756507097846463241383245 + 320953746F7056616C756507097846463137353739430754726967676572062E + 4973507265737365643D747275653B49734D6F7573654F7665723D747275653B + 4973466F63757365643D747275650E54726967676572496E7665727365062F49 + 73507265737365643D66616C73653B49734D6F7573654F7665723D747275653B + 4973466F63757365643D7472756500000005545465787400095374796C654E61 + 6D6506047465787405416C69676E0706436C69656E740748697454657374080A + 53697A652E576964746805000000000000009805400B53697A652E4865696768 + 740500000000000000C003401453697A652E506C6174666F726D44656661756C + 74080454657874060454657874165465787453657474696E67732E466F6E7443 + 6F6C6F720708636C615768697465000007544C61796F757400095374796C654E + 616D6506074C61796F75743205416C69676E07044C6566740A53697A652E5769 + 6474680500000000000000C003400B53697A652E486569676874050000000000 + 0000C003401453697A652E506C6174666F726D44656661756C74080005545061 + 746800095374796C654E616D65060469636F6E05416C69676E0708436F6E7465 + 6E747309446174612E506174680AAC0000000E00000000000000CDCC34410000 + C040010000000000C0400000C040010000000000C040CDCC3441010000009A99 + A940CDCC3441010000009A99A9400000C04001000000000000000000C0400100 + 0000000000009A99A940010000009A99A9409A99A940010000009A99A9400000 + 0000010000000000C04000000000010000000000C0409A99A94001000000CDCC + 34419A99A94001000000CDCC34410000C04003000000CDCC34410000C0400A46 + 696C6C2E436F6C6F720708636C6157686974650748697454657374080C4D6172 + 67696E732E4C65667405000000000000008001400B4D617267696E732E546F70 + 05000000000000008001400D4D617267696E732E526967687405000000000000 + 008001400E4D617267696E732E426F74746F6D05000000000000008001400A53 + 697A652E576964746805000000000000008003400B53697A652E486569676874 + 05000000000000008003401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F646507034669 + 74000000005450463007544C61796F757400095374796C654E616D650617696E + 666F746F6F6C627574746F6E6D756C74697669657705416C69676E070643656E + 7465720A53697A652E57696474680500000000000000C805400B53697A652E48 + 65696768740500000000000000C804401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C65080B46697865644865696768740232000654 + 476C79706800095374796C654E616D65060A676C7970687374796C650C4D6172 + 67696E732E4C65667405000000000000009002400B4D617267696E732E546F70 + 05000000000000009002400E4D617267696E732E426F74746F6D050000000000 + 000090024005416C69676E07044C6566740A506F736974696F6E2E5805000000 + 000000009002400A506F736974696F6E2E5905000000000000009002400A5369 + 7A652E576964746805000000000000008004400B53697A652E48656967687405 + 000000000000008004401453697A652E506C6174666F726D44656661756C7408 + 00000A5452656374616E676C6500095374796C654E616D65060A6261636B6772 + 6F756E6405416C69676E0706436C69656E740C436C69704368696C6472656E09 + 0A436C6970506172656E74090A46696C6C2E436F6C6F72070978464632303230 + 32300748697454657374080C4D617267696E732E4C6566740500000000000000 + C804C00A53697A652E57696474680500000000000000C805400B53697A652E48 + 65696768740500000000000000C804401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72 + 416E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F + 72416E696D6174696F6E31084475726174696F6E05000000000000000000000C + 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 + 6C756507097846463230323032300953746F7056616C75650709784646343034 + 3034300754726967676572063049734D6F7573654F7665723D747275653B4973 + 507265737365643D66616C73653B4973466F63757365643D66616C73650E5472 + 6967676572496E7665727365063149734D6F7573654F7665723D66616C73653B + 4973507265737365643D66616C73653B4973466F63757365643D66616C736500 + 000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506156275 + 74746F6E436F6C6F72416E696D6174696F6E33084475726174696F6E05000000 + 000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F72 + 0A537461727456616C756507097846463241383245320953746F7056616C7565 + 07097846463137353739430754726967676572062E4973507265737365643D74 + 7275653B49734D6F7573654F7665723D747275653B4973466F63757365643D74 + 7275650E54726967676572496E7665727365062F4973507265737365643D6661 + 6C73653B49734D6F7573654F7665723D747275653B4973466F63757365643D74 + 72756500000005545465787400095374796C654E616D6506047465787405416C + 69676E0706436C69656E740748697454657374080A53697A652E576964746805 + 00000000000000C804400B53697A652E4865696768740500000000000000C804 + 401453697A652E506C6174666F726D44656661756C7408045465787406045465 + 7874165465787453657474696E67732E466F6E74436F6C6F720708636C615768 + 697465000007544C61796F757400095374796C654E616D6506074C61796F7574 + 3205416C69676E07044C6566740A53697A652E57696474680500000000000000 + C804400B53697A652E4865696768740500000000000000C804401453697A652E + 506C6174666F726D44656661756C74080005545061746800095374796C654E61 + 6D65060469636F6E05416C69676E070643656E74657209446174612E50617468 + 0A84070000A0000000000000009A9987429A99074302000000010076429A9907 + 430200000001005E42CDCC064302000000343347423433054302000000010030 + 429A9903430200000067661A42CE4C01430200000067660642CECCFC42020000 + 00CECCE4410100F742020000000100C041CECCEF420200000034339F419B99E7 + 4202000000CECC7C416866DF4202000000353343413533D64202000000CECC14 + 413533CC42020000009A99C9400000C24202000000000080403333B742020000 + 009A991940CDCCAB4202000000CDCC4C3F3333A0420200000000000000333394 + 4202000000000000009A99874202000000000000000100764202000000CDCC4C + 3F01005E42020000009A991940CECC4642020000000000804000003042020000 + 009A99C94066661A42020000003333134166660642020000009A994141CCCCE4 + 410200000033337B41FFFFBF410200000066669E4132339F41020000003333BF + 41CACC7C41020000000000E441313343410200000000000642CACC1441020000 + 0066661A429A99C94002000000000030420000804002000000333347429A9919 + 400200000000005E42CDCC4C3F020000006666764200000000020000009A9987 + 4200000000020000003433944200000000020000003433A042CDCC4C3F020000 + 00CDCCAB429A991940020000003333B74200008040020000000000C2429A99C9 + 40020000003333CC4233331341020000003333D6429A994141020000006666DF + 4233337B41020000009999E74266669E4102000000CCCCEF423333BF41020000 + 00FFFFF6420000E44102000000CCCCFC420000064202000000CC4C014300001A + 4202000000999903439A992F420200000033330543CDCC464202000000CDCC06 + 4300005E4202000000999907430000764202000000999907439A998742020000 + 00999907433433944202000000CCCC06433433A0420200000033330543CDCCAB + 4202000000999903436766B74202000000CD4C01433333C24202000000CCCCFC + 423433CC4202000000FFFFF6423433D64202000000CCCCEF426766DF42020000 + 009999E7429A99E742020000006666DF42CDCCEF42020000003333D6420000F7 + 42020000003333CC42CDCCFC42020000003333C242CD4C0143020000006666B7 + 429A99034302000000CCCCAB4233330543020000003333A042CDCC0643020000 + 00333394429A990743020000009A9987429A990743030000009A9987429A9907 + 43000000009A99874200001041020000009A9979420000104102000000CECC64 + 4233331B4102000000CECC50429A99314102000000CECC3C4200004841020000 + 0001002A420000684102000000CECC184200008841020000003433074200009C + 41020000003633EF41CDCCB441020000006966D2419A99D141020000009C99B5 + 416766EE41020000009C999D41CDCC064202000000D0CC884166661842020000 + 00A099694100002A4202000000A099494166663C42020000003A333341CCCC50 + 420200000033331B4133336542020000000000104100007A4202000000000010 + 419A9987420200000000001041343392420200000033331B41CDCC9C42020000 + 009A993141CDCCA6420200000000004841CDCCB04202000000000068413333BA + 4202000000000088410000C3420200000000009C41CDCCCB4202000000CDCCB4 + 419A99D342020000009A99D141CDCCDA42020000006766EE410000E242020000 + 00CDCC06420000E84202000000666618423333ED420200000000002A423333F2 + 420200000066663C423333F64202000000666650420000F94202000000666664 + 42CDCCFB4202000000333379423333FD4202000000666687423333FD42020000 + 00333392423333FD420200000099999C42CDCCFB42020000009999A6420000F9 + 42020000009999B0423333F64202000000FFFFB9423333F24202000000CCCCC2 + 423333ED42020000009999CB423333E842020000006666D3420000E242020000 + 009999DA42CDCCDA4202000000CCCCE1429A99D34202000000CCCCE742CDCCCB + 4202000000FFFFEC420000C34202000000FFFFF1423333BA4202000000FFFFF5 + 420000B14202000000CCCCF8420000A742020000009999FB4200009D42020000 + 00FFFFFC429A99924202000000FFFFFC42CDCC874202000000FFFFFC4200007A + 42020000009999FB423433654202000000CCCCF8423433514202000000FFFFF5 + 4234333D4202000000FFFFF14267662A4202000000FFFFEC42CECC1842020000 + 00FFFFE7423433074202000000CCCCE1423633EF41020000009999DA426966D2 + 41020000006666D3429C99B541020000009999CB429C999D4102000000CCCCC2 + 42D0CC884102000000FFFFB942A099694102000000CCCCB042A0994941020000 + 009999A6423A33334102000000CDCC9C4233331B410200000066669242000010 + 41020000009A99874200001041030000009A998742000010410000000033337D + 42CDCC1042010000009A999042CDCC1042010000009A999042CDCC3442010000 + 0034337D42CDCC34420100000034337D42CDCC10420300000033337D42CDCC10 + 420000000033337D4233335942010000009A99904233335942010000009A9990 + 420000C7420100000034337D420000C7420100000034337D4233335942030000 + 0033337D42333359420A46696C6C2E436F6C6F720708636C6157686974650748 + 697454657374080A53697A652E57696474680500000000000000D003400B5369 + 7A652E4865696768740500000000000000E003401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6508577261 + 704D6F64650703466974000000005450463007544C61796F757400095374796C + 654E616D65061B6F7267616E697A65746F6F6C627574746F6E6D756C74697669 + 657705416C69676E070643656E7465720A53697A652E57696474680500000000 + 000000C805400B53697A652E4865696768740500000000000000C80440145369 + 7A652E506C6174666F726D44656661756C74080756697369626C65080B466978 + 65644865696768740232000654476C79706800095374796C654E616D65060A67 + 6C7970687374796C650C4D617267696E732E4C65667405000000000000009002 + 400B4D617267696E732E546F7005000000000000009002400E4D617267696E73 + 2E426F74746F6D050000000000000090024005416C69676E07044C6566740A50 + 6F736974696F6E2E5805000000000000009002400A506F736974696F6E2E5905 + 000000000000009002400A53697A652E57696474680500000000000000800440 + 0B53697A652E48656967687405000000000000008004401453697A652E506C61 + 74666F726D44656661756C740800000A5452656374616E676C6500095374796C + 654E616D65060A6261636B67726F756E6405416C69676E0706436C69656E740C + 436C69704368696C6472656E090A436C6970506172656E74090A46696C6C2E43 + 6F6C6F7207097846463230323032300748697454657374080C4D617267696E73 + 2E4C6566740500000000000000C804C00A53697A652E57696474680500000000 + 000000C805400B53697A652E4865696768740500000000000000C80440145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650615627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F + 6E05000000000000000000000C50726F70657274794E616D65060A46696C6C2E + 436F6C6F720A537461727456616C756507097846463230323032300953746F70 + 56616C756507097846463430343034300754726967676572063049734D6F7573 + 654F7665723D747275653B4973507265737365643D66616C73653B4973466F63 + 757365643D66616C73650E54726967676572496E7665727365063149734D6F75 + 73654F7665723D66616C73653B4973507265737365643D66616C73653B497346 + 6F63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009 + 5374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E33 + 084475726174696F6E05000000000000000000000C50726F70657274794E616D + 65060A46696C6C2E436F6C6F720A537461727456616C75650709784646324138 + 3245320953746F7056616C756507097846463137353739430754726967676572 + 062E4973507265737365643D747275653B49734D6F7573654F7665723D747275 + 653B4973466F63757365643D747275650E54726967676572496E766572736506 + 2F4973507265737365643D66616C73653B49734D6F7573654F7665723D747275 + 653B4973466F63757365643D7472756500000005545465787400095374796C65 + 4E616D6506047465787405416C69676E0706436C69656E740748697454657374 + 080A53697A652E57696474680500000000000000C804400B53697A652E486569 + 6768740500000000000000C804401453697A652E506C6174666F726D44656661 + 756C7408165465787453657474696E67732E466F6E74436F6C6F720708636C61 + 5768697465000007544C61796F757400095374796C654E616D6506074C61796F + 75743205416C69676E07044C6566740A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000000000C804401453697A + 652E506C6174666F726D44656661756C74080005545061746800095374796C65 + 4E616D65060469636F6E05416C69676E070643656E74657209446174612E5061 + 74680AD000000011000000000000009A99E9409A99C940010000006666664066 + 661E4101000000000000009A99C940010000000000003F9A99B94001000000CD + CC4C409A99094101000000CDCC4C400000000001000000000080400000000001 + 0000000000804000000841010000006666D6406666B640010000009A99E9409A + 99C940030000009A99E9409A99C940000000009A99993E00004041010000009A + 99993E33333341010000000000E04033333341010000000000E0400000404101 + 0000009A99993E00004041030000009A99993E000040410A46696C6C2E436F6C + 6F720708636C6157686974650748697454657374080A53697A652E5769647468 + 0500000000000000D003400B53697A652E4865696768740500000000000000E0 + 03401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E6508577261704D6F646507034669740000000054504630 + 07544C61796F757400095374796C654E616D65061B73657474696E6773746F6F + 6C627574746F6E6D756C74697669657705416C69676E070643656E7465720A53 + 697A652E57696474680500000000000000C805400B53697A652E486569676874 + 0500000000000000C804401453697A652E506C6174666F726D44656661756C74 + 080756697369626C65080B46697865644865696768740232000654476C797068 + 00095374796C654E616D65060A676C7970687374796C650C4D617267696E732E + 4C65667405000000000000009002400B4D617267696E732E546F700500000000 + 0000009002400E4D617267696E732E426F74746F6D0500000000000000900240 + 05416C69676E07044C6566740A506F736974696F6E2E58050000000000000090 + 02400A506F736974696F6E2E5905000000000000009002400A53697A652E5769 + 64746805000000000000008004400B53697A652E486569676874050000000000 + 00008004401453697A652E506C6174666F726D44656661756C740800000A5452 + 656374616E676C6500095374796C654E616D65060A6261636B67726F756E6405 + 416C69676E0706436C69656E740C436C69704368696C6472656E090A436C6970 + 506172656E74090A46696C6C2E436F6C6F720709784646323032303230074869 + 7454657374080C4D617267696E732E4C6566740500000000000000C804C00A53 + 697A652E57696474680500000000000000C805400B53697A652E486569676874 + 0500000000000000C804401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D61 + 74696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D + 6174696F6E31084475726174696F6E05000000000000000000000C50726F7065 + 7274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709 + 7846463230323032300953746F7056616C756507097846463430343034300754 + 726967676572063049734D6F7573654F7665723D747275653B49735072657373 + 65643D66616C73653B4973466F63757365643D66616C73650E54726967676572 + 496E7665727365063149734D6F7573654F7665723D66616C73653B4973507265 + 737365643D66616C73653B4973466F63757365643D66616C736500000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E43 + 6F6C6F72416E696D6174696F6E33084475726174696F6E050000000000000000 + 00000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 + 7456616C756507097846463241383245320953746F7056616C75650709784646 + 3137353739430754726967676572062E4973507265737365643D747275653B49 + 734D6F7573654F7665723D747275653B4973466F63757365643D747275650E54 + 726967676572496E7665727365062F4973507265737365643D66616C73653B49 + 734D6F7573654F7665723D747275653B4973466F63757365643D747275650000 + 0005545465787400095374796C654E616D6506047465787405416C69676E0706 + 436C69656E740748697454657374080A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000000000C804401453697A + 652E506C6174666F726D44656661756C74080454657874060454657874165465 + 787453657474696E67732E466F6E74436F6C6F720708636C6157686974650000 + 07544C61796F757400095374796C654E616D6506074C61796F75743205416C69 + 676E07044C6566740A53697A652E57696474680500000000000000C804400B53 + 697A652E4865696768740500000000000000C804401453697A652E506C617466 + 6F726D44656661756C74080005545061746800095374796C654E616D65060469 + 636F6E05416C69676E070643656E74657209446174612E506174680A540D0000 + 1C01000000000000333351423333E7410200000033335142CDCCE84102000000 + 333351426666EA4102000000333351423333EB410200000033335142CDCCEC41 + 02000000333351426666EE4102000000333351423333EF410200000033335142 + CDCCF04102000000333351426666F24102000000333351423333F34102000000 + 33335142CDCCF44102000000333351426666F64102000000333351423333F741 + 0100000099996F4266660E4201000000CDCC5C4200003C420100000000003A42 + 0000344202000000000038420000364202000000000036420000384202000000 + 0000344200003A420100000000003C42CDCC5C4201000000CDCC0E429A996F42 + 010000000000F84133335142020000006666F6413333514202000000CDCCF441 + 33335142020000000000F44133335142020000006666F2413333514202000000 + CDCCF04133335142020000000000F04133335142020000006666EE4133335142 + 02000000CDCCEC4133335142020000000000EC4133335142020000006666EA41 + 3333514202000000CDCCE84133335142020000000000E8413333514201000000 + 6666C24199996F4201000000FFFF4F41CCCC5C4201000000FFFF6F41FFFF3942 + 02000000FFFF6741FFFF374202000000FFFF5F41FFFF354202000000FFFF5741 + FFFF33420100000098999940FFFF3B420100000000000000CDCC0E4201000000 + 3333F3400000F841020000003333F3406666F641020000003333F340CDCCF441 + 020000003333F3400000F441020000003333F3406666F241020000003333F340 + CDCCF041020000003333F3400000F041020000003333F3406666EE4102000000 + 3333F340CDCCEC41020000003333F3400000EC41020000003333F3406666EA41 + 020000003333F340CDCCE841020000003333F3400000E8410100000000000000 + CDCCC0410100000066669640CDCC4C410100000066665641CDCC6C4102000000 + 66665E41CDCC64410200000066666641CDCC5C410200000066666E41CDCC5441 + 0100000066664E413433934001000000CDCCC04100000000010000006666E641 + 3333F340020000000000E8413333F340020000009999E9413333F34002000000 + 6666EA413333F340020000000000EC413333F340020000009999ED413333F340 + 020000006666EE413333F340020000000000F0413333F340020000009999F141 + 3333F340020000006666F2413333F340020000000000F4413333F34002000000 + 9999F5413333F340020000006666F6413333F34001000000CDCC0E4200000000 + 0100000000003C42666696400100000000003442666656410200000000003642 + 66665E410200000000003842666666410200000000003A4266666E4101000000 + CDCC5C4266664E41010000009A996F429A99C14101000000333351423333E741 + 03000000333351423333E7410000000033334342CDCC02420200000033334342 + CDCC004202000000999943426766FE4102000000999943426766FA4102000000 + 999943426766F64102000000FFFF43423433F34102000000FFFF43423433EF41 + 02000000FFFF43423433EB4102000000FFFF43420100E8410200000099994342 + 0100E44102000000999943420100E0410200000033334342CECCDC4102000000 + 33334342CECCD84101000000CDCC5E426866B64101000000CDCC54429B998541 + 01000000CDCC3442CECC9441020000006766324234338F410200000000003042 + 9B9989410200000033332D42010084410200000066662A42CECC7C4102000000 + 000028423533734102000000CDCC24429C9969410100000067662C423833D340 + 0100000001001442383383400100000067660242020030410200000067660042 + 02003041020000009B99FD4168662E41020000009B99F94168662E4102000000 + 9B99F54168662E41020000006866F241CECC2C41020000006866EE41CECC2C41 + 020000006866EA41CECC2C41020000003533E741CECC2C41020000003533E341 + 68662E41020000003533DF4168662E41020000000200DC410200304102000000 + 0200D84102003041010000009C99B5413733834001000000CFCC84413733D340 + 01000000020094419C9969410200000068668E413633734102000000CFCC8841 + CFCC7C410200000035338341010084410200000036337B419A99894102000000 + 9D99714167668E410200000004006841CECC9441010000000800D0409B998541 + 01000000080080406866B641010000006A662E419B99D941020000006A662E41 + 9B99DD4102000000D0CC2C41CECCE04102000000D0CC2C41CECCE44102000000 + D0CC2C41CECCE8410200000036332B410100EC410200000036332B410100F041 + 0200000036332B410100F4410200000036332B413433F74102000000D0CC2C41 + 3433FB4102000000D0CC2C413433FF41020000006A662E413433014202000000 + 6A662E4134330342010000000700804067661442010000000700D040CDCC2C42 + 010000000400684133332542020000009E997141000028420200000037337B41 + CDCC2A42020000003533834199992D4202000000CECC88416566304202000000 + 9B998D41CCCC324202000000020094413333354201000000CFCC844133335542 + 010000009C99B54133335F4201000000CFCCD8419999434202000000CFCCDC41 + 99994342020000000200E041FFFF4342020000000200E441FFFF434202000000 + 0200E841FFFF4342020000003533EB4165664442020000003533EF4165664442 + 020000003533F34165664442020000006866F64165664442020000006866FA41 + FFFF4342020000006866FE41FFFF434202000000CECC00429999434202000000 + CECC024299994342010000000100144233335F420100000067662C4233335542 + 01000000CDCC244233333542020000009A992742CDCC32420200000067662A42 + 666630420200000033332D4299992D4202000000FFFF2F42CCCC2A4202000000 + 666632426666284202000000CDCC34423333254201000000CDCC5442CDCC2C42 + 01000000CDCC5E42676614420100000033334342CDCC02420300000033334342 + CDCC0242000000003333EF4133339741020000003333FB413333974102000000 + 9A9903429999994102000000CDCC084266669E410200000000000E423333A341 + 02000000CDCC12429999A94102000000CDCC16429999B14102000000CDCC1A42 + 9999B9410200000000001E423333C34102000000676620429999CD4102000000 + CDCC2242FFFFD7410200000001002442FFFFE34102000000010024420000F041 + 02000000010024420100FC4102000000CECC2242000004420200000067662042 + 333309420200000001001E4266660E4202000000CDCC1A423333134202000000 + CDCC16423333174202000000CDCC124233331B420200000000000E4266661E42 + 02000000CDCC0842CDCC2042020000009A99034233332342020000003433FB41 + 67662442020000003433EF4167662442020000003433E3416766244202000000 + 3433D7413433234202000000CECCCC41CDCC2042020000006866C24167661E42 + 02000000CECCB84133331B4202000000CECCB0413333174202000000CECCA841 + 33331342020000006866A24166660E42020000009B999D413333094202000000 + CECC98410000044202000000686696410000FC4102000000686696410000F041 + 02000000686696410000E44102000000CECC98410000D841020000009B999D41 + 9A99CD41020000006866A2413433C34102000000CECCA8419A99B94102000000 + CECCB0419A99B14102000000CECCB8419A99A941020000006866C2413433A341 + 02000000CECCCC4167669E41020000000000D8419A999941020000003333E341 + 33339741020000003333EF4133339741030000003333EF413333974100000000 + 3333EF41CDCC1642020000000000F841CDCC1642020000000000004200001642 + 020000009A990342676614420200000034330742CDCC124202000000CDCC0A42 + 67661042020000009A990D429A990D420200000067661042CDCC0A4202000000 + CDCC12429A99074202000000676614429A990342020000000100164200000042 + 02000000CDCC16423433F74102000000CDCC16423433EF4102000000CDCC1642 + 6766E64102000000000016426766DE4102000000676614423433D74102000000 + CDCC12420100D0410200000067661042CECCC841020000009A990D423433C341 + 02000000CDCC0A429A99BD41020000009A990742CECCB841020000009A990342 + 9A99B54102000000000000426766B241020000003433F741CDCCB04102000000 + 3433EF41CDCCB041020000006766E641CDCCB041020000006766DE416766B241 + 020000003433D7419A99B541020000000100D041CDCCB84102000000CECCC841 + 9A99BD41020000003433C3413433C341020000009A99BD41CECCC84102000000 + CECCB8413433CF41020000009A99B5413433D741020000006766B2416766DE41 + 02000000CDCCB0413433E74102000000CDCCB0413433EF4102000000CDCCB041 + 0100F841020000006766B24100000042020000009A99B5419A99034202000000 + CDCCB84134330742020000009A99BD41CDCC0A42020000003433C3419A990D42 + 02000000CECCC84167661042020000003433CF41CDCC1242020000003433D741 + 67661442020000003333DF4100001642020000003333E741CDCC164202000000 + 3333EF41CDCC1642030000003333EF41CDCC16420A46696C6C2E436F6C6F7207 + 08636C6157686974650748697454657374080A53697A652E5769647468050000 + 0000000000D003400B53697A652E4865696768740500000000000000E0034014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E6508577261704D6F64650703466974000000005450463007544C + 61796F757400095374796C654E616D65061172656D6F7665627574746F6E7374 + 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 + 00000000C805400B53697A652E4865696768740500000000000000C003401453 + 697A652E506C6174666F726D44656661756C74080756697369626C65080B4669 + 7865644865696768740218000654476C79706800095374796C654E616D65060A + 676C7970687374796C650C4D617267696E732E4C656674050000000000000090 + 02400B4D617267696E732E546F7005000000000000009002400E4D617267696E + 732E426F74746F6D050000000000000090024005416C69676E07044C6566740A + 506F736974696F6E2E5805000000000000008404400A506F736974696F6E2E59 + 05000000000000009002400A53697A652E576964746805000000000000008004 + 400B53697A652E4865696768740500000000000000C001401453697A652E506C + 6174666F726D44656661756C740800000A5452656374616E676C650009537479 + 6C654E616D65060A6261636B67726F756E6405416C69676E0706436C69656E74 + 0C436C69704368696C6472656E090A436C6970506172656E74090A46696C6C2E + 436F6C6F7207097846463230323032300748697454657374080C4D617267696E + 732E4C6566740500000000000000C003C00A53697A652E576964746805000000 + 00000000C805400B53697A652E4865696768740500000000000000C003401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E61 + 6D650615627574746F6E436F6C6F72416E696D6174696F6E3108447572617469 + 6F6E05000000000000000000000C50726F70657274794E616D65060A46696C6C + 2E436F6C6F720A537461727456616C756507097846463230323032300953746F + 7056616C756507097846463430343034300754726967676572063049734D6F75 + 73654F7665723D747275653B4973507265737365643D66616C73653B4973466F + 63757365643D66616C73650E54726967676572496E7665727365063149734D6F + 7573654F7665723D66616C73653B4973507265737365643D66616C73653B4973 + 466F63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E + 33084475726174696F6E05000000000000000000000C50726F70657274794E61 + 6D65060A46696C6C2E436F6C6F720A537461727456616C756507097846463241 + 383245320953746F7056616C7565070978464631373537394307547269676765 + 72062E4973507265737365643D747275653B49734D6F7573654F7665723D7472 + 75653B4973466F63757365643D747275650E54726967676572496E7665727365 + 062F4973507265737365643D66616C73653B49734D6F7573654F7665723D7472 + 75653B4973466F63757365643D7472756500000005545465787400095374796C + 654E616D6506047465787405416C69676E0706436C69656E7407486974546573 + 74080A53697A652E576964746805000000000000009805400B53697A652E4865 + 696768740500000000000000C003401453697A652E506C6174666F726D446566 + 61756C74080454657874060454657874165465787453657474696E67732E466F + 6E74436F6C6F720708636C615768697465000007544C61796F75740009537479 + 6C654E616D6506074C61796F75743205416C69676E07044C6566740A53697A65 + 2E57696474680500000000000000C003400B53697A652E486569676874050000 + 0000000000C003401453697A652E506C6174666F726D44656661756C74080005 + 545061746800095374796C654E616D65060469636F6E05416C69676E0708436F + 6E74656E747309446174612E506174680A4C0000000600000000000000000040 + 41CDCC4C3F0100000000000000CDCC4C3F010000000000000000000000010000 + 0000004041000000000100000000004041CDCC4C3F0300000000004041CDCC4C + 3F0A46696C6C2E436F6C6F720708636C6157686974650748697454657374080C + 4D617267696E732E4C65667405000000000000008001400B4D617267696E732E + 546F7005000000000000008001400D4D617267696E732E526967687405000000 + 000000008001400E4D617267696E732E426F74746F6D05000000000000008001 + 400A53697A652E576964746805000000000000008003400B53697A652E486569 + 67687405000000000000008003401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F646507 + 0346697400000000545046300A5452656374616E676C6500095374796C654E61 + 6D650614706F7075706261636B67726F756E647374796C6505416C69676E0706 + 43656E7465720A46696C6C2E436F6C6F7207097846463244324432440A53697A + 652E576964746805000000000000009407400B53697A652E4865696768740500 + 000000000080D206401453697A652E506C6174666F726D44656661756C74080C + 5374726F6B652E436F6C6F7207097846463135313531350756697369626C6508 + 00005450463007544C61796F757400095374796C654E616D65061A70726F6772 + 6573736261726D696E6966696E6973687374796C6505416C69676E070643656E + 7465720A53697A652E576964746805000000000033338505400B53697A652E48 + 65696768740500000000009999E104401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C6508000A5452656374616E676C650009537479 + 6C654E616D65060668747261636B05416C69676E0708436F6E74656E74730A46 + 696C6C2E436F6C6F720709784646343034303430064C6F636B65640907486974 + 54657374080A53697A652E576964746805000000000033338505400B53697A65 + 2E4865696768740500000000009999E104401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000A54526563 + 74616E676C6500095374796C654E616D65060A68696E64696361746F7205416C + 69676E07044C6566740A46696C6C2E436F6C6F72070978464632434532343406 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 000000C804400B53697A652E4865696768740500000000009999E10440145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E650000000A5452656374616E676C6500095374796C654E616D650606 + 76747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F + 720709784646343034303430064C6F636B6564090748697454657374080A5369 + 7A652E576964746805000000000033338505400B53697A652E48656967687405 + 00000000009999E104401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E65000A5452656374616E676C650009 + 5374796C654E616D65060A76696E64696361746F7205416C69676E0706426F74 + 746F6D0A46696C6C2E436F6C6F720709784646324345323434064C6F636B6564 + 090748697454657374080A506F736974696F6E2E5905000000000099998D0440 + 0A53697A652E576964746805000000000033338505400B53697A652E48656967 + 68740500000000000000A803401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C + 61796F757400095374796C654E616D65061070726F6772657373626172737479 + 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 + 0033338505400B53697A652E4865696768740500000000009999E10440145369 + 7A652E506C6174666F726D44656661756C74080756697369626C6508000A5452 + 656374616E676C6500095374796C654E616D65060668747261636B05416C6967 + 6E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846463230323032 + 30064C6F636B6564090748697454657374080A53697A652E5769647468050000 + 00000033338505400B53697A652E4865696768740500000000009999E1044014 + 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C + 6F720709784646313531353135000A5452656374616E676C6500095374796C65 + 4E616D65060A68696E64696361746F7205416C69676E07044C6566740A46696C + 6C2E436F6C6F720709784646324138324532064C6F636B656409074869745465 + 7374080C4D617267696E732E4C656674050000000000000080FF3F0B4D617267 + 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 + 050000000000000080FF3F0E4D617267696E732E426F74746F6D050000000000 + 000080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F7369 + 74696F6E2E59050000000000000080FF3F0A53697A652E576964746805000000 + 00000000C804400B53697A652E4865696768740500000000009999D904401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E650000000A5452656374616E676C6500095374796C654E616D6506 + 0676747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C + 6F720709784646323032303230064C6F636B6564090748697454657374080A53 + 697A652E576964746805000000000033338505400B53697A652E486569676874 + 0500000000009999E104401453697A652E506C6174666F726D44656661756C74 + 080C5374726F6B652E436F6C6F720709784646313531353135000A5452656374 + 616E676C6500095374796C654E616D65060A76696E64696361746F7205416C69 + 676E0706426F74746F6D0A46696C6C2E436F6C6F720709784646324138324532 + 064C6F636B6564090748697454657374080C4D617267696E732E4C6566740500 + 00000000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F + 0D4D617267696E732E5269676874050000000000000080FF3F0E4D617267696E + 732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E580500 + 00000000000080FF3F0A506F736974696F6E2E5905000000000099998904400A + 53697A652E576964746805000000000033338105400B53697A652E4865696768 + 740500000000000000A803401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E6500000000} + end> + Left = 192 + Top = 24 + end + object RenderProgress1: TRenderProgress + Position.X = 272.000000000000000000 + Position.Y = 104.000000000000000000 + Size.Width = 657.000000000000000000 + Size.Height = 240.000000000000000000 + Size.PlatformDefault = False + Composition = 'CompName' + Status = '...' + Value = -1.000000000000000000 + InFrame = -1.000000000000000000 + OutFrame = -1.000000000000000000 + end +end diff --git a/src/lib/Components/TRenderProgress/Test Project/RenderProgressTestUnit.pas b/src/lib/Components/TRenderProgress/Test Project/RenderProgressTestUnit.pas new file mode 100644 index 0000000..3a38f21 --- /dev/null +++ b/src/lib/Components/TRenderProgress/Test Project/RenderProgressTestUnit.pas @@ -0,0 +1,29 @@ +unit RenderProgressTestUnit; + +interface + +uses + System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, + FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, + FMX.StdCtrls, FMX.Controls.Presentation, FMX.Layouts, FMX.Memo.Types, + FMX.ScrollBox, FMX.Memo, FMX.RenderProgress; + +type + TForm1 = class(TForm) + StyleBook1: TStyleBook; + StyleBook2: TStyleBook; + RenderProgress1: TRenderProgress; + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.fmx} + +end. diff --git a/src/lib/Components/TRenderProgress/Test Project/RenderProgressUnit.fmx b/src/lib/Components/TRenderProgress/Test Project/RenderProgressUnit.fmx new file mode 100644 index 0000000..4a948eb --- /dev/null +++ b/src/lib/Components/TRenderProgress/Test Project/RenderProgressUnit.fmx @@ -0,0 +1,3566 @@ +object Form1: TForm1 + Left = 0 + Top = 0 + Caption = 'Form1' + ClientHeight = 351 + ClientWidth = 1024 + StyleBook = StyleBook1 + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [Desktop] + DesignerMasterStyle = 0 + object StyleBook1: TStyleBook + Styles = < + item + ResourcesBin = { + 464D585F5354594C4520322E3501060F6261636B67726F756E647374796C6503 + AF00060B627574746F6E7374796C6503BA040609656469747374796C6503A305 + 060A6C6162656C7374796C65031501060D67726F7570626F787374796C650383 + 02060D747261636B6261727374796C65038107060D636865636B626F78737479 + 6C6503880506147363726F6C6C62617268747261636B7374796C65033B010614 + 7363726F6C6C62617276747261636B7374796C65033B0106157363726F6C6C62 + 6172626F74746F6D627574746F6E03220406137363726F6C6C6261726C656674 + 627574746F6E03390406147363726F6C6C6261727269676874627574746F6E03 + 3A0406127363726F6C6C626172746F70627574746F6E033804060E7363726F6C + 6C6261727374796C65035804060A7468756D627374796C65033B02060B737769 + 7463687374796C6503D101060D636F6D626F626F787374796C6503F607060E63 + 6F6D626F656469747374796C65038209060F746162636F6E74726F6C7374796C + 65039C01060B746162646F747374796C65035901060C7461626974656D737479 + 6C6503E404060D7468756D626261727374796C65034F03060C6C697374626F78 + 7374796C6503A207060D6C697374626F78666F6F74657203800106106C697374 + 626F786974656D7374796C65031B0306126C697374626F78706C61696E686561 + 646572033B020609677269647374796C65039808060F6865616465726974656D + 7374796C6503C303061970726F67726573736261726D696E696572726F727374 + 796C65035603061170726F677265737363656C6C7374796C65039A0206106D65 + 6E756261726974656D7374796C6503250B060C6D656E756261727374796C6503 + 6C02060D6D656E756974656D7374796C6503520B06126D656E75736570617261 + 746F727374796C65037801060D6D656E75766965777374796C65039102060E69 + 6D61676563656C6C7374796C65033201060E706F70757063656C6C7374796C65 + 03C603060D7465787463656C6C7374796C65039B0106096D656D6F7374796C65 + 03DC07060E6C696E6B6C6162656C7374796C65034503060E7374617475736261 + 727374796C6503E401060C7370696E626F787374796C65035407060D73697A65 + 677269707374796C6503F004060C746F6F6C6261727374796C6503CA00061570 + 726F67726573736261726572726F727374796C65036404060F64726F70746172 + 6765747374796C65036804061464726F707461726765746669656C647374796C + 6503890E060C706F706F7665727374796C65032A02060D706F707570626F7873 + 74796C6503320606147374617475736261726E6F677269707374796C6503D400 + 0613736D616C6C7363726F6C6C6261727374796C6503A301060D73706C697474 + 65727374796C650360040610636C6F7365627574746F6E7374796C6503660406 + 0E6D6178627574746F6E7374796C6503F603060E726573627574746F6E737479 + 6C65030F04060E6D696E627574746F6E7374796C65030E04060F746F6F6C7769 + 6E646F777374796C6503B20D061177696E646F77626F726465727374796C6503 + 4A100610726164696F627574746F6E7374796C6503AE050618756C63656E7465 + 72726164696F627574746F6E7374796C650352050617756C7269676874726164 + 696F627574746F6E7374796C650355050616756C6C656674726164696F627574 + 746F6E7374796C65035005061670726F677265737362617266696E6973687374 + 796C65036504060D657870616E6465727374796C650366060613657870616E64 + 6572627574746F6E7374796C650376020615657870616E646572636865636B62 + 6F787374796C6503D005060E6C6162656C66696C6C7374796C6503B801061363 + 6F6D626F656469746572726F727374796C65038709061E70726F677265737362 + 6172696E64657465726D696E61626C657374796C650379040611616E69696E64 + 696361746F727374796C6503DF010615616E69696E64696361746F72686F727A + 7374796C65038A02060A70616E656C7374796C65031E01060E6C6F6762757474 + 6F6E7374796C65038A07061470726F67726573736261726D696E697374796C65 + 035103061B7472656576696577657870616E646572627574746F6E7374796C65 + 037E02061174726565766965776974656D7374796C65031405060D7472656576 + 6965777374796C650336070619616374696F6E746F6F6C627574746F6E6D756C + 746976696577033F07060E616464627574746F6E7374796C65032C070617696E + 666F746F6F6C627574746F6E6D756C74697669657703A90D061B6F7267616E69 + 7A65746F6F6C627574746F6E6D756C74697669657703EE06061B73657474696E + 6773746F6F6C627574746F6E6D756C746976696577037D13061172656D6F7665 + 627574746F6E7374796C6503CF060614706F7075706261636B67726F756E6473 + 74796C6503BA00061A70726F67726573736261726D696E6966696E6973687374 + 796C65035703061070726F67726573736261727374796C65035F040054504630 + 0A5452656374616E676C6500095374796C654E616D65060F6261636B67726F75 + 6E647374796C6505416C69676E070643656E7465720A46696C6C2E436F6C6F72 + 07097846463244324432440A53697A652E576964746805000000000000009407 + 400B53697A652E4865696768740500000000000080D206401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 0756697369626C650800005450463007544C61796F757400095374796C654E61 + 6D65060B627574746F6E7374796C6505416C69676E070643656E7465720A5369 + 7A652E57696474680500000000000000C805400B53697A652E48656967687405 + 00000000000000C803401453697A652E506C6174666F726D44656661756C7408 + 0756697369626C6508000A5452656374616E676C6500095374796C654E616D65 + 060A6261636B67726F756E6405416C69676E0706436C69656E740C436C697043 + 68696C6472656E090A436C6970506172656E74090A46696C6C2E436F6C6F7207 + 097846463230323032300748697454657374080A53697A652E57696474680500 + 000000000000C805400B53697A652E4865696768740500000000000000C80340 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C65 + 4E616D650615627574746F6E436F6C6F72416E696D6174696F6E310844757261 + 74696F6E05000000000000000000000C50726F70657274794E616D65060A4669 + 6C6C2E436F6C6F720A537461727456616C756507097846463230323032300953 + 746F7056616C756507097846463430343034300754726967676572063049734D + 6F7573654F7665723D747275653B4973507265737365643D66616C73653B4973 + 466F63757365643D66616C73650E54726967676572496E766572736506314973 + 4D6F7573654F7665723D66616C73653B4973507265737365643D66616C73653B + 4973466F63757365643D66616C736500000F54436F6C6F72416E696D6174696F + 6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D617469 + 6F6E32084475726174696F6E05000000000000000000000C50726F7065727479 + 4E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709784646 + 3430343034300953746F7056616C756507097846463137353739430754726967 + 676572062F4973507265737365643D747275653B49734D6F7573654F7665723D + 747275653B4973466F63757365643D66616C736500000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E + 696D6174696F6E33084475726174696F6E05000000000000000000000C50726F + 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 + 07097846463241383245320953746F7056616C75650709784646313735373943 + 0754726967676572062E4973507265737365643D747275653B49734D6F757365 + 4F7665723D747275653B4973466F63757365643D747275650E54726967676572 + 496E7665727365062F4973507265737365643D66616C73653B49734D6F757365 + 4F7665723D747275653B4973466F63757365643D747275650000000554546578 + 7400095374796C654E616D6506047465787405416C69676E0706436C69656E74 + 13456E61626C6544726167486967686C69676874080748697454657374080A53 + 697A652E57696474680500000000000000C805400B53697A652E486569676874 + 0500000000000000C803401453697A652E506C6174666F726D44656661756C74 + 08165465787453657474696E67732E466F6E74436F6C6F720708636C61576869 + 74650000005450463007544C61796F757400095374796C654E616D6506096564 + 69747374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 0500000000000000C805400B53697A652E4865696768740500000000000000C8 + 03401453697A652E506C6174666F726D44656661756C74080756697369626C65 + 08000C5442727573684F626A65637400095374796C654E616D65060A666F7265 + 67726F756E6400000C5442727573684F626A65637400095374796C654E616D65 + 060973656C656374696F6E0B42727573682E436F6C6F72070978393632413832 + 453200000B54466F6E744F626A65637400095374796C654E616D650604666F6E + 7409466F6E742E53697A650500000000000000D0024000000A5452656374616E + 676C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E + 0708436F6E74656E74730A46696C6C2E436F6C6F720709784646323032303230 + 0748697454657374080A53697A652E57696474680500000000000000C805400B + 53697A652E4865696768740500000000000000C803401453697A652E506C6174 + 666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846463135 + 31353135000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 + 0614656469745374726F6B65416E696D6174696F6E31084475726174696F6E05 + 000000000000000000000C50726F70657274794E616D65060C5374726F6B652E + 436F6C6F720A537461727456616C756507097846463135313531350953746F70 + 56616C756507097846463241383245320754726967676572060E4973466F6375 + 7365643D747275650E54726967676572496E7665727365060F4973466F637573 + 65643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C + 654E616D650614656469745374726F6B65416E696D6174696F6E320844757261 + 74696F6E050000000000000000000007496E7665727365090C50726F70657274 + 794E616D65060C5374726F6B652E436F6C6F720A537461727456616C75650709 + 7846463135313531350953746F7056616C756507097846463443344334430754 + 726967676572062149734D6F7573654F7665723D747275653B4973466F637573 + 65643D66616C73653B0E54726967676572496E7665727365062249734D6F7573 + 654F7665723D66616C73653B4973466F63757365643D66616C73653B00000007 + 544C61796F757400095374796C654E616D650607627574746F6E7305416C6967 + 6E07055269676874064C6F636B6564090B4D617267696E732E546F7005000000 + 000000008000400D4D617267696E732E52696768740500000000000000800040 + 0E4D617267696E732E426F74746F6D05000000000000008000400A506F736974 + 696F6E2E580500000000000000C004400A506F736974696F6E2E590500000000 + 0000008000400A53697A652E57696474680500000000000000C804400B53697A + 652E4865696768740500000000000000A803401453697A652E506C6174666F72 + 6D44656661756C7408000007544C61796F757400095374796C654E616D650607 + 636F6E74656E7405416C69676E0706436C69656E74064C6F636B6564090C4D61 + 7267696E732E4C65667405000000000000008001400B4D617267696E732E546F + 7005000000000000008000400D4D617267696E732E5269676874050000000000 + 00008000400E4D617267696E732E426F74746F6D05000000000000008000400A + 53697A652E57696474680500000000000000A804400B53697A652E4865696768 + 740500000000000000A803401453697A652E506C6174666F726D44656661756C + 7408000006544C6162656C00095374796C654E616D65060670726F6D7074064C + 6F636B656409074F706163697479050000000000000080FE3F16546578745365 + 7474696E67732E466F6E74436F6C6F720708636C615768697465045465787406 + 04546578740000005450463007544C61796F757400095374796C654E616D6506 + 0A6C6162656C7374796C6505416C69676E070643656E7465720A53697A652E57 + 696474680500000000000000C805400B53697A652E4865696768740500000000 + 000000C803401453697A652E506C6174666F726D44656661756C740807566973 + 69626C65080005545465787400095374796C654E616D6506047465787405416C + 69676E0708436F6E74656E74730748697454657374080A53697A652E57696474 + 680500000000000000C805400B53697A652E4865696768740500000000000000 + C803401453697A652E506C6174666F726D44656661756C740816546578745365 + 7474696E67732E466F6E74436F6C6F720708636C615768697465000000545046 + 3007544C61796F757400095374796C654E616D65060D67726F7570626F787374 + 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 + 00000000F004400B53697A652E4865696768740500000000000000C804401453 + 697A652E506C6174666F726D44656661756C74080756697369626C6508000A54 + 52656374616E676C6500095374796C654E616D65060A6261636B67726F756E64 + 05416C69676E0708436F6E74656E74730946696C6C2E4B696E6407044E6F6E65 + 0748697454657374080C4D617267696E732E4C6566740500000000000000C000 + 400B4D617267696E732E546F7005000000000000009002400D4D617267696E73 + 2E52696768740500000000000000C000400E4D617267696E732E426F74746F6D + 0500000000000000C000400A53697A652E57696474680500000000000000D804 + 400B53697A652E48656967687405000000000000009804401453697A652E506C + 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 + 3135313531350005545465787400095374796C654E616D650604746578740841 + 75746F53697A65090A436C6970506172656E74090748697454657374080C4D61 + 7267696E732E4C6566740500000000000000A002400A506F736974696F6E2E58 + 05000000000060559502400A506F736974696F6E2E590500000000004055D501 + C00A53697A652E576964746805000000000000B8C703400B53697A652E486569 + 6768740500000000000060FF02401453697A652E506C6174666F726D44656661 + 756C7408165465787453657474696E67732E466F6E74436F6C6F720708636C61 + 5768697465155465787453657474696E67732E576F7264577261700800000000 + 5450463007544C61796F757400095374796C654E616D65060D747261636B6261 + 727374796C6505416C69676E070643656E7465720A53697A652E576964746805 + 00000000000000C805400B53697A652E4865696768740500000000000000C805 + 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 + 0B46697865644865696768740211000A5452656374616E676C6500095374796C + 654E616D65060668747261636B05416C69676E070A5665727443656E7465720A + 46696C6C2E436F6C6F7207097846463135313531350748697454657374080A50 + 6F736974696F6E2E590500000000000000BC04400A53697A652E576964746805 + 00000000000000C805400B53697A652E4865696768740500000000000000A001 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E65000A5452656374616E676C6500095374796C654E616D65 + 060A6261636B67726F756E6405416C69676E0708436F6E74656E74730946696C + 6C2E4B696E6407044E6F6E65064C6F636B6564090748697454657374080C4D61 + 7267696E732E4C6566740500000000000000C001400B4D617267696E732E546F + 70050000000000000080FF3F0D4D617267696E732E5269676874050000000000 + 0000C001400E4D617267696E732E426F74746F6D050000000000000080FF3F0A + 53697A652E57696474680500000000000000B005400B53697A652E4865696768 + 740500000000000000C000401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E6500000A5452656374616E676C + 6500095374796C654E616D650609686967686C6967687405416C69676E07044C + 6566740A46696C6C2E436F6C6F72070978464632413832453207486974546573 + 74080C50616464696E672E4C6566740500000000000000A002400A53697A652E + 57696474680500000000000000F003400B53697A652E48656967687405000000 + 00000000A001401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E6500000B54476C6F77456666656374000853 + 6F66746E657373050000000000CDCCCCFC3F09476C6F77436F6C6F7207097846 + 46324138324532074F706163697479050000000000000080FF3F07456E61626C + 6564080000000A5452656374616E676C6500095374796C654E616D6506067674 + 7261636B05416C69676E070A486F727A43656E7465720A46696C6C2E436F6C6F + 7207097846463135313531350748697454657374080A506F736974696F6E2E58 + 0500000000000000BC04400A53697A652E57696474680500000000000000A001 + 400B53697A652E4865696768740500000000000000C805401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 000A5452656374616E676C6500095374796C654E616D65060A6261636B67726F + 756E6405416C69676E0708436F6E74656E74730946696C6C2E4B696E6407044E + 6F6E65064C6F636B6564090748697454657374080C4D617267696E732E4C6566 + 740500000000000000C001400B4D617267696E732E546F700500000000000000 + 80FF3F0D4D617267696E732E52696768740500000000000000C001400E4D6172 + 67696E732E426F74746F6D050000000000000080FF3F0A53697A652E57696474 + 6805000000000000000000000B53697A652E4865696768740500000000000000 + C405401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E6500000A5452656374616E676C6500095374796C654E + 616D650609686967686C6967687405416C69676E0703546F700A46696C6C2E43 + 6F6C6F7207097846463241383245320748697454657374080A53697A652E5769 + 6474680500000000000000A001400B53697A652E486569676874050000000000 + 0000F003401453697A652E506C6174666F726D44656661756C74080B5374726F + 6B652E4B696E6407044E6F6E6500000B54476C6F774566666563740008536F66 + 746E657373050000000000CDCCCCFC3F09476C6F77436F6C6F72070978464632 + 4138324532074F706163697479050000000000000080FF3F07456E61626C6564 + 0800000006545468756D6200095374796C654E616D650606687468756D62064C + 6F636B6564090A506F736974696F6E2E580500000000003033AB03400A506F73 + 6974696F6E2E59050000000000FFFFA304400A53697A652E5769647468050000 + 0000000000F002400B53697A652E4865696768740500000000000000F0024014 + 53697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B75 + 70060D7468756D626261727374796C65000006545468756D6200095374796C65 + 4E616D650606767468756D62064C6F636B6564090A506F736974696F6E2E5805 + 0000000000CBCCA804400A506F736974696F6E2E590500000000009899B10340 + 0A53697A652E57696474680500000000000000F002400B53697A652E48656967 + 68740500000000000000F002401453697A652E506C6174666F726D4465666175 + 6C74080B5374796C654C6F6F6B7570060D7468756D626261727374796C650000 + 005450463007544C61796F757400095374796C654E616D65060D636865636B62 + 6F787374796C6505416C69676E070643656E7465720A53697A652E5769647468 + 050000000000ACAA8006400B53697A652E486569676874050000000000585599 + 04401453697A652E506C6174666F726D44656661756C74080756697369626C65 + 080007544C61796F75740005416C69676E07044C6566740A53697A652E576964 + 746805000000000000009003400B53697A652E48656967687405000000000058 + 559904401453697A652E506C6174666F726D44656661756C7408000A54526563 + 74616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C + 69676E070643656E7465720A46696C6C2E436F6C6F7207097846463230323032 + 300748697454657374080A53697A652E57696474680500000000000000F00240 + 0B53697A652E4865696768740500000000000000F002401453697A652E506C61 + 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 + 3531353135000A5452656374616E676C6500095374796C654E616D65060A5265 + 6374616E676C653105416C69676E0706436C69656E740A46696C6C2E436F6C6F + 720709784646324138324532074869745465737408074F706163697479050000 + 00000000000000000C4D617267696E732E4C6566740500000000000000800040 + 0B4D617267696E732E546F7005000000000000008000400D4D617267696E732E + 526967687405000000000000008000400E4D617267696E732E426F74746F6D05 + 000000000000008000400A53697A652E57696474680500000000000000B00240 + 0B53697A652E4865696768740500000000000000B002401453697A652E506C61 + 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500 + 0F54466C6F6174416E696D6174696F6E00095374796C654E616D65061B636865 + 6368626F7856697362696C697479416E696D6174696F6E31084475726174696F + 6E05000000000000000000000C50726F70657274794E616D6506074F70616369 + 74790A537461727456616C756505000000000000000000000953746F7056616C + 75650500000000000000C805400754726967676572060E4973436865636B6564 + 3D747275650E54726967676572496E7665727365060F4973436865636B65643D + 66616C73650000000F54436F6C6F72416E696D6174696F6E00095374796C654E + 616D650618636865636B626F785374726F6B65416E696D6174696F6E31084475 + 726174696F6E05000000000000000000000C50726F70657274794E616D65060C + 5374726F6B652E436F6C6F720A537461727456616C7565070978464631353135 + 31350953746F7056616C75650709784646324138324532075472696767657206 + 0E4973436865636B65643D747275650E54726967676572496E7665727365060F + 4973436865636B65643D66616C736500000F54436F6C6F72416E696D6174696F + 6E00095374796C654E616D650617636865636B626F78436F6C6F72416E696D61 + 74696F6E31084475726174696F6E05000000000000000000000C50726F706572 + 74794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978 + 46463230323032300953746F7056616C75650709784646343034303430075472 + 6967676572061049734D6F7573654F7665723D747275650E5472696767657249 + 6E7665727365061149734D6F7573654F7665723D66616C736500000000055454 + 65787400095374796C654E616D6506047465787405416C69676E0706436C6965 + 6E740A53697A652E57696474680500000000005855DD05400B53697A652E4865 + 6967687405000000000058559904401453697A652E506C6174666F726D446566 + 61756C7408165465787453657474696E67732E466F6E74436F6C6F720708636C + 615768697465000000545046300A5452656374616E676C6500095374796C654E + 616D6506147363726F6C6C62617268747261636B7374796C6505416C69676E07 + 0643656E7465720A46696C6C2E436F6C6F720709784646313531353135074869 + 7454657374080A53697A652E57696474680500000000000000C804400B53697A + 652E4865696768740500000000000000C804401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650756697369 + 626C65080006545468756D6200095374796C654E616D6506057468756D62064C + 6F636B6564090A53697A652E576964746805000000000000008003400B53697A + 652E4865696768740500000000000000C804401453697A652E506C6174666F72 + 6D44656661756C74080B5374796C654C6F6F6B7570060A7468756D627374796C + 65000000545046300A5452656374616E676C6500095374796C654E616D650614 + 7363726F6C6C62617276747261636B7374796C6505416C69676E070643656E74 + 65720A46696C6C2E436F6C6F7207097846463135313531350748697454657374 + 080A53697A652E57696474680500000000000000C804400B53697A652E486569 + 6768740500000000000000C804401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E650756697369626C650800 + 06545468756D6200095374796C654E616D6506057468756D62064C6F636B6564 + 090A53697A652E57696474680500000000000000C804400B53697A652E486569 + 67687405000000000000008003401453697A652E506C6174666F726D44656661 + 756C74080B5374796C654C6F6F6B7570060A7468756D627374796C6500000054 + 50463007544C61796F757400095374796C654E616D6506157363726F6C6C6261 + 72626F74746F6D627574746F6E05416C69676E070643656E7465720756697369 + 626C6508000A5452656374616E676C6500095374796C654E616D65060A626163 + 6B67726F756E6405416C69676E0706436C69656E740C436C69704368696C6472 + 656E090A436C6970506172656E74090A46696C6C2E436F6C6F72070978464632 + 30323032300748697454657374080A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000000000C804401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 15627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E05 + 000000000000000000000C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463230323032300953746F705661 + 6C756507097846463430343034300754726967676572062049734D6F7573654F + 7665723D747275653B4973507265737365643D66616C73650E54726967676572 + 496E7665727365062149734D6F7573654F7665723D66616C73653B4973507265 + 737365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E320844 + 75726174696F6E05000000000000000000000C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C756507097846463430343034 + 300953746F7056616C756507097846463137353739430754726967676572061F + 4973507265737365643D747275653B49734D6F7573654F7665723D747275650E + 54726967676572496E766572736506204973507265737365643D66616C73653B + 49734D6F7573654F7665723D7472756500000007544C61796F75740009537479 + 6C654E616D6506074C61796F75743105416C69676E070643656E7465720A5369 + 7A652E57696474680500000000000000A002400B53697A652E48656967687405 + 00000000000000C001401453697A652E506C6174666F726D44656661756C7408 + 0005545061746800095374796C654E616D650605506174683105416C69676E07 + 06436C69656E7409446174612E506174680A3400000004000000000000000000 + C8420000C84201000000000096430000C8420100000000004843000096430300 + 00000000C8420000C8420A46696C6C2E436F6C6F720708636C61576869746507 + 48697454657374080A53697A652E57696474680500000000000000A002400B53 + 697A652E4865696768740500000000000000C001401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000000 + 005450463007544C61796F757400095374796C654E616D6506137363726F6C6C + 6261726C656674627574746F6E05416C69676E070643656E7465720756697369 + 626C6508000A5452656374616E676C6500095374796C654E616D65060A626163 + 6B67726F756E6405416C69676E0706436C69656E740C436C69704368696C6472 + 656E090A436C6970506172656E74090A46696C6C2E436F6C6F72070978464632 + 30323032300748697454657374080A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000000000C804401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 15627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E05 + 000000000000000000000C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463230323032300953746F705661 + 6C756507097846463430343034300754726967676572062049734D6F7573654F + 7665723D747275653B4973507265737365643D66616C73650E54726967676572 + 496E7665727365062149734D6F7573654F7665723D66616C73653B4973507265 + 737365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E320844 + 75726174696F6E05000000000000000000000C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C756507097846463430343034 + 300953746F7056616C756507097846463137353739430754726967676572061F + 4973507265737365643D747275653B49734D6F7573654F7665723D747275650E + 54726967676572496E766572736506204973507265737365643D66616C73653B + 49734D6F7573654F7665723D7472756500000007544C61796F75740009537479 + 6C654E616D6506074C61796F75743105416C69676E070643656E7465720A5369 + 7A652E57696474680500000000000000A002400B53697A652E48656967687405 + 00000000000000C001401453697A652E506C6174666F726D44656661756C7408 + 0005545061746800095374796C654E616D650605506174683105416C69676E07 + 06436C69656E7409446174612E506174680A3400000004000000000000000000 + C8420000C84201000000000096430000C8420100000000004843000096430300 + 00000000C8420000C8420A46696C6C2E436F6C6F720708636C61576869746507 + 48697454657374080D526F746174696F6E416E676C650500000000000000B405 + 400A53697A652E57696474680500000000000000A002400B53697A652E486569 + 6768740500000000000000C001401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E6500000000545046300754 + 4C61796F757400095374796C654E616D6506147363726F6C6C62617272696768 + 74627574746F6E05416C69676E070643656E7465720756697369626C6508000A + 5452656374616E676C6500095374796C654E616D65060A6261636B67726F756E + 6405416C69676E0706436C69656E740C436C69704368696C6472656E090A436C + 6970506172656E74090A46696C6C2E436F6C6F72070978464632303230323007 + 48697454657374080A53697A652E57696474680500000000000000C804400B53 + 697A652E4865696768740500000000000000C804401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F + 6E436F6C6F72416E696D6174696F6E31084475726174696F6E05000000000000 + 000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 + 61727456616C756507097846463230323032300953746F7056616C7565070978 + 46463430343034300754726967676572062049734D6F7573654F7665723D7472 + 75653B4973507265737365643D66616C73650E54726967676572496E76657273 + 65062149734D6F7573654F7665723D66616C73653B4973507265737365643D66 + 616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650615627574746F6E436F6C6F72416E696D6174696F6E32084475726174696F + 6E05000000000000000000000C50726F70657274794E616D65060A46696C6C2E + 436F6C6F720A537461727456616C756507097846463430343034300953746F70 + 56616C756507097846463137353739430754726967676572061F497350726573 + 7365643D747275653B49734D6F7573654F7665723D747275650E547269676765 + 72496E766572736506204973507265737365643D66616C73653B49734D6F7573 + 654F7665723D7472756500000007544C61796F757400095374796C654E616D65 + 06074C61796F75743105416C69676E070643656E7465720A53697A652E576964 + 74680500000000000000A002400B53697A652E48656967687405000000000000 + 00C001401453697A652E506C6174666F726D44656661756C7408000554506174 + 6800095374796C654E616D650605506174683105416C69676E0706436C69656E + 7409446174612E506174680A3400000004000000000000000000C8420000C842 + 01000000000096430000C842010000000000484300009643030000000000C842 + 0000C8420A46696C6C2E436F6C6F720708636C61576869746507486974546573 + 74080D526F746174696F6E416E676C650500000000000000B405C00A53697A65 + 2E57696474680500000000000000A002400B53697A652E486569676874050000 + 0000000000C001401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E65000000005450463007544C61796F7574 + 00095374796C654E616D6506127363726F6C6C626172746F70627574746F6E05 + 416C69676E070643656E7465720756697369626C6508000A5452656374616E67 + 6C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E07 + 06436C69656E740C436C69704368696C6472656E090A436C6970506172656E74 + 090A46696C6C2E436F6C6F720709784646323032303230074869745465737408 + 0A53697A652E57696474680500000000000000C804400B53697A652E48656967 + 68740500000000000000C804401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E + 696D6174696F6E31084475726174696F6E05000000000000000000000C50726F + 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 + 07097846463230323032300953746F7056616C75650709784646343034303430 + 0754726967676572062049734D6F7573654F7665723D747275653B4973507265 + 737365643D66616C73650E54726967676572496E7665727365062149734D6F75 + 73654F7665723D66616C73653B4973507265737365643D66616C736500000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F + 6E436F6C6F72416E696D6174696F6E32084475726174696F6E05000000000000 + 000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374 + 61727456616C756507097846463430343034300953746F7056616C7565070978 + 46463137353739430754726967676572061F4973507265737365643D74727565 + 3B49734D6F7573654F7665723D747275650E54726967676572496E7665727365 + 06204973507265737365643D66616C73653B49734D6F7573654F7665723D7472 + 756500000007544C61796F757400095374796C654E616D6506074C61796F7574 + 3105416C69676E070643656E7465720A53697A652E5769647468050000000000 + 0000A002400B53697A652E4865696768740500000000000000C001401453697A + 652E506C6174666F726D44656661756C74080005545061746800095374796C65 + 4E616D650605506174683105416C69676E0706436C69656E7409446174612E50 + 6174680A3400000004000000000000000000C8420000C8420100000000009643 + 0000C842010000000000484300009643030000000000C8420000C8420A46696C + 6C2E436F6C6F720708636C6157686974650748697454657374080D526F746174 + 696F6E416E676C650500000000000000B406400A53697A652E57696474680500 + 000000000000A002400B53697A652E4865696768740500000000000000C00140 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E65000000005450463007544C61796F757400095374796C654E + 616D65060E7363726F6C6C6261727374796C6505416C69676E070643656E7465 + 720756697369626C6508000754427574746F6E00095374796C654E616D65060A + 6C656674627574746F6E05416C69676E07044C656674064C6F636B6564090A50 + 6F736974696F6E2E5905000000000000008003400A53697A652E576964746805 + 000000000000008003400B53697A652E48656967687405000000000000009003 + 401453697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F + 6B757006137363726F6C6C6261726C656674627574746F6E0000075442757474 + 6F6E00095374796C654E616D65060B7269676874627574746F6E05416C69676E + 07055269676874064C6F636B6564090A506F736974696F6E2E58050000000000 + 00008804400A506F736974696F6E2E5905000000000000008003400A53697A65 + 2E576964746805000000000000008003400B53697A652E486569676874050000 + 00000000009003401453697A652E506C6174666F726D44656661756C74080B53 + 74796C654C6F6F6B757006147363726F6C6C6261727269676874627574746F6E + 00000754427574746F6E00095374796C654E616D65060C626F74746F6D627574 + 746F6E05416C69676E0706426F74746F6D064C6F636B6564090A506F73697469 + 6F6E2E5905000000000000008804400A53697A652E5769647468050000000000 + 0000C804400B53697A652E48656967687405000000000000008003401453697A + 652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B75700615 + 7363726F6C6C626172626F74746F6D627574746F6E00000654547261636B0009 + 5374796C654E616D65060668747261636B05416C69676E0706436C69656E7406 + 4C6F636B6564090B4F7269656E746174696F6E070A486F72697A6F6E74616C0A + 53697A652E576964746805000000000000009003400B53697A652E4865696768 + 7405000000000000009003401453697A652E506C6174666F726D44656661756C + 74080B5374796C654C6F6F6B757006147363726F6C6C62617268747261636B73 + 74796C6500000654547261636B00095374796C654E616D65060676747261636B + 05416C69676E0706436C69656E74064C6F636B6564090B4F7269656E74617469 + 6F6E070A486F72697A6F6E74616C0A53697A652E576964746805000000000000 + 009003400B53697A652E48656967687405000000000000009003401453697A65 + 2E506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570061473 + 63726F6C6C62617276747261636B7374796C6500000754427574746F6E000953 + 74796C654E616D650609746F70627574746F6E05416C69676E0703546F700A53 + 697A652E57696474680500000000000000C804400B53697A652E486569676874 + 05000000000000008003401453697A652E506C6174666F726D44656661756C74 + 080B5374796C654C6F6F6B757006127363726F6C6C626172746F70627574746F + 6E000000545046300A5452656374616E676C6500095374796C654E616D65060A + 7468756D627374796C6505416C69676E070643656E7465720A46696C6C2E436F + 6C6F7207097846463444344434440748697454657374080A53697A652E576964 + 74680500000000000000C804400B53697A652E48656967687405000000000000 + 00C804401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E650756697369626C6508000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D6506147468756D62436F6C6F72416E69 + 6D6174696F6E31084475726174696F6E05000000000000000000000C50726F70 + 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 + 097846463444344434440953746F7056616C7565070978464631373537394307 + 54726967676572060E4973507265737365643D747275650E5472696767657249 + 6E7665727365060F4973507265737365643D66616C736500000F54436F6C6F72 + 416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D61 + 74696F6E315374796C65084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C + 756507097846463444344434440953746F7056616C75650707636C6147726179 + 0754726967676572061049734D6F7573654F7665723D747275650E5472696767 + 6572496E7665727365061149734D6F7573654F7665723D66616C736500000054 + 5046300D545377697463684F626A65637400095374796C654E616D65060B7377 + 697463687374796C6505416C69676E070643656E746572044B696E64070C4661 + 64696E67547261636B730A53697A652E57696474680500000000000000C80540 + 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 + 74666F726D44656661756C740812547261636B696E675468756D625363616C65 + 050000000000000080FF3F0756697369626C65080A46696C6C2E436F6C6F7207 + 097846463230323032300C46696C6C4F6E2E436F6C6F72070978464631373537 + 39430B46696C6C4F6E2E4B696E640705536F6C69640B5374726F6B652E4B696E + 6407044E6F6E650B5468756D622E436F6C6F7207097846463430343034300D54 + 68756D624F6E2E436F6C6F7207097846463241383245320C5468756D624F6E2E + 4B696E640705536F6C6964105468756D625374726F6B652E4B696E6407044E6F + 6E650F5468756D625374726F6B652E4361700705526F756E64105468756D6253 + 74726F6B652E446173680706437573746F6D105468756D625374726F6B652E4A + 6F696E0705526F756E64165468756D625374726F6B652E437573746F6D446173 + 680A08000000000000000000000000005450463007544C61796F757400095374 + 796C654E616D65060D636F6D626F626F787374796C6505416C69676E07064365 + 6E7465720A53697A652E57696474680500000000000000C805400B53697A652E + 4865696768740500000000000000C803401453697A652E506C6174666F726D44 + 656661756C74080756697369626C6508000C5442727573684F626A6563740009 + 5374796C654E616D65060A666F726567726F756E6400000B54466F6E744F626A + 65637400095374796C654E616D650604666F6E7409466F6E742E53697A650500 + 000000000000D00240000007544C61796F757400095374796C654E616D65060A + 6261636B67726F756E6405416C69676E0708436F6E74656E74730A53697A652E + 57696474680500000000000000C805400B53697A652E48656967687405000000 + 00000000C803401453697A652E506C6174666F726D44656661756C7408000A54 + 52656374616E676C6500095374796C654E616D65060A52656374616E676C6531 + 05416C69676E0706436C69656E740A46696C6C2E436F6C6F7207097846463230 + 323032300748697454657374080A53697A652E57696474680500000000000000 + C805400B53697A652E4865696768740500000000000000C803401453697A652E + 506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F + 6E650007544C61796F757400095374796C654E616D650611427574746F6E5374 + 796C654F626A65637405416C69676E070846697452696768740B4D617267696E + 732E546F70050000000000000080FF3F0D4D617267696E732E52696768740500 + 00000000000080FF3F0E4D617267696E732E426F74746F6D0500000000000000 + 80FF3F0A506F736974696F6E2E580500000000005ED99705400A506F73697469 + 6F6E2E59050000000000000080FF3F0A53697A652E5769647468050000000000 + 889AB803400B53697A652E4865696768740500000000000000B803401453697A + 652E506C6174666F726D44656661756C74080007544C61796F75740009537479 + 6C654E616D6506074C61796F75743105416C69676E070643656E7465720C4D61 + 7267696E732E4C656674050000000000000080FF3F0A53697A652E5769647468 + 0500000000000000A002400B53697A652E4865696768740500000000000000C0 + 01401453697A652E506C6174666F726D44656661756C74080005545061746800 + 095374796C654E616D650605506174683105416C69676E0706436C69656E7409 + 446174612E506174680A3400000004000000000000000000C8420000C8420100 + 0000000096430000C842010000000000484300009643030000000000C8420000 + C8420A46696C6C2E436F6C6F720708636C615768697465074869745465737408 + 0A53697A652E57696474680500000000000000A002400B53697A652E48656967 + 68740500000000000000C001401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E65000000000F54436F6C6F72 + 416E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F + 72416E696D6174696F6E31084475726174696F6E05000000000000000000000C + 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 + 6C756507097846463230323032300953746F7056616C75650709784646343034 + 3034300754726967676572063049734D6F7573654F7665723D747275653B4973 + 507265737365643D66616C73653B4973466F63757365643D66616C73650E5472 + 6967676572496E7665727365063149734D6F7573654F7665723D66616C73653B + 4973507265737365643D66616C73653B4973466F63757365643D66616C736500 + 000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506156275 + 74746F6E436F6C6F72416E696D6174696F6E32084475726174696F6E05000000 + 000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F72 + 0A537461727456616C756507097846463430343034300953746F7056616C7565 + 07097846463137353739430754726967676572062F4973507265737365643D74 + 7275653B49734D6F7573654F7665723D747275653B4973466F63757365643D66 + 616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650615627574746F6E436F6C6F72416E696D6174696F6E33084475726174696F + 6E05000000000000000000000C50726F70657274794E616D65060A46696C6C2E + 436F6C6F720A537461727456616C756507097846463241383245320953746F70 + 56616C756507097846463137353739430754726967676572062E497350726573 + 7365643D747275653B49734D6F7573654F7665723D747275653B4973466F6375 + 7365643D747275650E54726967676572496E7665727365062F49735072657373 + 65643D66616C73653B49734D6F7573654F7665723D747275653B4973466F6375 + 7365643D747275650000000007544C61796F757400095374796C654E616D6506 + 07636F6E74656E7405416C69676E0706436C69656E74064C6F636B6564090C4D + 617267696E732E4C65667405000000000000008000400B4D617267696E732E54 + 6F7005000000000000008000400D4D617267696E732E52696768740500000000 + 000000D803400E4D617267696E732E426F74746F6D0500000000000000800040 + 0A53697A652E576964746805000000000000008E05400B53697A652E48656967 + 68740500000000000000A803401453697A652E506C6174666F726D4465666175 + 6C74080000005450463007544C61796F757400095374796C654E616D65060E63 + 6F6D626F656469747374796C6505416C69676E070643656E7465720A53697A65 + 2E57696474680500000000000000C805400B53697A652E486569676874050000 + 0000000000C803401453697A652E506C6174666F726D44656661756C74080756 + 697369626C6508000C5442727573684F626A65637400095374796C654E616D65 + 060A666F726567726F756E6400000B54466F6E744F626A65637400095374796C + 654E616D650604666F6E7409466F6E742E53697A650500000000000000D00240 + 000007544C61796F757400095374796C654E616D65060A6261636B67726F756E + 6405416C69676E0708436F6E74656E74730A53697A652E576964746805000000 + 00000000C805400B53697A652E4865696768740500000000000000C803401453 + 697A652E506C6174666F726D44656661756C7408000A5452656374616E676C65 + 00095374796C654E616D65060A52656374616E676C653105416C69676E070643 + 6C69656E740A46696C6C2E436F6C6F7207097846463230323032300748697454 + 657374080A53697A652E57696474680500000000000000C805400B53697A652E + 4865696768740500000000000000C803401453697A652E506C6174666F726D44 + 656661756C74080C5374726F6B652E436F6C6F72070978464632303230323000 + 0F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C + 6F72416E696D6174696F6E315374796C65084475726174696F6E050000000000 + 000000000007496E7665727365090C50726F70657274794E616D65060C537472 + 6F6B652E436F6C6F720A537461727456616C7565070978464632303230323009 + 53746F7056616C75650709784646343034303430075472696767657206204973 + 4D6F7573654F7665723D747275653B4973466F63757365643D66616C73650E54 + 726967676572496E7665727365062149734D6F7573654F7665723D66616C7365 + 3B4973466F63757365643D66616C736500000F54436F6C6F72416E696D617469 + 6F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E325374 + 796C65084475726174696F6E050000000000000000000007496E766572736509 + 0C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A53746172 + 7456616C756507097846463430343034300953746F7056616C75650709784646 + 3241383245320754726967676572061F49734D6F7573654F7665723D74727565 + 3B4973466F63757365643D747275650E54726967676572496E76657273650620 + 49734D6F7573654F7665723D747275653B4973466F63757365643D66616C7365 + 000007544C61796F757400095374796C654E616D6506056172726F7705416C69 + 676E070846697452696768740B4D617267696E732E546F700500000000000000 + 80FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D6172 + 67696E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E + 580500000000005ED99705400A506F736974696F6E2E59050000000000000080 + FF3F0A53697A652E5769647468050000000000889AB803400B53697A652E4865 + 696768740500000000000000B803401453697A652E506C6174666F726D446566 + 61756C7408000A5452656374616E676C6500095374796C654E616D65060A5265 + 6374616E676C653105416C69676E0708436F6E74656E74730A46696C6C2E436F + 6C6F7207097846463330333033300748697454657374080A53697A652E576964 + 7468050000000000889AB803400B53697A652E48656967687405000000000000 + 00B803401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E000953 + 74796C654E616D650614436F6C6F72416E696D6174696F6E315374796C650844 + 75726174696F6E050000000000000000000007496E7665727365090C50726F70 + 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 + 097846463330333033300953746F7056616C7565070978464634303430343007 + 54726967676572062049734D6F7573654F7665723D747275653B4973466F6375 + 7365643D66616C73650E54726967676572496E7665727365062149734D6F7573 + 654F7665723D66616C73653B4973466F63757365643D66616C736500000F5443 + 6F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F7241 + 6E696D6174696F6E325374796C65084475726174696F6E050000000000000000 + 00000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 + 7456616C756507097846463430343034300953746F7056616C75650709784646 + 3137353739430754726967676572061F4973466F63757365643D747275653B49 + 734D6F7573654F7665723D7472756500000007544C61796F757400095374796C + 654E616D6506074C61796F75743105416C69676E070643656E7465720C4D6172 + 67696E732E4C656674050000000000000080FF3F0A53697A652E576964746805 + 00000000000000A002400B53697A652E4865696768740500000000000000C001 + 401453697A652E506C6174666F726D44656661756C7408000554506174680009 + 5374796C654E616D650605506174683105416C69676E0706436C69656E740944 + 6174612E506174680A3400000004000000000000000000C8420000C842010000 + 00000096430000C842010000000000484300009643030000000000C8420000C8 + 420A46696C6C2E436F6C6F720708636C6157686974650748697454657374080A + 53697A652E57696474680500000000000000A002400B53697A652E4865696768 + 740500000000000000C001401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E650000000000000C5442727573 + 684F626A65637400095374796C654E616D65060973656C656374696F6E0B4272 + 7573682E436F6C6F720709783936324138324532000007544C61796F75740009 + 5374796C654E616D650607636F6E74656E7405416C69676E0706436C69656E74 + 0C4D617267696E732E4C65667405000000000000008000400B4D617267696E73 + 2E546F7005000000000000008000400D4D617267696E732E5269676874050000 + 0000000000F003400E4D617267696E732E426F74746F6D050000000000000080 + 00400A53697A652E576964746805000000000000008805400B53697A652E4865 + 696768740500000000000000A803401453697A652E506C6174666F726D446566 + 61756C74080000005450463007544C61796F757400095374796C654E616D6506 + 0F746162636F6E74726F6C7374796C6505416C69676E070643656E7465720A53 + 697A652E576964746805000000000000008E06400B53697A652E486569676874 + 050000000000FFFFC905401453697A652E506C6174666F726D44656661756C74 + 080756697369626C6508000A5452656374616E676C6500095374796C654E616D + 65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A4669 + 6C6C2E436F6C6F720709784646333033303330064C6F636B6564090748697454 + 657374080C50616464696E672E4C65667405000000000000008000400B506164 + 64696E672E546F7005000000000000008000400D50616464696E672E52696768 + 7405000000000000008000400E50616464696E672E426F74746F6D0500000000 + 0000008000400A53697A652E576964746805000000000000008E06400B53697A + 652E486569676874050000000000FFFFC905401453697A652E506C6174666F72 + 6D44656661756C74080C5374726F6B652E436F6C6F7207097846463135313531 + 35000000545046300A5452656374616E676C6500095374796C654E616D65060B + 746162646F747374796C6505416C69676E070643656E7465720A46696C6C2E43 + 6F6C6F7207097846463135313531350748697454657374080A53697A652E5769 + 64746805000000000000008005400B53697A652E486569676874050000000000 + 00008001401453697A652E506C6174666F726D44656661756C74080B5374726F + 6B652E4B696E6407044E6F6E650756697369626C6508000F54436F6C6F72416E + 696D6174696F6E00084475726174696F6E05000000000018B7D1F23F0C50726F + 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 + 07097846463135313531350953746F7056616C75650709784646324138324532 + 0754726967676572060F497353656C65637465643D747275650E547269676765 + 72496E76657273650610497353656C65637465643D66616C7365000000545046 + 3007544C61796F757400095374796C654E616D65060C7461626974656D737479 + 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 + 000000C804400B53697A652E4865696768740500000000000000C80340145369 + 7A652E506C6174666F726D44656661756C74080756697369626C6508000A5452 + 656374616E676C6500095374796C654E616D650603746F7005416C69676E0708 + 436F6E74656E74730C436C69704368696C6472656E0907436F726E6572730B07 + 546F704C65667408546F705269676874000A46696C6C2E436F6C6F7207097846 + 46323032303230064C6F636B6564090748697454657374080553696465730B03 + 546F70044C656674055269676874000A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000000000C803401453697A + 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 + 09784646313531353135000654476C79706800095374796C654E616D65060A67 + 6C7970687374796C650C4D617267696E732E4C65667405000000000000008001 + 400D4D617267696E732E526967687405000000000000008001C005416C69676E + 07044C6566740A53697A652E576964746805000000000000008003400B53697A + 652E48656967687405000000000000008003401453697A652E506C6174666F72 + 6D44656661756C7408000005545465787400095374796C654E616D6506047465 + 787405416C69676E0706436C69656E74064C6F636B6564090748697454657374 + 080C4D617267696E732E4C6566740500000000000000C000400B4D617267696E + 732E546F700500000000000000C000400D4D617267696E732E52696768740500 + 000000000000C000400E4D617267696E732E426F74746F6D0500000000000000 + C000400A53697A652E57696474680500000000000000B004400B53697A652E48 + 656967687405000000000000009803401453697A652E506C6174666F726D4465 + 6661756C7408165465787453657474696E67732E466F6E74436F6C6F72070863 + 6C615768697465155465787453657474696E67732E576F726457726170080000 + 0F54436F6C6F72416E696D6174696F6E00095374796C654E616D650612746162 + 436F6C6F72416E696D6174696F6E310D416E696D6174696F6E54797065070549 + 6E4F7574084475726174696F6E05000000000000000000000C50726F70657274 + 794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507097846 + 463230323032300953746F7056616C7565070978464634303430343007547269 + 67676572062149734D6F7573654F7665723D747275653B497353656C65637465 + 643D66616C73650E54726967676572496E7665727365062249734D6F7573654F + 7665723D66616C73653B497353656C65637465643D66616C736500000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650612746162436F6C6F + 72416E696D6174696F6E32084475726174696F6E05000000000000000000000C + 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 + 6C756507097846463230323032300953746F7056616C75650709784646324138 + 3245320754726967676572060F497353656C65637465643D747275650E547269 + 67676572496E76657273650610497353656C65637465643D66616C7365000000 + 00545046300A5452656374616E676C6500095374796C654E616D65060D746875 + 6D626261727374796C6505416C69676E070643656E7465720A46696C6C2E436F + 6C6F7207097846463241383245320748697454657374080A53697A652E576964 + 74680500000000000000A003400B53697A652E48656967687405000000000000 + 00A003401453697A652E506C6174666F726D44656661756C74080C5374726F6B + 652E436F6C6F7207097846463135313531350756697369626C6508000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D6506147468756D62436F + 6C6F72416E696D6174696F6E31084475726174696F6E05000000000000000000 + 000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A5374617274 + 56616C756507097846463241383245320953746F7056616C7565070978464631 + 37353739430754726967676572061F4973507265737365643D747275653B4973 + 4D6F7573654F7665723D747275650E54726967676572496E7665727365061049 + 73507265737365643D66616C73653B00000F54436F6C6F72416E696D6174696F + 6E00095374796C654E616D6506147468756D62436F6C6F72416E696D6174696F + 6E32084475726174696F6E05000000000000000000000C50726F70657274794E + 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464632 + 41383245320953746F7056616C75650709784646343039424646075472696767 + 6572062049734D6F7573654F7665723D747275653B4973507265737365643D66 + 616C73650E54726967676572496E7665727365062149734D6F7573654F766572 + 3D66616C73653B4973507265737365643D66616C736500000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D6506157468756D625374726F6B65 + 416E696D6174696F6E31084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D65060C5374726F6B652E436F6C6F720A537461727456 + 616C756507097846463135313531350953746F7056616C756507097846463137 + 353739430754726967676572061F4973507265737365643D747275653B49734D + 6F7573654F7665723D747275650E54726967676572496E7665727365060F4973 + 507265737365643D66616C73650000005450463007544C61796F757400095374 + 796C654E616D65060C6C697374626F787374796C6505416C69676E070643656E + 7465720A53697A652E5769647468050000000000FFFFE905400B53697A652E48 + 656967687405000000000000008306401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C6508000C5442727573684F626A656374000953 + 74796C654E616D650618416C7465726E6174696E67526F774261636B67726F75 + 6E640B42727573682E436F6C6F72070978464632433243324300000A54526563 + 74616E676C6500095374796C654E616D65060A6261636B67726F756E6405416C + 69676E0708436F6E74656E74730A46696C6C2E436F6C6F720709784646323032 + 303230064C6F636B6564090748697454657374080C50616464696E672E4C6566 + 7405000000000000008000400B50616464696E672E546F700500000000000000 + 8000400D50616464696E672E526967687405000000000000008000400E506164 + 64696E672E426F74746F6D05000000000000008000400A53697A652E57696474 + 68050000000000FFFFE905400B53697A652E4865696768740500000000000000 + 8306401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 + 2E436F6C6F7207097846463135313531350007544C61796F757400095374796C + 654E616D650607636F6E74656E7405416C69676E0706436C69656E740C436C69 + 704368696C6472656E090A53697A652E5769647468050000000000FFFFC10540 + 0B53697A652E4865696768740500000000000000DE05401453697A652E506C61 + 74666F726D44656661756C7408000A5452656374616E676C6500095374796C65 + 4E616D65060973656C656374696F6E0A46696C6C2E436F6C6F72070978464632 + 41383245320748697454657374080A53697A652E576964746805000000000000 + 00C804400B53697A652E4865696768740500000000000000C804401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E6500000A5452656374616E676C6500095374796C654E616D650610666F63 + 7573656473656C656374696F6E0A46696C6C2E436F6C6F720709784646324138 + 3245320748697454657374080A53697A652E57696474680500000000000000C8 + 04400B53697A652E4865696768740500000000000000C804401453697A652E50 + 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E + 650B5374726F6B652E446173680703446F740000000A545363726F6C6C426172 + 00095374796C654E616D65060A767363726F6C6C62617205416C69676E070552 + 696768740B536D616C6C4368616E676505000000000000000000000B4F726965 + 6E746174696F6E0708566572746963616C0A506F736974696F6E2E5805000000 + 0000FFFFC505400A506F736974696F6E2E5905000000000000008000400A5369 + 7A652E576964746805000000000000008003400B53697A652E48656967687405 + 00000000000000DE05401453697A652E506C6174666F726D44656661756C7408 + 00000A545363726F6C6C42617200095374796C654E616D65060A687363726F6C + 6C62617205416C69676E0706426F74746F6D0B536D616C6C4368616E67650500 + 0000000000000000000B4F7269656E746174696F6E070A486F72697A6F6E7461 + 6C0A506F736974696F6E2E5805000000000000008000400A506F736974696F6E + 2E590500000000000000E205400A53697A652E5769647468050000000000FFFF + E105400B53697A652E48656967687405000000000000008003401453697A652E + 506C6174666F726D44656661756C740800000F54536D616C6C5363726F6C6C42 + 617200095374796C654E616D65060F76736D616C6C7363726F6C6C6261720541 + 6C69676E070552696768740B536D616C6C4368616E6765050000000000000000 + 00000B4F7269656E746174696F6E0708566572746963616C0C4D617267696E73 + 2E4C65667405000000000000008000400A506F736974696F6E2E580500000000 + 000000C605400A506F736974696F6E2E5905000000000000008000400A53697A + 652E576964746805000000000000008002400B53697A652E4865696768740500 + 0000000000008002401453697A652E506C6174666F726D44656661756C740807 + 56697369626C650800000F54536D616C6C5363726F6C6C42617200095374796C + 654E616D65060F68736D616C6C7363726F6C6C62617205416C69676E0706426F + 74746F6D0B536D616C6C4368616E676505000000000000000000000B4F726965 + 6E746174696F6E070A486F72697A6F6E74616C0B4D617267696E732E546F7005 + 000000000000008000400A506F736974696F6E2E580500000000000000800040 + 0A506F736974696F6E2E590500000000000000E205400A53697A652E57696474 + 6805000000000000009606400B53697A652E4865696768740500000000000000 + 8002401453697A652E506C6174666F726D44656661756C74080756697369626C + 65080000000B54476C6F774566666563740008536F66746E6573730500000000 + 00CDCCCCFC3F09476C6F77436F6C6F720709784646463639453244074F706163 + 6974790500000000006666E6FE3F0754726967676572060E4973466F63757365 + 643D7472756507456E61626C6564080000005450463007544C61796F75740009 + 5374796C654E616D65060D6C697374626F78666F6F74657205416C69676E0706 + 43656E7465720A53697A652E576964746805000000000000009205400B53697A + 652E4865696768740500000000000000D003401453697A652E506C6174666F72 + 6D44656661756C74080756697369626C65080005545465787400095374796C65 + 4E616D6506047465787405416C69676E0706436C69656E74064C6F636B656409 + 0748697454657374080C4D617267696E732E4C6566740500000000000000A001 + 400B4D617267696E732E546F7005000000000000008000400D4D617267696E73 + 2E52696768740500000000000000A001400E4D617267696E732E426F74746F6D + 05000000000000008000400A53697A652E57696474680500000000000000FC04 + 400B53697A652E4865696768740500000000000000B003401453697A652E506C + 6174666F726D44656661756C7408165465787453657474696E67732E466F6E74 + 436F6C6F720708636C6157686974650000005450463007544C61796F75740009 + 5374796C654E616D6506106C697374626F786974656D7374796C6505416C6967 + 6E070643656E7465720A53697A652E57696474680500000000000000D605400B + 53697A652E4865696768740500000000000000C003401453697A652E506C6174 + 666F726D44656661756C74080756697369626C6508000654476C797068000953 + 74796C654E616D65060A676C7970687374796C650C4D617267696E732E4C6566 + 7405000000000000008000400B4D617267696E732E546F700500000000000000 + 80FF3F0D4D617267696E732E526967687405000000000000008000400E4D6172 + 67696E732E426F74746F6D050000000000000080FF3F05416C69676E07044C65 + 66740A53697A652E576964746805000000000000008003400B53697A652E4865 + 6967687405000000000000008003401453697A652E506C6174666F726D446566 + 61756C7408000005545465787400095374796C654E616D650604746578740541 + 6C69676E0706436C69656E740748697454657374080C4D617267696E732E4C65 + 66740500000000000000C000400B4D617267696E732E546F7005000000000000 + 0080FF3F0D4D617267696E732E52696768740500000000000000C000400E4D61 + 7267696E732E426F74746F6D050000000000000080FF3F0A53697A652E576964 + 74680500000000000000CA05400B53697A652E48656967687405000000000000 + 00B003401453697A652E506C6174666F726D44656661756C7408165465787453 + 657474696E67732E466F6E74436F6C6F720708636C6157686974651554657874 + 53657474696E67732E576F72645772617008165465787453657474696E67732E + 486F727A416C69676E07074C656164696E6700000954436865636B426F780009 + 5374796C654E616D650605636865636B05416C69676E07084D6F73744C656674 + 0843616E466F637573081244697361626C65466F637573456666656374090A53 + 697A652E57696474680500000000000000A003400B53697A652E486569676874 + 0500000000000000C003401453697A652E506C6174666F726D44656661756C74 + 080756697369626C65080000005450463007544C61796F757400095374796C65 + 4E616D6506126C697374626F78706C61696E68656164657205416C69676E0706 + 43656E7465720A53697A652E576964746805000000000000009205400B53697A + 652E4865696768740500000000000000D003401453697A652E506C6174666F72 + 6D44656661756C74080756697369626C6508000A5452656374616E676C650009 + 5374796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E + 74656E74730A46696C6C2E436F6C6F720709784646324432443244064C6F636B + 6564090748697454657374080A53697A652E5769647468050000000000000092 + 05400B53697A652E4865696768740500000000000000D003401453697A652E50 + 6C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207097846 + 46313531353135000005545465787400095374796C654E616D65060474657874 + 05416C69676E0706436C69656E74064C6F636B6564090748697454657374080C + 4D617267696E732E4C6566740500000000000000A001400B4D617267696E732E + 546F7005000000000000008000400D4D617267696E732E526967687405000000 + 00000000A001400E4D617267696E732E426F74746F6D05000000000000008000 + 400A53697A652E57696474680500000000000000FC04400B53697A652E486569 + 6768740500000000000000B003401453697A652E506C6174666F726D44656661 + 756C7408165465787453657474696E67732E466F6E74436F6C6F720708636C61 + 57686974650000005450463007544C61796F757400095374796C654E616D6506 + 09677269647374796C6505416C69676E070643656E7465720A53697A652E5769 + 647468050000000000FFFFE905400B53697A652E486569676874050000000000 + 00008306401453697A652E506C6174666F726D44656661756C74080756697369 + 626C6508000C5442727573684F626A65637400095374796C654E616D65061841 + 6C7465726E6174696E67526F774261636B67726F756E640B42727573682E436F + 6C6F72070978333237383738373800000C5442727573684F626A656374000953 + 74796C654E616D6506086C696E6566696C6C0B42727573682E436F6C6F720709 + 78464631353135313500000A5452656374616E676C6500095374796C654E616D + 65060A6261636B67726F756E6405416C69676E0708436F6E74656E74730A4669 + 6C6C2E436F6C6F720709784646323032303230064C6F636B6564090748697454 + 657374080C50616464696E672E4C65667405000000000000008000400B506164 + 64696E672E546F7005000000000000008000400D50616464696E672E52696768 + 7405000000000000008000400E50616464696E672E426F74746F6D0500000000 + 0000008000400A53697A652E5769647468050000000000FFFFE905400B53697A + 652E48656967687405000000000000008306401453697A652E506C6174666F72 + 6D44656661756C74080C5374726F6B652E436F6C6F7207097846463135313531 + 3500075448656164657200095374796C654E616D650606686561646572055369 + 6465730B03546F70044C65667406426F74746F6D0552696768740005416C6967 + 6E0703546F700748697454657374080A506F736974696F6E2E58050000000000 + 00008000400A506F736974696F6E2E5905000000000000008000400A53697A65 + 2E5769647468050000000000FFFFE105400B53697A652E486569676874050000 + 0000000000A803401453697A652E506C6174666F726D44656661756C74080000 + 07544C61796F757400095374796C654E616D650607636F6E74656E7405416C69 + 676E0706436C69656E740C436C69704368696C6472656E090A53697A652E5769 + 647468050000000000FFFFC105400B53697A652E486569676874050000000000 + 0000B405401453697A652E506C6174666F726D44656661756C7408000A545265 + 6374616E676C6500095374796C654E616D65060973656C656374696F6E0A4669 + 6C6C2E436F6C6F720709784646324138324532074869745465737408074F7061 + 63697479050000000000000080FD3F0A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000000000C804401453697A + 652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E640704 + 4E6F6E6500000A5452656374616E676C6500095374796C654E616D650605666F + 6375730A46696C6C2E436F6C6F72070978414632413832453207486974546573 + 74080C4D617267696E732E4C656674050000000000000080FF3F0B4D61726769 + 6E732E546F70050000000000000080FF3F0D4D617267696E732E526967687405 + 0000000000000080FF3F0E4D617267696E732E426F74746F6D05000000000000 + 0080FF3F0A53697A652E57696474680500000000000000C804400B53697A652E + 4865696768740500000000000000C804401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6507595261646975 + 730500000000000000C000400000000A545363726F6C6C42617200095374796C + 654E616D65060A767363726F6C6C62617205416C69676E070552696768740B53 + 6D616C6C4368616E676505000000000000000000000B4F7269656E746174696F + 6E0708566572746963616C0A506F736974696F6E2E58050000000000FFFFC505 + 400A506F736974696F6E2E590500000000000000B803400A53697A652E576964 + 746805000000000000008003400B53697A652E48656967687405000000000000 + 00B405401453697A652E506C6174666F726D44656661756C740800000A545363 + 726F6C6C42617200095374796C654E616D65060A687363726F6C6C6261720541 + 6C69676E0706426F74746F6D0B536D616C6C4368616E67650500000000000000 + 0000000B4F7269656E746174696F6E070A486F72697A6F6E74616C0A506F7369 + 74696F6E2E5805000000000000008000400A506F736974696F6E2E5905000000 + 00000000E205400A53697A652E5769647468050000000000FFFFE105400B5369 + 7A652E48656967687405000000000000008003401453697A652E506C6174666F + 726D44656661756C740800000F54536D616C6C5363726F6C6C42617200095374 + 796C654E616D65060F76736D616C6C7363726F6C6C62617205416C69676E0705 + 52696768740B536D616C6C4368616E676505000000000000000000000B4F7269 + 656E746174696F6E0708566572746963616C0C4D617267696E732E4C65667405 + 000000000000008000400A506F736974696F6E2E580500000000000000C60540 + 0A506F736974696F6E2E5905000000000000008000400A53697A652E57696474 + 6805000000000000008002400B53697A652E4865696768740500000000000000 + 8002401453697A652E506C6174666F726D44656661756C74080756697369626C + 650800000F54536D616C6C5363726F6C6C42617200095374796C654E616D6506 + 0F68736D616C6C7363726F6C6C62617205416C69676E0706426F74746F6D0B53 + 6D616C6C4368616E676505000000000000000000000B4F7269656E746174696F + 6E070A486F72697A6F6E74616C0B4D617267696E732E546F7005000000000000 + 008000400A506F736974696F6E2E5805000000000000008000400A506F736974 + 696F6E2E590500000000000000E205400A53697A652E57696474680500000000 + 0000009606400B53697A652E4865696768740500000000000000800240145369 + 7A652E506C6174666F726D44656661756C74080756697369626C650800000000 + 5450463007544C61796F757400095374796C654E616D65060F68656164657269 + 74656D7374796C6505416C69676E070643656E7465720A53697A652E57696474 + 6805000000000000009205400B53697A652E4865696768740500000000000000 + D003401453697A652E506C6174666F726D44656661756C74080756697369626C + 6508000A5452656374616E676C6500095374796C654E616D65060A6261636B67 + 726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72 + 0709784646344334433443064C6F636B6564090748697454657374080A53697A + 652E576964746805000000000000009205400B53697A652E4865696768740500 + 000000000000D003401453697A652E506C6174666F726D44656661756C74080C + 5374726F6B652E436F6C6F720709784646313531353135000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D650615686561646572436F6C6F72 + 416E696D6174696F6E31084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C + 756507097846463443344334430953746F7056616C7565070978464632413832 + 45320754726967676572060E4973507265737365643D747275650E5472696767 + 6572496E7665727365060F4973507265737365643D66616C736500000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D65061668656164657253 + 74726F6B65416E696D6174696F6E31084475726174696F6E0500000000000000 + 0000000C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A53 + 7461727456616C756507097846463135313531350953746F7056616C75650709 + 7846463241383245320754726967676572060E4973507265737365643D747275 + 650E54726967676572496E7665727365060F4973507265737365643D66616C73 + 6500000005545465787400095374796C654E616D6506047465787405416C6967 + 6E0706436C69656E74064C6F636B6564090748697454657374080C4D61726769 + 6E732E4C6566740500000000000000A001400B4D617267696E732E546F700500 + 0000000000008000400D4D617267696E732E52696768740500000000000000A0 + 01400E4D617267696E732E426F74746F6D05000000000000008000400A53697A + 652E57696474680500000000000000FC04400B53697A652E4865696768740500 + 000000000000B003401453697A652E506C6174666F726D44656661756C740816 + 5465787453657474696E67732E466F6E74436F6C6F720708636C615768697465 + 0000005450463007544C61796F757400095374796C654E616D65061970726F67 + 726573736261726D696E696572726F727374796C6505416C69676E070643656E + 7465720A53697A652E576964746805000000000033338505400B53697A652E48 + 65696768740500000000009999E104401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C6508000A5452656374616E676C650009537479 + 6C654E616D65060668747261636B05416C69676E0708436F6E74656E74730A46 + 696C6C2E436F6C6F720709784646343034303430064C6F636B65640907486974 + 54657374080A53697A652E576964746805000000000033338505400B53697A65 + 2E4865696768740500000000009999E104401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000A54526563 + 74616E676C6500095374796C654E616D65060A68696E64696361746F7205416C + 69676E07044C6566740A46696C6C2E436F6C6F72070978464645323241324106 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 000000C804400B53697A652E4865696768740500000000009999E10440145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E650000000A5452656374616E676C6500095374796C654E616D650606 + 76747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F + 720709784646343034303430064C6F636B6564090748697454657374080A5369 + 7A652E576964746805000000000033338505400B53697A652E48656967687405 + 00000000009999E104401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E65000A5452656374616E676C650009 + 5374796C654E616D65060A76696E64696361746F7205416C69676E0706426F74 + 746F6D0A46696C6C2E436F6C6F720709784646453232413241064C6F636B6564 + 090748697454657374080A506F736974696F6E2E5905000000000099998D0440 + 0A53697A652E576964746805000000000033338505400B53697A652E48656967 + 68740500000000000000A803401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C + 61796F757400095374796C654E616D65061170726F677265737363656C6C7374 + 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 + 00000000F805400B53697A652E4865696768740500000000000000FC05401453 + 697A652E506C6174666F726D44656661756C74080756697369626C6508000754 + 4C61796F757400095374796C654E616D65060668747261636B05416C69676E07 + 08436F6E74656E7473064C6F636B6564090C4D617267696E732E4C6566740500 + 0000000000008000400B4D617267696E732E546F700500000000000000800040 + 0D4D617267696E732E526967687405000000000000008000400E4D617267696E + 732E426F74746F6D05000000000000008000400A53697A652E57696474680500 + 000000000000F005400B53697A652E4865696768740500000000000000F40540 + 1453697A652E506C6174666F726D44656661756C7408000A5452656374616E67 + 6C6500095374796C654E616D65060A68696E64696361746F7205416C69676E07 + 044C6566740A46696C6C2E436F6C6F720709784646324138324532064C6F636B + 6564090748697454657374080C4D617267696E732E4C65667405000000000000 + 0080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267 + 696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F74 + 746F6D050000000000000080FF3F0A506F736974696F6E2E5805000000000000 + 0080FF3F0A506F736974696F6E2E59050000000000000080FF3F0A53697A652E + 57696474680500000000000000C804400B53697A652E48656967687405000000 + 00000000F005401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E65000000005450463007544C61796F757400 + 095374796C654E616D6506106D656E756261726974656D7374796C6505416C69 + 676E070643656E7465720C4D617267696E732E4C656674050000000000000080 + FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E + 732E5269676874050000000000000080FF3F0E4D617267696E732E426F74746F + 6D050000000000000080FF3F0A53697A652E5769647468050000000000000092 + 05400B53697A652E4865696768740500000000000000D003401453697A652E50 + 6C6174666F726D44656661756C74080756697369626C6508000A545265637461 + 6E676C650005416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72 + 0709784646324138324532074869745465737408074F70616369747905000000 + 000017B7D1F13F0A53697A652E576964746805000000000000009205400B5369 + 7A652E4865696768740500000000000000D003401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F5446 + 6C6F6174416E696D6174696F6E00084475726174696F6E05000000000018B7D1 + F23F0C50726F70657274794E616D6506074F7061636974790A53746172745661 + 6C756505000000000000000000000953746F7056616C75650500000000000000 + 80FF3F0754726967676572060F497353656C65637465643D747275650E547269 + 67676572496E76657273650610497353656C65637465643D66616C7365000000 + 0A5452656374616E676C6500095374796C654E616D65060A6261636B67726F75 + 6E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978 + 4646324138324532074869745465737408074F70616369747905000000000017 + B7D1F13F0A53697A652E576964746805000000000000009205400B53697A652E + 4865696768740500000000000000D003401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C6F61 + 74416E696D6174696F6E00084475726174696F6E05000000000018B7D1F23F0C + 50726F70657274794E616D6506074F7061636974790A537461727456616C7565 + 05000000000000000000000953746F7056616C7565050000000000000080FF3F + 0754726967676572061049734D6F7573654F7665723D747275650E5472696767 + 6572496E7665727365061149734D6F7573654F7665723D66616C736500000007 + 544C61796F757400095374796C654E616D650605676C79706805416C69676E07 + 044C6566740A53697A652E57696474680500000000000000C803400B53697A65 + 2E4865696768740500000000000000D003401453697A652E506C6174666F726D + 44656661756C74080007544C61796F757400095374796C654E616D6506096368 + 65636B6D61726B05416C69676E0708436F6E74656E7473074F70616369747905 + 00000000006F1283F53F0A53697A652E57696474680500000000000000C80340 + 0B53697A652E4865696768740500000000000000D003401453697A652E506C61 + 74666F726D44656661756C7408000554506174680005416C69676E070643656E + 74657209446174612E506174680A58000000070000000000000056D9524391AE + 2C43010000009276664365021643010000009F3983432B7C3C43010000009E9A + A64382D2B442010000006F1CB04375A4D1420100000026DF8243263F67430300 + 000056D9524391AE2C430A46696C6C2E436F6C6F720708636C61576869746507 + 48697454657374080A53697A652E57696474680500000000000000B002400B53 + 697A652E4865696768740500000000000000B002401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000F + 54466C6F6174416E696D6174696F6E00084475726174696F6E050000000000CD + CCCCFB3F0C50726F70657274794E616D6506074F7061636974790A5374617274 + 56616C756505000000000000000000000953746F7056616C7565050000000000 + 000080FF3F0754726967676572060E4973436865636B65643D747275650E5472 + 6967676572496E7665727365060F4973436865636B65643D66616C7365000000 + 0654476C79706800095374796C654E616D65060A676C7970687374796C650C4D + 617267696E732E4C656674050000000000000080FF3F0B4D617267696E732E54 + 6F7005000000000000008000400D4D617267696E732E52696768740500000000 + 000000C000400E4D617267696E732E426F74746F6D050000000000000080FF3F + 05416C69676E070552696768740A53697A652E57696474680500000000000000 + 8003400B53697A652E48656967687405000000000000008003401453697A652E + 506C6174666F726D44656661756C740800000654496D61676500095374796C65 + 4E616D6506066269746D61700E4D756C74695265734269746D61700E01000005 + 416C69676E0708436F6E74656E74730C4D617267696E732E4C65667405000000 + 000000008000400B4D617267696E732E546F7005000000000000008000400D4D + 617267696E732E526967687405000000000000008000400E4D617267696E732E + 426F74746F6D05000000000000008000400A53697A652E576964746805000000 + 00000000A803400B53697A652E4865696768740500000000000000B003401453 + 697A652E506C6174666F726D44656661756C7408000000055454657874000953 + 74796C654E616D6506047465787405416C69676E07044C656674064C6F636B65 + 64090748697454657374080C4D617267696E732E4C6566740500000000000000 + 8002400D4D617267696E732E526967687405000000000000008002400A506F73 + 6974696F6E2E5805000000000000008404400A53697A652E5769647468050000 + 0000000000C804400B53697A652E4865696768740500000000000000D0034014 + 53697A652E506C6174666F726D44656661756C7408165465787453657474696E + 67732E466F6E74436F6C6F720708636C61576869746516546578745365747469 + 6E67732E486F727A416C69676E07074C656164696E6700000554546578740009 + 5374796C654E616D65060873686F727463757405416C69676E07055269676874 + 064C6F636B6564090748697454657374080C4D617267696E732E4C6566740500 + 000000000000C002400D4D617267696E732E52696768740500000000000000C0 + 01400A506F736974696F6E2E580500000000000000C000C00A53697A652E5769 + 6474680500000000000000C804400B53697A652E486569676874050000000000 + 0000D003401453697A652E506C6174666F726D44656661756C74081654657874 + 53657474696E67732E466F6E74436F6C6F720708636C61576869746516546578 + 7453657474696E67732E486F727A416C69676E07074C656164696E6700000754 + 4C61796F757400095374796C654E616D6506077375626D61726B05416C69676E + 070552696768740A506F736974696F6E2E580500000000000000D404400A5369 + 7A652E57696474680500000000000000A003400B53697A652E48656967687405 + 00000000000000D003401453697A652E506C6174666F726D44656661756C7408 + 000554506174680005416C69676E070643656E74657209446174612E50617468 + 0A34000000040000000000000000000000000000000100000000000000000080 + 3F010000000000803F0000003F0300000000000000000000000A46696C6C2E43 + 6F6C6F720708636C615768697465064C6F636B6564090748697454657374080A + 53697A652E57696474680500000000000000E001400B53697A652E4865696768 + 7405000000000000008002401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E6500000000545046300A545265 + 6374616E676C6500095374796C654E616D65060C6D656E756261727374796C65 + 05416C69676E070643656E7465720C436C69704368696C6472656E090946696C + 6C2E4B696E6407044E6F6E650748697454657374080A53697A652E5769647468 + 0500000000000000C804400B53697A652E4865696768740500000000000000C8 + 04401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E650756697369626C6508000A5452656374616E676C6500 + 05416C69676E0706436C69656E740A46696C6C2E436F6C6F7207097846463230 + 323032300748697454657374080C4D617267696E732E4C656674050000000000 + 000080FFBF0B4D617267696E732E546F70050000000000000080FFBF0D4D6172 + 67696E732E5269676874050000000000000080FFBF0A53697A652E5769647468 + 0500000000000000D004400B53697A652E4865696768740500000000000000CC + 04401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E + 436F6C6F720709784646313531353135000007544C61796F757400095374796C + 654E616D650607636F6E74656E7405416C69676E0706436C69656E740C4D6172 + 67696E732E4C656674050000000000000080FF3F0B4D617267696E732E546F70 + 050000000000000080FF3F0D4D617267696E732E526967687405000000000000 + 0080FF3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53 + 697A652E57696474680500000000000000C004400B53697A652E486569676874 + 0500000000000000C004401453697A652E506C6174666F726D44656661756C74 + 080000005450463007544C61796F757400095374796C654E616D65060D6D656E + 756974656D7374796C6505416C69676E070643656E7465720C4D617267696E73 + 2E4C656674050000000000000080FF3F0B4D617267696E732E546F7005000000 + 0000000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F + 0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E + 57696474680500000000008EE3F605400B53697A652E48656967687405000000 + 00008EE3F003401453697A652E506C6174666F726D44656661756C7408075669 + 7369626C6508000A5452656374616E676C650005416C69676E0708436F6E7465 + 6E74730A46696C6C2E436F6C6F72070978464632413832453207486974546573 + 7408074F70616369747905000000000017B7D1F13F0A53697A652E5769647468 + 0500000000008EE3F605400B53697A652E4865696768740500000000008EE3F0 + 03401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E0008447572 + 6174696F6E05000000000018B7D1F23F0C50726F70657274794E616D6506074F + 7061636974790A537461727456616C756505000000000000000000000953746F + 7056616C7565050000000000000080FF3F0754726967676572060F497353656C + 65637465643D747275650E54726967676572496E76657273650610497353656C + 65637465643D66616C73650000000A5452656374616E676C6500095374796C65 + 4E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E7473 + 0A46696C6C2E436F6C6F72070978464632413832453207486974546573740807 + 4F70616369747905000000000000000000000A53697A652E5769647468050000 + 0000008EE3F605400B53697A652E4865696768740500000000008EE3F0034014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E65000F54466C6F6174416E696D6174696F6E0008447572617469 + 6F6E05000000000018B7D1F23F07496E7665727365090C50726F70657274794E + 616D6506074F7061636974790A537461727456616C7565050000000000000000 + 00000953746F7056616C7565050000000000000080FF3F075472696767657206 + 1049734D6F7573654F7665723D747275650E54726967676572496E7665727365 + 061149734D6F7573654F7665723D66616C736500000007544C61796F75740009 + 5374796C654E616D650605676C79706805416C69676E07044C6566740A53697A + 652E57696474680500000000000000C803400B53697A652E4865696768740500 + 000000008EE3F003401453697A652E506C6174666F726D44656661756C740800 + 07544C61796F757400095374796C654E616D650609636865636B6D61726B0541 + 6C69676E0708436F6E74656E7473074F7061636974790500000000006F1283F5 + 3F0A53697A652E57696474680500000000000000C803400B53697A652E486569 + 6768740500000000008EE3F003401453697A652E506C6174666F726D44656661 + 756C7408000554506174680005416C69676E070643656E74657209446174612E + 506174680A58000000070000000000000056D9524391AE2C4301000000927666 + 4365021643010000009F3983432B7C3C43010000009E9AA64382D2B442010000 + 006F1CB04375A4D1420100000026DF8243263F67430300000056D9524391AE2C + 430A46696C6C2E436F6C6F720708636C6157686974650748697454657374080A + 53697A652E57696474680500000000000000B002400B53697A652E4865696768 + 740500000000000000B002401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E6500000F54466C6F6174416E69 + 6D6174696F6E00084475726174696F6E050000000000CDCCCCFB3F0C50726F70 + 657274794E616D6506074F7061636974790A537461727456616C756505000000 + 000000000000000953746F7056616C7565050000000000000080FF3F07547269 + 67676572060E4973436865636B65643D747275650E54726967676572496E7665 + 727365060F4973436865636B65643D66616C73650000000654476C7970680009 + 5374796C654E616D65060A676C7970687374796C650C4D617267696E732E4C65 + 6674050000000000000080FF3F0B4D617267696E732E546F7005000000000000 + 008000400D4D617267696E732E52696768740500000000000000C000400E4D61 + 7267696E732E426F74746F6D050000000000000080FF3F05416C69676E07044C + 6566740A53697A652E576964746805000000000000008003400B53697A652E48 + 656967687405000000000000008003401453697A652E506C6174666F726D4465 + 6661756C740800000654496D61676500095374796C654E616D6506066269746D + 61700E4D756C74695265734269746D61700E01000005416C69676E07044C6566 + 740C4D617267696E732E4C65667405000000000000008000400B4D617267696E + 732E546F7005000000000000008000400D4D617267696E732E52696768740500 + 0000000000008000400E4D617267696E732E426F74746F6D0500000000000000 + 8000400A506F736974696F6E2E5805000000000000008000400A506F73697469 + 6F6E2E5905000000000000008000400A53697A652E5769647468050000000000 + 0000A803400B53697A652E4865696768740500000000008EE3D003401453697A + 652E506C6174666F726D44656661756C74080000000554546578740009537479 + 6C654E616D6506047465787405416C69676E07044C656674064C6F636B656409 + 0748697454657374080C4D617267696E732E4C65667405000000000000008002 + 400D4D617267696E732E526967687405000000000000008002400A506F736974 + 696F6E2E5805000000000000008404400A53697A652E57696474680500000000 + 000000C804400B53697A652E4865696768740500000000008EE3F00340145369 + 7A652E506C6174666F726D44656661756C7408165465787453657474696E6773 + 2E466F6E74436F6C6F720708636C615768697465165465787453657474696E67 + 732E486F727A416C69676E07074C656164696E67000005545465787400095374 + 796C654E616D65060873686F727463757405416C69676E07055269676874064C + 6F636B6564090748697454657374080C4D617267696E732E4C65667405000000 + 00000000C002400D4D617267696E732E52696768740500000000000000C00140 + 0A506F736974696F6E2E580500000000001CC7BD04400A53697A652E57696474 + 680500000000000000C804400B53697A652E4865696768740500000000008EE3 + F003401453697A652E506C6174666F726D44656661756C740816546578745365 + 7474696E67732E466F6E74436F6C6F720708636C615768697465165465787453 + 657474696E67732E486F727A416C69676E07074C656164696E67000007544C61 + 796F757400095374796C654E616D6506077375626D61726B05416C69676E0705 + 52696768740A506F736974696F6E2E580500000000008EE3CE05400A53697A65 + 2E57696474680500000000000000A003400B53697A652E486569676874050000 + 0000008EE3F003401453697A652E506C6174666F726D44656661756C74080005 + 54506174680005416C69676E070643656E74657209446174612E506174680A34 + 0000000400000000000000000000000000000001000000000000000000803F01 + 0000000000803F0000003F0300000000000000000000000A46696C6C2E436F6C + 6F720708636C615768697465064C6F636B6564090748697454657374080A5369 + 7A652E57696474680500000000000000C001400B53697A652E48656967687405 + 00000000000000A002401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C61796F + 757400095374796C654E616D6506126D656E75736570617261746F727374796C + 6505416C69676E070643656E7465720A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000000000C804401453697A + 652E506C6174666F726D44656661756C74080756697369626C65080005544C69 + 6E650005416C69676E0703546F70084C696E65547970650703546F700C4D6172 + 67696E732E4C656674050000000000000080FFBF0B4D617267696E732E546F70 + 05000000000000008000400D4D617267696E732E526967687405000000000000 + 0080FFBF0A506F736974696F6E2E58050000000000000080FFBF0A506F736974 + 696F6E2E5905000000000000008000400A53697A652E57696474680500000000 + 000000D004400B53697A652E486569676874050000000000000080FF3F145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 0709784646313531353135000000545046300A5452656374616E676C65000953 + 74796C654E616D65060D6D656E75766965777374796C6505416C69676E070643 + 656E7465720A46696C6C2E436F6C6F7207097846463230323032300A53697A65 + 2E57696474680500000000000000C804400B53697A652E486569676874050000 + 0000000000C804401453697A652E506C6174666F726D44656661756C74080C53 + 74726F6B652E436F6C6F7207097846463135313531350756697369626C650800 + 0A5452656374616E676C650005416C69676E0706436C69656E740A46696C6C2E + 436F6C6F7207097846463230323032300748697454657374080A53697A652E57 + 696474680500000000000000C804400B53697A652E4865696768740500000000 + 000000C804401453697A652E506C6174666F726D44656661756C74080C537472 + 6F6B652E436F6C6F720709784646313531353135000D54536861646F77456666 + 656374000844697374616E636505000000000000008001400944697265637469 + 6F6E0500000000000000B4044008536F66746E657373050000000000000080FE + 3F074F706163697479050000000000000080FE3F0B536861646F77436F6C6F72 + 0708636C61426C61636B00000007544C61796F757400095374796C654E616D65 + 0607636F6E74656E7405416C69676E0706436C69656E740C4D617267696E732E + 4C656674050000000000000080FF3F0B4D617267696E732E546F700500000000 + 00000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E + 4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A652E57 + 696474680500000000000000C004400B53697A652E4865696768740500000000 + 000000C004401453697A652E506C6174666F726D44656661756C740800000054 + 50463007544C61796F757400095374796C654E616D65060E696D61676563656C + 6C7374796C6505416C69676E070643656E7465720756697369626C6508000654 + 496D61676500095374796C654E616D650605696D6167650E4D756C7469526573 + 4269746D61700E01000005416C69676E0706436C69656E74064C6F636B656409 + 0748697454657374080C4D617267696E732E4C656674050000000000000080FF + 3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E73 + 2E5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D + 050000000000000080FF3F0A53697A652E57696474680500000000000000C004 + 400B53697A652E4865696768740500000000000000C004401453697A652E506C + 6174666F726D44656661756C74080000005450463007544C61796F7574000953 + 74796C654E616D65060E706F70757063656C6C7374796C6505416C69676E0706 + 43656E7465720A53697A652E57696474680500000000000000BB06400B53697A + 652E4865696768740500000000000000AE04401453697A652E506C6174666F72 + 6D44656661756C74080756697369626C65080007544C61796F75740005416C69 + 676E070552696768740A506F736974696F6E2E580500000000000000AC06400A + 53697A652E57696474680500000000000000F002400B53697A652E4865696768 + 740500000000000000AE04401453697A652E506C6174666F726D44656661756C + 7408000554506174680005416C69676E070643656E74657209446174612E5061 + 74680A400000000500000000000000000000000000803F010000000000803F00 + 00803F010000000000003F0000000001000000000000000000803F0300000000 + 000000000000000A46696C6C2E436F6C6F720708636C61576869746507486974 + 54657374080B4D617267696E732E546F700500000000000000E001C00A53697A + 652E576964746805000000000000008002400B53697A652E4865696768740500 + 0000000000008001401453697A652E506C6174666F726D44656661756C74080B + 5374726F6B652E4B696E6407044E6F6E6500000554506174680005416C69676E + 070643656E74657209446174612E506174680A34000000040000000000000000 + 00000000000000010000000000803F00000000010000000000003F0000803F03 + 00000000000000000000000A46696C6C2E436F6C6F720708636C615768697465 + 0748697454657374080B4D617267696E732E546F700500000000000000C00140 + 0A53697A652E576964746805000000000000008002400B53697A652E48656967 + 687405000000000000008001401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E650000000554546578740009 + 5374796C654E616D6506047465787405416C69676E0706436C69656E74064C6F + 636B6564090748697454657374080C4D617267696E732E4C6566740500000000 + 000000A001400B4D617267696E732E546F7005000000000000008000400D4D61 + 7267696E732E52696768740500000000000000A001400E4D617267696E732E42 + 6F74746F6D05000000000000008000400A53697A652E57696474680500000000 + 000000A206400B53697A652E48656967687405000000000000009E0440145369 + 7A652E506C6174666F726D44656661756C7408165465787453657474696E6773 + 2E466F6E74436F6C6F720708636C6157686974650000005450463007544C6179 + 6F757400095374796C654E616D65060D7465787463656C6C7374796C6505416C + 69676E070643656E7465720756697369626C65080007544C61796F7574000953 + 74796C654E616D650607636F6E74656E7405416C69676E0708436F6E74656E74 + 73064C6F636B6564090C4D617267696E732E4C65667405000000000000008001 + 400B4D617267696E732E546F7005000000000000008001400D4D617267696E73 + 2E526967687405000000000000008001400E4D617267696E732E426F74746F6D + 05000000000000008001400A53697A652E57696474680500000000000000A804 + 400B53697A652E4865696768740500000000000000A804401453697A652E506C + 6174666F726D44656661756C740800000C5442727573684F626A656374000953 + 74796C654E616D65060A666F726567726F756E6400000C5442727573684F626A + 65637400095374796C654E616D65060973656C656374696F6E0B42727573682E + 436F6C6F72070978393632413832453200000B54466F6E744F626A6563740009 + 5374796C654E616D650604666F6E740000005450463007544C61796F75740009 + 5374796C654E616D6506096D656D6F7374796C6505416C69676E070643656E74 + 65720A53697A652E5769647468050000000000CCCC8806400B53697A652E4865 + 696768740500000000006666F405401453697A652E506C6174666F726D446566 + 61756C74080756697369626C6508000C5442727573684F626A65637400095374 + 796C654E616D65060A666F726567726F756E6400000C5442727573684F626A65 + 637400095374796C654E616D65060973656C656374696F6E0B42727573682E43 + 6F6C6F72070978374634343735394400000B54466F6E744F626A656374000953 + 74796C654E616D650604666F6E7400000A5452656374616E676C650009537479 + 6C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E + 74730A46696C6C2E436F6C6F7207097846463230323032300748697454657374 + 080A53697A652E5769647468050000000000CCCC8806400B53697A652E486569 + 6768740500000000006666F405401453697A652E506C6174666F726D44656661 + 756C74080C5374726F6B652E436F6C6F7207097846463135313531350007544C + 61796F757400095374796C654E616D650607636F6E74656E7405416C69676E07 + 06436C69656E740C4D617267696E732E4C65667405000000000000008000400B + 4D617267696E732E546F7005000000000000008000400D4D617267696E732E52 + 6967687405000000000000008000400E4D617267696E732E426F74746F6D0500 + 0000000000008000400A53697A652E57696474680500000000009899E905400B + 53697A652E4865696768740500000000006666CC05401453697A652E506C6174 + 666F726D44656661756C740800000A545363726F6C6C42617200095374796C65 + 4E616D65060A687363726F6C6C62617205416C69676E0706426F74746F6D0643 + 7572736F72070763724172726F770B536D616C6C4368616E6765050000000000 + 00000000000B4F7269656E746174696F6E070A486F72697A6F6E74616C0A506F + 736974696F6E2E590500000000006666D405400A53697A652E57696474680500 + 00000000CCCC8806400B53697A652E4865696768740500000000000000800340 + 1453697A652E506C6174666F726D44656661756C740800000A545363726F6C6C + 42617200095374796C654E616D65060A767363726F6C6C62617205416C69676E + 0705526967687406437572736F72070763724172726F770B536D616C6C436861 + 6E676505000000000000000000000B4F7269656E746174696F6E070856657274 + 6963616C0A506F736974696F6E2E580500000000009899F105400A53697A652E + 576964746805000000000000008003400B53697A652E48656967687405000000 + 00006666D405401453697A652E506C6174666F726D44656661756C7408000007 + 544C61796F75740005416C69676E0706436C69656E740A53697A652E57696474 + 680500000000009899F105400B53697A652E4865696768740500000000006666 + D405401453697A652E506C6174666F726D44656661756C7408000F54536D616C + 6C5363726F6C6C42617200095374796C654E616D65060F76736D616C6C736372 + 6F6C6C62617205416C69676E0705526967687406437572736F72070763724172 + 726F770B536D616C6C4368616E676505000000000000000000000B4F7269656E + 746174696F6E0708566572746963616C0C4D617267696E732E4C656674050000 + 00000000008000400A53697A652E576964746805000000000000008002400B53 + 697A652E48656967687405000000000000008002401453697A652E506C617466 + 6F726D44656661756C74080756697369626C650800000F54536D616C6C536372 + 6F6C6C42617200095374796C654E616D65060F68736D616C6C7363726F6C6C62 + 617205416C69676E0706426F74746F6D06437572736F72070763724172726F77 + 0B536D616C6C4368616E676505000000000000000000000B4F7269656E746174 + 696F6E070A486F72697A6F6E74616C0B4D617267696E732E546F700500000000 + 0000008000400A53697A652E576964746805000000000000009606400B53697A + 652E48656967687405000000000000008002401453697A652E506C6174666F72 + 6D44656661756C74080756697369626C65080000000F54436F6C6F72416E696D + 6174696F6E00095374796C654E616D6506146D656D6F5374726F6B65416E696D + 6174696F6E31084475726174696F6E050000000000000000000007496E766572 + 7365090C50726F70657274794E616D65060C5374726F6B652E436F6C6F720A53 + 7461727456616C756507097846463135313531350953746F7056616C75650709 + 7846463430343034300754726967676572062049734D6F7573654F7665723D74 + 7275653B4973466F63757365643D66616C73650E54726967676572496E766572 + 7365062149734D6F7573654F7665723D66616C73653B4973466F63757365643D + 66616C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E61 + 6D6506146D656D6F5374726F6B65416E696D6174696F6E32084475726174696F + 6E05000000000000000000000C50726F70657274794E616D65060C5374726F6B + 652E436F6C6F720A537461727456616C75650709784646343034303430095374 + 6F7056616C756507097846463241383245320754726967676572060E4973466F + 63757365643D747275650E54726967676572496E7665727365060F4973466F63 + 757365643D66616C7365000000005450463007544C61796F757400095374796C + 654E616D65060E6C696E6B6C6162656C7374796C6505416C69676E070643656E + 7465720A53697A652E5769647468050000000000CCCC8006400B53697A652E48 + 65696768740500000000009A998104401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C65080005545465787400095374796C654E616D + 6506047465787405416C69676E0708436F6E74656E7473074869745465737408 + 0A53697A652E5769647468050000000000CCCC8006400B53697A652E48656967 + 68740500000000009A998104401453697A652E506C6174666F726D4465666175 + 6C74081A5465787453657474696E67732E466F6E742E5374796C654578740A0D + 00000004040000000000000004000000165465787453657474696E67732E466F + 6E74436F6C6F72070D636C61446F64676572626C7565000F54436F6C6F72416E + 696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D617469 + 6F6E315374796C65084475726174696F6E050000000000000000000007496E76 + 65727365090C50726F70657274794E616D6506165465787453657474696E6773 + 2E466F6E74436F6C6F720A537461727456616C7565070D636C61446F64676572 + 626C75650953746F7056616C7565070E636C6144656570736B79626C75650754 + 726967676572063049734D6F7573654F7665723D747275653B49735072657373 + 65643D66616C73653B4973466F63757365643D66616C73650E54726967676572 + 496E7665727365063149734D6F7573654F7665723D66616C73653B4973507265 + 737365643D66616C73653B4973466F63757365643D66616C736500000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E + 696D6174696F6E325374796C65084475726174696F6E05000000000000000000 + 000C50726F70657274794E616D6506165465787453657474696E67732E466F6E + 74436F6C6F720A537461727456616C7565070E636C6144656570736B79626C75 + 650953746F7056616C756507097846463137353739430754726967676572062F + 4973507265737365643D747275653B49734D6F7573654F7665723D747275653B + 4973466F63757365643D66616C736500000000545046300A5452656374616E67 + 6C6500095374796C654E616D65060E7374617475736261727374796C6505416C + 69676E070643656E7465720C436C69704368696C6472656E090A46696C6C2E43 + 6F6C6F7207097846463235323532350748697454657374080553696465730B03 + 546F70000A53697A652E57696474680500000000000000F004400B53697A652E + 4865696768740500000000000000C804401453697A652E506C6174666F726D44 + 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313507 + 56697369626C65080007544C61796F757400095374796C654E616D6506074C61 + 796F75743105416C69676E070552696768740A506F736974696F6E2E58050000 + 00000000008C04400A53697A652E57696474680500000000000000C803400B53 + 697A652E4865696768740500000000000000C804401453697A652E506C617466 + 6F726D44656661756C740800095453697A654772697000095374796C654E616D + 65060973697A65677267697005416C69676E0706426F74746F6D0A506F736974 + 696F6E2E590500000000000000C803400A53697A652E57696474680500000000 + 000000C803400B53697A652E4865696768740500000000000000C80340145369 + 7A652E506C6174666F726D44656661756C7408000000005450463007544C6179 + 6F757400095374796C654E616D65060C7370696E626F787374796C6505416C69 + 676E070643656E7465720A53697A652E57696474680500000000006666E00540 + 0B53697A652E4865696768740500000000000000C003401453697A652E506C61 + 74666F726D44656661756C74080756697369626C6508000A5452656374616E67 + 6C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E07 + 08436F6E74656E74730A46696C6C2E436F6C6F7207097846463230323032300A + 53697A652E57696474680500000000006666E005400B53697A652E4865696768 + 740500000000000000C003401453697A652E506C6174666F726D44656661756C + 74080C5374726F6B652E436F6C6F720709784646313531353135000F54436F6C + 6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E69 + 6D6174696F6E315374796C65084475726174696F6E0500000000000000000000 + 07496E7665727365090C50726F70657274794E616D65060C5374726F6B652E43 + 6F6C6F720A537461727456616C756507097846463135313531350953746F7056 + 616C756507097846463430343034300754726967676572061049734D6F757365 + 4F7665723D747275650E54726967676572496E7665727365061149734D6F7573 + 654F7665723D66616C73650000000C5442727573684F626A6563740009537479 + 6C654E616D65060A666F726567726F756E640B42727573682E436F6C6F720709 + 78464645414541454100000C5442727573684F626A65637400095374796C654E + 616D65060973656C656374696F6E0B42727573682E436F6C6F72070978393632 + 4138324532000007544C61796F757400095374796C654E616D650607636F6E74 + 656E7405416C69676E0706436C69656E74064C6F636B6564090C4D617267696E + 732E4C65667405000000000000008000400B4D617267696E732E546F70050000 + 00000000008000400D4D617267696E732E526967687405000000000000008000 + 400E4D617267696E732E426F74746F6D05000000000000008000400A53697A65 + 2E5769647468050000000000CCCCF004400B53697A652E486569676874050000 + 0000000000A003401453697A652E506C6174666F726D44656661756C74080000 + 0754427574746F6E00095374796C654E616D65060B6D696E7573627574746F6E + 05416C69676E07044C6566740843616E466F6375730806437572736F72070763 + 724172726F770C4D617267696E732E4C65667405000000000000008000400B4D + 617267696E732E546F7005000000000000008000400D4D617267696E732E5269 + 67687405000000000000008000400E4D617267696E732E426F74746F6D050000 + 00000000008000400A506F736974696F6E2E5805000000000000008000400A50 + 6F736974696F6E2E5905000000000000008000400A53697A652E576964746805 + 00000000000000A003400B53697A652E4865696768740500000000000000A003 + 401453697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F + 6B7570060B627574746F6E7374796C65000554506174680005416C69676E0706 + 43656E74657209446174612E506174680A400000000500000000000000000080 + 3F00000000010000000000803F0000803F01000000000000000000003F010000 + 000000803F00000000030000000000803F000000000A46696C6C2E436F6C6F72 + 0708636C6157686974650748697454657374080A53697A652E57696474680500 + 0000000000008002400B53697A652E4865696768740500000000000000800240 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E650000000754427574746F6E00095374796C654E616D65060A + 706C7573627574746F6E05416C69676E070552696768740843616E466F637573 + 0806437572736F72070763724172726F770C4D617267696E732E4C6566740500 + 0000000000008000400B4D617267696E732E546F700500000000000000800040 + 0D4D617267696E732E526967687405000000000000008000400E4D617267696E + 732E426F74746F6D05000000000000008000400A506F736974696F6E2E580500 + 000000006666B405400A506F736974696F6E2E5905000000000000008000400A + 53697A652E57696474680500000000000000A003400B53697A652E4865696768 + 740500000000000000A003401453697A652E506C6174666F726D44656661756C + 74080B5374796C654C6F6F6B7570060B627574746F6E7374796C650005545061 + 74680005416C69676E070643656E74657209446174612E506174680A34000000 + 0400000000000000000000000000000001000000000000000000803F01000000 + 0000803F0000003F0300000000000000000000000A46696C6C2E436F6C6F7207 + 08636C6157686974650748697454657374080A53697A652E5769647468050000 + 00000000008002400B53697A652E486569676874050000000000000080024014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E65000000005450463007544C61796F757400095374796C654E61 + 6D65060D73697A65677269707374796C6505416C69676E070643656E7465720A + 53697A652E57696474680500000000000000C803400B53697A652E4865696768 + 740500000000000000C803401453697A652E506C6174666F726D44656661756C + 74080756697369626C6508000A5452656374616E676C6500095374796C654E61 + 6D65060A52656374616E676C653105416C69676E070643656E7465720A46696C + 6C2E436F6C6F7207097846463630363036300A53697A652E5769647468050000 + 0000000000A000400B53697A652E4865696768740500000000000000A0004014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E6500000A5452656374616E676C6500095374796C654E616D6506 + 0A52656374616E676C653205416C69676E070643656E7465720A46696C6C2E43 + 6F6C6F7207097846463630363036300C4D617267696E732E4C65667405000000 + 00000000A002400A53697A652E57696474680500000000000000A000400B5369 + 7A652E4865696768740500000000000000A000401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000A54 + 52656374616E676C6500095374796C654E616D65060A52656374616E676C6533 + 05416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846463630 + 363036300C4D617267696E732E4C6566740500000000000000A002400B4D6172 + 67696E732E546F700500000000000000A002400A53697A652E57696474680500 + 000000000000A000400B53697A652E4865696768740500000000000000A00040 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E6500000A5452656374616E676C6500095374796C654E616D65 + 060A52656374616E676C653405416C69676E070643656E7465720A46696C6C2E + 436F6C6F7207097846463630363036300B4D617267696E732E546F7005000000 + 00000000A002400A53697A652E57696474680500000000000000A000400B5369 + 7A652E4865696768740500000000000000A000401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000A54 + 52656374616E676C6500095374796C654E616D65060A52656374616E676C6535 + 05416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846463630 + 363036300B4D617267696E732E546F700500000000000000A002400D4D617267 + 696E732E52696768740500000000000000A002400A53697A652E576964746805 + 00000000000000A000400B53697A652E4865696768740500000000000000A000 + 401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B + 696E6407044E6F6E6500000A5452656374616E676C6500095374796C654E616D + 65060A52656374616E676C653605416C69676E070643656E7465720A46696C6C + 2E436F6C6F7207097846463630363036300C4D617267696E732E4C6566740500 + 000000000000A002400E4D617267696E732E426F74746F6D0500000000000000 + A002400A53697A652E57696474680500000000000000A000400B53697A652E48 + 65696768740500000000000000A000401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E65000000545046300A + 5452656374616E676C6500095374796C654E616D65060C746F6F6C6261727374 + 796C6505416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846 + 463235323532350748697454657374080553696465730B06426F74746F6D000A + 53697A652E57696474680500000000000000C804400B53697A652E4865696768 + 740500000000000000C804401453697A652E506C6174666F726D44656661756C + 74080C5374726F6B652E436F6C6F720709784646313531353135075669736962 + 6C650800005450463007544C61796F757400095374796C654E616D6506157072 + 6F67726573736261726572726F727374796C6505416C69676E070643656E7465 + 720A53697A652E576964746805000000000033338505400B53697A652E486569 + 6768740500000000009999E104401453697A652E506C6174666F726D44656661 + 756C74080756697369626C6508000A5452656374616E676C6500095374796C65 + 4E616D65060668747261636B05416C69676E0708436F6E74656E74730A46696C + 6C2E436F6C6F720709784646323032303230064C6F636B656409074869745465 + 7374080A53697A652E576964746805000000000033338505400B53697A652E48 + 65696768740500000000009999E104401453697A652E506C6174666F726D4465 + 6661756C74080C5374726F6B652E436F6C6F720709784646313531353135000A + 5452656374616E676C6500095374796C654E616D65060A68696E64696361746F + 7205416C69676E07044C6566740A46696C6C2E436F6C6F720709784646453232 + 413241064C6F636B6564090748697454657374080C4D617267696E732E4C6566 + 74050000000000000080FF3F0B4D617267696E732E546F700500000000000000 + 80FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E4D6172 + 67696E732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E + 58050000000000000080FF3F0A506F736974696F6E2E59050000000000000080 + FF3F0A53697A652E57696474680500000000000000C804400B53697A652E4865 + 696768740500000000009999D904401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E650000000A5452656374 + 616E676C6500095374796C654E616D65060676747261636B05416C69676E0708 + 436F6E74656E74730A46696C6C2E436F6C6F720709784646323032303230064C + 6F636B6564090748697454657374080A53697A652E5769647468050000000000 + 33338505400B53697A652E4865696768740500000000009999E104401453697A + 652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F7207 + 09784646313531353135000A5452656374616E676C6500095374796C654E616D + 65060A76696E64696361746F7205416C69676E0706426F74746F6D0A46696C6C + 2E436F6C6F720709784646453232413241064C6F636B65640907486974546573 + 74080C4D617267696E732E4C656674050000000000000080FF3F0B4D61726769 + 6E732E546F70050000000000000080FF3F0D4D617267696E732E526967687405 + 0000000000000080FF3F0E4D617267696E732E426F74746F6D05000000000000 + 0080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F736974 + 696F6E2E5905000000000099998904400A53697A652E57696474680500000000 + 0033338105400B53697A652E4865696768740500000000000000A80340145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E65000000005450463007544C61796F757400095374796C654E616D65 + 060F64726F707461726765747374796C6505416C69676E070643656E7465720A + 53697A652E5769647468050000000000ACAAD905400B53697A652E4865696768 + 740500000000000000CF05401453697A652E506C6174666F726D44656661756C + 74080756697369626C6508000A5452656374616E676C650005416C69676E0708 + 436F6E74656E74730946696C6C2E4B696E6407044E6F6E650748697454657374 + 080A53697A652E5769647468050000000000ACAAD905400B53697A652E486569 + 6768740500000000000000CF05401453697A652E506C6174666F726D44656661 + 756C74080C5374726F6B652E436F6C6F720708636C615768697465105374726F + 6B652E546869636B6E65737305000000000000008001400B5374726F6B652E44 + 61736807044461736807585261646975730500000000000000C0024007595261 + 646975730500000000000000C002400005545465787400095374796C654E616D + 6506047465787405416C69676E0706426F74746F6D0748697454657374080C4D + 617267696E732E4C6566740500000000000000A002400D4D617267696E732E52 + 696768740500000000000000A002400A506F736974696F6E2E58050000000000 + 0000A002400A506F736974696F6E2E590500000000000000D604400A53697A65 + 2E5769647468050000000000ACAAB105400B53697A652E486569676874050000 + 0000000000C804401453697A652E506C6174666F726D44656661756C74081654 + 65787453657474696E67732E466F6E74436F6C6F720708636C61576869746500 + 00001254466C6F61744B6579416E696D6174696F6E00084475726174696F6E05 + 0000000000999999FE3F044B6579730E010001034B6579050000000000000080 + FE3F0556616C75650500000000000000A003C00001034B657905000000000000 + 0080FF3F0000044C6F6F70090C50726F70657274794E616D65060B5061646469 + 6E672E546F7010537461727446726F6D43757272656E74080754726967676572 + 060F4973447261674F7665723D7472756500000554506174680005416C69676E + 070643656E74657209446174612E506174680AC4000000100000000000000008 + EC8343F087A4430100000008EC8343083CFB430200000035BE7143504DF94302 + 00000012835C43A8E6F54302000000F0674943F803F1430100000008EC8343FC + 0116440100000008EC8343FC5116440100000000408443FC5116440100000010 + 689A43FC412B4401000000081CD043F803F14302000000915DC64321E0F54302 + 000000919DBB439643F94302000000087CB043F833FB4301000000087CB043F0 + 87A4430100000008EC8343F087A4430300000000000000000000000A46696C6C + 2E436F6C6F720708636C6157686974650748697454657374080A53697A652E57 + 696474680500000000000000C804400B53697A652E4865696768740500000000 + 000100C804401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E650000005450463007544C61796F7574000953 + 74796C654E616D65061464726F707461726765746669656C647374796C650541 + 6C69676E070643656E7465720A53697A652E576964746805000000000000A08A + 07400B53697A652E4865696768740500000000000000B204401453697A652E50 + 6C6174666F726D44656661756C74080756697369626C6508000A545265637461 + 6E676C6500095374796C654E616D65060A52656374616E676C653105416C6967 + 6E0706436C69656E740946696C6C2E4B696E6407044E6F6E6507486974546573 + 74080A53697A652E576964746805000000000000A08A07400B53697A652E4865 + 696768740500000000000000B204401453697A652E506C6174666F726D446566 + 61756C74080C5374726F6B652E436F6C6F720709784646324138324532000554 + 5465787400095374796C654E616D6506047465787405416C69676E0706436C69 + 656E740748697454657374080A53697A652E576964746805000000000000809A + 05400B53697A652E4865696768740500000000000000B204401453697A652E50 + 6C6174666F726D44656661756C7408165465787453657474696E67732E466F6E + 74436F6C6F720708636C615768697465000007544C61796F757400095374796C + 654E616D6506074C61796F75743105416C69676E07044C6566740A53697A652E + 57696474680500000000000000C805400B53697A652E48656967687405000000 + 00000000B204401453697A652E506C6174666F726D44656661756C7408000554 + 5061746800095374796C654E616D650605506174683105416C69676E07064365 + 6E74657209446174612E506174680A24010000180000000000000073B8AC43C1 + 4A7843010000006D2717435849DD430200000086CB0A431078E3430200000096 + 83ED421078E34302000000DACED4425849DD43020000009A19BC42081CD74302 + 0000009A19BC424C17CD4302000000DACED4421DEAC64301000000B4288B4385 + EB61430100000068D1D4426811584202000000281CBC42CAA126420200000028 + 1CBC42E6FBAC410200000068D1D442D04D144102000000A886ED429CC245C002 + 000000CCCC0A439CC245C002000000B4281743D04D14410100000016B9AC4391 + 8D4B4302000000BECFAF43A5BB5143020000009F5AB143F1D25943020000009F + 5AB14343EB614302000000A05AB1439C046A4302000000FACEAF43711D724302 + 00000073B8AC43C14A78430300000073B8AC43C14A78430A46696C6C2E436F6C + 6F720708636C6157686974650748697454657374080A53697A652E5769647468 + 0500000000000000F002400B53697A652E4865696768740500000000000000F0 + 02401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E6508577261704D6F646507034669740000055450617468 + 00095374796C654E616D650605506174683205416C69676E070643656E746572 + 09446174612E506174680A24010000180000000000000073B8AC43C14A784301 + 0000006D2717435849DD430200000086CB0A431078E343020000009683ED4210 + 78E34302000000DACED4425849DD43020000009A19BC42081CD743020000009A + 19BC424C17CD4302000000DACED4421DEAC64301000000B4288B4385EB614301 + 00000068D1D4426811584202000000281CBC42CAA1264202000000281CBC42E6 + FBAC410200000068D1D442D04D144102000000A886ED429CC245C002000000CC + CC0A439CC245C002000000B4281743D04D14410100000016B9AC43918D4B4302 + 000000BECFAF43A5BB5143020000009F5AB143F1D25943020000009F5AB14343 + EB614302000000A05AB1439C046A4302000000FACEAF43711D72430200000073 + B8AC43C14A78430300000073B8AC43C14A78430A46696C6C2E436F6C6F720708 + 636C6157686974650748697454657374080C4D617267696E732E4C6566740500 + 000000000000A004400A53697A652E57696474680500000000000000F002400B + 53697A652E4865696768740500000000000000F002401453697A652E506C6174 + 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650857 + 7261704D6F64650703466974000005545061746800095374796C654E616D6506 + 05506174683305416C69676E070643656E74657209446174612E506174680A24 + 010000180000000000000073B8AC43C14A7843010000006D2717435849DD4302 + 00000086CB0A431078E343020000009683ED421078E34302000000DACED44258 + 49DD43020000009A19BC42081CD743020000009A19BC424C17CD4302000000DA + CED4421DEAC64301000000B4288B4385EB61430100000068D1D4426811584202 + 000000281CBC42CAA1264202000000281CBC42E6FBAC410200000068D1D442D0 + 4D144102000000A886ED429CC245C002000000CCCC0A439CC245C002000000B4 + 281743D04D14410100000016B9AC43918D4B4302000000BECFAF43A5BB514302 + 0000009F5AB143F1D25943020000009F5AB14343EB614302000000A05AB1439C + 046A4302000000FACEAF43711D72430200000073B8AC43C14A78430300000073 + B8AC43C14A78430A46696C6C2E436F6C6F720708636C61576869746507486974 + 54657374080D4D617267696E732E52696768740500000000000000A004400A53 + 697A652E57696474680500000000000000F002400B53697A652E486569676874 + 0500000000000000F002401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F646507034669 + 7400000007544C61796F757400095374796C654E616D6506074C61796F757432 + 05416C69676E070552696768740A506F736974696F6E2E580500000000000040 + B106400A53697A652E57696474680500000000000000C805400B53697A652E48 + 65696768740500000000000000B204401453697A652E506C6174666F726D4465 + 6661756C74080005545061746800095374796C654E616D650605506174683105 + 416C69676E070643656E74657209446174612E506174680A2401000018000000 + 0000000073B8AC43C14A7843010000006D2717435849DD430200000086CB0A43 + 1078E343020000009683ED421078E34302000000DACED4425849DD4302000000 + 9A19BC42081CD743020000009A19BC424C17CD4302000000DACED4421DEAC643 + 01000000B4288B4385EB61430100000068D1D4426811584202000000281CBC42 + CAA1264202000000281CBC42E6FBAC410200000068D1D442D04D144102000000 + A886ED429CC245C002000000CCCC0A439CC245C002000000B4281743D04D1441 + 0100000016B9AC43918D4B4302000000BECFAF43A5BB5143020000009F5AB143 + F1D25943020000009F5AB14343EB614302000000A05AB1439C046A4302000000 + FACEAF43711D72430200000073B8AC43C14A78430300000073B8AC43C14A7843 + 0A46696C6C2E436F6C6F720708636C6157686974650748697454657374080D52 + 6F746174696F6E416E676C650500000000000000B406400A53697A652E576964 + 74680500000000000000F002400B53697A652E48656967687405000000000000 + 00F002401453697A652E506C6174666F726D44656661756C74080B5374726F6B + 652E4B696E6407044E6F6E6508577261704D6F64650703466974000005545061 + 746800095374796C654E616D650605506174683205416C69676E070643656E74 + 657209446174612E506174680A24010000180000000000000073B8AC43C14A78 + 43010000006D2717435849DD430200000086CB0A431078E343020000009683ED + 421078E34302000000DACED4425849DD43020000009A19BC42081CD743020000 + 009A19BC424C17CD4302000000DACED4421DEAC64301000000B4288B4385EB61 + 430100000068D1D4426811584202000000281CBC42CAA1264202000000281CBC + 42E6FBAC410200000068D1D442D04D144102000000A886ED429CC245C0020000 + 00CCCC0A439CC245C002000000B4281743D04D14410100000016B9AC43918D4B + 4302000000BECFAF43A5BB5143020000009F5AB143F1D25943020000009F5AB1 + 4343EB614302000000A05AB1439C046A4302000000FACEAF43711D7243020000 + 0073B8AC43C14A78430300000073B8AC43C14A78430A46696C6C2E436F6C6F72 + 0708636C6157686974650748697454657374080C4D617267696E732E4C656674 + 0500000000000000A004400D526F746174696F6E416E676C6505000000000000 + 00B406400A53697A652E57696474680500000000000000F002400B53697A652E + 4865696768740500000000000000F002401453697A652E506C6174666F726D44 + 656661756C74080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F + 64650703466974000005545061746800095374796C654E616D65060550617468 + 3305416C69676E070643656E74657209446174612E506174680A240100001800 + 00000000000073B8AC43C14A7843010000006D2717435849DD430200000086CB + 0A431078E343020000009683ED421078E34302000000DACED4425849DD430200 + 00009A19BC42081CD743020000009A19BC424C17CD4302000000DACED4421DEA + C64301000000B4288B4385EB61430100000068D1D4426811584202000000281C + BC42CAA1264202000000281CBC42E6FBAC410200000068D1D442D04D14410200 + 0000A886ED429CC245C002000000CCCC0A439CC245C002000000B4281743D04D + 14410100000016B9AC43918D4B4302000000BECFAF43A5BB5143020000009F5A + B143F1D25943020000009F5AB14343EB614302000000A05AB1439C046A430200 + 0000FACEAF43711D72430200000073B8AC43C14A78430300000073B8AC43C14A + 78430A46696C6C2E436F6C6F720708636C615768697465074869745465737408 + 0D4D617267696E732E52696768740500000000000000A004400D526F74617469 + 6F6E416E676C650500000000000000B406400A53697A652E5769647468050000 + 0000000000F002400B53697A652E4865696768740500000000000000F0024014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E6508577261704D6F646507034669740000000000545046300754 + 4C61796F757400095374796C654E616D65060C706F706F7665727374796C6505 + 416C69676E070643656E7465720756697369626C6508000A5452656374616E67 + 6C6500095374796C654E616D650602626705416C69676E0706436C69656E740A + 46696C6C2E436F6C6F7207097846463230323032300748697454657374080A53 + 697A652E57696474680500000000000000C804400B53697A652E486569676874 + 0500000000000000C804401453697A652E506C6174666F726D44656661756C74 + 080C5374726F6B652E436F6C6F7207097846463135313531350007544C61796F + 757400095374796C654E616D650607636F6E74656E7405416C69676E0706436C + 69656E740C4D617267696E732E4C656674050000000000000080FF3F0B4D6172 + 67696E732E546F70050000000000000080FF3F0D4D617267696E732E52696768 + 74050000000000000080FF3F0E4D617267696E732E426F74746F6D0500000000 + 00000080FF3F0A53697A652E57696474680500000000000000C004400B53697A + 652E4865696768740500000000000000C004401453697A652E506C6174666F72 + 6D44656661756C740800000D54536861646F7745666665637400084469737461 + 6E63650500000000000000C0004009446972656374696F6E0500000000000000 + B4054008536F66746E657373050000000000000080FE3F074F70616369747905 + 0000000000000080FE3F0B536861646F77436F6C6F720708636C61426C61636B + 000000005450463007544C61796F757400095374796C654E616D65060D706F70 + 7570626F787374796C6505416C69676E070643656E7465720A53697A652E5769 + 6474680500000000000080C406400B53697A652E486569676874050000000000 + 0000D404401453697A652E506C6174666F726D44656661756C74080756697369 + 626C6508000A5452656374616E676C6500095374796C654E616D65060A626163 + 6B67726F756E6405416C69676E0708436F6E74656E74730A46696C6C2E436F6C + 6F7207097846463230323032300748697454657374080A53697A652E57696474 + 680500000000000080C406400B53697A652E4865696768740500000000000000 + D404401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650614436F6C6F72416E696D6174696F6E315374796C65084475 + 726174696F6E05000000000000000000000C50726F70657274794E616D65060A + 46696C6C2E436F6C6F720A537461727456616C75650709784646323032303230 + 0953746F7056616C756507097846463430343034300754726967676572062049 + 734D6F7573654F7665723D747275653B4973507265737365643D66616C73650E + 54726967676572496E7665727365062149734D6F7573654F7665723D66616C73 + 653B4973507265737365643D66616C736500000F54436F6C6F72416E696D6174 + 696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F6E3253 + 74796C65084475726174696F6E05000000000000000000000C50726F70657274 + 794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507097846 + 463430343034300953746F7056616C7565070978464632413832453207547269 + 67676572062049734D6F7573654F7665723D747275653B497350726573736564 + 3D747275653B0E54726967676572496E7665727365062049734D6F7573654F76 + 65723D747275653B4973507265737365643D66616C736500000007544C61796F + 75740005416C69676E070552696768740A506F736974696F6E2E580500000000 + 000080B506400A53697A652E57696474680500000000000000F002400B53697A + 652E4865696768740500000000000000D404401453697A652E506C6174666F72 + 6D44656661756C7408000554506174680005416C69676E070643656E74657209 + 446174612E506174680A400000000500000000000000000000000000803F0100 + 00000000803F0000803F010000000000003F0000000001000000000000000000 + 803F0300000000000000000000000A46696C6C2E436F6C6F720708636C615768 + 6974650748697454657374080B4D617267696E732E546F700500000000000000 + E001C00A53697A652E576964746805000000000000008002400B53697A652E48 + 656967687405000000000000008001401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E650000055450617468 + 0005416C69676E070643656E74657209446174612E506174680A340000000400 + 0000000000000000000000000000010000000000803F00000000010000000000 + 003F0000803F0300000000000000000000000A46696C6C2E436F6C6F72070863 + 6C6157686974650748697454657374080B4D617267696E732E546F7005000000 + 00000000C001400A53697A652E576964746805000000000000008002400B5369 + 7A652E48656967687405000000000000008001401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500000005 + 545465787400095374796C654E616D6506047465787405416C69676E0706436C + 69656E740748697454657374080C4D617267696E732E4C656674050000000000 + 000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D6172 + 67696E732E5269676874050000000000000080FF3F0E4D617267696E732E426F + 74746F6D050000000000000080FF3F0A53697A652E5769647468050000000000 + 0080B306400B53697A652E4865696768740500000000000000CC04401453697A + 652E506C6174666F726D44656661756C7408165465787453657474696E67732E + 466F6E74436F6C6F720708636C615768697465000000545046300A5452656374 + 616E676C6500095374796C654E616D6506147374617475736261726E6F677269 + 707374796C6505416C69676E070643656E7465720C436C69704368696C647265 + 6E090A46696C6C2E436F6C6F7207097846463235323532350553696465730B03 + 546F70000A53697A652E57696474680500000000000000F004400B53697A652E + 4865696768740500000000000000C804401453697A652E506C6174666F726D44 + 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313507 + 56697369626C650800005450463007544C61796F757400095374796C654E616D + 650613736D616C6C7363726F6C6C6261727374796C6505416C69676E07064365 + 6E7465720756697369626C6508000654547261636B00095374796C654E616D65 + 060668747261636B05416C69676E0706436C69656E74064C6F636B6564090B4F + 7269656E746174696F6E070A486F72697A6F6E74616C0A53697A652E57696474 + 680500000000000000C804400B53697A652E4865696768740500000000000000 + C804401453697A652E506C6174666F726D44656661756C74080B5374796C654C + 6F6F6B757006147363726F6C6C62617268747261636B7374796C650000065454 + 7261636B00095374796C654E616D65060676747261636B05416C69676E070643 + 6C69656E74064C6F636B6564090B4F7269656E746174696F6E070A486F72697A + 6F6E74616C0A53697A652E57696474680500000000000000C804400B53697A65 + 2E4865696768740500000000000000C804401453697A652E506C6174666F726D + 44656661756C74080B5374796C654C6F6F6B757006147363726F6C6C62617276 + 747261636B7374796C650000005450463007544C61796F757400095374796C65 + 4E616D65060D73706C69747465727374796C6505416C69676E070643656E7465 + 720A53697A652E57696474680500000000000000A904400B53697A652E486569 + 6768740500000000000080C105401453697A652E506C6174666F726D44656661 + 756C74080756697369626C6508000A5452656374616E676C6500095374796C65 + 4E616D65060A52656374616E676C653105416C69676E0706436C69656E740A46 + 696C6C2E436F6C6F720709784646333033303330074869745465737408055369 + 6465730B044C656674055269676874000A53697A652E57696474680500000000 + 000000A904400B53697A652E4865696768740500000000000080C10540145369 + 7A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72 + 0709784646313531353135000007544C61796F757400095374796C654E616D65 + 06064C61796F757405416C69676E0706436C69656E740A53697A652E57696474 + 680500000000000000A904400B53697A652E4865696768740500000000000080 + C105401453697A652E506C6174666F726D44656661756C74080007544C61796F + 757400095374796C654E616D6506046772697005416C69676E070A5665727443 + 656E746572064C6F636B6564090A506F736974696F6E2E590500000000000000 + 8004400A53697A652E57696474680500000000000000A904400B53697A652E48 + 656967687405000000000000008004401453697A652E506C6174666F726D4465 + 6661756C7408000754436972636C6500095374796C654E616D65060743697263 + 6C653305416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846 + 463430343034300748697454657374080E4D617267696E732E426F74746F6D05 + 00000000000000A003400A53697A652E57696474680500000000000000E00140 + 0B53697A652E4865696768740500000000000000E001401453697A652E506C61 + 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464631 + 353135313500000754436972636C6500095374796C654E616D65060743697263 + 6C653205416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846 + 463430343034300748697454657374080B4D617267696E732E546F7005000000 + 00000000A003400A53697A652E57696474680500000000000000E001400B5369 + 7A652E4865696768740500000000000000E001401453697A652E506C6174666F + 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 + 313500000754436972636C6500095374796C654E616D650607436972636C6531 + 05416C69676E070643656E7465720A46696C6C2E436F6C6F7207097846463430 + 343034300748697454657374080A53697A652E57696474680500000000000000 + E001400B53697A652E4865696768740500000000000000E001401453697A652E + 506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F72070978 + 464631353135313500000000005450463007544C61796F757400095374796C65 + 4E616D650610636C6F7365627574746F6E7374796C6505416C69676E07064365 + 6E7465720A53697A652E57696474680500000000000000C804400B53697A652E + 4865696768740500000000000000C803401453697A652E506C6174666F726D44 + 656661756C74080756697369626C6508000A5452656374616E676C6500095374 + 796C654E616D65060B636C6F7365627574746F6E05416C69676E0706436C6965 + 6E740A46696C6C2E436F6C6F7207097846463230323032300748697454657374 + 080A53697A652E57696474680500000000000000C804400B53697A652E486569 + 6768740500000000000000C803401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E + 696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D617469 + 6F6E315374796C65084475726174696F6E05000000000000000000000C50726F + 70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C7565 + 07097846463230323032300953746F7056616C75650709784646464636313537 + 0754726967676572062049734D6F7573654F7665723D747275653B4973507265 + 737365643D66616C73650E54726967676572496E7665727365062149734D6F75 + 73654F7665723D66616C73653B4973507265737365643D66616C736500000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72 + 416E696D6174696F6E325374796C65084475726174696F6E0500000000000000 + 0000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461 + 727456616C756507097846464646363135370953746F7056616C756507097846 + 464532344634350754726967676572061F49734D6F7573654F7665723D747275 + 653B4973507265737365643D747275650E54726967676572496E766572736506 + 2049734D6F7573654F7665723D747275653B4973507265737365643D66616C73 + 6500000005545061746800095374796C654E616D650605506174683105416C69 + 676E070643656E74657209446174612E506174680AC400000010000000000000 + 000000A0C00000704101000000000070410000A0C001000000000048420000F0 + 41010000000000AA420000A0C0010000000000D242000070410100000000008C + 4200004842010000000000D2420000B442010000000000AA420000DC42020000 + 003BDF34429E6F8C4202000000FE547D427FAAB0420200000000004842000096 + 4201000000000070410000DC42010000000000A0C00000B442010000000000F0 + 4100005C42010000000000A0C000007041030000000000A0C0000070410A4669 + 6C6C2E436F6C6F720708636C6157686974650748697454657374080A53697A65 + 2E57696474680500000000000000A002400B53697A652E486569676874050000 + 0000000000A002401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E650000005450463007544C61796F757400 + 095374796C654E616D65060E6D6178627574746F6E7374796C6505416C69676E + 070643656E7465720A53697A652E57696474680500000000000000C804400B53 + 697A652E4865696768740500000000000000C803401453697A652E506C617466 + 6F726D44656661756C74080756697369626C6508000A5452656374616E676C65 + 00095374796C654E616D6506096D6178627574746F6E05416C69676E0706436C + 69656E740A46696C6C2E436F6C6F720709784646323032303230074869745465 + 7374080A53697A652E57696474680500000000000000C804400B53697A652E48 + 65696768740500000000000000C803401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72 + 416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E696D61 + 74696F6E315374796C65084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C + 756507097846463230323032300953746F7056616C7565070978464632413832 + 45320754726967676572062049734D6F7573654F7665723D747275653B497350 + 7265737365643D66616C73650E54726967676572496E7665727365062149734D + 6F7573654F7665723D66616C73653B4973507265737365643D66616C73650000 + 0F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C + 6F72416E696D6174696F6E325374796C65084475726174696F6E050000000000 + 00000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53 + 7461727456616C756507097846463241383245320953746F7056616C75650709 + 7846463137353739430754726967676572061F49734D6F7573654F7665723D74 + 7275653B4973507265737365643D747275650E54726967676572496E76657273 + 65062049734D6F7573654F7665723D747275653B4973507265737365643D6661 + 6C736500000005545061746800095374796C654E616D65060550617468310541 + 6C69676E070643656E74657209446174612E506174680A580000000700000000 + 0000000000C8420000C8420100000000002F440000C8420100000000002F4400 + 002F44010000000080094400800944010000000080094400007A430100000000 + 007A4300007A43030000000000C8420000C8420A46696C6C2E436F6C6F720708 + 636C6157686974650748697454657374080A53697A652E576964746805000000 + 00000000A002400B53697A652E4865696768740500000000000000A002401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E650000005450463007544C61796F757400095374796C654E616D65 + 060E726573627574746F6E7374796C6505416C69676E070643656E7465720A53 + 697A652E57696474680500000000000000C804400B53697A652E486569676874 + 0500000000000000C803401453697A652E506C6174666F726D44656661756C74 + 080756697369626C6508000A5452656374616E676C6500095374796C654E616D + 650609726573627574746F6E05416C69676E0706436C69656E740A46696C6C2E + 436F6C6F7207097846463230323032300748697454657374080A53697A652E57 + 696474680500000000000000C804400B53697A652E4865696768740500000000 + 000000C803401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D650614436F6C6F72416E696D6174696F6E315374796C65 + 084475726174696F6E05000000000000000000000C50726F70657274794E616D + 65060A46696C6C2E436F6C6F720A537461727456616C75650709784646323032 + 3032300953746F7056616C756507097846463241383245320754726967676572 + 062049734D6F7573654F7665723D747275653B4973507265737365643D66616C + 73650E54726967676572496E7665727365062149734D6F7573654F7665723D66 + 616C73653B4973507265737365643D66616C736500000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D650614436F6C6F72416E696D6174696F + 6E325374796C65084475726174696F6E05000000000000000000000C50726F70 + 657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C756507 + 097846463241383245320953746F7056616C7565070978464631373537394307 + 54726967676572061F49734D6F7573654F7665723D747275653B497350726573 + 7365643D747275650E54726967676572496E7665727365062049734D6F757365 + 4F7665723D747275653B4973507265737365643D66616C736500000005545061 + 746800095374796C654E616D650605506174683105416C69676E070643656E74 + 657209446174612E506174680A5800000007000000000000000000C8420000C8 + 420100000000002F440000C8420100000000002F4400002F4401000000008009 + 4400800944010000000080094400007A430100000000007A4300007A43030000 + 000000C8420000C8420A46696C6C2E436F6C6F720708636C6157686974650748 + 697454657374080D526F746174696F6E416E676C650500000000000000B40640 + 0A53697A652E57696474680500000000000000A002400B53697A652E48656967 + 68740500000000000000A002401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E650000005450463007544C61 + 796F757400095374796C654E616D65060E6D696E627574746F6E7374796C6505 + 416C69676E070643656E7465720A53697A652E57696474680500000000000000 + C804400B53697A652E4865696768740500000000000000C803401453697A652E + 506C6174666F726D44656661756C74080756697369626C6508000A5452656374 + 616E676C6500095374796C654E616D6506096D696E627574746F6E05416C6967 + 6E0706436C69656E740A46696C6C2E436F6C6F72070978464632303230323007 + 48697454657374080A53697A652E57696474680500000000000000C804400B53 + 697A652E4865696768740500000000000000C803401453697A652E506C617466 + 6F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54 + 436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72 + 416E696D6174696F6E315374796C65084475726174696F6E0500000000000000 + 0000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A537461 + 727456616C756507097846463230323032300953746F7056616C756507097846 + 463241383245320754726967676572062049734D6F7573654F7665723D747275 + 653B4973507265737365643D66616C73650E54726967676572496E7665727365 + 062149734D6F7573654F7665723D66616C73653B4973507265737365643D6661 + 6C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 + 0614436F6C6F72416E696D6174696F6E325374796C65084475726174696F6E05 + 000000000000000000000C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463241383245320953746F705661 + 6C756507097846463137353739430754726967676572061F49734D6F7573654F + 7665723D747275653B4973507265737365643D747275650E5472696767657249 + 6E7665727365062049734D6F7573654F7665723D747275653B49735072657373 + 65643D66616C736500000005545061746800095374796C654E616D6506055061 + 74683105416C69676E070643656E74657209446174612E506174680A40000000 + 050000000000000000002F44008009440100000000002F4400002F4401000000 + 0000C84200002F44010000000000C842008009440300000000002F4400800944 + 0A46696C6C2E436F6C6F720708636C6157686974650748697454657374080B4D + 617267696E732E546F700500000000000000A002400D526F746174696F6E416E + 676C650500000000000000B406400A53697A652E576964746805000000000000 + 00A002400B53697A652E4865696768740500000000000000C000401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E650000005450463007544C61796F757400095374796C654E616D65060F74 + 6F6F6C77696E646F777374796C6505416C69676E070643656E7465720A53697A + 652E576964746805000000000056D5AF07400B53697A652E4865696768740500 + 000000000000B306401453697A652E506C6174666F726D44656661756C740807 + 56697369626C6508000A5452656374616E676C6500095374796C654E616D6506 + 046D61736B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72 + 07097846463130313031300A53697A652E576964746805000000000056D5AF07 + 400B53697A652E4865696768740500000000000000B306401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 0756697369626C6508000007544C61796F757400095374796C654E616D650604 + 6C65667405416C69676E07084D6F73744C656674064C6F636B6564090A506F73 + 6974696F6E2E590500000000000000C803400A53697A652E5769647468050000 + 0000000000A001400B53697A652E48656967687405000000000000009A064014 + 53697A652E506C6174666F726D44656661756C7408000A5452656374616E676C + 650005416C69676E07084D6F73744C6566740A46696C6C2E436F6C6F72070978 + 46463230323032300748697454657374080553696465730B044C656674055269 + 676874000A53697A652E57696474680500000000000000A001400B53697A652E + 48656967687405000000000000009506401453697A652E506C6174666F726D44 + 656661756C74080C5374726F6B652E436F6C6F72070978464631353135313500 + 000A5452656374616E676C6500095374796C654E616D65060A52656374616E67 + 6C653105416C69676E070A4D6F7374426F74746F6D13456E61626C6544726167 + 486967686C69676874080A46696C6C2E436F6C6F720709784646323032303230 + 0748697454657374080A506F736974696F6E2E59050000000000000095064005 + 53696465730B044C65667406426F74746F6D000A53697A652E57696474680500 + 000000000000A001400B53697A652E4865696768740500000000000000A00140 + 1453697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F + 6C6F7207097846463135313531350007544C61796F757400095374796C654E61 + 6D6506074C61796F75743305416C69676E07094D6F737452696768740A506F73 + 6974696F6E2E5805000000000000008001400A53697A652E5769647468050000 + 000000000080FF3F0B53697A652E4865696768740500000000000000A0014014 + 53697A652E506C6174666F726D44656661756C7408000A5452656374616E676C + 6500095374796C654E616D65060A52656374616E676C653105416C69676E0703 + 546F700A46696C6C2E436F6C6F72070978464631353135313507486974546573 + 74080A53697A652E5769647468050000000000000080FF3F0B53697A652E4865 + 69676874050000000000000080FF3F1453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65000000000007544C61 + 796F757400095374796C654E616D650605726967687405416C69676E07094D6F + 73745269676874064C6F636B6564090A506F736974696F6E2E58050000000000 + 5655AD07400A506F736974696F6E2E590500000000000000C803400A53697A65 + 2E57696474680500000000000000A001400B53697A652E486569676874050000 + 00000000009A06401453697A652E506C6174666F726D44656661756C7408000A + 5452656374616E676C650005416C69676E07094D6F737452696768740A46696C + 6C2E436F6C6F7207097846463230323032300748697454657374080553696465 + 730B044C656674055269676874000A53697A652E576964746805000000000000 + 00A001400B53697A652E48656967687405000000000000009506401453697A65 + 2E506C6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709 + 78464631353135313500000A5452656374616E676C6500095374796C654E616D + 65060A52656374616E676C653105416C69676E070A4D6F7374426F74746F6D13 + 456E61626C6544726167486967686C69676874080A46696C6C2E436F6C6F7207 + 097846463230323032300748697454657374080A506F736974696F6E2E590500 + 0000000000009506400553696465730B06426F74746F6D055269676874000A53 + 697A652E57696474680500000000000000A001400B53697A652E486569676874 + 0500000000000000A001401453697A652E506C6174666F726D44656661756C74 + 080C5374726F6B652E436F6C6F7207097846463135313531350007544C61796F + 757400095374796C654E616D6506074C61796F75743305416C69676E07084D6F + 73744C6566740A53697A652E5769647468050000000000000080FF3F0B53697A + 652E4865696768740500000000000000A001401453697A652E506C6174666F72 + 6D44656661756C7408000A5452656374616E676C6500095374796C654E616D65 + 060A52656374616E676C653105416C69676E0703546F700A46696C6C2E436F6C + 6F7207097846463135313531350748697454657374080A53697A652E57696474 + 68050000000000000080FF3F0B53697A652E4865696768740500000000000000 + 80FF3F1453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E6500000000000A5452656374616E676C650005416C69 + 676E07074D6F7374546F700A46696C6C2E436F6C6F7207097846463230323032 + 30064C6F636B6564090748697454657374080A53697A652E5769647468050000 + 00000056D5AF07400B53697A652E4865696768740500000000000000C8034014 + 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C + 6F7207097846463135313531350007544C61796F757400095374796C654E616D + 65060763617074696F6E05416C69676E0708436F6E74656E7473064C6F636B65 + 64090748697454657374090A53697A652E576964746805000000000056D5AF07 + 400B53697A652E4865696768740500000000000000C803401453697A652E506C + 6174666F726D44656661756C7408000007544C61796F75740005416C69676E07 + 06436C69656E74064C6F636B6564090C4D617267696E732E4C65667405000000 + 0000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F0D4D + 617267696E732E5269676874050000000000000080FF3F0E4D617267696E732E + 426F74746F6D050000000000000080FF3F0A53697A652E576964746805000000 + 000056D5AE07400B53697A652E4865696768740500000000000000B803401453 + 697A652E506C6174666F726D44656661756C74080007544C61796F7574000541 + 6C69676E07044C656674064C6F636B6564090A53697A652E5769647468050000 + 00000000009002400B53697A652E4865696768740500000000000000B8034014 + 53697A652E506C6174666F726D44656661756C7408000007544C61796F757400 + 095374796C654E616D65060773797362746E7305416C69676E0706436C69656E + 74064C6F636B6564090A53697A652E57696474680500000000005655AA07400B + 53697A652E4865696768740500000000000000B803401453697A652E506C6174 + 666F726D44656661756C7408000C545370656564427574746F6E00095374796C + 654E616D650605636C6F736505416C69676E07055269676874064C6F636B6564 + 090A506F736974696F6E2E5805000000000056D59D07400A53697A652E576964 + 74680500000000000000C803400B53697A652E48656967687405000000000000 + 00B803401453697A652E506C6174666F726D44656661756C74080B5374796C65 + 4C6F6F6B75700610636C6F7365627574746F6E7374796C650000055454657874 + 00095374796C654E616D6506057469746C6505416C69676E0706436C69656E74 + 064C6F636B6564090748697454657374080A53697A652E576964746805000000 + 000056D59D07400B53697A652E4865696768740500000000000000B803401453 + 697A652E506C6174666F726D44656661756C7408045465787406055469746C65 + 165465787453657474696E67732E466F6E74436F6C6F720708636C6157686974 + 65000000000007544C61796F757400095374796C654E616D650606636C69656E + 7405416C69676E0706436C69656E74064C6F636B656409074869745465737409 + 0A53697A652E576964746805000000000056D5AA07400B53697A652E48656967 + 687405000000000000009506401453697A652E506C6174666F726D4465666175 + 6C7408000007544C61796F757400095374796C654E616D650606626F74746F6D + 05416C69676E0706426F74746F6D064C6F636B6564090A506F736974696F6E2E + 580500000000000000A001400A506F736974696F6E2E590500000000000000AE + 06400A53697A652E576964746805000000000056D5AA07400B53697A652E4865 + 696768740500000000000000A001401453697A652E506C6174666F726D446566 + 61756C7408000A5452656374616E676C6500095374796C654E616D6506047265 + 637405416C69676E0706426F74746F6D0A46696C6C2E436F6C6F720709784646 + 3230323032300553696465730B03546F7006426F74746F6D000A53697A652E57 + 6964746805000000000056D5AA07400B53697A652E4865696768740500000000 + 000000A001401453697A652E506C6174666F726D44656661756C74080C537472 + 6F6B652E436F6C6F720709784646313531353135000000005450463007544C61 + 796F757400095374796C654E616D65061177696E646F77626F72646572737479 + 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 + 0056D5AF07400B53697A652E4865696768740500000000000000B30640145369 + 7A652E506C6174666F726D44656661756C74080756697369626C6508000A5452 + 656374616E676C6500095374796C654E616D6506046D61736B05416C69676E07 + 08436F6E74656E74730A46696C6C2E436F6C6F7207097846463130313031300A + 53697A652E576964746805000000000056D5AF07400B53697A652E4865696768 + 740500000000000000B306401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E650756697369626C6508000007 + 544C61796F757400095374796C654E616D6506046C65667405416C69676E0708 + 4D6F73744C656674064C6F636B6564090A506F736974696F6E2E590500000000 + 000000F003400A53697A652E57696474680500000000000000A001400B53697A + 652E48656967687405000000000000009506401453697A652E506C6174666F72 + 6D44656661756C7408000A5452656374616E676C650005416C69676E07084D6F + 73744C6566740A46696C6C2E436F6C6F72070978464632303230323007486974 + 54657374080553696465730B044C656674055269676874000A53697A652E5769 + 6474680500000000000000A001400B53697A652E486569676874050000000000 + 00009006401453697A652E506C6174666F726D44656661756C74080C5374726F + 6B652E436F6C6F72070978464631353135313500000A5452656374616E676C65 + 00095374796C654E616D65060A52656374616E676C653105416C69676E070A4D + 6F7374426F74746F6D13456E61626C6544726167486967686C69676874080A46 + 696C6C2E436F6C6F7207097846463230323032300748697454657374080A506F + 736974696F6E2E5905000000000000009006400553696465730B044C65667406 + 426F74746F6D000A53697A652E57696474680500000000000000A001400B5369 + 7A652E4865696768740500000000000000A001401453697A652E506C6174666F + 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 + 31350007544C61796F757400095374796C654E616D6506074C61796F75743305 + 416C69676E07094D6F737452696768740A506F736974696F6E2E580500000000 + 0000008001400A53697A652E5769647468050000000000000080FF3F0B53697A + 652E4865696768740500000000000000A001401453697A652E506C6174666F72 + 6D44656661756C7408000A5452656374616E676C6500095374796C654E616D65 + 060A52656374616E676C653105416C69676E0703546F700A46696C6C2E436F6C + 6F7207097846463135313531350748697454657374080A53697A652E57696474 + 68050000000000000080FF3F0B53697A652E4865696768740500000000000000 + 80FF3F1453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E65000000000007544C61796F757400095374796C654E + 616D650605726967687405416C69676E07094D6F73745269676874064C6F636B + 6564090A506F736974696F6E2E580500000000005655AD07400A506F73697469 + 6F6E2E590500000000000000F003400A53697A652E5769647468050000000000 + 0000A001400B53697A652E48656967687405000000000000009506401453697A + 652E506C6174666F726D44656661756C7408000A5452656374616E676C650005 + 416C69676E07094D6F737452696768740A46696C6C2E436F6C6F720709784646 + 3230323032300748697454657374080553696465730B044C6566740552696768 + 74000A53697A652E57696474680500000000000000A001400B53697A652E4865 + 6967687405000000000000009006401453697A652E506C6174666F726D446566 + 61756C74080C5374726F6B652E436F6C6F72070978464631353135313500000A + 5452656374616E676C6500095374796C654E616D65060A52656374616E676C65 + 3105416C69676E070A4D6F7374426F74746F6D13456E61626C65447261674869 + 67686C69676874080A46696C6C2E436F6C6F7207097846463230323032300748 + 697454657374080A506F736974696F6E2E590500000000000000900640055369 + 6465730B06426F74746F6D055269676874000A53697A652E5769647468050000 + 0000000000A001400B53697A652E4865696768740500000000000000A0014014 + 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C + 6F7207097846463135313531350007544C61796F757400095374796C654E616D + 6506074C61796F75743305416C69676E07084D6F73744C6566740A53697A652E + 5769647468050000000000000080FF3F0B53697A652E48656967687405000000 + 00000000A001401453697A652E506C6174666F726D44656661756C7408000A54 + 52656374616E676C6500095374796C654E616D65060A52656374616E676C6531 + 05416C69676E0703546F700A46696C6C2E436F6C6F7207097846463135313531 + 350748697454657374080A53697A652E5769647468050000000000000080FF3F + 0B53697A652E486569676874050000000000000080FF3F1453697A652E506C61 + 74666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6500 + 000000000A5452656374616E676C650005416C69676E07074D6F7374546F700A + 46696C6C2E436F6C6F720709784646323032303230064C6F636B656409074869 + 7454657374080A53697A652E576964746805000000000056D5AF07400B53697A + 652E4865696768740500000000000000F003401453697A652E506C6174666F72 + 6D44656661756C74080C5374726F6B652E436F6C6F7207097846463135313531 + 350007544C61796F757400095374796C654E616D65060763617074696F6E0541 + 6C69676E0708436F6E74656E7473064C6F636B6564090748697454657374090A + 53697A652E576964746805000000000056D5AF07400B53697A652E4865696768 + 740500000000000000F003401453697A652E506C6174666F726D44656661756C + 7408000007544C61796F75740005416C69676E0706436C69656E74064C6F636B + 6564090C4D617267696E732E4C656674050000000000000080FF3F0B4D617267 + 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 + 050000000000000080FF3F0E4D617267696E732E426F74746F6D050000000000 + 000080FF3F0A53697A652E576964746805000000000056D5AE07400B53697A65 + 2E4865696768740500000000000000E003401453697A652E506C6174666F726D + 44656661756C74080007544C61796F75740005416C69676E07044C656674064C + 6F636B6564090A53697A652E576964746805000000000000009002400B53697A + 652E4865696768740500000000000000E003401453697A652E506C6174666F72 + 6D44656661756C7408000007544C61796F757400095374796C654E616D650604 + 69636F6E064C6F636B6564090A506F736974696F6E2E58050000000000000090 + 02400A506F736974696F6E2E590500000000000000E001400A53697A652E5769 + 6474680500000000000000C803400B53697A652E486569676874050000000000 + 0000A803401453697A652E506C6174666F726D44656661756C7408000007544C + 61796F757400095374796C654E616D65060773797362746E7305416C69676E07 + 06436C69656E74064C6F636B6564090A53697A652E5769647468050000000000 + 5655AA07400B53697A652E4865696768740500000000000000E003401453697A + 652E506C6174666F726D44656661756C7408000C545370656564427574746F6E + 00095374796C654E616D650605636C6F736505416C69676E0705526967687406 + 4C6F636B6564090A506F736974696F6E2E5805000000000056559107400A5369 + 7A652E57696474680500000000000000C804400B53697A652E48656967687405 + 00000000000000E003401453697A652E506C6174666F726D44656661756C7408 + 0B5374796C654C6F6F6B75700610636C6F7365627574746F6E7374796C650000 + 0C545370656564427574746F6E00095374796C654E616D6506036D617805416C + 69676E07055269676874064C6F636B6564090A506F736974696F6E2E58050000 + 00000056558207400A53697A652E57696474680500000000000000F003400B53 + 697A652E4865696768740500000000000000E003401453697A652E506C617466 + 6F726D44656661756C74080B5374796C654C6F6F6B7570060E6D617862757474 + 6F6E7374796C6500000C545370656564427574746F6E00095374796C654E616D + 65060372657305416C69676E07055269676874064C6F636B6564090A506F7369 + 74696F6E2E58050000000000ACAAE606400A53697A652E576964746805000000 + 00000000F003400B53697A652E4865696768740500000000000000E003401453 + 697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570 + 060E726573627574746F6E7374796C6500000C545370656564427574746F6E00 + 095374796C654E616D6506036D696E05416C69676E07055269676874064C6F63 + 6B6564090A506F736974696F6E2E58050000000000ACAAC806400A53697A652E + 57696474680500000000000000F003400B53697A652E48656967687405000000 + 00000000E003401453697A652E506C6174666F726D44656661756C74080B5374 + 796C654C6F6F6B7570060E6D696E627574746F6E7374796C6500000554546578 + 7400095374796C654E616D6506057469746C6505416C69676E0706436C69656E + 74064C6F636B6564090748697454657374080A53697A652E5769647468050000 + 000000ACAAC806400B53697A652E4865696768740500000000000000E0034014 + 53697A652E506C6174666F726D44656661756C7408045465787406055469746C + 65165465787453657474696E67732E466F6E74436F6C6F720708636C61576869 + 7465000000000007544C61796F757400095374796C654E616D650606636C6965 + 6E7405416C69676E0706436C69656E74064C6F636B6564090748697454657374 + 090A53697A652E576964746805000000000056D5AA07400B53697A652E486569 + 67687405000000000000009006401453697A652E506C6174666F726D44656661 + 756C7408000007544C61796F757400095374796C654E616D650606626F74746F + 6D05416C69676E0706426F74746F6D064C6F636B6564090A506F736974696F6E + 2E580500000000000000A001400A506F736974696F6E2E590500000000000000 + AE06400A53697A652E576964746805000000000056D5AA07400B53697A652E48 + 65696768740500000000000000A001401453697A652E506C6174666F726D4465 + 6661756C7408000A5452656374616E676C6500095374796C654E616D65060472 + 65637405416C69676E0706426F74746F6D0A46696C6C2E436F6C6F7207097846 + 463230323032300748697454657374080553696465730B03546F7006426F7474 + 6F6D000A53697A652E576964746805000000000056D5AA07400B53697A652E48 + 65696768740500000000000000A001401453697A652E506C6174666F726D4465 + 6661756C74080C5374726F6B652E436F6C6F7207097846463135313531350000 + 00005450463007544C61796F757400095374796C654E616D650610726164696F + 627574746F6E7374796C6505416C69676E070643656E7465720A53697A652E57 + 696474680500000000000000F205400B53697A652E4865696768740500000000 + 000000A803401453697A652E506C6174666F726D44656661756C740807566973 + 69626C65080007544C61796F75740005416C69676E07044C6566740A53697A65 + 2E57696474680500000000000000A803400B53697A652E486569676874050000 + 0000000000A803401453697A652E506C6174666F726D44656661756C74080008 + 54456C6C6970736500095374796C654E616D65060A6261636B67726F756E6405 + 416C69676E070643656E7465720A46696C6C2E436F6C6F720709784646323032 + 303230064C6F636B6564090748697454657374080A53697A652E576964746805 + 00000000000000F002400B53697A652E4865696768740500000000000000F002 + 401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E43 + 6F6C6F720709784646313531353135000854456C6C6970736500095374796C65 + 4E616D650609636865636B6D61726B05416C69676E0706436C69656E740A4669 + 6C6C2E436F6C6F720709784646324138324532064C6F636B6564090748697454 + 65737408074F70616369747905000000000000000000000C4D617267696E732E + 4C65667405000000000000008000400B4D617267696E732E546F700500000000 + 0000008000400D4D617267696E732E526967687405000000000000008000400E + 4D617267696E732E426F74746F6D05000000000000008000400A53697A652E57 + 696474680500000000000000B002400B53697A652E4865696768740500000000 + 000000B002401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E00 + 095374796C654E616D65061A6F706163697479436865636B6D61726B416E696D + 6174696F6E31084475726174696F6E05000000000000000000000C50726F7065 + 7274794E616D6506074F7061636974790A537461727456616C75650500000000 + 0000000000000953746F7056616C7565050000000000000080FF3F0754726967 + 676572060E4973436865636B65643D747275650E54726967676572496E766572 + 7365060F4973436865636B65643D66616C73650000000F54436F6C6F72416E69 + 6D6174696F6E00095374796C654E616D65061A726164696F627574746F6E436F + 6C6F72416E696D6174696F6E31084475726174696F6E05000000000000000000 + 0007496E7665727365090C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463230323032300953746F705661 + 6C756507097846463430343034300754726967676572061049734D6F7573654F + 7665723D747275650E54726967676572496E7665727365061149734D6F757365 + 4F7665723D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650614436F6C6F72416E696D6174696F6E315374796C65084475 + 726174696F6E05000000000000000000000C50726F70657274794E616D65060C + 5374726F6B652E436F6C6F720A537461727456616C7565070978464631353135 + 31350953746F7056616C75650709784646324138324532075472696767657206 + 0E4973436865636B65643D747275650E54726967676572496E7665727365060F + 4973436865636B65643D66616C73650000000005545465787400095374796C65 + 4E616D6506047465787405416C69676E0706436C69656E74064C6F636B656409 + 0748697454657374080A53697A652E57696474680500000000000000C805400B + 53697A652E4865696768740500000000000000A803401453697A652E506C6174 + 666F726D44656661756C7408165465787453657474696E67732E466F6E74436F + 6C6F720708636C6157686974650000005450463007544C61796F757400095374 + 796C654E616D650618756C63656E746572726164696F627574746F6E7374796C + 6505416C69676E070643656E7465720A53697A652E5769647468050000000000 + 5655FB05400B53697A652E4865696768740500000000000000A004401453697A + 652E506C6174666F726D44656661756C74080756697369626C65080007544C61 + 796F75740005416C69676E0706426F74746F6D0A506F736974696F6E2E590500 + 0000000000008804400A53697A652E57696474680500000000005655FB05400B + 53697A652E4865696768740500000000000000C001401453697A652E506C6174 + 666F726D44656661756C7408000A5452656374616E676C6500095374796C654E + 616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E747307 + 436F726E6572730B07546F704C6566740A426F74746F6D4C656674000A46696C + 6C2E436F6C6F720709784646323032303230064C6F636B656409074869745465 + 7374080A53697A652E57696474680500000000005655FB05400B53697A652E48 + 65696768740500000000000000C001401453697A652E506C6174666F726D4465 + 6661756C74080C5374726F6B652E436F6C6F720709784646313531353135000F + 54436F6C6F72416E696D6174696F6E00095374796C654E616D6506216261636B + 67726F756E64556C427574746F6E436F6C6F72416E696D6174696F6E31084475 + 726174696F6E050000000000000000000007496E7665727365090C50726F7065 + 7274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709 + 7846463230323032300953746F7056616C756507097846463430343034300754 + 726967676572061049734D6F7573654F7665723D747275650E54726967676572 + 496E7665727365061149734D6F7573654F7665723D66616C736500000A545265 + 6374616E676C6500095374796C654E616D650609636865636B6D61726B05416C + 69676E0708436F6E74656E747307436F726E6572730B07546F704C6566740A42 + 6F74746F6D4C656674000A46696C6C2E436F6C6F720709784646324138324532 + 064C6F636B656409074869745465737408074F70616369747905000000000000 + 000000000C4D617267696E732E4C656674050000000000000080FF3F0B4D6172 + 67696E732E546F70050000000000000080FF3F0D4D617267696E732E52696768 + 74050000000000000080FF3F0E4D617267696E732E426F74746F6D0500000000 + 00000080FF3F0A53697A652E57696474680500000000005655F705400B53697A + 652E48656967687405000000000000008001401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54466C + 6F6174416E696D6174696F6E00095374796C654E616D65061A636865636B6D61 + 726B4F706163697479416E696D6174696F6E31084475726174696F6E05000000 + 000000000000000C50726F70657274794E616D6506074F7061636974790A5374 + 61727456616C756505000000000000000000000953746F7056616C7565050000 + 000000000080FF3F0754726967676572060E4973436865636B65643D74727565 + 0E54726967676572496E7665727365060F4973436865636B65643D66616C7365 + 000000000005545465787400095374796C654E616D6506047465787405416C69 + 676E0706436C69656E74064C6F636B6564090748697454657374080A53697A65 + 2E57696474680500000000005655FB05400B53697A652E486569676874050000 + 00000000008804401453697A652E506C6174666F726D44656661756C74081654 + 65787453657474696E67732E466F6E74436F6C6F720708636C61576869746500 + 00005450463007544C61796F757400095374796C654E616D650617756C726967 + 6874726164696F627574746F6E7374796C6505416C69676E070643656E746572 + 0A53697A652E57696474680500000000005655FB05400B53697A652E48656967 + 68740500000000000000A004401453697A652E506C6174666F726D4465666175 + 6C74080756697369626C65080007544C61796F75740005416C69676E0706426F + 74746F6D0A506F736974696F6E2E5905000000000000008804400A53697A652E + 57696474680500000000005655FB05400B53697A652E48656967687405000000 + 00000000C001401453697A652E506C6174666F726D44656661756C7408000A54 + 52656374616E676C6500095374796C654E616D65060A6261636B67726F756E64 + 05416C69676E0708436F6E74656E747307436F726E6572730B08546F70526967 + 68740B426F74746F6D5269676874000A46696C6C2E436F6C6F72070978464632 + 3032303230064C6F636B6564090748697454657374080A53697A652E57696474 + 680500000000005655FB05400B53697A652E4865696768740500000000000000 + C001401453697A652E506C6174666F726D44656661756C74080C5374726F6B65 + 2E436F6C6F720709784646313531353135000F54436F6C6F72416E696D617469 + 6F6E00095374796C654E616D6506216261636B67726F756E64556C427574746F + 6E436F6C6F72416E696D6174696F6E31084475726174696F6E05000000000000 + 0000000007496E7665727365090C50726F70657274794E616D65060A46696C6C + 2E436F6C6F720A537461727456616C756507097846463230323032300953746F + 7056616C756507097846463430343034300754726967676572061049734D6F75 + 73654F7665723D747275650E54726967676572496E7665727365061149734D6F + 7573654F7665723D66616C736500000A5452656374616E676C6500095374796C + 654E616D650609636865636B6D61726B05416C69676E0708436F6E74656E7473 + 07436F726E6572730B08546F7052696768740B426F74746F6D5269676874000A + 46696C6C2E436F6C6F720709784646324138324532064C6F636B656409074869 + 745465737408074F70616369747905000000000000000000000C4D617267696E + 732E4C656674050000000000000080FF3F0B4D617267696E732E546F70050000 + 000000000080FF3F0D4D617267696E732E5269676874050000000000000080FF + 3F0E4D617267696E732E426F74746F6D050000000000000080FF3F0A53697A65 + 2E57696474680500000000005655F705400B53697A652E486569676874050000 + 00000000008001401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F + 6E00095374796C654E616D65061A636865636B6D61726B4F706163697479416E + 696D6174696F6E31084475726174696F6E05000000000000000000000C50726F + 70657274794E616D6506074F7061636974790A537461727456616C7565050000 + 00000000000000000953746F7056616C7565050000000000000080FF3F075472 + 6967676572060E4973436865636B65643D747275650E54726967676572496E76 + 65727365060F4973436865636B65643D66616C73650000000000055454657874 + 00095374796C654E616D6506047465787405416C69676E0706436C69656E7406 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 005655FB05400B53697A652E4865696768740500000000000000880440145369 + 7A652E506C6174666F726D44656661756C7408165465787453657474696E6773 + 2E466F6E74436F6C6F720708636C6157686974650000005450463007544C6179 + 6F757400095374796C654E616D650616756C6C656674726164696F627574746F + 6E7374796C6505416C69676E070643656E7465720A53697A652E576964746805 + 00000000005655FB05400B53697A652E4865696768740500000000000000A004 + 401453697A652E506C6174666F726D44656661756C74080756697369626C6508 + 0007544C61796F75740005416C69676E0706426F74746F6D0A506F736974696F + 6E2E5905000000000000008804400A53697A652E576964746805000000000056 + 55FB05400B53697A652E4865696768740500000000000000C001401453697A65 + 2E506C6174666F726D44656661756C7408000A5452656374616E676C65000953 + 74796C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74 + 656E747307436F726E6572730B07546F704C6566740A426F74746F6D4C656674 + 000A46696C6C2E436F6C6F720709784646323032303230064C6F636B65640907 + 48697454657374080A53697A652E57696474680500000000005655FB05400B53 + 697A652E4865696768740500000000000000C001401453697A652E506C617466 + 6F726D44656661756C74080C5374726F6B652E436F6C6F720709784646313531 + 353135000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 216261636B67726F756E64556C427574746F6E436F6C6F72416E696D6174696F + 6E31084475726174696F6E050000000000000000000007496E7665727365090C + 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 + 6C756507097846463230323032300953746F7056616C75650709784646343034 + 3034300754726967676572061049734D6F7573654F7665723D747275650E5472 + 6967676572496E7665727365061149734D6F7573654F7665723D66616C736500 + 000A5452656374616E676C6500095374796C654E616D650609636865636B6D61 + 726B05416C69676E0708436F6E74656E747307436F726E6572730B07546F704C + 6566740A426F74746F6D4C656674000A46696C6C2E436F6C6F72070978464632 + 4138324532064C6F636B656409074869745465737408074F7061636974790500 + 0000000000000000000C4D617267696E732E4C656674050000000000000080FF + 3F0B4D617267696E732E546F70050000000000000080FF3F0D4D617267696E73 + 2E5269676874050000000000000080FF3F0E4D617267696E732E426F74746F6D + 050000000000000080FF3F0A53697A652E57696474680500000000005655F705 + 400B53697A652E48656967687405000000000000008001401453697A652E506C + 6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65 + 000F54466C6F6174416E696D6174696F6E00095374796C654E616D65061A6368 + 65636B6D61726B4F706163697479416E696D6174696F6E31084475726174696F + 6E05000000000000000000000C50726F70657274794E616D6506074F70616369 + 74790A537461727456616C756505000000000000000000000953746F7056616C + 7565050000000000000080FF3F0754726967676572060E4973436865636B6564 + 3D747275650E54726967676572496E7665727365060F4973436865636B65643D + 66616C7365000000000005545465787400095374796C654E616D650604746578 + 7405416C69676E0706436C69656E74064C6F636B656409074869745465737408 + 0A53697A652E57696474680500000000005655FB05400B53697A652E48656967 + 687405000000000000008804401453697A652E506C6174666F726D4465666175 + 6C7408165465787453657474696E67732E466F6E74436F6C6F720708636C6157 + 686974650000005450463007544C61796F757400095374796C654E616D650616 + 70726F677265737362617266696E6973687374796C6505416C69676E07064365 + 6E7465720A53697A652E576964746805000000000033338505400B53697A652E + 4865696768740500000000009999E104401453697A652E506C6174666F726D44 + 656661756C74080756697369626C6508000A5452656374616E676C6500095374 + 796C654E616D65060668747261636B05416C69676E0708436F6E74656E74730A + 46696C6C2E436F6C6F720709784646323032303230064C6F636B656409074869 + 7454657374080A53697A652E576964746805000000000033338505400B53697A + 652E4865696768740500000000009999E104401453697A652E506C6174666F72 + 6D44656661756C74080C5374726F6B652E436F6C6F7207097846463135313531 + 35000A5452656374616E676C6500095374796C654E616D65060A68696E646963 + 61746F7205416C69676E07044C6566740A46696C6C2E436F6C6F720709784646 + 324345323434064C6F636B6564090748697454657374080C4D617267696E732E + 4C656674050000000000000080FF3F0B4D617267696E732E546F700500000000 + 00000080FF3F0D4D617267696E732E5269676874050000000000000080FF3F0E + 4D617267696E732E426F74746F6D050000000000000080FF3F0A506F73697469 + 6F6E2E58050000000000000080FF3F0A506F736974696F6E2E59050000000000 + 000080FF3F0A53697A652E57696474680500000000000000C804400B53697A65 + 2E4865696768740500000000009999D904401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000000A5452 + 656374616E676C6500095374796C654E616D65060676747261636B05416C6967 + 6E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846463230323032 + 30064C6F636B6564090748697454657374080A53697A652E5769647468050000 + 00000033338505400B53697A652E4865696768740500000000009999E1044014 + 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C + 6F720709784646313531353135000A5452656374616E676C6500095374796C65 + 4E616D65060A76696E64696361746F7205416C69676E0706426F74746F6D0A46 + 696C6C2E436F6C6F720709784646324345323434064C6F636B65640907486974 + 54657374080C4D617267696E732E4C656674050000000000000080FF3F0B4D61 + 7267696E732E546F70050000000000000080FF3F0D4D617267696E732E526967 + 6874050000000000000080FF3F0E4D617267696E732E426F74746F6D05000000 + 0000000080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F + 736974696F6E2E5905000000000099998904400A53697A652E57696474680500 + 0000000033338105400B53697A652E4865696768740500000000000000A80340 + 1453697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B69 + 6E6407044E6F6E65000000005450463007544C61796F757400095374796C654E + 616D65060D657870616E6465727374796C6505416C69676E070643656E746572 + 0A53697A652E576964746805000000000000C08407400B53697A652E48656967 + 68740500000000000000C803401453697A652E506C6174666F726D4465666175 + 6C74080756697369626C6508000A5452656374616E676C6500095374796C654E + 616D65060B626772656374616E676C6505416C69676E0708436F6E74656E7473 + 0C436C69704368696C6472656E090A46696C6C2E436F6C6F7207097846463244 + 32443244064C6F636B6564090748697454657374080A53697A652E5769647468 + 05000000000000C08407400B53697A652E4865696768740500000000000000C8 + 03401453697A652E506C6174666F726D44656661756C74080C5374726F6B652E + 436F6C6F7207097846463135313531350007544C61796F757400095374796C65 + 4E616D6506074C61796F75743305416C69676E0703546F700A53697A652E5769 + 64746805000000000000C08407400B53697A652E486569676874050000000000 + 0000C803401453697A652E506C6174666F726D44656661756C74080007544C61 + 796F757400095374796C654E616D6506074C61796F75743405416C69676E0708 + 436F6E74656E74730A53697A652E576964746805000000000000C08407400B53 + 697A652E4865696768740500000000000000C803401453697A652E506C617466 + 6F726D44656661756C7408000A5452656374616E676C6500095374796C654E61 + 6D65060A52656374616E676C653205416C69676E0708436F6E74656E74730A46 + 696C6C2E436F6C6F720709784646323532353235064C6F636B65640907486974 + 54657374080A53697A652E576964746805000000000000C08407400B53697A65 + 2E4865696768740500000000000000C803401453697A652E506C6174666F726D + 44656661756C74080C5374726F6B652E436F6C6F720709784646313531353135 + 00000A5452656374616E676C6500095374796C654E616D65060A52656374616E + 676C653105416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F7207 + 09784646313531353135064C6F636B6564090748697454657374080A53697A65 + 2E576964746805000000000000C08407400B53697A652E486569676874050000 + 0000000000C803401453697A652E506C6174666F726D44656661756C74080B53 + 74726F6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F + 6E00095374796C654E616D650614466C6F6174416E696D6174696F6E31537479 + 6C65084475726174696F6E050000000000CDCCCCFB3F0D496E746572706F6C61 + 74696F6E070843697263756C61720C50726F70657274794E616D650607536361 + 6C652E580A537461727456616C7565050000000000000080FF3F0953746F7056 + 616C756505000000000000000000000754726967676572060F4973457870616E + 6465643D747275650E54726967676572496E766572736506104973457870616E + 6465643D66616C73650000000007544C61796F757400095374796C654E616D65 + 06074C61796F75743305416C69676E0708436F6E74656E74730A53697A652E57 + 6964746805000000000000C08407400B53697A652E4865696768740500000000 + 000000C803401453697A652E506C6174666F726D44656661756C740800055454 + 65787400095374796C654E616D6506047465787405416C69676E07044C656674 + 084175746F53697A65090A436C6970506172656E7409064C6F636B6564090748 + 697454657374080C4D617267696E732E4C6566740500000000000000A002400A + 506F736974696F6E2E580500000000000000A002400A53697A652E5769647468 + 05000000000000B8C703400B53697A652E4865696768740500000000000000C8 + 03401453697A652E506C6174666F726D44656661756C74081654657874536574 + 74696E67732E466F6E74436F6C6F720708636C61576869746516546578745365 + 7474696E67732E486F727A416C69676E07074C656164696E670000000F544578 + 70616E646572427574746F6E00095374796C654E616D650606627574746F6E05 + 416C69676E07055269676874064C6F636B6564090A506F736974696F6E2E5805 + 00000000000080F506400A53697A652E57696474680500000000000000A00340 + 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 + 74666F726D44656661756C740800000000005450463007544C61796F75740009 + 5374796C654E616D650613657870616E646572627574746F6E7374796C650541 + 6C69676E070643656E7465720B4D617267696E732E546F700500000000000000 + 80FF3F0A53697A652E57696474680500000000000000B003400B53697A652E48 + 65696768740500000000000000B003401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C65080005545061746800095374796C654E616D + 650605506174683105416C69676E070643656E74657209446174612E50617468 + 0A3400000004000000000000000000C8420000C84201000000000096430000C8 + 42010000000000484300009643030000000000C8420000C8420A46696C6C2E43 + 6F6C6F720708636C6157686974650748697454657374080D526F746174696F6E + 416E676C650500000000000000B405400A53697A652E57696474680500000000 + 000000A002400B53697A652E4865696768740500000000000000C00140145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E65000F54466C6F6174416E696D6174696F6E00095374796C654E616D + 650614466C6F6174416E696D6174696F6E315374796C65084475726174696F6E + 050000000000CDCCCCFB3F0D496E746572706F6C6174696F6E07084369726375 + 6C61720C50726F70657274794E616D65060D526F746174696F6E416E676C650A + 537461727456616C75650500000000000000B405400953746F7056616C756505 + 000000000000000000000754726967676572060F4973457870616E6465643D74 + 7275650E54726967676572496E766572736506104973457870616E6465643D66 + 616C7365000000005450463007544C61796F757400095374796C654E616D6506 + 15657870616E646572636865636B626F787374796C6505416C69676E07064365 + 6E7465720A53697A652E576964746805000000000000008406400B53697A652E + 48656967687405000000000000008404401453697A652E506C6174666F726D44 + 656661756C74080756697369626C65080007544C61796F75740005416C69676E + 07044C6566740A53697A652E57696474680500000000000000C003400B53697A + 652E48656967687405000000000000008404401453697A652E506C6174666F72 + 6D44656661756C7408000554506174680005416C69676E0706436C69656E7409 + 446174612E506174680AD80100002700000000000000FEC8BA4402E792440200 + 00002592AD4402E79244020000006D5BA544FEB09E44020000006D5BA544FEB0 + 9E440200000093A4A4446A0C9F44020000004A80AC44FC79AA4402000000046E + BA44FC79AA44020000004A00C844FC79AA44020000000080CF44FEB09E440200 + 00000080CF44FEB09E44020000000080CF44FEB09E44020000004C5BC84402E7 + 924402000000FEC8BA4402E7924400000000FE88BA44FE30974402000000B876 + BF44FE309744020000000277C344EEA09A44020000000277C34404DE9E440200 + 00000277C344121BA34402000000B876BF44008CA64402000000FE88BA44008C + A644020000004C9BB544008CA64402000000009CB144121BA34402000000009C + B14404DE9E4402000000009CB144EEA09A44020000004C9BB544FE3097440200 + 0000FE88BA44FE309744000000000080BA44045E9B4402000000146EB844045E + 9B440200000000C0B64454F79C440200000000C0B64400F09E440200000000C0 + B644ACE8A04402000000146EB844FC81A244020000000080BA44FC81A2440200 + 0000EC91BC44FC81A244020000000040BE44ACE8A044020000000040BE4400F0 + 9E44020000000040BE4454F79C4402000000EC91BC44045E9B44020000000080 + BA44045E9B440A46696C6C2E436F6C6F72070978363030303030303007486974 + 54657374080C4D617267696E732E4C65667405000000000000008000400B4D61 + 7267696E732E546F7005000000000000008000400D4D617267696E732E526967 + 687405000000000000008000400E4D617267696E732E426F74746F6D05000000 + 000000008000400A53697A652E57696474680500000000000000A003400B5369 + 7A652E4865696768740500000000000000E803401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6508577261 + 704D6F64650703466974000F54436F6C6F72416E696D6174696F6E0008447572 + 6174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D65060A46 + 696C6C2E436F6C6F720A537461727456616C7565070978363030303030303009 + 53746F7056616C75650708636C61426C61636B0754726967676572060E497343 + 6865636B65643D7472756500000F54436F6C6F72416E696D6174696F6E000844 + 75726174696F6E050000000000CDCCCCFB3F0C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C75650708636C61426C61636B + 0953746F7056616C756507097836303030303030300754726967676572060F49 + 73436865636B65643D66616C73650000000005545465787400095374796C654E + 616D6506047465787405416C69676E0706436C69656E74064C6F636B65640907 + 48697454657374080C4D617267696E732E4C6566740500000000000000800240 + 0B4D617267696E732E546F7005000000000000008000400D4D617267696E732E + 5269676874050000000000000080FF3F0A53697A652E57696474680500000000 + 000000C605400B53697A652E4865696768740500000000000000F80340145369 + 7A652E506C6174666F726D44656661756C7408165465787453657474696E6773 + 2E466F6E74436F6C6F720709784646454545454545165465787453657474696E + 67732E486F727A416C69676E07074C656164696E670000005450463007544C61 + 796F757400095374796C654E616D65060E6C6162656C66696C6C7374796C6505 + 416C69676E070643656E7465720A53697A652E57696474680500000000000000 + C805400B53697A652E4865696768740500000000000000C803401453697A652E + 506C6174666F726D44656661756C74080756697369626C6508000A5452656374 + 616E676C6500095374796C654E616D65060A52656374616E676C653105416C69 + 676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978464631353135 + 31350A53697A652E57696474680500000000000000C805400B53697A652E4865 + 696768740500000000000000C803401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65000005545465787400 + 095374796C654E616D6506047465787405416C69676E0708436F6E74656E7473 + 0748697454657374080A53697A652E57696474680500000000000000C805400B + 53697A652E4865696768740500000000000000C803401453697A652E506C6174 + 666F726D44656661756C7408165465787453657474696E67732E466F6E74436F + 6C6F720708636C6157686974650000005450463007544C61796F757400095374 + 796C654E616D650613636F6D626F656469746572726F727374796C6505416C69 + 676E070643656E7465720A53697A652E57696474680500000000000000C80540 + 0B53697A652E4865696768740500000000000000C803401453697A652E506C61 + 74666F726D44656661756C74080756697369626C6508000C5442727573684F62 + 6A65637400095374796C654E616D65060A666F726567726F756E6400000B5446 + 6F6E744F626A65637400095374796C654E616D650604666F6E7409466F6E742E + 53697A650500000000000000D00240000007544C61796F757400095374796C65 + 4E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E7473 + 0A53697A652E57696474680500000000000000C805400B53697A652E48656967 + 68740500000000000000C803401453697A652E506C6174666F726D4465666175 + 6C7408000A5452656374616E676C6500095374796C654E616D65060A52656374 + 616E676C653105416C69676E0706436C69656E740A46696C6C2E436F6C6F7207 + 097846463230323032300748697454657374080A53697A652E57696474680500 + 000000000000C805400B53697A652E4865696768740500000000000000C80340 + 1453697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F + 6C6F720709784646323032303230000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D650614436F6C6F72416E696D6174696F6E315374796C65 + 084475726174696F6E050000000000000000000007496E7665727365090C5072 + 6F70657274794E616D65060C5374726F6B652E436F6C6F720A53746172745661 + 6C756507097846463230323032300953746F7056616C75650709784646343034 + 3034300754726967676572062049734D6F7573654F7665723D747275653B4973 + 466F63757365643D66616C73650E54726967676572496E766572736506214973 + 4D6F7573654F7665723D66616C73653B4973466F63757365643D66616C736500 + 000F54436F6C6F72416E696D6174696F6E00095374796C654E616D650614436F + 6C6F72416E696D6174696F6E325374796C65084475726174696F6E0500000000 + 00000000000007496E7665727365090C50726F70657274794E616D65060C5374 + 726F6B652E436F6C6F720A537461727456616C75650709784646343034303430 + 0953746F7056616C756507097846464532324132410754726967676572061F49 + 734D6F7573654F7665723D747275653B4973466F63757365643D747275650E54 + 726967676572496E7665727365062049734D6F7573654F7665723D747275653B + 4973466F63757365643D66616C7365000007544C61796F757400095374796C65 + 4E616D6506056172726F7705416C69676E070846697452696768740B4D617267 + 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 + 050000000000000080FF3F0E4D617267696E732E426F74746F6D050000000000 + 000080FF3F0A506F736974696F6E2E580500000000005ED99705400A506F7369 + 74696F6E2E59050000000000000080FF3F0A53697A652E576964746805000000 + 0000889AB803400B53697A652E4865696768740500000000000000B803401453 + 697A652E506C6174666F726D44656661756C7408000A5452656374616E676C65 + 00095374796C654E616D65060A52656374616E676C653105416C69676E070843 + 6F6E74656E74730A46696C6C2E436F6C6F720709784646333033303330074869 + 7454657374080A53697A652E5769647468050000000000889AB803400B53697A + 652E4865696768740500000000000000B803401453697A652E506C6174666F72 + 6D44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E + 696D6174696F6E315374796C65084475726174696F6E05000000000000000000 + 0007496E7665727365090C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463330333033300953746F705661 + 6C756507097846463430343034300754726967676572062049734D6F7573654F + 7665723D747275653B4973466F63757365643D66616C73650E54726967676572 + 496E7665727365062149734D6F7573654F7665723D66616C73653B4973466F63 + 757365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650614436F6C6F72416E696D6174696F6E325374796C65084475 + 726174696F6E05000000000000000000000C50726F70657274794E616D65060A + 46696C6C2E436F6C6F720A537461727456616C75650709784646343034303430 + 0953746F7056616C756507097846463943313731370754726967676572061F49 + 73466F63757365643D747275653B49734D6F7573654F7665723D747275650000 + 0007544C61796F757400095374796C654E616D6506074C61796F75743105416C + 69676E070643656E7465720C4D617267696E732E4C6566740500000000000000 + 80FF3F0A53697A652E57696474680500000000000000A002400B53697A652E48 + 65696768740500000000000000C001401453697A652E506C6174666F726D4465 + 6661756C74080005545061746800095374796C654E616D650605506174683105 + 416C69676E0706436C69656E7409446174612E506174680A3400000004000000 + 000000000000C8420000C84201000000000096430000C8420100000000004843 + 00009643030000000000C8420000C8420A46696C6C2E436F6C6F720708636C61 + 57686974650748697454657374080A53697A652E576964746805000000000000 + 00A002400B53697A652E4865696768740500000000000000C001401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E650000000000000C5442727573684F626A65637400095374796C654E616D + 65060973656C656374696F6E0B42727573682E436F6C6F720709783936324138 + 324532000007544C61796F757400095374796C654E616D650607636F6E74656E + 7405416C69676E0706436C69656E740C4D617267696E732E4C65667405000000 + 000000008000400B4D617267696E732E546F7005000000000000008000400D4D + 617267696E732E52696768740500000000000000F003400E4D617267696E732E + 426F74746F6D05000000000000008000400A53697A652E576964746805000000 + 000000008805400B53697A652E4865696768740500000000000000A803401453 + 697A652E506C6174666F726D44656661756C74080000005450463007544C6179 + 6F757400095374796C654E616D65061E70726F6772657373626172696E646574 + 65726D696E61626C657374796C6505416C69676E070643656E7465720A53697A + 652E5769647468050000000000ABAAB006400B53697A652E4865696768740500 + 000000000000C003401453697A652E506C6174666F726D44656661756C740807 + 56697369626C6508000A5452656374616E676C6500095374796C654E616D6506 + 0676747261636B05416C69676E0708436F6E74656E747307456E61626C656408 + 0A46696C6C2E436F6C6F720709784646323032303230064C6F636B6564090748 + 697454657374080A53697A652E57696474680500000000000000E006400B5369 + 7A652E48656967687405000000000000009404401453697A652E506C6174666F + 726D44656661756C74080C5374726F6B652E436F6C6F72070978464631353135 + 31350756697369626C6508000A5452656374616E676C6500095374796C654E61 + 6D65060A76696E64696361746F7205416C69676E0706426F74746F6D0A46696C + 6C2E436F6C6F720709784646324138324532064C6F636B656409074869745465 + 7374080C4D617267696E732E4C656674050000000000000080FF3F0B4D617267 + 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 + 050000000000000080FF3F0E4D617267696E732E426F74746F6D050000000000 + 000080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F7369 + 74696F6E2E590500000000000000F002400A53697A652E576964746805000000 + 00000000DE06400B53697A652E4865696768740500000000000000A803401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E6500000007544C61796F757400095374796C654E616D6506066874 + 7261636B05416C69676E0708436F6E74656E74730A53697A652E576964746805 + 0000000000ABAAB006400B53697A652E4865696768740500000000000000C003 + 401453697A652E506C6174666F726D44656661756C7408000A5452656374616E + 676C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E + 0708436F6E74656E74730C436C69704368696C6472656E090A46696C6C2E436F + 6C6F720709784646324138324532064C6F636B6564090748697454657374080A + 53697A652E5769647468050000000000ABAAB006400B53697A652E4865696768 + 740500000000000000C003401453697A652E506C6174666F726D44656661756C + 74080C5374726F6B652E436F6C6F720709784646313531353135000F54436F6C + 6F72416E696D6174696F6E00095374796C654E616D650614436F6C6F72416E69 + 6D6174696F6E315374796C6507456E61626C656409084475726174696F6E0500 + 000000000000800140044C6F6F70090C50726F70657274794E616D65060A4669 + 6C6C2E436F6C6F720A537461727456616C756507097846463230323032300953 + 746F7056616C756507097846463241383245320754726967676572060E497356 + 697369626C653D7472756500000000005450463007544C61796F757400095374 + 796C654E616D650611616E69696E64696361746F727374796C6505416C69676E + 070643656E7465720756697369626C650800045441726300095374796C654E61 + 6D65060341726305416C69676E0708436F6E74656E7473074869745465737408 + 0D526F746174696F6E416E676C650500000000000000B407400A53697A652E57 + 696474680500000000000000C804400B53697A652E4865696768740500000000 + 000000C804401453697A652E506C6174666F726D44656661756C74080C537472 + 6F6B652E436F6C6F720708636C615768697465105374726F6B652E546869636B + 6E65737305000000000000008001400A5374726F6B652E4361700705526F756E + 640B5374726F6B652E4A6F696E0705426576656C08456E64416E676C65050000 + 0000000000B405C0000F54466C6F6174416E696D6174696F6E00095374796C65 + 4E616D650603616E6907456E61626C656409084475726174696F6E0500000000 + 00000080FF3F044C6F6F70090C50726F70657274794E616D65060D526F746174 + 696F6E416E676C650A537461727456616C756505000000000000000000000953 + 746F7056616C75650500000000000000B407400754726967676572060E497356 + 697369626C653D74727565000000005450463007544C61796F75740009537479 + 6C654E616D650615616E69696E64696361746F72686F727A7374796C6505416C + 69676E070643656E7465720A53697A652E57696474680500000000000040C006 + 400B53697A652E48656967687405000000000000008000401453697A652E506C + 6174666F726D44656661756C74080756697369626C6508000A5452656374616E + 676C6500095374796C654E616D65060A52656374616E676C653105416C69676E + 0706436C69656E740C436C69704368696C6472656E090A46696C6C2E436F6C6F + 7207097846463430343034300A53697A652E57696474680500000000000040C0 + 06400B53697A652E48656967687405000000000000008000401453697A652E50 + 6C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E + 650005544C696E6500095374796C654E616D6506054C696E6531084C696E6554 + 7970650706426F74746F6D0A53697A652E57696474680500000000000000A00B + 400B53697A652E48656967687405000000000000008000401453697A652E506C + 6174666F726D44656661756C74080C5374726F6B652E436F6C6F720709784646 + 324138324532105374726F6B652E546869636B6E657373050000000000000080 + 02400B5374726F6B652E44617368070444617368000F54466C6F6174416E696D + 6174696F6E00095374796C654E616D650603616E6907456E61626C6564090844 + 75726174696F6E0500000000000000800340044C6F6F70090C50726F70657274 + 794E616D65060A506F736974696F6E2E580A537461727456616C756505000000 + 00000000C808C00953746F7056616C7565050000000000000000000007547269 + 67676572060E497356697369626C653D7472756500000000005450463007544C + 61796F757400095374796C654E616D65060A70616E656C7374796C6505416C69 + 676E070643656E7465720A53697A652E57696474680500000000000000C00640 + 0B53697A652E4865696768740500000000000000A406401453697A652E506C61 + 74666F726D44656661756C74080756697369626C6508000A5452656374616E67 + 6C6500095374796C654E616D65060A6261636B67726F756E6405416C69676E07 + 08436F6E74656E74730A46696C6C2E436F6C6F7207097846463230323032300A + 53697A652E57696474680500000000000000C006400B53697A652E4865696768 + 740500000000000000A406401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E650000005450463007544C6179 + 6F757400095374796C654E616D65060E6C6F67627574746F6E7374796C650541 + 6C69676E070643656E7465720A53697A652E57696474680500000000000000C0 + 05400B53697A652E4865696768740500000000000000C005401453697A652E50 + 6C6174666F726D44656661756C74080756697369626C6508000A545265637461 + 6E676C6500095374796C654E616D65060A6261636B67726F756E6405416C6967 + 6E0706436C69656E740C436C69704368696C6472656E090A436C697050617265 + 6E74090A46696C6C2E436F6C6F72070978464632303230323007486974546573 + 74080A53697A652E57696474680500000000000000C005400B53697A652E4865 + 696768740500000000000000C005401453697A652E506C6174666F726D446566 + 61756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72 + 416E696D6174696F6E31084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C + 756507097846463230323032300953746F7056616C7565070978464634303430 + 34300754726967676572063049734D6F7573654F7665723D747275653B497350 + 7265737365643D66616C73653B4973466F63757365643D66616C73650E547269 + 67676572496E7665727365063149734D6F7573654F7665723D66616C73653B49 + 73507265737365643D66616C73653B4973466F63757365643D66616C73650000 + 0F54436F6C6F72416E696D6174696F6E00095374796C654E616D650615627574 + 746F6E436F6C6F72416E696D6174696F6E32084475726174696F6E0500000000 + 0000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A + 537461727456616C756507097846463430343034300953746F7056616C756507 + 097846463137353739430754726967676572062F4973507265737365643D7472 + 75653B49734D6F7573654F7665723D747275653B4973466F63757365643D6661 + 6C736500000F54436F6C6F72416E696D6174696F6E00095374796C654E616D65 + 0615627574746F6E436F6C6F72416E696D6174696F6E33084475726174696F6E + 05000000000000000000000C50726F70657274794E616D65060A46696C6C2E43 + 6F6C6F720A537461727456616C756507097846463241383245320953746F7056 + 616C756507097846463137353739430754726967676572062E49735072657373 + 65643D747275653B49734D6F7573654F7665723D747275653B4973466F637573 + 65643D747275650E54726967676572496E7665727365062F4973507265737365 + 643D66616C73653B49734D6F7573654F7665723D747275653B4973466F637573 + 65643D74727565000005545061746800095374796C654E616D65060550617468 + 3105416C69676E0706436C69656E7409446174612E506174680A5C0200003200 + 0000000000000000A841CDCCCC40010000000000A8410000C041010000000000 + C03F0000C041010000000000C03F00000000010000009A996941000000000100 + 00000000A841CDCCCC40030000000000A841CDCCCC400000000000009C410000 + F04001000000000058410000F04001000000000058410000C03F010000000000 + 40400000C03F01000000000040400000B4410100000000009C410000B4410100 + 000000009C410000F0400300000000009C410000F04000000000000040410000 + F04001000000000090400000F04001000000000090400000C040010000000000 + 40410000C04001000000000040410000F04003000000000040410000F0400000 + 0000000090400000104101000000000090410000104101000000000090410000 + 2841010000000000904000002841010000000000904000001041030000000000 + 9040000010410000000000009040000040410100000000009041000040410100 + 0000000090410000584101000000000090400000584101000000000090400000 + 4041030000000000904000004041000000000000904000007041010000000000 + 9041000070410100000000009041000084410100000000009040000084410100 + 0000000090400000704103000000000090400000704100000000000090400000 + 9041010000000000904100009041010000000000904100009C41010000000000 + 904000009C410100000000009040000090410300000000009040000090410000 + 0000000070410000C04001000000333393410000C04001000000000070416666 + 264001000000000070410000C04003000000000070410000C0400A46696C6C2E + 436F6C6F720708636C6157686974650748697454657374080C4D617267696E73 + 2E4C6566740500000000000000A002400B4D617267696E732E546F7005000000 + 00000000A002400D4D617267696E732E52696768740500000000000000A00240 + 0E4D617267696E732E426F74746F6D0500000000000000A002400A53697A652E + 576964746805000000000000009805400B53697A652E48656967687405000000 + 000000009805401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E6508577261704D6F64650703466974000000 + 005450463007544C61796F757400095374796C654E616D65061470726F677265 + 73736261726D696E697374796C6505416C69676E070643656E7465720A53697A + 652E576964746805000000000033338505400B53697A652E4865696768740500 + 000000009999E104401453697A652E506C6174666F726D44656661756C740807 + 56697369626C6508000A5452656374616E676C6500095374796C654E616D6506 + 0668747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C + 6F720709784646343034303430064C6F636B6564090748697454657374080A53 + 697A652E576964746805000000000033338505400B53697A652E486569676874 + 0500000000009999E104401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E65000A5452656374616E676C6500 + 095374796C654E616D65060A68696E64696361746F7205416C69676E07044C65 + 66740A46696C6C2E436F6C6F720709784646324138324532064C6F636B656409 + 0748697454657374080A53697A652E57696474680500000000000000C804400B + 53697A652E4865696768740500000000009999E104401453697A652E506C6174 + 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000 + 000A5452656374616E676C6500095374796C654E616D65060676747261636B05 + 416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F72070978464634 + 3034303430064C6F636B6564090748697454657374080A53697A652E57696474 + 6805000000000033338505400B53697A652E4865696768740500000000009999 + E104401453697A652E506C6174666F726D44656661756C74080B5374726F6B65 + 2E4B696E6407044E6F6E65000A5452656374616E676C6500095374796C654E61 + 6D65060A76696E64696361746F7205416C69676E0706426F74746F6D0A46696C + 6C2E436F6C6F720709784646324138324532064C6F636B656409074869745465 + 7374080A506F736974696F6E2E5905000000000099998D04400A53697A652E57 + 6964746805000000000033338505400B53697A652E4865696768740500000000 + 000000A803401453697A652E506C6174666F726D44656661756C74080B537472 + 6F6B652E4B696E6407044E6F6E65000000005450463007544C61796F75740009 + 5374796C654E616D65061B7472656576696577657870616E646572627574746F + 6E7374796C6505416C69676E070643656E7465720B4D617267696E732E546F70 + 050000000000000080FF3F0A53697A652E57696474680500000000000000B003 + 400B53697A652E4865696768740500000000000000B003401453697A652E506C + 6174666F726D44656661756C74080756697369626C6508000554506174680009 + 5374796C654E616D650605506174683105416C69676E070643656E7465720944 + 6174612E506174680A3400000004000000000000000000C8420000C842010000 + 00000096430000C842010000000000484300009643030000000000C8420000C8 + 420A46696C6C2E436F6C6F720708636C6157686974650748697454657374080D + 526F746174696F6E416E676C650500000000000000B405C00A53697A652E5769 + 6474680500000000000000A002400B53697A652E486569676874050000000000 + 0000C001401453697A652E506C6174666F726D44656661756C74080B5374726F + 6B652E4B696E6407044E6F6E65000F54466C6F6174416E696D6174696F6E0009 + 5374796C654E616D650614466C6F6174416E696D6174696F6E315374796C6508 + 4475726174696F6E05000000000000000000000D496E746572706F6C6174696F + 6E070843697263756C61720C50726F70657274794E616D65060D526F74617469 + 6F6E416E676C650A537461727456616C75650500000000000000B405C0095374 + 6F7056616C756505000000000000000000000754726967676572060F49734578 + 70616E6465643D747275650E54726967676572496E7665727365061049734578 + 70616E6465643D66616C736500000000545046300A5452656374616E676C6500 + 095374796C654E616D65061174726565766965776974656D7374796C6505416C + 69676E070643656E7465720946696C6C2E4B696E6407044E6F6E650748697454 + 657374080553696465730B06426F74746F6D000A53697A652E57696474680500 + 000000000000AE05400B53697A652E4865696768740500000000000000A00440 + 1453697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F + 6C6F7207097846463135313531350756697369626C6508000C54537065656442 + 7574746F6E00095374796C654E616D650606627574746F6E05416C69676E0704 + 4C6566740A53697A652E57696474680500000000000000A003400B53697A652E + 4865696768740500000000000000A004401453697A652E506C6174666F726D44 + 656661756C74080B5374796C654C6F6F6B7570061B7472656576696577657870 + 616E646572627574746F6E7374796C65000007544C61796F75740005416C6967 + 6E0708436F6E74656E74730C4D617267696E732E4C6566740500000000000000 + A003400A53697A652E576964746805000000000000008605400B53697A652E48 + 65696768740500000000000000A004401453697A652E506C6174666F726D4465 + 6661756C7408000954436865636B426F7800095374796C654E616D6506056368 + 65636B05416C69676E07044C6566740843616E466F637573081244697361626C + 65466F637573456666656374090A53697A652E57696474680500000000000000 + A003400B53697A652E4865696768740500000000000000A004401453697A652E + 506C6174666F726D44656661756C740800000654476C79706800095374796C65 + 4E616D65060A676C7970687374796C650C4D617267696E732E4C656674050000 + 00000000008000400B4D617267696E732E546F70050000000000000080FF3F0D + 4D617267696E732E526967687405000000000000008000400E4D617267696E73 + 2E426F74746F6D050000000000000080FF3F05416C69676E07044C6566740A50 + 6F736974696F6E2E580500000000000000B003400A506F736974696F6E2E5905 + 0000000000000080FF3F0A53697A652E57696474680500000000000000800340 + 0B53697A652E48656967687405000000000000009804401453697A652E506C61 + 74666F726D44656661756C7408000005545465787400095374796C654E616D65 + 06047465787405416C69676E0706436C69656E74064C6F636B65640907486974 + 54657374080A53697A652E57696474680500000000000000BC04400B53697A65 + 2E4865696768740500000000000000A004401453697A652E506C6174666F726D + 44656661756C74080454657874060454657874165465787453657474696E6773 + 2E466F6E74436F6C6F720708636C615768697465155465787453657474696E67 + 732E576F72645772617008165465787453657474696E67732E486F727A416C69 + 676E07074C656164696E670000000A5452656374616E676C650005416C69676E + 0708436F6E74656E74730946696C6C2E4B696E6407044E6F6E65074869745465 + 7374080E4D617267696E732E426F74746F6D050000000000000080FF3F055369 + 6465730B044C656674000A53697A652E57696474680500000000000000AE0540 + 0B53697A652E48656967687405000000000000009C04401453697A652E506C61 + 74666F726D44656661756C74080C5374726F6B652E436F6C6F72070978464632 + 4138324532105374726F6B652E546869636B6E65737305000000000000008000 + 400000005450463007544C61796F757400095374796C654E616D65060D747265 + 65766965777374796C6505416C69676E070643656E7465720A53697A652E5769 + 6474680500000000000000E106400B53697A652E486569676874050000000000 + 00808107401453697A652E506C6174666F726D44656661756C74080756697369 + 626C6508000C5442727573684F626A65637400095374796C654E616D65061841 + 6C7465726E6174696E67526F774261636B67726F756E640B42727573682E436F + 6C6F72070978304646464646464600000A5452656374616E676C650009537479 + 6C654E616D65060A6261636B67726F756E6405416C69676E0708436F6E74656E + 74730A46696C6C2E436F6C6F720709784646323032303230064C6F636B656409 + 0748697454657374080C50616464696E672E4C656674050000000000000080FF + 3F0D50616464696E672E5269676874050000000000000080FF3F0A53697A652E + 57696474680500000000000000E106400B53697A652E48656967687405000000 + 000000808107401453697A652E506C6174666F726D44656661756C74080C5374 + 726F6B652E436F6C6F7207097846463135313531350007544C61796F75740009 + 5374796C654E616D650607636F6E74656E7405416C69676E0706436C69656E74 + 0C436C69704368696C6472656E090B4D617267696E732E546F70050000000000 + 000080FF3F0A53697A652E57696474680500000000000000CD06400B53697A65 + 2E4865696768740500000000000000F006401453697A652E506C6174666F726D + 44656661756C7408000A5452656374616E676C6500095374796C654E616D6506 + 0973656C656374696F6E0A46696C6C2E436F6C6F720709784646324138324532 + 0748697454657374080A53697A652E57696474680500000000000000C804400B + 53697A652E4865696768740500000000000000C804401453697A652E506C6174 + 666F726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650000 + 0A5452656374616E676C6500095374796C654E616D650610666F637573656473 + 656C656374696F6E0A46696C6C2E436F6C6F7207097846463241383245320748 + 697454657374080A53697A652E57696474680500000000000000C804400B5369 + 7A652E4865696768740500000000000000C804401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E650B537472 + 6F6B652E446173680703446F740000000A545363726F6C6C4261720009537479 + 6C654E616D65060A767363726F6C6C62617205416C69676E070552696768740B + 536D616C6C4368616E676505000000000000000000000B4F7269656E74617469 + 6F6E0708566572746963616C0C4D617267696E732E4C65667405000000000000 + 008000400A506F736974696F6E2E580500000000000000D006400A53697A652E + 576964746805000000000000008003400B53697A652E48656967687405000000 + 00000000F106401453697A652E506C6174666F726D44656661756C740800000A + 545363726F6C6C42617200095374796C654E616D65060A687363726F6C6C6261 + 7205416C69676E0706426F74746F6D0B536D616C6C4368616E67650500000000 + 0000000000000B4F7269656E746174696F6E070A486F72697A6F6E74616C0B4D + 617267696E732E546F7005000000000000008000400A506F736974696F6E2E58 + 050000000000000080FF3F0A506F736974696F6E2E590500000000000000F306 + 400A53697A652E57696474680500000000000000DF06400B53697A652E486569 + 67687405000000000000008003401453697A652E506C6174666F726D44656661 + 756C740800000F54536D616C6C5363726F6C6C42617200095374796C654E616D + 65060F76736D616C6C7363726F6C6C62617205416C69676E070552696768740B + 536D616C6C4368616E676505000000000000000000000B4F7269656E74617469 + 6F6E0708566572746963616C0C4D617267696E732E4C65667405000000000000 + 008000400A506F736974696F6E2E580500000000000000C605400A506F736974 + 696F6E2E5905000000000000008000400A53697A652E57696474680500000000 + 0000008002400B53697A652E4865696768740500000000000000800240145369 + 7A652E506C6174666F726D44656661756C74080756697369626C650800000F54 + 536D616C6C5363726F6C6C42617200095374796C654E616D65060F68736D616C + 6C7363726F6C6C62617205416C69676E0706426F74746F6D0B536D616C6C4368 + 616E676505000000000000000000000B4F7269656E746174696F6E070A486F72 + 697A6F6E74616C0B4D617267696E732E546F7005000000000000008000400A50 + 6F736974696F6E2E5805000000000000008000400A506F736974696F6E2E5905 + 00000000000000E205400A53697A652E57696474680500000000000000960640 + 0B53697A652E48656967687405000000000000008002401453697A652E506C61 + 74666F726D44656661756C74080756697369626C650800000000545046300754 + 4C61796F757400095374796C654E616D650619616374696F6E746F6F6C627574 + 746F6E6D756C74697669657705416C69676E070643656E7465720A53697A652E + 57696474680500000000000000C805400B53697A652E48656967687405000000 + 00000000C804401453697A652E506C6174666F726D44656661756C7408075669 + 7369626C65080B46697865644865696768740232000654476C79706800095374 + 796C654E616D65060A676C7970687374796C650C4D617267696E732E4C656674 + 05000000000000009002400B4D617267696E732E546F70050000000000000090 + 02400E4D617267696E732E426F74746F6D050000000000000090024005416C69 + 676E07044C6566740A506F736974696F6E2E5805000000000000009002400A50 + 6F736974696F6E2E5905000000000000009002400A53697A652E576964746805 + 000000000000008004400B53697A652E48656967687405000000000000008004 + 401453697A652E506C6174666F726D44656661756C740800000A545265637461 + 6E676C6500095374796C654E616D65060A6261636B67726F756E6405416C6967 + 6E0706436C69656E740C436C69704368696C6472656E090A436C697050617265 + 6E74090A46696C6C2E436F6C6F72070978464632303230323007486974546573 + 74080C4D617267696E732E4C6566740500000000000000C804C00A53697A652E + 57696474680500000000000000C805400B53697A652E48656967687405000000 + 00000000C804401453697A652E506C6174666F726D44656661756C74080B5374 + 726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D6174696F6E + 00095374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F + 6E31084475726174696F6E05000000000000000000000C50726F70657274794E + 616D65060A46696C6C2E436F6C6F720A537461727456616C7565070978464632 + 30323032300953746F7056616C75650709784646343034303430075472696767 + 6572063049734D6F7573654F7665723D747275653B4973507265737365643D66 + 616C73653B4973466F63757365643D66616C73650E54726967676572496E7665 + 727365063149734D6F7573654F7665723D66616C73653B497350726573736564 + 3D66616C73653B4973466F63757365643D66616C736500000F54436F6C6F7241 + 6E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F72 + 416E696D6174696F6E33084475726174696F6E05000000000000000000000C50 + 726F70657274794E616D65060A46696C6C2E436F6C6F720A537461727456616C + 756507097846463241383245320953746F7056616C7565070978464631373537 + 39430754726967676572062E4973507265737365643D747275653B49734D6F75 + 73654F7665723D747275653B4973466F63757365643D747275650E5472696767 + 6572496E7665727365062F4973507265737365643D66616C73653B49734D6F75 + 73654F7665723D747275653B4973466F63757365643D74727565000000055454 + 65787400095374796C654E616D6506047465787405416C69676E0706436C6965 + 6E740748697454657374080A53697A652E57696474680500000000000000C804 + 400B53697A652E4865696768740500000000000000C804401453697A652E506C + 6174666F726D44656661756C7408045465787406045465787416546578745365 + 7474696E67732E466F6E74436F6C6F720708636C615768697465000007544C61 + 796F757400095374796C654E616D6506074C61796F75743205416C69676E0704 + 4C6566740A53697A652E57696474680500000000000000C804400B53697A652E + 4865696768740500000000000000C804401453697A652E506C6174666F726D44 + 656661756C74080005545061746800095374796C654E616D65060469636F6E05 + 416C69676E070643656E74657209446174612E506174680A1801000017000000 + 000000000000C03F0000C03F0100000000000000000000000100000000004040 + 00000000010000000000C03F0000C03F030000000000C03F0000C03F00000000 + 00009040000000000100000000004041000000000100000000004041CDCC4C3F + 0100000000009040CDCC4C3F0100000000009040000000000300000000009040 + 0000000000000000000090403333734001000000000090400000404001000000 + 0000404100004040010000000000404133337340010000000000904033337340 + 03000000000090403333734000000000000090409A99D9400100000000009040 + 0000C04001000000000040410000C04001000000000040419A99D94001000000 + 000090409A99D94003000000000090409A99D9400A46696C6C2E436F6C6F7207 + 08636C6157686974650748697454657374080A53697A652E5769647468050000 + 0000000000D003400B53697A652E4865696768740500000000000000E0034014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E6508577261704D6F64650703466974000000005450463007544C + 61796F757400095374796C654E616D65060E616464627574746F6E7374796C65 + 05416C69676E070643656E7465720A53697A652E576964746805000000000000 + 00C805400B53697A652E4865696768740500000000000000C003401453697A65 + 2E506C6174666F726D44656661756C74080756697369626C65080B4669786564 + 4865696768740218000654476C79706800095374796C654E616D65060A676C79 + 70687374796C650C4D617267696E732E4C65667405000000000000009002400B + 4D617267696E732E546F7005000000000000009002400E4D617267696E732E42 + 6F74746F6D050000000000000090024005416C69676E07044C6566740A506F73 + 6974696F6E2E5805000000000000009002400A506F736974696F6E2E59050000 + 00000000009002400A53697A652E576964746805000000000000008004400B53 + 697A652E48656967687405000000000000008004401453697A652E506C617466 + 6F726D44656661756C740800000A5452656374616E676C6500095374796C654E + 616D65060A6261636B67726F756E6405416C69676E0706436C69656E740C436C + 69704368696C6472656E090A436C6970506172656E74090A46696C6C2E436F6C + 6F7207097846463230323032300748697454657374080C4D617267696E732E4C + 6566740500000000000000C003C00A53697A652E576964746805000000000000 + 00C805400B53697A652E4865696768740500000000000000C003401453697A65 + 2E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407044E + 6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506 + 15627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F6E05 + 000000000000000000000C50726F70657274794E616D65060A46696C6C2E436F + 6C6F720A537461727456616C756507097846463230323032300953746F705661 + 6C756507097846463430343034300754726967676572063049734D6F7573654F + 7665723D747275653B4973507265737365643D66616C73653B4973466F637573 + 65643D66616C73650E54726967676572496E7665727365063149734D6F757365 + 4F7665723D66616C73653B4973507265737365643D66616C73653B4973466F63 + 757365643D66616C736500000F54436F6C6F72416E696D6174696F6E00095374 + 796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E330844 + 75726174696F6E05000000000000000000000C50726F70657274794E616D6506 + 0A46696C6C2E436F6C6F720A537461727456616C756507097846463241383245 + 320953746F7056616C756507097846463137353739430754726967676572062E + 4973507265737365643D747275653B49734D6F7573654F7665723D747275653B + 4973466F63757365643D747275650E54726967676572496E7665727365062F49 + 73507265737365643D66616C73653B49734D6F7573654F7665723D747275653B + 4973466F63757365643D7472756500000005545465787400095374796C654E61 + 6D6506047465787405416C69676E0706436C69656E740748697454657374080A + 53697A652E576964746805000000000000009805400B53697A652E4865696768 + 740500000000000000C003401453697A652E506C6174666F726D44656661756C + 74080454657874060454657874165465787453657474696E67732E466F6E7443 + 6F6C6F720708636C615768697465000007544C61796F757400095374796C654E + 616D6506074C61796F75743205416C69676E07044C6566740A53697A652E5769 + 6474680500000000000000C003400B53697A652E486569676874050000000000 + 0000C003401453697A652E506C6174666F726D44656661756C74080005545061 + 746800095374796C654E616D65060469636F6E05416C69676E0708436F6E7465 + 6E747309446174612E506174680AAC0000000E00000000000000CDCC34410000 + C040010000000000C0400000C040010000000000C040CDCC3441010000009A99 + A940CDCC3441010000009A99A9400000C04001000000000000000000C0400100 + 0000000000009A99A940010000009A99A9409A99A940010000009A99A9400000 + 0000010000000000C04000000000010000000000C0409A99A94001000000CDCC + 34419A99A94001000000CDCC34410000C04003000000CDCC34410000C0400A46 + 696C6C2E436F6C6F720708636C6157686974650748697454657374080C4D6172 + 67696E732E4C65667405000000000000008001400B4D617267696E732E546F70 + 05000000000000008001400D4D617267696E732E526967687405000000000000 + 008001400E4D617267696E732E426F74746F6D05000000000000008001400A53 + 697A652E576964746805000000000000008003400B53697A652E486569676874 + 05000000000000008003401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F646507034669 + 74000000005450463007544C61796F757400095374796C654E616D650617696E + 666F746F6F6C627574746F6E6D756C74697669657705416C69676E070643656E + 7465720A53697A652E57696474680500000000000000C805400B53697A652E48 + 65696768740500000000000000C804401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C65080B46697865644865696768740232000654 + 476C79706800095374796C654E616D65060A676C7970687374796C650C4D6172 + 67696E732E4C65667405000000000000009002400B4D617267696E732E546F70 + 05000000000000009002400E4D617267696E732E426F74746F6D050000000000 + 000090024005416C69676E07044C6566740A506F736974696F6E2E5805000000 + 000000009002400A506F736974696F6E2E5905000000000000009002400A5369 + 7A652E576964746805000000000000008004400B53697A652E48656967687405 + 000000000000008004401453697A652E506C6174666F726D44656661756C7408 + 00000A5452656374616E676C6500095374796C654E616D65060A6261636B6772 + 6F756E6405416C69676E0706436C69656E740C436C69704368696C6472656E09 + 0A436C6970506172656E74090A46696C6C2E436F6C6F72070978464632303230 + 32300748697454657374080C4D617267696E732E4C6566740500000000000000 + C804C00A53697A652E57696474680500000000000000C805400B53697A652E48 + 65696768740500000000000000C804401453697A652E506C6174666F726D4465 + 6661756C74080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72 + 416E696D6174696F6E00095374796C654E616D650615627574746F6E436F6C6F + 72416E696D6174696F6E31084475726174696F6E05000000000000000000000C + 50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172745661 + 6C756507097846463230323032300953746F7056616C75650709784646343034 + 3034300754726967676572063049734D6F7573654F7665723D747275653B4973 + 507265737365643D66616C73653B4973466F63757365643D66616C73650E5472 + 6967676572496E7665727365063149734D6F7573654F7665723D66616C73653B + 4973507265737365643D66616C73653B4973466F63757365643D66616C736500 + 000F54436F6C6F72416E696D6174696F6E00095374796C654E616D6506156275 + 74746F6E436F6C6F72416E696D6174696F6E33084475726174696F6E05000000 + 000000000000000C50726F70657274794E616D65060A46696C6C2E436F6C6F72 + 0A537461727456616C756507097846463241383245320953746F7056616C7565 + 07097846463137353739430754726967676572062E4973507265737365643D74 + 7275653B49734D6F7573654F7665723D747275653B4973466F63757365643D74 + 7275650E54726967676572496E7665727365062F4973507265737365643D6661 + 6C73653B49734D6F7573654F7665723D747275653B4973466F63757365643D74 + 72756500000005545465787400095374796C654E616D6506047465787405416C + 69676E0706436C69656E740748697454657374080A53697A652E576964746805 + 00000000000000C804400B53697A652E4865696768740500000000000000C804 + 401453697A652E506C6174666F726D44656661756C7408045465787406045465 + 7874165465787453657474696E67732E466F6E74436F6C6F720708636C615768 + 697465000007544C61796F757400095374796C654E616D6506074C61796F7574 + 3205416C69676E07044C6566740A53697A652E57696474680500000000000000 + C804400B53697A652E4865696768740500000000000000C804401453697A652E + 506C6174666F726D44656661756C74080005545061746800095374796C654E61 + 6D65060469636F6E05416C69676E070643656E74657209446174612E50617468 + 0A84070000A0000000000000009A9987429A99074302000000010076429A9907 + 430200000001005E42CDCC064302000000343347423433054302000000010030 + 429A9903430200000067661A42CE4C01430200000067660642CECCFC42020000 + 00CECCE4410100F742020000000100C041CECCEF420200000034339F419B99E7 + 4202000000CECC7C416866DF4202000000353343413533D64202000000CECC14 + 413533CC42020000009A99C9400000C24202000000000080403333B742020000 + 009A991940CDCCAB4202000000CDCC4C3F3333A0420200000000000000333394 + 4202000000000000009A99874202000000000000000100764202000000CDCC4C + 3F01005E42020000009A991940CECC4642020000000000804000003042020000 + 009A99C94066661A42020000003333134166660642020000009A994141CCCCE4 + 410200000033337B41FFFFBF410200000066669E4132339F41020000003333BF + 41CACC7C41020000000000E441313343410200000000000642CACC1441020000 + 0066661A429A99C94002000000000030420000804002000000333347429A9919 + 400200000000005E42CDCC4C3F020000006666764200000000020000009A9987 + 4200000000020000003433944200000000020000003433A042CDCC4C3F020000 + 00CDCCAB429A991940020000003333B74200008040020000000000C2429A99C9 + 40020000003333CC4233331341020000003333D6429A994141020000006666DF + 4233337B41020000009999E74266669E4102000000CCCCEF423333BF41020000 + 00FFFFF6420000E44102000000CCCCFC420000064202000000CC4C014300001A + 4202000000999903439A992F420200000033330543CDCC464202000000CDCC06 + 4300005E4202000000999907430000764202000000999907439A998742020000 + 00999907433433944202000000CCCC06433433A0420200000033330543CDCCAB + 4202000000999903436766B74202000000CD4C01433333C24202000000CCCCFC + 423433CC4202000000FFFFF6423433D64202000000CCCCEF426766DF42020000 + 009999E7429A99E742020000006666DF42CDCCEF42020000003333D6420000F7 + 42020000003333CC42CDCCFC42020000003333C242CD4C0143020000006666B7 + 429A99034302000000CCCCAB4233330543020000003333A042CDCC0643020000 + 00333394429A990743020000009A9987429A990743030000009A9987429A9907 + 43000000009A99874200001041020000009A9979420000104102000000CECC64 + 4233331B4102000000CECC50429A99314102000000CECC3C4200004841020000 + 0001002A420000684102000000CECC184200008841020000003433074200009C + 41020000003633EF41CDCCB441020000006966D2419A99D141020000009C99B5 + 416766EE41020000009C999D41CDCC064202000000D0CC884166661842020000 + 00A099694100002A4202000000A099494166663C42020000003A333341CCCC50 + 420200000033331B4133336542020000000000104100007A4202000000000010 + 419A9987420200000000001041343392420200000033331B41CDCC9C42020000 + 009A993141CDCCA6420200000000004841CDCCB04202000000000068413333BA + 4202000000000088410000C3420200000000009C41CDCCCB4202000000CDCCB4 + 419A99D342020000009A99D141CDCCDA42020000006766EE410000E242020000 + 00CDCC06420000E84202000000666618423333ED420200000000002A423333F2 + 420200000066663C423333F64202000000666650420000F94202000000666664 + 42CDCCFB4202000000333379423333FD4202000000666687423333FD42020000 + 00333392423333FD420200000099999C42CDCCFB42020000009999A6420000F9 + 42020000009999B0423333F64202000000FFFFB9423333F24202000000CCCCC2 + 423333ED42020000009999CB423333E842020000006666D3420000E242020000 + 009999DA42CDCCDA4202000000CCCCE1429A99D34202000000CCCCE742CDCCCB + 4202000000FFFFEC420000C34202000000FFFFF1423333BA4202000000FFFFF5 + 420000B14202000000CCCCF8420000A742020000009999FB4200009D42020000 + 00FFFFFC429A99924202000000FFFFFC42CDCC874202000000FFFFFC4200007A + 42020000009999FB423433654202000000CCCCF8423433514202000000FFFFF5 + 4234333D4202000000FFFFF14267662A4202000000FFFFEC42CECC1842020000 + 00FFFFE7423433074202000000CCCCE1423633EF41020000009999DA426966D2 + 41020000006666D3429C99B541020000009999CB429C999D4102000000CCCCC2 + 42D0CC884102000000FFFFB942A099694102000000CCCCB042A0994941020000 + 009999A6423A33334102000000CDCC9C4233331B410200000066669242000010 + 41020000009A99874200001041030000009A998742000010410000000033337D + 42CDCC1042010000009A999042CDCC1042010000009A999042CDCC3442010000 + 0034337D42CDCC34420100000034337D42CDCC10420300000033337D42CDCC10 + 420000000033337D4233335942010000009A99904233335942010000009A9990 + 420000C7420100000034337D420000C7420100000034337D4233335942030000 + 0033337D42333359420A46696C6C2E436F6C6F720708636C6157686974650748 + 697454657374080A53697A652E57696474680500000000000000D003400B5369 + 7A652E4865696768740500000000000000E003401453697A652E506C6174666F + 726D44656661756C74080B5374726F6B652E4B696E6407044E6F6E6508577261 + 704D6F64650703466974000000005450463007544C61796F757400095374796C + 654E616D65061B6F7267616E697A65746F6F6C627574746F6E6D756C74697669 + 657705416C69676E070643656E7465720A53697A652E57696474680500000000 + 000000C805400B53697A652E4865696768740500000000000000C80440145369 + 7A652E506C6174666F726D44656661756C74080756697369626C65080B466978 + 65644865696768740232000654476C79706800095374796C654E616D65060A67 + 6C7970687374796C650C4D617267696E732E4C65667405000000000000009002 + 400B4D617267696E732E546F7005000000000000009002400E4D617267696E73 + 2E426F74746F6D050000000000000090024005416C69676E07044C6566740A50 + 6F736974696F6E2E5805000000000000009002400A506F736974696F6E2E5905 + 000000000000009002400A53697A652E57696474680500000000000000800440 + 0B53697A652E48656967687405000000000000008004401453697A652E506C61 + 74666F726D44656661756C740800000A5452656374616E676C6500095374796C + 654E616D65060A6261636B67726F756E6405416C69676E0706436C69656E740C + 436C69704368696C6472656E090A436C6970506172656E74090A46696C6C2E43 + 6F6C6F7207097846463230323032300748697454657374080C4D617267696E73 + 2E4C6566740500000000000000C804C00A53697A652E57696474680500000000 + 000000C805400B53697A652E4865696768740500000000000000C80440145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E616D + 650615627574746F6E436F6C6F72416E696D6174696F6E31084475726174696F + 6E05000000000000000000000C50726F70657274794E616D65060A46696C6C2E + 436F6C6F720A537461727456616C756507097846463230323032300953746F70 + 56616C756507097846463430343034300754726967676572063049734D6F7573 + 654F7665723D747275653B4973507265737365643D66616C73653B4973466F63 + 757365643D66616C73650E54726967676572496E7665727365063149734D6F75 + 73654F7665723D66616C73653B4973507265737365643D66616C73653B497346 + 6F63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E0009 + 5374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E33 + 084475726174696F6E05000000000000000000000C50726F70657274794E616D + 65060A46696C6C2E436F6C6F720A537461727456616C75650709784646324138 + 3245320953746F7056616C756507097846463137353739430754726967676572 + 062E4973507265737365643D747275653B49734D6F7573654F7665723D747275 + 653B4973466F63757365643D747275650E54726967676572496E766572736506 + 2F4973507265737365643D66616C73653B49734D6F7573654F7665723D747275 + 653B4973466F63757365643D7472756500000005545465787400095374796C65 + 4E616D6506047465787405416C69676E0706436C69656E740748697454657374 + 080A53697A652E57696474680500000000000000C804400B53697A652E486569 + 6768740500000000000000C804401453697A652E506C6174666F726D44656661 + 756C7408165465787453657474696E67732E466F6E74436F6C6F720708636C61 + 5768697465000007544C61796F757400095374796C654E616D6506074C61796F + 75743205416C69676E07044C6566740A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000000000C804401453697A + 652E506C6174666F726D44656661756C74080005545061746800095374796C65 + 4E616D65060469636F6E05416C69676E070643656E74657209446174612E5061 + 74680AD000000011000000000000009A99E9409A99C940010000006666664066 + 661E4101000000000000009A99C940010000000000003F9A99B94001000000CD + CC4C409A99094101000000CDCC4C400000000001000000000080400000000001 + 0000000000804000000841010000006666D6406666B640010000009A99E9409A + 99C940030000009A99E9409A99C940000000009A99993E00004041010000009A + 99993E33333341010000000000E04033333341010000000000E0400000404101 + 0000009A99993E00004041030000009A99993E000040410A46696C6C2E436F6C + 6F720708636C6157686974650748697454657374080A53697A652E5769647468 + 0500000000000000D003400B53697A652E4865696768740500000000000000E0 + 03401453697A652E506C6174666F726D44656661756C74080B5374726F6B652E + 4B696E6407044E6F6E6508577261704D6F646507034669740000000054504630 + 07544C61796F757400095374796C654E616D65061B73657474696E6773746F6F + 6C627574746F6E6D756C74697669657705416C69676E070643656E7465720A53 + 697A652E57696474680500000000000000C805400B53697A652E486569676874 + 0500000000000000C804401453697A652E506C6174666F726D44656661756C74 + 080756697369626C65080B46697865644865696768740232000654476C797068 + 00095374796C654E616D65060A676C7970687374796C650C4D617267696E732E + 4C65667405000000000000009002400B4D617267696E732E546F700500000000 + 0000009002400E4D617267696E732E426F74746F6D0500000000000000900240 + 05416C69676E07044C6566740A506F736974696F6E2E58050000000000000090 + 02400A506F736974696F6E2E5905000000000000009002400A53697A652E5769 + 64746805000000000000008004400B53697A652E486569676874050000000000 + 00008004401453697A652E506C6174666F726D44656661756C740800000A5452 + 656374616E676C6500095374796C654E616D65060A6261636B67726F756E6405 + 416C69676E0706436C69656E740C436C69704368696C6472656E090A436C6970 + 506172656E74090A46696C6C2E436F6C6F720709784646323032303230074869 + 7454657374080C4D617267696E732E4C6566740500000000000000C804C00A53 + 697A652E57696474680500000000000000C805400B53697A652E486569676874 + 0500000000000000C804401453697A652E506C6174666F726D44656661756C74 + 080B5374726F6B652E4B696E6407044E6F6E65000F54436F6C6F72416E696D61 + 74696F6E00095374796C654E616D650615627574746F6E436F6C6F72416E696D + 6174696F6E31084475726174696F6E05000000000000000000000C50726F7065 + 7274794E616D65060A46696C6C2E436F6C6F720A537461727456616C75650709 + 7846463230323032300953746F7056616C756507097846463430343034300754 + 726967676572063049734D6F7573654F7665723D747275653B49735072657373 + 65643D66616C73653B4973466F63757365643D66616C73650E54726967676572 + 496E7665727365063149734D6F7573654F7665723D66616C73653B4973507265 + 737365643D66616C73653B4973466F63757365643D66616C736500000F54436F + 6C6F72416E696D6174696F6E00095374796C654E616D650615627574746F6E43 + 6F6C6F72416E696D6174696F6E33084475726174696F6E050000000000000000 + 00000C50726F70657274794E616D65060A46696C6C2E436F6C6F720A53746172 + 7456616C756507097846463241383245320953746F7056616C75650709784646 + 3137353739430754726967676572062E4973507265737365643D747275653B49 + 734D6F7573654F7665723D747275653B4973466F63757365643D747275650E54 + 726967676572496E7665727365062F4973507265737365643D66616C73653B49 + 734D6F7573654F7665723D747275653B4973466F63757365643D747275650000 + 0005545465787400095374796C654E616D6506047465787405416C69676E0706 + 436C69656E740748697454657374080A53697A652E5769647468050000000000 + 0000C804400B53697A652E4865696768740500000000000000C804401453697A + 652E506C6174666F726D44656661756C74080454657874060454657874165465 + 787453657474696E67732E466F6E74436F6C6F720708636C6157686974650000 + 07544C61796F757400095374796C654E616D6506074C61796F75743205416C69 + 676E07044C6566740A53697A652E57696474680500000000000000C804400B53 + 697A652E4865696768740500000000000000C804401453697A652E506C617466 + 6F726D44656661756C74080005545061746800095374796C654E616D65060469 + 636F6E05416C69676E070643656E74657209446174612E506174680A540D0000 + 1C01000000000000333351423333E7410200000033335142CDCCE84102000000 + 333351426666EA4102000000333351423333EB410200000033335142CDCCEC41 + 02000000333351426666EE4102000000333351423333EF410200000033335142 + CDCCF04102000000333351426666F24102000000333351423333F34102000000 + 33335142CDCCF44102000000333351426666F64102000000333351423333F741 + 0100000099996F4266660E4201000000CDCC5C4200003C420100000000003A42 + 0000344202000000000038420000364202000000000036420000384202000000 + 0000344200003A420100000000003C42CDCC5C4201000000CDCC0E429A996F42 + 010000000000F84133335142020000006666F6413333514202000000CDCCF441 + 33335142020000000000F44133335142020000006666F2413333514202000000 + CDCCF04133335142020000000000F04133335142020000006666EE4133335142 + 02000000CDCCEC4133335142020000000000EC4133335142020000006666EA41 + 3333514202000000CDCCE84133335142020000000000E8413333514201000000 + 6666C24199996F4201000000FFFF4F41CCCC5C4201000000FFFF6F41FFFF3942 + 02000000FFFF6741FFFF374202000000FFFF5F41FFFF354202000000FFFF5741 + FFFF33420100000098999940FFFF3B420100000000000000CDCC0E4201000000 + 3333F3400000F841020000003333F3406666F641020000003333F340CDCCF441 + 020000003333F3400000F441020000003333F3406666F241020000003333F340 + CDCCF041020000003333F3400000F041020000003333F3406666EE4102000000 + 3333F340CDCCEC41020000003333F3400000EC41020000003333F3406666EA41 + 020000003333F340CDCCE841020000003333F3400000E8410100000000000000 + CDCCC0410100000066669640CDCC4C410100000066665641CDCC6C4102000000 + 66665E41CDCC64410200000066666641CDCC5C410200000066666E41CDCC5441 + 0100000066664E413433934001000000CDCCC04100000000010000006666E641 + 3333F340020000000000E8413333F340020000009999E9413333F34002000000 + 6666EA413333F340020000000000EC413333F340020000009999ED413333F340 + 020000006666EE413333F340020000000000F0413333F340020000009999F141 + 3333F340020000006666F2413333F340020000000000F4413333F34002000000 + 9999F5413333F340020000006666F6413333F34001000000CDCC0E4200000000 + 0100000000003C42666696400100000000003442666656410200000000003642 + 66665E410200000000003842666666410200000000003A4266666E4101000000 + CDCC5C4266664E41010000009A996F429A99C14101000000333351423333E741 + 03000000333351423333E7410000000033334342CDCC02420200000033334342 + CDCC004202000000999943426766FE4102000000999943426766FA4102000000 + 999943426766F64102000000FFFF43423433F34102000000FFFF43423433EF41 + 02000000FFFF43423433EB4102000000FFFF43420100E8410200000099994342 + 0100E44102000000999943420100E0410200000033334342CECCDC4102000000 + 33334342CECCD84101000000CDCC5E426866B64101000000CDCC54429B998541 + 01000000CDCC3442CECC9441020000006766324234338F410200000000003042 + 9B9989410200000033332D42010084410200000066662A42CECC7C4102000000 + 000028423533734102000000CDCC24429C9969410100000067662C423833D340 + 0100000001001442383383400100000067660242020030410200000067660042 + 02003041020000009B99FD4168662E41020000009B99F94168662E4102000000 + 9B99F54168662E41020000006866F241CECC2C41020000006866EE41CECC2C41 + 020000006866EA41CECC2C41020000003533E741CECC2C41020000003533E341 + 68662E41020000003533DF4168662E41020000000200DC410200304102000000 + 0200D84102003041010000009C99B5413733834001000000CFCC84413733D340 + 01000000020094419C9969410200000068668E413633734102000000CFCC8841 + CFCC7C410200000035338341010084410200000036337B419A99894102000000 + 9D99714167668E410200000004006841CECC9441010000000800D0409B998541 + 01000000080080406866B641010000006A662E419B99D941020000006A662E41 + 9B99DD4102000000D0CC2C41CECCE04102000000D0CC2C41CECCE44102000000 + D0CC2C41CECCE8410200000036332B410100EC410200000036332B410100F041 + 0200000036332B410100F4410200000036332B413433F74102000000D0CC2C41 + 3433FB4102000000D0CC2C413433FF41020000006A662E413433014202000000 + 6A662E4134330342010000000700804067661442010000000700D040CDCC2C42 + 010000000400684133332542020000009E997141000028420200000037337B41 + CDCC2A42020000003533834199992D4202000000CECC88416566304202000000 + 9B998D41CCCC324202000000020094413333354201000000CFCC844133335542 + 010000009C99B54133335F4201000000CFCCD8419999434202000000CFCCDC41 + 99994342020000000200E041FFFF4342020000000200E441FFFF434202000000 + 0200E841FFFF4342020000003533EB4165664442020000003533EF4165664442 + 020000003533F34165664442020000006866F64165664442020000006866FA41 + FFFF4342020000006866FE41FFFF434202000000CECC00429999434202000000 + CECC024299994342010000000100144233335F420100000067662C4233335542 + 01000000CDCC244233333542020000009A992742CDCC32420200000067662A42 + 666630420200000033332D4299992D4202000000FFFF2F42CCCC2A4202000000 + 666632426666284202000000CDCC34423333254201000000CDCC5442CDCC2C42 + 01000000CDCC5E42676614420100000033334342CDCC02420300000033334342 + CDCC0242000000003333EF4133339741020000003333FB413333974102000000 + 9A9903429999994102000000CDCC084266669E410200000000000E423333A341 + 02000000CDCC12429999A94102000000CDCC16429999B14102000000CDCC1A42 + 9999B9410200000000001E423333C34102000000676620429999CD4102000000 + CDCC2242FFFFD7410200000001002442FFFFE34102000000010024420000F041 + 02000000010024420100FC4102000000CECC2242000004420200000067662042 + 333309420200000001001E4266660E4202000000CDCC1A423333134202000000 + CDCC16423333174202000000CDCC124233331B420200000000000E4266661E42 + 02000000CDCC0842CDCC2042020000009A99034233332342020000003433FB41 + 67662442020000003433EF4167662442020000003433E3416766244202000000 + 3433D7413433234202000000CECCCC41CDCC2042020000006866C24167661E42 + 02000000CECCB84133331B4202000000CECCB0413333174202000000CECCA841 + 33331342020000006866A24166660E42020000009B999D413333094202000000 + CECC98410000044202000000686696410000FC4102000000686696410000F041 + 02000000686696410000E44102000000CECC98410000D841020000009B999D41 + 9A99CD41020000006866A2413433C34102000000CECCA8419A99B94102000000 + CECCB0419A99B14102000000CECCB8419A99A941020000006866C2413433A341 + 02000000CECCCC4167669E41020000000000D8419A999941020000003333E341 + 33339741020000003333EF4133339741030000003333EF413333974100000000 + 3333EF41CDCC1642020000000000F841CDCC1642020000000000004200001642 + 020000009A990342676614420200000034330742CDCC124202000000CDCC0A42 + 67661042020000009A990D429A990D420200000067661042CDCC0A4202000000 + CDCC12429A99074202000000676614429A990342020000000100164200000042 + 02000000CDCC16423433F74102000000CDCC16423433EF4102000000CDCC1642 + 6766E64102000000000016426766DE4102000000676614423433D74102000000 + CDCC12420100D0410200000067661042CECCC841020000009A990D423433C341 + 02000000CDCC0A429A99BD41020000009A990742CECCB841020000009A990342 + 9A99B54102000000000000426766B241020000003433F741CDCCB04102000000 + 3433EF41CDCCB041020000006766E641CDCCB041020000006766DE416766B241 + 020000003433D7419A99B541020000000100D041CDCCB84102000000CECCC841 + 9A99BD41020000003433C3413433C341020000009A99BD41CECCC84102000000 + CECCB8413433CF41020000009A99B5413433D741020000006766B2416766DE41 + 02000000CDCCB0413433E74102000000CDCCB0413433EF4102000000CDCCB041 + 0100F841020000006766B24100000042020000009A99B5419A99034202000000 + CDCCB84134330742020000009A99BD41CDCC0A42020000003433C3419A990D42 + 02000000CECCC84167661042020000003433CF41CDCC1242020000003433D741 + 67661442020000003333DF4100001642020000003333E741CDCC164202000000 + 3333EF41CDCC1642030000003333EF41CDCC16420A46696C6C2E436F6C6F7207 + 08636C6157686974650748697454657374080A53697A652E5769647468050000 + 0000000000D003400B53697A652E4865696768740500000000000000E0034014 + 53697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E + 6407044E6F6E6508577261704D6F64650703466974000000005450463007544C + 61796F757400095374796C654E616D65061172656D6F7665627574746F6E7374 + 796C6505416C69676E070643656E7465720A53697A652E576964746805000000 + 00000000C805400B53697A652E4865696768740500000000000000C003401453 + 697A652E506C6174666F726D44656661756C74080756697369626C65080B4669 + 7865644865696768740218000654476C79706800095374796C654E616D65060A + 676C7970687374796C650C4D617267696E732E4C656674050000000000000090 + 02400B4D617267696E732E546F7005000000000000009002400E4D617267696E + 732E426F74746F6D050000000000000090024005416C69676E07044C6566740A + 506F736974696F6E2E5805000000000000008404400A506F736974696F6E2E59 + 05000000000000009002400A53697A652E576964746805000000000000008004 + 400B53697A652E4865696768740500000000000000C001401453697A652E506C + 6174666F726D44656661756C740800000A5452656374616E676C650009537479 + 6C654E616D65060A6261636B67726F756E6405416C69676E0706436C69656E74 + 0C436C69704368696C6472656E090A436C6970506172656E74090A46696C6C2E + 436F6C6F7207097846463230323032300748697454657374080C4D617267696E + 732E4C6566740500000000000000C003C00A53697A652E576964746805000000 + 00000000C805400B53697A652E4865696768740500000000000000C003401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E65000F54436F6C6F72416E696D6174696F6E00095374796C654E61 + 6D650615627574746F6E436F6C6F72416E696D6174696F6E3108447572617469 + 6F6E05000000000000000000000C50726F70657274794E616D65060A46696C6C + 2E436F6C6F720A537461727456616C756507097846463230323032300953746F + 7056616C756507097846463430343034300754726967676572063049734D6F75 + 73654F7665723D747275653B4973507265737365643D66616C73653B4973466F + 63757365643D66616C73650E54726967676572496E7665727365063149734D6F + 7573654F7665723D66616C73653B4973507265737365643D66616C73653B4973 + 466F63757365643D66616C736500000F54436F6C6F72416E696D6174696F6E00 + 095374796C654E616D650615627574746F6E436F6C6F72416E696D6174696F6E + 33084475726174696F6E05000000000000000000000C50726F70657274794E61 + 6D65060A46696C6C2E436F6C6F720A537461727456616C756507097846463241 + 383245320953746F7056616C7565070978464631373537394307547269676765 + 72062E4973507265737365643D747275653B49734D6F7573654F7665723D7472 + 75653B4973466F63757365643D747275650E54726967676572496E7665727365 + 062F4973507265737365643D66616C73653B49734D6F7573654F7665723D7472 + 75653B4973466F63757365643D7472756500000005545465787400095374796C + 654E616D6506047465787405416C69676E0706436C69656E7407486974546573 + 74080A53697A652E576964746805000000000000009805400B53697A652E4865 + 696768740500000000000000C003401453697A652E506C6174666F726D446566 + 61756C74080454657874060454657874165465787453657474696E67732E466F + 6E74436F6C6F720708636C615768697465000007544C61796F75740009537479 + 6C654E616D6506074C61796F75743205416C69676E07044C6566740A53697A65 + 2E57696474680500000000000000C003400B53697A652E486569676874050000 + 0000000000C003401453697A652E506C6174666F726D44656661756C74080005 + 545061746800095374796C654E616D65060469636F6E05416C69676E0708436F + 6E74656E747309446174612E506174680A4C0000000600000000000000000040 + 41CDCC4C3F0100000000000000CDCC4C3F010000000000000000000000010000 + 0000004041000000000100000000004041CDCC4C3F0300000000004041CDCC4C + 3F0A46696C6C2E436F6C6F720708636C6157686974650748697454657374080C + 4D617267696E732E4C65667405000000000000008001400B4D617267696E732E + 546F7005000000000000008001400D4D617267696E732E526967687405000000 + 000000008001400E4D617267696E732E426F74746F6D05000000000000008001 + 400A53697A652E576964746805000000000000008003400B53697A652E486569 + 67687405000000000000008003401453697A652E506C6174666F726D44656661 + 756C74080B5374726F6B652E4B696E6407044E6F6E6508577261704D6F646507 + 0346697400000000545046300A5452656374616E676C6500095374796C654E61 + 6D650614706F7075706261636B67726F756E647374796C6505416C69676E0706 + 43656E7465720A46696C6C2E436F6C6F7207097846463244324432440A53697A + 652E576964746805000000000000009407400B53697A652E4865696768740500 + 000000000080D206401453697A652E506C6174666F726D44656661756C74080C + 5374726F6B652E436F6C6F7207097846463135313531350756697369626C6508 + 00005450463007544C61796F757400095374796C654E616D65061A70726F6772 + 6573736261726D696E6966696E6973687374796C6505416C69676E070643656E + 7465720A53697A652E576964746805000000000033338505400B53697A652E48 + 65696768740500000000009999E104401453697A652E506C6174666F726D4465 + 6661756C74080756697369626C6508000A5452656374616E676C650009537479 + 6C654E616D65060668747261636B05416C69676E0708436F6E74656E74730A46 + 696C6C2E436F6C6F720709784646343034303430064C6F636B65640907486974 + 54657374080A53697A652E576964746805000000000033338505400B53697A65 + 2E4865696768740500000000009999E104401453697A652E506C6174666F726D + 44656661756C74080B5374726F6B652E4B696E6407044E6F6E65000A54526563 + 74616E676C6500095374796C654E616D65060A68696E64696361746F7205416C + 69676E07044C6566740A46696C6C2E436F6C6F72070978464632434532343406 + 4C6F636B6564090748697454657374080A53697A652E57696474680500000000 + 000000C804400B53697A652E4865696768740500000000009999E10440145369 + 7A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E6407 + 044E6F6E650000000A5452656374616E676C6500095374796C654E616D650606 + 76747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C6F + 720709784646343034303430064C6F636B6564090748697454657374080A5369 + 7A652E576964746805000000000033338505400B53697A652E48656967687405 + 00000000009999E104401453697A652E506C6174666F726D44656661756C7408 + 0B5374726F6B652E4B696E6407044E6F6E65000A5452656374616E676C650009 + 5374796C654E616D65060A76696E64696361746F7205416C69676E0706426F74 + 746F6D0A46696C6C2E436F6C6F720709784646324345323434064C6F636B6564 + 090748697454657374080A506F736974696F6E2E5905000000000099998D0440 + 0A53697A652E576964746805000000000033338505400B53697A652E48656967 + 68740500000000000000A803401453697A652E506C6174666F726D4465666175 + 6C74080B5374726F6B652E4B696E6407044E6F6E65000000005450463007544C + 61796F757400095374796C654E616D65061070726F6772657373626172737479 + 6C6505416C69676E070643656E7465720A53697A652E57696474680500000000 + 0033338505400B53697A652E4865696768740500000000009999E10440145369 + 7A652E506C6174666F726D44656661756C74080756697369626C6508000A5452 + 656374616E676C6500095374796C654E616D65060668747261636B05416C6967 + 6E0708436F6E74656E74730A46696C6C2E436F6C6F7207097846463230323032 + 30064C6F636B6564090748697454657374080A53697A652E5769647468050000 + 00000033338505400B53697A652E4865696768740500000000009999E1044014 + 53697A652E506C6174666F726D44656661756C74080C5374726F6B652E436F6C + 6F720709784646313531353135000A5452656374616E676C6500095374796C65 + 4E616D65060A68696E64696361746F7205416C69676E07044C6566740A46696C + 6C2E436F6C6F720709784646324138324532064C6F636B656409074869745465 + 7374080C4D617267696E732E4C656674050000000000000080FF3F0B4D617267 + 696E732E546F70050000000000000080FF3F0D4D617267696E732E5269676874 + 050000000000000080FF3F0E4D617267696E732E426F74746F6D050000000000 + 000080FF3F0A506F736974696F6E2E58050000000000000080FF3F0A506F7369 + 74696F6E2E59050000000000000080FF3F0A53697A652E576964746805000000 + 00000000C804400B53697A652E4865696768740500000000009999D904401453 + 697A652E506C6174666F726D44656661756C74080B5374726F6B652E4B696E64 + 07044E6F6E650000000A5452656374616E676C6500095374796C654E616D6506 + 0676747261636B05416C69676E0708436F6E74656E74730A46696C6C2E436F6C + 6F720709784646323032303230064C6F636B6564090748697454657374080A53 + 697A652E576964746805000000000033338505400B53697A652E486569676874 + 0500000000009999E104401453697A652E506C6174666F726D44656661756C74 + 080C5374726F6B652E436F6C6F720709784646313531353135000A5452656374 + 616E676C6500095374796C654E616D65060A76696E64696361746F7205416C69 + 676E0706426F74746F6D0A46696C6C2E436F6C6F720709784646324138324532 + 064C6F636B6564090748697454657374080C4D617267696E732E4C6566740500 + 00000000000080FF3F0B4D617267696E732E546F70050000000000000080FF3F + 0D4D617267696E732E5269676874050000000000000080FF3F0E4D617267696E + 732E426F74746F6D050000000000000080FF3F0A506F736974696F6E2E580500 + 00000000000080FF3F0A506F736974696F6E2E5905000000000099998904400A + 53697A652E576964746805000000000033338105400B53697A652E4865696768 + 740500000000000000A803401453697A652E506C6174666F726D44656661756C + 74080B5374726F6B652E4B696E6407044E6F6E6500000000} + end> + Left = 32 + Top = 16 + end + object StyleBook2: TStyleBook + Styles = < + item + ResourcesBin = { + 464D585F5354594C4520322E3501061372656E64657270726F67726573737374 + 796C6503FC08005450463007544C61796F757400095374796C654E616D650613 + 72656E64657270726F67726573737374796C6505416C69676E070643656E7465 + 720A53697A652E576964746805000000000000008F08400B53697A652E486569 + 6768740500000000000000F006401453697A652E506C6174666F726D44656661 + 756C740800065450616E656C00095374796C654E616D650607626770616E656C + 05416C69676E0708436F6E74656E74730A53697A652E57696474680500000000 + 0000008F08400B53697A652E4865696768740500000000000000F00640145369 + 7A652E506C6174666F726D44656661756C7408000007544C61796F7574000953 + 74796C654E616D650607636F6E74656E7405416C69676E0708436F6E74656E74 + 730A53697A652E576964746805000000000000008F08400B53697A652E486569 + 6768740500000000000000F006401453697A652E506C6174666F726D44656661 + 756C74080006544C6162656C00095374796C654E616D650604636F6D7005416C + 69676E07084D6F73744C656674084175746F53697A65090E5374796C65645365 + 7474696E67730B0646616D696C79055374796C6509466F6E74436F6C6F72000C + 4D617267696E732E4C65667405000000000000008003400B4D617267696E732E + 546F7005000000000000008002400E4D617267696E732E426F74746F6D050000 + 00000000008002400A506F736974696F6E2E5805000000000000008003400A50 + 6F736974696F6E2E5905000000000000008002400A53697A652E576964746805 + 00000000000000A004400B53697A652E48656967687405000000000000008004 + 401453697A652E506C6174666F726D44656661756C7408165465787453657474 + 696E67732E466F6E742E53697A65050000000000000080034015546578745365 + 7474696E67732E576F7264577261700804546578740604636F6D70000005544D + 656D6F00095374796C654E616D6506036C6F6719546F7563682E496E74657261 + 637469766547657374757265730B0350616E074C6F6E6754617009446F75626C + 655461700011446174614465746563746F7254797065730B000E5374796C6564 + 53657474696E67730B055374796C6509466F6E74436F6C6F7200185465787453 + 657474696E67732E466F6E742E46616D696C790608436F6E736F6C617305416C + 69676E070A4D6F7374426F74746F6D0A506F736974696F6E2E59050000000000 + 0000C004400A53697A652E576964746805000000000000008F08400B53697A65 + 2E4865696768740500000000000000C006401453697A652E506C6174666F726D + 44656661756C74080E56696577706F72742E576964746805000000000000008F + 08400F56696577706F72742E4865696768740500000000000000C0064000000D + 54416E69496E64696361746F7200095374796C654E616D650603616E6905416C + 69676E0706436C69656E7407456E61626C6564090B5374796C654C6F6F6B7570 + 0615616E69696E64696361746F72686F727A7374796C65074869745465737408 + 0C4D617267696E732E4C65667405000000000000008003400B4D617267696E73 + 2E546F7005000000000000008001400E4D617267696E732E426F74746F6D0500 + 0000000000008003400A53697A652E57696474680500000000000000BE07400B + 53697A652E4865696768740500000000000000C000401453697A652E506C6174 + 666F726D44656661756C7408000006544C6162656C00095374796C654E616D65 + 060673746174757305416C69676E0703546F700E5374796C656453657474696E + 67730B0646616D696C790453697A6509466F6E74436F6C6F72000C4D61726769 + 6E732E4C65667405000000000000008003400B4D617267696E732E546F700500 + 0000000000008002400A506F736974696F6E2E5805000000000000009005400A + 506F736974696F6E2E5905000000000000008002400A53697A652E5769647468 + 0500000000000000BE07400B53697A652E486569676874050000000000000088 + 03401453697A652E506C6174666F726D44656661756C74081A54657874536574 + 74696E67732E466F6E742E5374796C654578740A0D0000000007000000000000 + 00040000000454657874060673746174757300000C5450726F67726573734261 + 7200095374796C654E616D65060B70726F677265737362617205416C69676E07 + 06436C69656E740748697454657374080B4F7269656E746174696F6E070A486F + 72697A6F6E74616C0C4D617267696E732E4C6566740500000000000000800340 + 0B4D617267696E732E546F7005000000000000008001400E4D617267696E732E + 426F74746F6D05000000000000008003400A53697A652E576964746805000000 + 00000080C307400B53697A652E4865696768740500000000000000C000401453 + 697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570 + 061470726F67726573736261726D696E697374796C650556616C756505000000 + 00000000C804400756697369626C650800000754427574746F6E00095374796C + 654E616D6506096C6F67627574746F6E05416C69676E07094D6F737452696768 + 740A506F736974696F6E2E5805000000000000008308400A53697A652E576964 + 74680500000000000000C004400B53697A652E48656967687405000000000000 + 00C004401453697A652E506C6174666F726D44656661756C74080B5374796C65 + 4C6F6F6B7570060E6C6F67627574746F6E7374796C65000006544C6162656C00 + 095374796C654E616D6506066672616D657305416C69676E07094D6F73745269 + 676874084175746F53697A65090E5374796C656453657474696E67730B064661 + 6D696C7909466F6E74436F6C6F72000C4D617267696E732E4C65667405000000 + 000000008002400D4D617267696E732E52696768740500000000000000800340 + 0A506F736974696F6E2E580500000000000000E607400A53697A652E57696474 + 680500000000000000C004400B53697A652E4865696768740500000000000000 + C004401453697A652E506C6174666F726D44656661756C740816546578745365 + 7474696E67732E466F6E742E53697A6505000000000000008003401554657874 + 53657474696E67732E576F72645772617008045465787406066672616D657300 + 000000} + end> + Left = 112 + Top = 16 + end + object TrackBar1: TTrackBar + CanParentFocus = True + Min = -1.000000000000000000 + Orientation = Horizontal + Position.X = 168.000000000000000000 + Position.Y = 296.000000000000000000 + Size.Width = 697.000000000000000000 + Size.Height = 17.000000000000000000 + Size.PlatformDefault = False + Value = -1.000000000000000000 + OnChange = TrackBar1Change + end + object CheckBox1: TCheckBox + Position.X = 24.000000000000000000 + Position.Y = 296.000000000000000000 + Text = 'IsError' + OnChange = CheckBox1Change + end + object RenderProgress1: TRenderProgress + Size.Width = 633.000000000000000000 + Size.Height = 48.000000000000000000 + Size.PlatformDefault = False + Position.X = 248.000000000000000000 + Position.Y = 40.000000000000000000 + Composition = 'Web Icons' + ST_WaitingForAErender = 'Waiting for aerender...' + ST_Rendering = 'Rendering' + ST_FinishedRender = 'Rendering finished' + ST_RenderError = 'ERROR: See log for more info' + InFrame = -1.000000000000000000 + OutFrame = 100.000000000000000000 + MemoVisible = False + IsError = False + end + object Button1: TButton + Position.X = 904.000000000000000000 + Position.Y = 296.000000000000000000 + TabOrder = 2 + Text = 'Button1' + OnClick = Button1Click + end +end diff --git a/src/lib/Components/TRenderProgress/Test Project/RenderProgressUnit.pas b/src/lib/Components/TRenderProgress/Test Project/RenderProgressUnit.pas new file mode 100644 index 0000000..3145068 --- /dev/null +++ b/src/lib/Components/TRenderProgress/Test Project/RenderProgressUnit.pas @@ -0,0 +1,49 @@ +unit RenderProgressUnit; + +interface + +uses + System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, + FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, + FMX.RenderProgress, FMX.Controls.Presentation, FMX.StdCtrls; + +type + TForm1 = class(TForm) + StyleBook1: TStyleBook; + StyleBook2: TStyleBook; + TrackBar1: TTrackBar; + CheckBox1: TCheckBox; + RenderProgress1: TRenderProgress; + Button1: TButton; + procedure TrackBar1Change(Sender: TObject); + procedure CheckBox1Change(Sender: TObject); + procedure Button1Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.fmx} + +procedure TForm1.Button1Click(Sender: TObject); +begin + RenderProgress1.Log.Add('String ' + Random(9999).ToString); +end; + +procedure TForm1.CheckBox1Change(Sender: TObject); +begin + RenderProgress1.IsError := CheckBox1.IsChecked; +end; + +procedure TForm1.TrackBar1Change(Sender: TObject); +begin + RenderProgress1.Value := TrackBar1.Value; +end; + +end. diff --git a/src/lib/FMX.Platform.Win.pas b/src/lib/FMX.Platform.Win.pas deleted file mode 100644 index b2ce6a7..0000000 --- a/src/lib/FMX.Platform.Win.pas +++ /dev/null @@ -1,6465 +0,0 @@ -{*******************************************************} -{ } -{ Delphi FireMonkey Platform } -{ } -{ Copyright(c) 2011-2020 Embarcadero Technologies, Inc. } -{ All rights reserved } -{ } -{*******************************************************} - -unit FMX.Platform.Win; - -(*$HPPEMIT '#if defined(WIN32) && defined(CreateWindow)'*) -(*$HPPEMIT ' #define __SAVE_CREATEWINDOW CreateWindow'*) -(*$HPPEMIT ' #undef CreateWindow'*) -(*$HPPEMIT '#endif'*) - -(*$HPPEMIT END '#if defined(__SAVE_CREATEWINDOW)'*) -(*$HPPEMIT END ' #define CreateWindow __SAVE_CREATEWINDOW'*) -(*$HPPEMIT END ' #undef __SAVE_CREATEWINDOW'*) -(*$HPPEMIT END '#endif'*) - -{$HPPEMIT NOUSINGNAMESPACE} -{$R-} - -interface - -{$SCOPEDENUMS ON} - -uses - Winapi.CommCtrl, Winapi.Windows, Winapi.ActiveX, System.Types, System.Classes, System.UITypes, System.UIConsts, - System.Generics.Collections, FMX.Forms, FMX.Platform, FMX.Types, FMX.Graphics, FMX.ZOrder.Win; - -type - TWinDropTarget = class; - - PRgnRects = ^TRgnRects; - TRgnRects = array [0..MaxInt div SizeOf(TRect) - 1] of TRect; - - TUpdateRects = array of TRectF; - - TWinWindowHandle = class(TWindowHandle) - private class var - FForcedScale: Single; - private - FWnd: HWND; - FZOrderManager: TWinZOrderManager; - FBufferBitmap: THandle; - FBitmapInfo: TBitmapInfo; - FBufferBits: Pointer; - FBufferHandle: THandle; - FBufferSize: TSize; - FForm: TCommonCustomForm; - FDisableDeactivate: Boolean; - FWinDropTarget: TWinDropTarget; - FCurrentScale: Single; - FClientSize: TSizeF; - FWndClientSize: TSize; - FBounds: TRectF; - FWndBounds: TRect; - FNearestIntegerMultiple: Integer; - procedure UpdateLayer; - function GetZOrderManager: TWinZOrderManager; - procedure SetBounds(const Value: TRect); - procedure SetWndBounds(const Value: TRect); - procedure SetClientSize(const Value: TSize); - procedure UpdateClientSize; - procedure SetWindowSizeByClientSize; - procedure CalcNearestIntegerMultiple; - function GetNearestIntegerMultiple: Integer; - protected - function GetBounds: TRect; virtual; - function GetClientSize: TSize; virtual; - function GetWndBounds: TRect; virtual; - function GetWndClientSize: TSize; virtual; - function GetTransparency: Boolean; virtual; - function GetScale: Single; override; - public - constructor Create(const AForm: TCommonCustomForm; const AWnd: HWND); - destructor Destroy; override; - class procedure SetForcedScale(NewScale: Single); - procedure CreateBuffer(const Width, Height: Integer); - procedure ResizeBuffer(const Width, Height: Integer); - procedure FreeBuffer; - procedure CorrectWindowSize(const WindowPos: PWindowPos); - procedure ScaleChanged; - procedure DpiChanged(const NewDpi: Integer); - function WndToForm(const Rect: TRect): TRectF; overload; - function WndToForm(const Rect: TRectF): TRectF; overload; - function FormToWnd(const Rect: TRectF): TRectF; - property Wnd: HWND read FWnd; - property Form: TCommonCustomForm read FForm; - property BufferBits: Pointer read FBufferBits; - property BufferHandle: THandle read FBufferHandle; - /// Allocated buffer size for native window. - property BufferSize: TSize read FBufferSize; - property ZOrderManager: TWinZOrderManager read GetZOrderManager; - property Transparency: Boolean read GetTransparency; - property ClientSize: TSize read GetClientSize write SetClientSize; - property NearestIntegerMultiple: Integer read GetNearestIntegerMultiple; - property Bounds: TRect read GetBounds write SetBounds; - property BoundsF: TRectF read FBounds; - property WndClientSize: TSize read GetWndClientSize; - property WndBounds: TRect read GetWndBounds write SetWndBounds; - end; - - TWinDropTarget = class(TComponent, IDropTarget) - private - Form: TCommonCustomForm; - function GetDataObject: TDragObject; - function DragEnter(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint; - var dwEffect: Longint): HRESULT; stdcall; - function DragOver(grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HRESULT; stdcall; - function DragLeave: HRESULT; stdcall; - function Drop(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint; - var dwEffect: Longint): HRESULT; stdcall; - end; - -function FindWindow(Handle: HWND): TCommonCustomForm; -function WindowHandleToPlatform(const AHandle: TWindowHandle): TWinWindowHandle; - -function FmxHandleToHWND(const FmxHandle: TWindowHandle): HWND; -function FormToHWND(Form: TCommonCustomForm): HWND; -function ApplicationHWND: HWND; - -procedure RegisterCorePlatformServices; -procedure UnregisterCorePlatformServices; - -const - IDC_NODROP = PChar(32767); - IDC_DRAG = PChar(32766); - IDC_MULTIDRAG = PChar(32763); - IDC_SQLWAIT = PChar(32762); - -type - TApplicationHWNDProc = function: HWND; - -procedure RegisterApplicationHWNDProc(const Proc: TApplicationHWNDProc); - -procedure ShutDown; cdecl; - -implementation - -{$SCOPEDENUMS OFF} - - -uses - System.Messaging, System.IOUtils, Winapi.CommDlg, Winapi.Messages, Winapi.ShlObj, Winapi.MMSystem, Winapi.ShellAPI, - Winapi.MultiMon, Winapi.Imm, Winapi.UxTheme, System.Variants, System.SysUtils, System.Math, - System.Math.Vectors, System.StrUtils, System.DateUtils, System.RTLConsts, System.SyncObjs, System.Rtti, System.Devices, - FMX.Consts, FMX.Menus, FMX.Helpers.Win, FMX.Printer, FMX.Printer.Win, FMX.Dialogs.Win, FMX.Canvas.GDIP, FMX.Canvas.D2D, - FMX.Context.DX9, FMX.Context.DX11, FMX.Canvas.GPU, FMX.Forms.Border.Win, FMX.Controls.Win, FMX.Gestures.Win, - FMX.TextLayout, FMX.Text, FMX.Types3D, FMX.VirtualKeyboard, FMX.Controls, FMX.BehaviorManager, FMX.Styles, - FMX.MultiTouch.Win, FMX.ImgList, FMX.WebBrowser, FMX.Surfaces, FMX.Utils, FMX.KeyMapping, FMX.AcceleratorKey, - FMX.AcceleratorKey.Win; - -type - - EUnavailableMenuId = class(Exception); - - TOpenMenuItem = class(TMenuItem); - - MySTGMEDIUM = record // for compatibility - Tymed: DWORD; - Case Integer Of - 0: - (HBITMAP: HBITMAP; UnkForRelease: Pointer { IUnknown } ); - 1: - (HMETAFILEPICT: THandle); - 2: - (HENHMETAFILE: THandle); - 3: - (HGLOBAL: HGLOBAL); - 4: - (lpszFileName: POleStr); - 5: - (stm: Pointer { IStream } ); - 6: - (stg: Pointer { IStorage } ); - end; - - { TDropSource } - - TDataObjectInfo = record - FormatEtc: TFormatEtc; - StgMedium: TStgMedium; - OwnedByDataObject: Boolean; - end; - - TDataObjectInfoArray = array of TDataObjectInfo; - - TDropSource = class(TComponent, IDataObject, IDropSource) - private - Data: TDragObject; - Formats: TDataObjectInfoArray; - { IDropSource } - function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: Longint): HRESULT; stdcall; - function GiveFeedback(dwEffect: Longint): HRESULT; stdcall; - { IDataObject } - function GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HRESULT; stdcall; - function GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HRESULT; stdcall; - function QueryGetData(const FormatEtc: TFormatEtc): HRESULT; stdcall; - function GetCanonicalFormatEtc(const FormatEtc: TFormatEtc; out FormatEtcout: TFormatEtc): HRESULT; stdcall; - function SetData(const FormatEtc: TFormatEtc; var Medium: TStgMedium; fRelease: BOOL): HRESULT; stdcall; - function EnumFormatEtc(dwDirection: Longint; out EnumFormatEtc: IEnumFormatEtc): HRESULT; stdcall; - function dAdvise(const FormatEtc: TFormatEtc; advf: Longint; const advsink: IAdviseSink; - out dwConnection: Longint): HRESULT; stdcall; - function dUnadvise(dwConnection: Longint): HRESULT; stdcall; - function EnumdAdvise(out EnumAdvise: IEnumStatData): HRESULT; stdcall; - { For IDropSourceHelper } - function FindFormatEtc(TestFormatEtc: TFormatEtc): Integer; - function EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; - function HGlobalClone(HGLOBAL: THandle): THandle; - function RetrieveOwnedStgMedium(Format: TFormatEtc; var StgMedium: TStgMedium): HRESULT; - function StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; - CopyInMedium: Boolean): HRESULT; - function CanonicalIUnknown(const TestUnknown: IUnknown): IUnknown; - end; - -type - TWin32TimerInfo = record - TimerID: UIntPtr; // the Windows timer ID for this timer - TimerHandle: TFmxHandle; // the unique FMX Handle for this timer - TimerFunc: TTimerProc; // owner function to handle timer - end; - - { TPlatformWin } - - TFullScreenParams = record - BorderStyle: TFmxFormBorderStyle; - WindowState: TWindowState; - Position: TPoint; - Size: TPoint; - public - function IsFullScreen: Boolean; - procedure Clean; - end; - - TWinTimerService = class; - TImmManager = class; - - TPlatformWin = class(TInterfacedObject, IFMXApplicationService, IFMXSystemFontService, - IFMXWindowService, IFMXDragDropService, IFMXCursorService, IFMXMouseService, - IFMXScreenService, IFMXLocaleService, IFMXTextService, IFMXContextService, IFMXCanvasService, IFMXDeviceService, - IFMXWindowBorderService, IFMXSystemInformationService, IFMXLoggingService, IFMXFullScreenWindowService, - IFMXListingService, IFMXSaveStateService, IFMXDeviceMetricsService, IFMXGestureRecognizersService, - IFMXWindowsTouchService, IFMXDefaultMetricsService, IFMXKeyMappingService) - private const - DefaultWindowsFontSize = 12; - private - FTitle: string; - FDefaultTitle: string; - FApplicationHWNDProc: TApplicationHWNDProc; - FApplicationHWND: HWND; - FIsOutApplicationHWND: Boolean; - FFullScreenSupport: TDictionary; - FDiableUpdateState: Boolean; - FThreadSyncHandle: HWND; - FInPaintUpdateRects: TDictionary; - FTerminating: Boolean; - FRunning: Boolean; - FCursor: TCursor; - FCaptionChangedId: Integer; - FMultiTouchManager: TMultiTouchManagerWin; - FEnabledInteractiveGestures: TInteractiveGestures; - FSaveStateStoragePath: string; - FDragAndDropActive: Boolean; - FKeyMapping: TKeyMapping; - FAcceleratorKeyRegistry: IFMXAcceleratorKeyRegistryService; - FIsPostQuitMessage: Boolean; - FTimerService: TWinTimerService; - { IMM } - FImmManagers: TDictionary; - procedure ThreadSync(var Msg: TMessage); - procedure WakeMainThread(Sender: TObject); - function CreateAppHandle: HWND; - procedure MinimizeApp; - procedure RestoreApp; - // IFMXListingService - function GetListingHeaderBehaviors: TListingHeaderBehaviors; - function GetListingSearchFeatures: TListingSearchFeatures; - function GetListingTransitionFeatures: TListingTransitionFeatures; - function GetListingEditModeFeatures: TListingEditModeFeatures; - function IFMXListingService.GetHeaderBehaviors = GetListingHeaderBehaviors; - function IFMXListingService.GetSearchFeatures = GetListingSearchFeatures; - function IFMXListingService.GetTransitionFeatures = GetListingTransitionFeatures; - function IFMXListingService.GetEditModeFeatures = GetListingEditModeFeatures; - // IFMXSaveStateService - function GetSaveStateFileName(const ABlockName: string): string; - function GetSaveStateBlock(const ABlockName: string; const ABlockData: TStream): Boolean; - function SetSaveStateBlock(const ABlockName: string; const ABlockData: TStream): Boolean; - function GetSaveStateStoragePath: string; - procedure SetSaveStateStoragePath(const ANewPath: string); - function GetSaveStateNotifications: Boolean; - function IFMXSaveStateService.GetBlock = GetSaveStateBlock; - function IFMXSaveStateService.SetBlock = SetSaveStateBlock; - function IFMXSaveStateService.GetStoragePath = GetSaveStateStoragePath; - procedure IFMXSaveStateService.SetStoragePath = SetSaveStateStoragePath; - function IFMXSaveStateService.GetNotifications = GetSaveStateNotifications; - // IFMXDeviceMetricsService - function GetDisplayMetrics: TDeviceDisplayMetrics; - procedure UpdateAppTitle; - procedure CaptionChangedHandler(const Sender: TObject; const Msg: System.Messaging.TMessage); - function GetApplicationHWND: HWND; - procedure SetApplicationHWNDProc(const Value: TApplicationHWNDProc); - procedure UpdateApplicationHwnd; - - //IFMXKeyMappingService - /// Registers a platform key as the given virtual key. - function RegisterKeyMapping(const PlatformKey, VirtualKey: Word; const KeyKind: TKeyKind): Boolean; - /// Unegisters a platform key as the given virtual key. - function UnregisterKeyMapping(const PlatformKey: Word): Boolean; - /// Obtains the virtual key from a given platform key. - function PlatformKeyToVirtualKey(const PlatformKey: Word; var KeyKind: TKeyKind): Word; - /// Obtains the platform key from a given virtual key. - function VirtualKeyToPlatformKey(const VirtualKey: Word): Word; - function GetImmManager(const Index: TCommonCustomForm): TImmManager; - public - constructor Create; - destructor Destroy; override; - { IFMXApplicationService } - procedure Run; - function HandleMessage: Boolean; - procedure WaitMessage; - function GetDefaultTitle: string; - function GetTitle: string; - procedure SetTitle(const Value: string); - function Terminating: Boolean; - function Running: Boolean; - procedure Terminate; - function GetVersionString: string; - property ApplicationHWND: HWND read GetApplicationHWND; - property ApplicationHWNDProc: TApplicationHWNDProc read FApplicationHWNDProc write SetApplicationHWNDProc; - { IFMXSystemFontService } - function GetDefaultFontFamilyName: string; - function GetDefaultFontSize: Single; - { IFMXWindowService } - function FindForm(const AHandle: TWindowHandle): TCommonCustomForm; - function CreateWindow(const AForm: TCommonCustomForm): TWindowHandle; - procedure DestroyWindow(const AForm: TCommonCustomForm); - procedure ReleaseWindow(const AForm: TCommonCustomForm); - procedure SetWindowState(const AForm: TCommonCustomForm; const AState: TWindowState); - procedure ShowWindow(const AForm: TCommonCustomForm); - procedure HideWindow(const AForm: TCommonCustomForm); - procedure BringToFront(const AForm: TCommonCustomForm); - procedure SendToBack(const AForm: TCommonCustomForm); - procedure Activate(const AForm: TCommonCustomForm); - function ShowWindowModal(const AForm: TCommonCustomForm): TModalResult; - function CanShowModal: Boolean; - procedure InvalidateWindowRect(const AForm: TCommonCustomForm; R: TRectF); - procedure InvalidateImmediately(const AForm: TCommonCustomForm); - procedure SetWindowRect(const AForm: TCommonCustomForm; ARect: TRectF); - function GetWindowRect(const AForm: TCommonCustomForm): TRectF; - function GetClientSize(const AForm: TCommonCustomForm): TPointF; - procedure SetClientSize(const AForm: TCommonCustomForm; const ASize: TPointF); - procedure SetWindowCaption(const AForm: TCommonCustomForm; const ACaption: string); - procedure SetCapture(const AForm: TCommonCustomForm); - procedure ReleaseCapture(const AForm: TCommonCustomForm); - function ClientToScreen(const AForm: TCommonCustomForm; const Point: TPointF): TPointF; - function ScreenToClient(const AForm: TCommonCustomForm; const Point: TPointF): TPointF; - function GetWindowScale(const AForm: TCommonCustomForm): Single; - // for desingtime and testing only - procedure SetFullScreen(const AForm: TCommonCustomForm; const AValue: Boolean); - function GetFullScreen(const AForm: TCommonCustomForm): Boolean; - procedure SetShowFullScreenIcon(const AForm: TCommonCustomForm; const AValue: Boolean); - { IFMXWindowBorderService } - function CreateWindowBorder(const AForm: TCommonCustomForm): TWindowBorder; - { IFMXDragDropService } - procedure BeginDragDrop(AForm: TCommonCustomForm; const Data: TDragObject; ABitmap: TBitmap); - { IFMXCursorService } - procedure SetCursor(const ACursor: TCursor); - function GetCursor: TCursor; - { IFMXMouseService } - function GetMousePos: TPointF; - { IFMXScreenService } - function GetScreenSize: TPointF; - function GetScreenScale: Single; - function GetScreenOrientation: TScreenOrientation; - procedure SetSupportedScreenOrientations(const AOrientations: TScreenOrientations); - { IFMXLocaleService } - function GetCurrentLangID: string; - function GetLocaleFirstDayOfWeek: string; - function GetFirstWeekday: Byte; - { IFMXTextService } - function GetTextServiceClass: TTextServiceClass; - { IFMXContextService } - procedure RegisterContextClasses; - procedure UnregisterContextClasses; - { IFMXCanvasService } - procedure RegisterCanvasClasses; - procedure UnregisterCanvasClasses; - { IFMXSystemInformationService } - function GetScrollingBehaviour: TScrollingBehaviours; - function GetMinScrollThumbSize: Single; - function GetCaretWidth: Integer; - function GetMenuShowDelay: Integer; - { IFMXLoggingService } - procedure Log(const AFormat: string; const AParams: array of const); - { IFMXGestureRecognizersService } - procedure AddRecognizer(const ARec: TInteractiveGesture; const AForm: TCommonCustomForm); - procedure RemoveRecognizer(const ARec: TInteractiveGesture; const AForm: TCommonCustomForm); - { IFMXWindowsTouchService } - procedure HookTouchHandler(const AForm: TCommonCustomForm); - procedure UnhookTouchHandler(const AForm: TCommonCustomForm); - { IFMXDeviceService } - function GetModel: string; - function GetFeatures: TDeviceFeatures; - function GetDeviceClass: TDeviceInfo.TDeviceClass; - { IFMXDefaultMetricsService } - function SupportsDefaultSize(const AComponent: TComponentKind): Boolean; - function GetDefaultSize(const AComponent: TComponentKind): TSize; - - property ImmManager[const Index: TCommonCustomForm]: TImmManager read GetImmManager; - property TimerService: TWinTimerService read FTimerService; - end; - - TWinTimerService = class(TInterfacedObject, IFMXTimerService) - private - FHandleCounter: TFmxHandle; - FTimers: TList; - FPerformanceFrequency: Int64; - FTerminating: Boolean; - procedure DestroyTimers; - { Handlers } - class procedure TimerCallback(window_hwnd: HWND; Msg: Longint; idEvent: UINT; dwTime: Longint); static; stdcall; - procedure ApplicationTerminatingHandler(const Sender: TObject; const Msg: System.Messaging.TMessage); - public - constructor Create; - destructor Destroy; override; - - { IFMXTimerService } - function CreateTimer(AInterval: Integer; ATimerFunc: TTimerProc): TFmxHandle; - function DestroyTimer(Timer: TFmxHandle): Boolean; - function GetTick: Double; - end; - - TMenuLooperWin = class - private - FView: IMenuView; - function IsItemSelectable(const Item: TFmxObject): Boolean; - procedure SelectFirstMenuItem(const AView: IMenuView); - procedure SelectLastMenuItem(const AView: IMenuView); - procedure SelectNextMenuItem(const AView: IMenuView; const ABackward: Boolean); - function BackwardSelectNextMenuItem(const AView: IMenuView; const AStartInd, AEndInd: Integer): Boolean; - function ForwardSelectNextMenuItem(const AView: IMenuView; const AStartInd, AEndInd: Integer): Boolean; - public - procedure StartLoop(const AView: IMenuView); - procedure EndLoop(const AView: IMenuView); - end; - - TWin32MenuInfo = record - MenuID: Integer; - FMXMenuItem: TMenuItem; - constructor Create(const AMenuId: Integer; const AnItem: TMenuItem); - end; - - TMenuServiceWin = class(TInterfacedObject, IFMXMenuService) - private type - TState = (CreatingOSMenu, DestroyingMenuItem); - TStates = set of TState; - TMenuId = Integer; - private - FHMenuMap: TDictionary; - FHMenuIdMap: TDictionary; - FStates: TStates; - FMenuLooper: TMenuLooperWin; - { Menu Item Id} - function GenerateMenuId: TMenuId; - function AssignNewIdToMenu(const AParentMenu, AMenu: HMENU): TMenuId; - function FindMenuInfoById(const AMenuItemId: TMenuId; var AMenuInfo: TWin32MenuInfo): Boolean; - { Removing } - procedure DestroysAllMenuItems(const AMenu: IItemsContainer); - procedure RemoveMenuFromMaps(const AMenuHandle: TFmxHandle); - { Menu Item Bitmap } - procedure AddBitmapToMenu(const AParentMenu: HMENU; const AMenuItemId: TMenuId; const ABitmap: HBITMAP); - procedure RemoveBitmapFromMenu(const AParentMenu, AMenu: HMENU); - protected - procedure WMCommand(var Message: TWMCommand); message WM_COMMAND; - procedure WMInitMenuPopup(var Message: TWMInitMenuPopup); message WM_INITMENUPOPUP; - procedure WMMenuSelect(var Message: TWMMenuSelect); message WM_MENUSELECT; - public - constructor Create; - destructor Destroy; override; - - { IFMXMenuService } - - procedure StartMenuLoop(const AView: IMenuView); - function ShortCutToText(ShortCut: TShortCut): string; - procedure ShortCutToKey(ShortCut: TShortCut; var Key: Word; var Shift: TShiftState); - function TextToShortCut(Text: string): Integer; - procedure CreateOSMenu(AForm: TCommonCustomForm; const AMenu: IItemsContainer); - procedure UpdateMenuItem(const AItem: IItemsContainer; AChange: TMenuItemChanges); - procedure DestroyMenuItem(const AItem: IItemsContainer); - function IsMenuBarOnWindowBorder: Boolean; - procedure UpdateMenuBar; - end; - - TVirtualKeyboardWin = class(TInterfacedObject, IFMXVirtualKeyboardService) - private type - TvkbState = (None, Hidden, Shown); - private - FPath: string; - FExeName: string; - FWndClassName: string; - FHTmerLang: TFmxHandle; - FHTmerVisible: TFmxHandle; - FKBPresent: Boolean; - FFormHandle: HWND; - FInst: HINST; - FError: Boolean; - FLastvkbState: TvkbState; - FLastHandle: HWND; - FLastTime: TDateTime; - FNewvkbState: TvkbState; - FWait: Boolean; - FStepActivate: Integer; - FCodeKeyboard: HKL; - FTimerService: IFMXTimerService; - - procedure KillTimerLang; - procedure TimerLangProc; - procedure StartTimerLang; - - procedure KillTimerVisible; - procedure TimerVisibleProc; - procedure StartTimerVisible; - function FindKeyValue(const Key: HKey; const Name, Value, SubKeyName, SubValueName: string): string; - function GetVirtualKeyboardState: TVirtualKeyboardStates; - procedure vkbExecute(FormHandle: HWND); - function vkbHandle: HWND; - function vkbState: TvkbState; - function GetVKBounds: TRect; - protected - procedure Clear; - function IsAutoShow: Boolean; - public - constructor Create; - destructor Destroy; override; - function ShowVirtualKeyboard(const AControl: TFmxObject): Boolean; - function HideVirtualKeyboard: Boolean; - procedure SetTransientState(Value: Boolean); - property VirtualKeyboardState: TVirtualKeyboardStates read GetVirtualKeyboardState; - property ExeName: string read FExeName write FExeName; - property Path: string read FPath write FPath; - property WndClassName: string read FWndClassName write FWndClassName; - end; - - TMultiDisplayWin = class(TInterfacedObject, IFMXMultiDisplayService) - private type - TDisplayWin = record - Display: TDisplay; - Handle: HMONITOR; - constructor Create(const AIndex: Integer; const APrimary: Boolean; const ABounds, AWorkArea: TRect; - const AHandle: HMONITOR); - end; - private - FDisplayCount: Integer; - FWorkAreaRect: TRect; - FDesktopRect: TRect; - FDisplayList: TList; - function FindDisplay(const hm: HMONITOR): TDisplay; - procedure UpdateDisplays; - public - destructor Destroy; override; - procedure UpdateDisplayInformation; - function GetDisplayCount: Integer; - function GetWorkAreaRect: TRect; - function GetDesktopRect: TRect; - function GetDisplay(const Index: Integer): TDisplay; - function GetDesktopCenterRect(const Size: TSize): TRect; - function DisplayFromWindow(const Handle: TWindowHandle): TDisplay; - function DisplayFromPoint(const Handle: TWindowHandle; const Point: TPoint): TDisplay; - end; - - TOpenForm = class(TCommonCustomForm); - TTextServiceWin = class; - - TImmManager = class - private - [Weak] FForm: TCommonCustomForm; - function GetFormHandle: HWND; - procedure UpdateCompositionAttributes(const AContext: HIMC; const ATextService: TTextServiceWin); - procedure UpdateCompositionCursorPos(const AContext: HIMC; const ATextService: TTextServiceWin); - procedure ProcessImeParameters(const AContext: HIMC; const AParameters: LPARAM; const ATextService: TTextServiceWin); - protected - procedure WMStartComposition(var Message: TMessage); message WM_IME_STARTCOMPOSITION; - procedure WMComposition(var Message: TMessage); message WM_IME_COMPOSITION; - procedure WMEndComposition(var Message: TMessage); message WM_IME_ENDCOMPOSITION; - procedure WMSetContext(var Message: TMessage); message WM_IME_SETCONTEXT; - procedure WMNotify(var Message: TMessage); message WM_IME_NOTIFY; - - function GetComposition(const AContext: HIMC): string; - function GetResultComposition(const AContext: HIMC): string; - public - constructor Create(const AForm: TCommonCustomForm); - - function UpdateIMEWindowPosition: LRESULT; - - property Form: TCommonCustomForm read FForm; - property FormHandle: HWND read GetFormHandle; - end; - -{ Text Service } - - TTextServiceWin = class(TTextService) - private const - LCID_Korean_Default = (SUBLANG_KOREAN shl 10) + LANG_KOREAN; - private - FMarkedText: string; - FIsInputting: Boolean; - FMarkedTextCursorPosition: Integer; - procedure SetMarkedTextCursorPosition(const Value: Integer); - procedure RecreateImmContext(const AFormHandle: TWindowHandle); - procedure Reset; - protected - procedure MarkedTextPositionChanged; override; - procedure CaretPositionChanged; override; - function GetMarketTextAttributes: TArray; override; - public - CompAttrBuf: array of Byte; - - procedure InternalSetMarkedText(const AMarkedText: string); override; - function InternalGetMarkedText: string; override; - procedure InternalStartIMEInput; - procedure InternalEndIMEInput; - - procedure RefreshImePosition; override; - - function TargetClausePosition: TPoint; override; - - procedure EnterControl(const AFormHandle: TWindowHandle); override; - procedure ExitControl(const AFormHandle: TWindowHandle); override; - - { Deprecated } - procedure DrawSingleLine(const ACanvas: TCanvas; const ARect: TRectF; const AFirstVisibleChar: Integer; - const AFont: TFont; const AOpacity: Single; const AFlags: TFillTextFlags; const ATextAlign: TTextAlign; - const AVTextAlign: TTextAlign = TTextAlign.Center; const AWordWrap: Boolean = False); overload; override; - procedure DrawSingleLine(const ACanvas: TCanvas; const S: string; const ARect: TRectF; const Font: TFont; - const AOpacity: Single; const Flags: TFillTextFlags; const ATextAlign: TTextAlign; - const AVTextAlign: TTextAlign = TTextAlign.Center; const AWordWrap: Boolean = False); overload; override; - - function HasMarkedText: Boolean; override; - - /// Returns caret position in MarkedText bounds. - property MarkedTextCursorPosition: Integer read FMarkedTextCursorPosition write SetMarkedTextCursorPosition; - end; - -var - VirtualKeyboardWin: TVirtualKeyboardWin; - MultiDisplayWin: TMultiDisplayWin; - MenuServiceWin: TMenuServiceWin; - -const - CF_FMOBJECT = CF_PRIVATEFIRST + 1; - -var - WindowAtom: TAtom; - WindowAtomString: string; - PlatformWin: TPlatformWin; - CapturedGestureControl: TComponent; - -procedure RegisterCorePlatformServices; -begin - PlatformWin := TPlatformWin.Create; - TPlatformServices.Current.AddPlatformService(IFMXApplicationService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXSystemFontService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXTimerService, PlatformWin.TimerService); - TPlatformServices.Current.AddPlatformService(IFMXWindowService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXDragDropService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXCursorService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXMouseService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXScreenService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXLocaleService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXTextService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXContextService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXCanvasService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXWindowBorderService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXSystemInformationService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXLoggingService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXFullScreenWindowService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXListingService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXSaveStateService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXDeviceMetricsService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXGestureRecognizersService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXWindowsTouchService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXDeviceService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXDefaultMetricsService, PlatformWin); - TPlatformServices.Current.AddPlatformService(IFMXKeyMappingService, PlatformWin); - - VirtualKeyboardWin := TVirtualKeyboardWin.Create; - TPlatformServices.Current.AddPlatformService(IFMXVirtualKeyboardService, VirtualKeyboardWin); - - MultiDisplayWin := TMultiDisplayWin.Create; - TPlatformServices.Current.AddPlatformService(IFMXMultiDisplayService, MultiDisplayWin); - - MenuServiceWin := TMenuServiceWin.Create; - TPlatformServices.Current.AddPlatformService(IFMXMenuService, MenuServiceWin); -end; - -procedure UnregisterCorePlatformServices; -begin - TPlatformServices.Current.RemovePlatformService(IFMXMenuService); - TPlatformServices.Current.RemovePlatformService(IFMXDeviceService); - TPlatformServices.Current.RemovePlatformService(IFMXDeviceMetricsService); - TPlatformServices.Current.RemovePlatformService(IFMXApplicationService); - TPlatformServices.Current.RemovePlatformService(IFMXSystemFontService); - TPlatformServices.Current.RemovePlatformService(IFMXTimerService); - TPlatformServices.Current.RemovePlatformService(IFMXWindowService); - TPlatformServices.Current.RemovePlatformService(IFMXDragDropService); - TPlatformServices.Current.RemovePlatformService(IFMXCursorService); - TPlatformServices.Current.RemovePlatformService(IFMXMouseService); - TPlatformServices.Current.RemovePlatformService(IFMXScreenService); - TPlatformServices.Current.RemovePlatformService(IFMXLocaleService); - TPlatformServices.Current.RemovePlatformService(IFMXTextService); - TPlatformServices.Current.RemovePlatformService(IFMXContextService); - TPlatformServices.Current.RemovePlatformService(IFMXCanvasService); - TPlatformServices.Current.RemovePlatformService(IFMXWindowBorderService); - TPlatformServices.Current.RemovePlatformService(IFMXSystemInformationService); - TPlatformServices.Current.RemovePlatformService(IFMXFullScreenWindowService); - TPlatformServices.Current.RemovePlatformService(IFMXVirtualKeyboardService); - TPlatformServices.Current.RemovePlatformService(IFMXDefaultMetricsService); - TPlatformServices.Current.RemovePlatformService(IFMXLoggingService); - TPlatformServices.Current.RemovePlatformService(IFMXListingService); - TPlatformServices.Current.RemovePlatformService(IFMXSaveStateService); - TPlatformServices.Current.RemovePlatformService(IFMXGestureRecognizersService); - TPlatformServices.Current.RemovePlatformService(IFMXWindowsTouchService); - TPlatformServices.Current.RemovePlatformService(IFMXDefaultMetricsService); - TPlatformServices.Current.RemovePlatformService(IFMXKeyMappingService); -end; - -procedure RaiseIfNil(const AObject: TObject; const AArgumentName: string); -begin - if AObject = nil then - raise EArgumentException.CreateFmt(SParamIsNil, [AArgumentName]); -end; - -{ TPlatformWin } - -constructor TPlatformWin.Create; -begin - inherited; - FIsOutApplicationHWND := False; - WindowAtomString := Format('FIREMONKEY%.8X', [GetCurrentProcessID]); - WindowAtom := GlobalAddAtomW(PChar(WindowAtomString)); - - FFullScreenSupport := TDictionary.Create; - FInPaintUpdateRects := TDictionary.Create; - FThreadSyncHandle := AllocateHWnd(ThreadSync); - FKeyMapping := TKeyMapping.Create; - FAcceleratorKeyRegistry := TWinAcceleratorKeyRegistry.Create; - System.Classes.WakeMainThread := WakeMainThread; - Application := TApplication.Create(nil); - FCaptionChangedId := TMessageManager.DefaultManager.SubscribeToMessage(TMainCaptionChangedMessage, - CaptionChangedHandler); - FRunning := False; - - FImmManagers := TObjectDictionary.Create([doOwnsValues]); - FTimerService := TWinTimerService.Create; -end; - -destructor TPlatformWin.Destroy; -begin - TMessageManager.DefaultManager.Unsubscribe(TMainCaptionChangedMessage, FCaptionChangedId); - FreeAndNil(FImmManagers); - FreeAndNil(Application); - FInPaintUpdateRects.Free; - FFullScreenSupport.Free; - FAcceleratorKeyRegistry := nil; - FTimerService := nil; - FKeyMapping.Free; - GlobalDeleteAtom(WindowAtom); - - if FThreadSyncHandle <> 0 then - DeallocateHWnd(FThreadSyncHandle); - if PlatformWin = Self then - PlatformWin := nil; - inherited; -end; - -{ App } - -procedure TPlatformWin.Run; -begin - FRunning := True; - Application.RealCreateForms; - UpdateAppTitle; - repeat - try - Application.HandleMessage; - except - Application.HandleException(Self); - end; - until Application.Terminated; -end; - -function TPlatformWin.Terminating: Boolean; -begin - Result := FTerminating; -end; - -function TPlatformWin.Running: Boolean; -begin - Result := FRunning; -end; - -procedure TPlatformWin.Terminate; -begin - FRunning := False; - FTerminating := True; - FIsPostQuitMessage := True; - - FMultiTouchManager.Free; // release multitouch early so that it does not hold reference to services - - // We don't need destroy application handle, if we receive it from out through ApplicationHWNDProc. - if IsLibrary and FIsOutApplicationHWND and (FApplicationHWND <> 0) then - begin - WinApi.Windows.DestroyWindow(FApplicationHWND); - FApplicationHWND := 0; - end; -end; - -function TPlatformWin.HandleMessage: Boolean; -var - Msg: TMsg; -begin - Result := False; - if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then - begin - Result := True; - if Msg.Message <> WM_QUIT then - begin - TranslateMessage(Msg); - DispatchMessage(Msg); - if FIsPostQuitMessage then - PostQuitMessage(0); - end - else - Application.Terminated := True; - end; -end; - -procedure TPlatformWin.WaitMessage; -begin - Winapi.Windows.WaitMessage; -end; - -function TPlatformWin.GetDefaultTitle: string; -begin - Result := FDefaultTitle; -end; - -function TPlatformWin.GetTitle: string; -begin - Result := FTitle; -end; - -procedure TPlatformWin.SetTitle(const Value: string); -begin - if FTitle <> Value then - begin - if (Value = SAppDefault) and (FDefaultTitle <> '') then - FTitle := FDefaultTitle - else - FTitle := Value; - UpdateAppTitle; - end; -end; - -function TPlatformWin.GetVersionString: string; -const - UndefinedVersionInfo = Cardinal(-1); -var - VersionInfo: Cardinal; -begin - VersionInfo := GetFileVersion(ParamStr(0)); - if VersionInfo <> UndefinedVersionInfo then - Result := Format('%d.%d', [HiWord(VersionInfo), LoWord(VersionInfo)]) - else - Result := string.Empty; -end; - -procedure TPlatformWin.UpdateApplicationHwnd; -var - OldApplicationHandler: HWND; -begin - OldApplicationHandler := FApplicationHWND; - - // The first, we try to extract application handle from IDE. - if Assigned(FApplicationHWNDProc) then - begin - FApplicationHWND := FApplicationHWNDProc; - FIsOutApplicationHWND := FApplicationHWND <> 0; - end; - - // If IDE or user doesn't set outter application handle, we create our own, if it wasn't created before. - if FApplicationHWND = 0 then - begin - FApplicationHWND := CreateAppHandle; - FIsOutApplicationHWND := False; - end; - - if OldApplicationHandler <> FApplicationHWND then - UpdateAppTitle; -end; - -procedure TPlatformWin.UpdateAppTitle; -begin - if FApplicationHWND <> 0 then - begin - { Don't update the title when working in the IDE } - if (Application <> nil) and (Application.MainForm <> nil) and ((FTitle = SAppDefault) or - (FTitle = GetDefaultTitle)) then - SetWindowText(FApplicationHWND, PChar(Application.MainForm.Caption)) - else if FTitle.IsEmpty then - SetWindowText(FApplicationHWND, PChar(GetDefaultTitle)) - else - SetWindowText(FApplicationHWND, PChar(FTitle)); - end; -end; - -procedure TPlatformWin.CaptionChangedHandler(const Sender: TObject; const Msg: System.Messaging.TMessage); -begin - UpdateAppTitle; -end; - -procedure TPlatformWin.WakeMainThread(Sender: TObject); -begin - PostMessage(FThreadSyncHandle, WM_NULL, 0, 0); -end; - -{ Text Service } - -function TTextServiceWin.GetMarketTextAttributes: TArray; -var - I: Integer; -begin - if FMarkedText.IsEmpty or (Length(CompAttrBuf) = 0) then - begin - Result := []; - Exit; - end; - - SetLength(Result, FMarkedText.Length); - for I := 0 to FMarkedText.Length - 1 do - case CompAttrBuf[I] of - ATTR_INPUT: - Result[I] := TMarkedTextAttribute.Input; - ATTR_TARGET_CONVERTED: - Result[I] := TMarkedTextAttribute.TargetConverted; - ATTR_CONVERTED: - Result[I] := TMarkedTextAttribute.Converted; - ATTR_TARGET_NOTCONVERTED: - Result[I] := TMarkedTextAttribute.TargetNotConverted; - ATTR_INPUT_ERROR: - Result[I] := TMarkedTextAttribute.InputError; - end; -end; - -procedure TTextServiceWin.SetMarkedTextCursorPosition(const Value: Integer); -begin - FMarkedTextCursorPosition := Value; -end; - -procedure TTextServiceWin.InternalSetMarkedText(const AMarkedText: string); -var - TextInput: ITextInput; -begin - if FIsInputting and Supports(Owner, ITextInput, TextInput) then - begin - FMarkedText := AMarkedText; - FMarkedTextCursorPosition := EnsureRange(FMarkedTextCursorPosition, 0, FMarkedText.Length); - TextInput.IMEStateUpdated; - end; -end; - -procedure TTextServiceWin.InternalStartIMEInput; -var - TextInput: ITextInput; -begin - if not FIsInputting and Supports(Owner, ITextInput, TextInput) then - begin - FIsInputting := True; - Reset; - TextInput.StartIMEInput; - end; -end; - -procedure TTextServiceWin.MarkedTextPositionChanged; -begin - inherited; - if FIsInputting then - RefreshImePosition; -end; - -procedure TTextServiceWin.RecreateImmContext(const AFormHandle: TWindowHandle); -var - IMC: HIMC; - OldIMC: HIMC; - WindowHandle: HWND; -begin - // Our styled controls doesn't have window handle, so form shares IMM context between all text styled controls. - // It leads to issues in IMM with keeping in memory previous IMM composition string, when user switches focus - // between out styled text input controls. Even if we rest composition string by ImmSetCompositionString, - // OS sends WM_IME_COMPOSITION notification message with the previous composition string and this behavior - // is different, when user uses different IMM provides. So the recreating context guarantees blank IME context - // without previous states. - - WindowHandle := WindowHandleToPlatform(AFormHandle).Wnd; - IMC := ImmCreateContext; - OldIMC := ImmAssociateContext(WindowHandle, IMC); - ImmDestroyContext(OldIMC); - ImmReleaseContext(WindowHandle, IMC); -end; - -procedure TTextServiceWin.RefreshImePosition; - - function FindForm: TCommonCustomForm; - var - TmpObject: TFmxObject; - begin - TmpObject := Owner.GetObject; - while (TmpObject <> nil) and not (TmpObject is TCommonCustomForm) do - TmpObject := TmpObject.Parent; - - if TmpObject is TCommonCustomForm then - Result := TCommonCustomForm(TmpObject) - else - Result := nil; - end; - -var - Form: TCommonCustomForm; -begin - inherited; - Form := FindForm; - if Form <> nil then - PlatformWin.ImmManager[Form].UpdateIMEWindowPosition; -end; - -procedure TTextServiceWin.Reset; -begin - CompAttrBuf := nil; - FMarkedText := string.Empty; - FMarkedTextCursorPosition := 0; -end; - -function TTextServiceWin.InternalGetMarkedText: string; -begin - Result := FMarkedText; -end; - -procedure TTextServiceWin.CaretPositionChanged; -begin - inherited; - if FIsInputting then - RefreshImePosition; -end; - -function TTextServiceWin.TargetClausePosition: TPoint; -begin - Result := CaretPosition; - Result.X := Result.X + MarkedTextCursorPosition; -end; - -procedure TTextServiceWin.InternalEndIMEInput; -var - TextInput: ITextInput; -begin - if FIsInputting and Supports(Owner, ITextInput, TextInput) then - begin - FIsInputting := False; - FMarkedTextCursorPosition := 0; - TextInput.EndIMEInput; - FMarkedText := string.Empty; - end; -end; - -procedure TTextServiceWin.EnterControl(const AFormHandle: TWindowHandle); -var - WindowHandle: HWND; -begin - RaiseIfNil(AFormHandle, 'AFormHandle'); - - WindowHandle := WindowHandleToPlatform(AFormHandle).Wnd; - if TPlatformServices.Current.SupportsPlatformService(IFMXWBService) then - SetFocus(WindowHandle); - - if ImeMode <> TImeMode.imDisable then - RecreateImmContext(AFormHandle); - TImeModeHelper.SetIme(WindowHandle, ImeMode); -end; - -procedure TTextServiceWin.ExitControl(const AFormHandle: TWindowHandle); -begin - RaiseIfNil(AFormHandle, 'AFormHandle'); - - if ImeMode <> TImeMode.imDisable then - RecreateImmContext(AFormHandle); - - Reset; - TImeModeHelper.ResetIme(WindowHandleToPlatform(AFormHandle).Wnd, ImeMode); -end; - -procedure TTextServiceWin.DrawSingleLine(const ACanvas: TCanvas; const ARect: TRectF; const AFirstVisibleChar: Integer; - const AFont: TFont; const AOpacity: Single; const AFlags: TFillTextFlags; const ATextAlign: TTextAlign; - const AVTextAlign: TTextAlign = TTextAlign.Center; const AWordWrap: Boolean = False); -var - S: string; -begin - S := CombinedText; - S := S.Substring(AFirstVisibleChar - 1, S.Length - AFirstVisibleChar + 1); - DrawSingleLine(ACanvas, S, ARect, AFont, AOpacity, AFlags, ATextAlign, AVTextAlign, AWordWrap); -end; - -procedure TTextServiceWin.DrawSingleLine(const ACanvas: TCanvas; const S: string; const ARect: TRectF; const Font: TFont; - const AOpacity: Single; const Flags: TFillTextFlags; const ATextAlign: TTextAlign; - const AVTextAlign: TTextAlign = TTextAlign.Center; const AWordWrap: Boolean = False); - - procedure UnderlineRegion(const ARegions: TRegion); - var - I: Integer; - Region: TRectF; - HalfThickness: Single; - StartPoint, EndPoint: TPointF; - begin - HalfThickness := ACanvas.Stroke.Thickness / 2; - for I := Low(ARegions) to High(ARegions) do - begin - Region := ACanvas.AlignToPixel(ARegions[I]); - - StartPoint := TPointF.Create(Region.Left, Region.Bottom); - StartPoint.Offset(-HalfThickness, -HalfThickness); - EndPoint := Region.BottomRight; - EndPoint.Offset(-HalfThickness, -HalfThickness); - ACanvas.DrawLine(StartPoint, EndPoint, AOpacity); - end; - end; - - procedure UnderlineMarkedText(const ALayout: TTextLayout; const AAttributes: TArray); - var - SavedState: TCanvasSaveState; - Region: TRegion; - TextRange: TTextRange; - PositionInLine: Integer; - I: Integer; - begin - SavedState := ACanvas.SaveState; - try - ACanvas.Stroke.Assign(ACanvas.Fill); - ACanvas.Stroke.Thickness := 2; - ACanvas.Stroke.Dash := TStrokeDash.Solid; - for I := 0 to FMarkedText.Length - 1 do - begin - case AAttributes[I] of - TMarkedTextAttribute.Input: - begin - ACanvas.Stroke.Thickness := 1; - ACanvas.Stroke.Dash := TStrokeDash.Dash - end; - TMarkedTextAttribute.TargetConverted: - begin - ACanvas.Stroke.Thickness := 2; - ACanvas.Stroke.Dash := TStrokeDash.Solid; - end; - TMarkedTextAttribute.Converted: - begin - ACanvas.Stroke.Thickness := 1; - ACanvas.Stroke.Dash := TStrokeDash.Solid; - end; - TMarkedTextAttribute.TargetNotConverted: - begin - ACanvas.Stroke.Thickness := 4; - ACanvas.Stroke.Dash := TStrokeDash.Solid; - end; - TMarkedTextAttribute.InputError: - begin - ACanvas.Stroke.Thickness := 1; - ACanvas.Stroke.Dash := TStrokeDash.Dot - end; - end; - - // CaretPosition -> MarkedTextPosition - if CaretPosition.X > S.Length - FMarkedText.Length then - PositionInLine := S.Length - FMarkedText.Length - else - PositionInLine := CaretPosition.X; - TextRange := TTextRange.Create(PositionInLine + I, 1); - - Region := ALayout.RegionForRange(TextRange); - UnderlineRegion(Region); - end; - finally - ACanvas.RestoreState(SavedState); - end; - end; - -var - Layout: TTextLayout; - Attributes: TArray; -begin - Layout := TTextLayoutManager.TextLayoutByCanvas(ACanvas.ClassType).Create; - try - Layout.BeginUpdate; - try - Layout.TopLeft := ARect.TopLeft; - Layout.MaxSize := TPointF.Create(ARect.Width, ARect.Height); - Layout.WordWrap := AWordWrap; - Layout.HorizontalAlign := ATextAlign; - Layout.VerticalAlign := AVTextAlign; - Layout.Font := Font; - Layout.Color := ACanvas.Fill.Color; - Layout.Opacity := AOpacity; - Layout.RightToLeft := TFillTextFlag.RightToLeft in Flags; - Layout.Text := S; - finally - Layout.EndUpdate; - end; - Layout.RenderLayout(ACanvas); - - Attributes := GetMarketTextAttributes; - if not FMarkedText.IsEmpty and (Length(Attributes) > 0) then - UnderlineMarkedText(Layout, Attributes); - finally - FreeAndNil(Layout); - end; -end; - -function TTextServiceWin.HasMarkedText: Boolean; -begin - Result := not FMarkedText.IsEmpty; -end; - -function TPlatformWin.GetTextServiceClass: TTextServiceClass; -begin - Result := TTextServiceWin; -end; - -{ Window } - -procedure TWinWindowHandle.CalcNearestIntegerMultiple; -const - MaxMul = 9; -var - I: Integer; -begin - if not SameValue(Frac(Scale), 0, TEpsilon.Scale) then - begin - FNearestIntegerMultiple := Round(Scale); - for I := 2 to MaxMul do - if SameValue(Frac(Scale * I), 0, TEpsilon.Scale) then - begin - FNearestIntegerMultiple := Trunc(Scale * I); - Break; - end; - end - else - FNearestIntegerMultiple := Round(Scale); -end; - -procedure TWinWindowHandle.CorrectWindowSize(const WindowPos: PWindowPos); -var - LClientSize: TSizeF; - WndClientSize: TSize; - WndClientOffset: TPoint; - LClientRect, LWindowRect: TRect; - FinalScale: TPointF; -begin - GetClientRect(Wnd, LClientRect); - ClientToScreen(Wnd, LClientRect.TopLeft); - ClientToScreen(Wnd, LClientRect.BottomRight); - GetWindowRect(Wnd, LWindowRect); - - WndClientOffset := (LClientRect.TopLeft - LWindowRect.TopLeft) + (LWindowRect.BottomRight - LClientRect.BottomRight); - WndClientSize := TSize.Create(WindowPos^.cx - WndClientOffset.X, WindowPos^.cy - WndClientOffset.Y); - if SameValue(Frac(WndClientSize.Width / Scale), 0, TEpsilon.Scale) then - FinalScale.X := Scale - else - FinalScale.X := NearestIntegerMultiple; - if SameValue(Frac(WndClientSize.Height / Scale), 0, TEpsilon.Scale) then - FinalScale.Y := Scale - else - FinalScale.Y := NearestIntegerMultiple; - - LClientSize := TSizeF.Create(Round(WndClientSize.Width / FinalScale.X), Round(WndClientSize.Height / FinalScale.Y)); - - WindowPos^.cx := Round(LClientSize.Width * FinalScale.X) + WndClientOffset.X; - WindowPos^.cy := Round(LClientSize.Height * FinalScale.Y) + WndClientOffset.Y; -end; - -class procedure TWinWindowHandle.SetForcedScale(NewScale: Single); -begin - if NewScale < 1 then - NewScale := 1; - if not SameValue(FForcedScale, NewScale, TEpsilon.Scale) then - FForcedScale := NewScale; -end; - -constructor TWinWindowHandle.Create(const AForm: TCommonCustomForm; const AWnd: HWND); -begin - inherited Create; - if not (TCanvasManager.DefaultCanvas.InheritsFrom(TCustomCanvasD2D)) or GlobalUseGPUCanvas then - FForcedScale := 1; - FForm := AForm; - FWnd := AWnd; - GetWindowRect(Wnd, FWndBounds); - FBounds := TRectF.Create(FWndBounds.Left, FWndBounds.Top, FWndBounds.Width / Scale, FWndBounds.Height / Scale); - UpdateClientSize; -end; - -function FindWindow(Handle: HWND): TCommonCustomForm; -begin - Result := nil; - if (Handle <> 0) then - begin - if GlobalFindAtomW(PChar(WindowAtomString)) = WindowAtom then - Result := Pointer(GetProp(Handle, MakeIntAtom(WindowAtom))) - else - Result := nil; - end; -end; - -function FmxHandleToHWND(const FmxHandle: TWindowHandle): HWND; -begin - if FmxHandle <> nil then - Result := WindowHandleToPlatform(FmxHandle).Wnd - else - Result := 0; -end; - -function WindowHandleToPlatform(const AHandle: TWindowHandle): TWinWindowHandle; -begin - Result := TWinWindowHandle(AHandle); -end; - -function FormToHWND(Form: TCommonCustomForm): HWND; -begin - if (Form <> nil) and (Form.Handle is TWinWindowHandle) then - Result := TWinWindowHandle(Form.Handle).Wnd - else - Result := 0; -end; - -function ApplicationHWND: HWND; -begin - if PlatformWin <> nil then - Result := PlatformWin.GetApplicationHWND - else - Result := 0; -end; - -destructor TWinWindowHandle.Destroy; -begin - FreeBuffer; - FZOrderManager.Free; - inherited; -end; - -procedure TWinWindowHandle.ScaleChanged; -begin - CalcNearestIntegerMultiple; - - FWndClientSize := TSize.Create(Ceil(FClientSize.Width * Scale), Ceil(FClientSize.Height * Scale)); - FClientSize := TSizeF.Create(FWndClientSize.Width / Scale, FWndClientSize.Height / Scale); - SetWindowSizeByClientSize; - - Form.RecreateResources; -end; - -procedure TWinWindowHandle.DpiChanged; -var - NewScale: Single; -begin - NewScale := NewDpi / StandardDpi; - if not SameValue(FCurrentScale, NewScale, TEpsilon.Scale) then - begin - FCurrentScale := NewScale; - ScaleChanged; - end; -end; - -procedure TWinWindowHandle.CreateBuffer; -begin - FBufferSize := TSize.Create(Width, Height); - FBitmapInfo.bmiHeader.biSize := SizeOf(TBitmapInfoHeader); - FBitmapInfo.bmiHeader.biPlanes := 1; - FBitmapInfo.bmiHeader.biBitCount := 32; - FBitmapInfo.bmiHeader.biCompression := BI_RGB; - FBitmapInfo.bmiHeader.biWidth := FBufferSize.Width; - if FBitmapInfo.bmiHeader.biWidth <= 0 then - FBitmapInfo.bmiHeader.biWidth := 1; - FBitmapInfo.bmiHeader.biHeight := -FBufferSize.Height; - if FBitmapInfo.bmiHeader.biHeight >= 0 then - FBitmapInfo.bmiHeader.biHeight := -1; - try - FBufferBitmap := CreateDIBSection(0, FBitmapInfo, DIB_RGB_COLORS, Pointer(FBufferBits), 0, 0); - if FBufferBits = nil then - RaiseLastOSError; - try - FBufferHandle := CreateCompatibleDC(0); - if FBufferHandle = 0 then - RaiseLastOSError; - try - if SelectObject(FBufferHandle, FBufferBitmap) = 0 then - RaiseLastOSError; - except - DeleteDC(FBufferHandle); - FBufferHandle := 0; - raise; - end; - except - DeleteObject(FBufferBitmap); - FBufferBits := nil; - raise; - end; - except - FBufferBitmap := 0; - raise; - end; -end; - -procedure TWinWindowHandle.ResizeBuffer(const Width, Height: Integer); -begin - if FBufferHandle = 0 then - CreateBuffer(Width, Height) - else if (FBitmapInfo.bmiHeader.biWidth <> Width) or (Abs(FBitmapInfo.bmiHeader.biHeight) <> Height) then - begin - FreeBuffer; - CreateBuffer(Width, Height) - end; -end; - -function TWinWindowHandle.GetClientSize: TSize; -begin - Result := FClientSize.Round; -end; - -function TWinWindowHandle.GetNearestIntegerMultiple: Integer; -begin - if FNearestIntegerMultiple = 0 then - CalcNearestIntegerMultiple; - Result := FNearestIntegerMultiple; -end; - -procedure TWinWindowHandle.SetWindowSizeByClientSize; -var - LClientRect, LWindowRect: TRect; - NewWindowSize: TSize; - BorderThickness: TSize; -begin - GetClientRect(Wnd, LClientRect); - GetWindowRect(Wnd, LWindowRect); - - BorderThickness := TSize.Create(LWindowRect.Width - LClientRect.Width, LWindowRect.Height - LClientRect.Height); - NewWindowSize := FWndClientSize + BorderThickness; - - if LWindowRect.Size <> NewWindowSize then - begin - FWndBounds.Width := NewWindowSize.Width; - FWndBounds.Height := NewWindowSize.Height; - FBounds.Width := NewWindowSize.Width / Scale; - FBounds.Height := NewWindowSize.Height / Scale; - SetWindowPos(Wnd, 0, LWindowRect.Left, LWindowRect.Top, NewWindowSize.Width, NewWindowSize.Height, - SWP_NOMOVE or SWP_NOZORDER or SWP_NOACTIVATE); - end; -end; - -procedure TWinWindowHandle.SetClientSize(const Value: TSize); -begin - if FClientSize.Round <> Value then - begin - FWndClientSize := TSize.Create(Ceil(Value.Width * Scale), Ceil(Value.Height * Scale)); - FClientSize := TSizeF.Create(FWndClientSize.Width / Scale, FWndClientSize.Height / Scale); - SetWindowSizeByClientSize; - end; -end; - -function TWinWindowHandle.GetBounds: TRect; -begin - Result := FBounds.Ceiling; -end; - -procedure TWinWindowHandle.SetBounds(const Value: TRect); -var - CurrentWndRect: TRect; -begin - if FBounds.Round <> Value then - begin - FWndBounds := TRect.Create(Value.Left, Value.Top, Value.Left + Ceil(Value.Width * Scale), - Value.Top + Ceil(Value.Height * Scale)); - FBounds := TRectF.Create(FWndBounds.Left, FWndBounds.Top, FWndBounds.Left + FWndBounds.Width / Scale, - FWndBounds.Top + FWndBounds.Height / Scale); - GetWindowRect(Wnd, CurrentWndRect); - if CurrentWndRect <> FWndBounds then - SetWindowPos(Wnd, 0, FWndBounds.Left, FWndBounds.Top, FWndBounds.Width, FWndBounds.Height, - SWP_NOACTIVATE or SWP_NOZORDER); - UpdateClientSize; - end; -end; - -function TWinWindowHandle.GetWndBounds: TRect; -begin - Result := FWndBounds; -end; - -procedure TWinWindowHandle.SetWndBounds(const Value: TRect); -var - CurrentWndRect: TRect; -begin - if FWndBounds <> Value then - begin - FWndBounds := Value; - FBounds := TRectF.Create(Value.Left, Value.Top, Value.Left + Value.Width / Scale, Value.Top + Value.Height / Scale); - GetWindowRect(Wnd, CurrentWndRect); - if CurrentWndRect <> Value then - SetWindowPos(Wnd, 0, Value.Left, Value.Top, Value.Width, Value.Height, - SWP_NOACTIVATE or SWP_NOZORDER); - UpdateClientSize; - end; -end; - -function TWinWindowHandle.GetWndClientSize: TSize; -begin - Result := FWndClientSize; -end; - -procedure TWinWindowHandle.FreeBuffer; -begin - if FBufferHandle <> 0 then - begin - DeleteDC(FBufferHandle); - FBufferHandle := 0; - end; - if FBufferBitmap <> 0 then - begin - DeleteObject(FBufferBitmap); - FBufferBitmap := 0; - end; -end; - -function TWinWindowHandle.GetScale: Single; -begin - if not SameValue(FForcedScale, 0, TEpsilon.Scale) then - Result := FForcedScale - else if not SameValue(FCurrentScale, 0, TEpsilon.Scale) then - Result := FCurrentScale - else - Result := GetWndScale(FWnd); - - FCurrentScale := Result; -end; - -function TWinWindowHandle.GetTransparency: Boolean; -begin - Result := (Form <> nil) and Form.Transparency; -end; - -function TWinWindowHandle.GetZOrderManager: TWinZOrderManager; -begin - if FZOrderManager = nil then - FZOrderManager := TWinZOrderManager.Create(Self); - Result := FZOrderManager; -end; - -procedure TWinWindowHandle.UpdateClientSize; -var - R: TRect; - OldWndClientSize: TSize; -begin - GetClientRect(Wnd, R); - OldWndClientSize := FWndClientSize; - FWndClientSize := TSize.Create(R.Width, R.Height); - FClientSize := TSizeF.Create(FWndClientSize.Width / Scale, FWndClientSize.Height / Scale); - - // We need to update canvas size, based on new Client Size value. - if (OldWndClientSize <> FWndClientSize) and FForm.IsHandleAllocated then - TOpenForm(FForm).ResizeHandle; -end; - -procedure TWinWindowHandle.UpdateLayer; -var - Blend: TBlendFunction; - Origin, Size, BitmapOrigin: TPoint; - ContextObject: IContextObject; -begin - if FBufferHandle <> 0 then - begin - { Copy from Context } - if Supports(Form, IContextObject, ContextObject) and (ContextObject.Context <> nil) then - ContextObject.Context.CopyToBits(FBufferBits, Form.Width * 4, Rect(0, 0, Form.Width, Form.Height)); - { Update } - Origin := WindowHandleToPlatform(Form.Handle).WndBounds.TopLeft; - Size := TPoint(FBufferSize); - Blend.BlendOp := AC_SRC_OVER; - Blend.AlphaFormat := $01; // AC_SRC_ALPHA; - Blend.BlendFlags := 0; - Blend.SourceConstantAlpha := $FF; - BitmapOrigin := Point(0, 0); - UpdateLayeredWindow(Wnd, 0, @Origin, @Size, FBufferHandle, @BitmapOrigin, $00000000, @Blend, ULW_ALPHA); - end; -end; - -function TWinWindowHandle.FormToWnd(const Rect: TRectF): TRectF; -begin - Result := TRectF.Create(Rect.Left * Scale, Rect.Top * Scale, Rect.Right * Scale, Rect.Bottom * Scale); -end; - -function TWinWindowHandle.WndToForm(const Rect: TRect): TRectF; -begin - Result := WndToForm(TRectF.Create(Rect)); -end; - -function TWinWindowHandle.WndToForm(const Rect: TRectF): TRectF; -begin - Result := TRectF.Create(Rect.Left / Scale, Rect.Top / Scale, Rect.Right / Scale, Rect.Bottom / Scale); -end; - -function WMPaint(HWND: HWND; uMsg: UINT; wParam: wParam; LPARAM: LPARAM): LRESULT; stdcall; -var - I, rgnStatus: Integer; - Region: HRgn; - RegionSize: DWORD; - RegionData: PRgnData; - R: TRect; - LForm: TCommonCustomForm; - UpdateRects, InPaintUpdateRects: TUpdateRects; - PS: TPaintStruct; - Wnd: Winapi.Windows.HWND; - PaintControl: IPaintControl; -begin - LForm := FindWindow(HWND); - if LForm <> nil then - begin - Wnd := FormToHWND(LForm); - GetUpdateRect(Wnd, R, False); - Region := CreateRectRgn(R.Left, R.Top, R.Right, R.Bottom); - if Region <> 0 then - try - rgnStatus := GetUpdateRgn(Wnd, Region, False); - if (rgnStatus = 2) or (rgnStatus = 3) then - begin - RegionSize := GetRegionData(Region, $FFFF, nil); - if RegionSize > 0 then - begin - GetMem(RegionData, RegionSize); - try - if RegionSize = GetRegionData(Region, RegionSize, RegionData) then - begin - SetLength(UpdateRects, RegionData.rdh.nCount); - for I := 0 to RegionData.rdh.nCount - 1 do - UpdateRects[I] := WindowHandleToPlatform(LForm.Handle).WndToForm(PRgnRects(@RegionData.buffer[0])[I]); - end; - finally - FreeMem(RegionData, RegionSize); - end; - if Supports(LForm, IPaintControl, PaintControl) then - begin - PaintControl.ContextHandle := BeginPaint(Wnd, PS); - try - if PlatformWin.FInPaintUpdateRects.TryGetValue(LForm.Handle, InPaintUpdateRects) and - (Length(InPaintUpdateRects) > 0) then - begin - // add update rects from FInPaintUpdateRects - for I := 0 to High(InPaintUpdateRects) do - begin - SetLength(UpdateRects, Length(UpdateRects) + 1); - UpdateRects[High(UpdateRects)] := WindowHandleToPlatform(LForm.Handle).WndToForm(InPaintUpdateRects[I]); - end; - end; - PaintControl.PaintRects(UpdateRects); - if PlatformWin.FInPaintUpdateRects.TryGetValue(LForm.Handle, InPaintUpdateRects) and - (Length(InPaintUpdateRects) > 0) then - begin - // paint second time - when Repaint called in painting - PlatformWin.FInPaintUpdateRects.TryGetValue(LForm.Handle, UpdateRects); - SetLength(InPaintUpdateRects, 0); - PlatformWin.FInPaintUpdateRects.AddOrSetValue(LForm.Handle, InPaintUpdateRects); - PaintControl.PaintRects(UpdateRects); - end; - PaintControl.ContextHandle := 0; - finally - EndPaint(Wnd, PS); - end; - end; - end; - end; - finally - DeleteObject(Region); - end; - Result := DefWindowProc(HWND, uMsg, wParam, LPARAM); - end - else - Result := DefWindowProc(HWND, uMsg, wParam, LPARAM); -end; - -// When the WM_GESTURENOTIFY message is received, use SetGestureConfig to specify the gestures to receive. -// This message should always be bubbled up using the DefWindowProc function. -procedure WMGestureNotify(const AForm: TCommonCustomForm; uMsg: UINT; AGestureNotify: LPARAM); -const - // Gestures - CPan: array [Boolean] of Cardinal = (0, GC_PAN); - CZoom: array [Boolean] of Cardinal = (0, GC_ZOOM); - CRotate: array [Boolean] of Cardinal = (0, GC_ROTATE); - CPressAndTap: array [Boolean] of Cardinal = (0, GC_PRESSANDTAP); - CTwoFingerTap: array [Boolean] of Cardinal = (0, GC_TWOFINGERTAP); -var - LPoint: TPoint; - LPointF: TPointF; - LControl: TComponent; - LConfigs: array of TGestureConfig; - LGestures: TInteractiveGestures; - LObj: IControl; - LGObj: IGestureControl; - LGestureNotify: ^GESTURENOTIFYSTRUCT; -begin - LGestureNotify := Pointer(AGestureNotify); - - // Get the location of the gesture. - LPoint := SmallPointToPoint(LGestureNotify.ptsLocation); - LPointF := TPointF.Create(LPoint.X, LPoint.Y); - - // Find the object that the gesture belongs to. - LObj := AForm.ObjectAtPoint(LPointF); - if LObj <> nil then - LControl := LObj.GetObject - else - LControl := AForm; - - if Supports(LControl, IGestureControl, LGObj) then - LGestures := LGObj.GetListOfInteractiveGestures; - - SetLength(LConfigs, 5); - ZeroMemory(@LConfigs[0], SizeOf(GestureConfig) * 5); - - // Pan gesture & options - LConfigs[0].dwID := GID_PAN; - LConfigs[0].dwWant := CPan[TInteractiveGesture.Pan in LGestures] or GC_PAN_WITH_SINGLE_FINGER_VERTICALLY or - GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY or GC_PAN_WITH_INERTIA; - LConfigs[0].dwBlock := CPan[not (TInteractiveGesture.Pan in LGestures)] or GC_PAN_WITH_GUTTER; - - // Zoom gesture - LConfigs[1].dwID := GID_ZOOM; - LConfigs[1].dwWant := CZoom[TInteractiveGesture.Zoom in LGestures]; - LConfigs[1].dwBlock := CZoom[not (TInteractiveGesture.Zoom in LGestures)]; - - // Rotate gesture - LConfigs[2].dwID := GID_ROTATE; - LConfigs[2].dwWant := CRotate[TInteractiveGesture.Rotate in LGestures]; - LConfigs[2].dwBlock := CRotate[not (TInteractiveGesture.Rotate in LGestures)]; - - // TwoFingerTap gesture - LConfigs[3].dwID := GID_TWOFINGERTAP; - LConfigs[3].dwWant := CTwoFingerTap[TInteractiveGesture.TwoFingerTap in LGestures]; - LConfigs[3].dwBlock := CTwoFingerTap[not (TInteractiveGesture.TwoFingerTap in LGestures)]; - - // PressAnTap gesture - LConfigs[4].dwID := GID_PRESSANDTAP; - LConfigs[4].dwWant := CPressAndTap[TInteractiveGesture.PressAndTap in LGestures]; - LConfigs[4].dwBlock := CPressAndTap[not (TInteractiveGesture.PressAndTap in LGestures)]; - - SetGestureConfig(FormToHWND(AForm), 0, Length(LConfigs), @LConfigs[0], SizeOf(TGestureConfig)); -end; - -function WMGesture(const AForm: TCommonCustomForm; uMsg: UINT; AParam: wParam; AGestureInfo: LPARAM): LRESULT; -var - LPoint: TPointF; - LControl: TComponent; - LGestureInfo: GestureInfo; - EventInfo: TGestureEventInfo; - Obj: IControl; - LGObj: IGestureControl; -begin - Result := 0; - ZeroMemory(@LGestureInfo, SizeOf(LGestureInfo)); - LGestureInfo.cbSize := SizeOf(LGestureInfo); - if GetGestureInfo(AGestureInfo, LGestureInfo) then - try - ZeroMemory(@EventInfo, SizeOf(EventInfo)); - EventInfo.GestureID := LGestureInfo.dwID + igiFirst; - - // Get the control - LPoint := TPointF.Create(LGestureInfo.ptsLocation.X, LGestureInfo.ptsLocation.Y); - Obj := AForm.ObjectAtPoint(LPoint); - if Obj <> nil then - LControl := Obj.GetObject - else - LControl := AForm; - - if EventInfo.GestureID = igiBegin then - CapturedGestureControl := LControl; - - // Don't pass GID_BEGIN and GID_END to the control - if (EventInfo.GestureID <> igiBegin) and - (EventInfo.GestureID <> igiEnd) then - begin - // Set EventInfo fields from LGestureInfo - EventInfo.Location := AForm.ScreenToClient(LPoint); - EventInfo.Flags := []; - if LGestureInfo.dwFlags and GF_BEGIN = GF_BEGIN then - Include(EventInfo.Flags, TInteractiveGestureFlag.gfBegin); - if LGestureInfo.dwFlags and GF_INERTIA = GF_INERTIA then - Include(EventInfo.Flags, TInteractiveGestureFlag.gfInertia); - if LGestureInfo.dwFlags and GF_END = GF_END then - Include(EventInfo.Flags, TInteractiveGestureFlag.gfEnd); - case EventInfo.GestureID of - igiPan: - begin - EventInfo.Distance := Cardinal(LGestureInfo.ullArguments); - EventInfo.InertiaVector := - TPointF(SmallPointToPoint(InertiaVectorFromArgument(LGestureInfo.ullArguments))); - end; - igiZoom, igiTwoFingerTap: - EventInfo.Distance := Cardinal(LGestureInfo.ullArguments); - igiPressAndTap: - begin - // ullArguments is distance/offset. Add to Location to make TapLocation - LPoint := TPointF(SmallPointToPoint(TSmallPoint(Cardinal(LGestureInfo.ullArguments)))); - // EventInfo.TapLocation := AForm.ScreenToClient(TPointF(LPoint.X + LGestureInfo.ptsLocation.X, LPoint.Y + LGestureInfo.ptsLocation.Y)); - end; - igiRotate: - EventInfo.Angle := RotateAngleFromArgument(LGestureInfo.ullArguments); - end; - // send message to the control - if Supports(CapturedGestureControl, IGestureControl, LGObj) then - LGObj.CMGesture(EventInfo); - end - else - Result := DefWindowProc(FormToHWND(AForm), uMsg, AParam, AGestureInfo); - - if EventInfo.GestureID = igiEnd then - CapturedGestureControl := nil; - - finally - CloseGestureInfoHandle(AGestureInfo); - end; -end; - -procedure InitializeMultiTouch(const AForm: TCommonCustomForm); -begin - if PlatformWin.FMultiTouchManager = nil then - PlatformWin.FMultiTouchManager := TMultiTouchManagerWin.Create(AForm) - else if PlatformWin.FMultiTouchManager.Parent <> AForm then - PlatformWin.FMultiTouchManager.Parent := AForm; -end; - -function WMTouch(const AForm: TCommonCustomForm; uMsg: UINT; TouchInputCount: wParam; TouchInputInfo: LPARAM): LRESULT; -var - TouchCount: Integer; - Inputs: array of TTouchInput; - Input: TTouchInput; - I: Integer; - Touches: TTouches; - Action: TTouchAction; - Point: TPointF; - Control: IControl; -begin - Result := 0; - TouchCount := LoWord(Cardinal(TouchInputCount)); - SetLength(Inputs, TouchCount); - Action := TTouchAction.None; - - if GetTouchInputInfo(TouchInputInfo, TouchCount, @Inputs[0], SizeOf(TTouchInput)) then - try - SetLength(Touches, TouchCount); - for I := 0 to TouchCount - 1 do - begin - Input := Inputs[I]; - - if (Input.dwFlags and TOUCHEVENTF_DOWN) <> 0 then - Action := TTouchAction.Down - else if ((Input.dwFlags and TOUCHEVENTF_UP) <> 0) then - Action := TTouchAction.Up - else if ((Input.dwFlags and TOUCHEVENTF_MOVE) <> 0) then - Action := TTouchAction.Move; - - // TOUCHINFO point coordinates is in 1/100 of a pixel - Point := TPointF.Create(Input.X / 100, Input.Y / 100); - Touches[I].Location := AForm.ScreenToClient(Point); - end; - - if Length(Touches) = 1 then - Control := AForm.ObjectAtPoint(Point) - else if Length(Touches) = 2 then - Control := AForm.ObjectAtPoint(AForm.ClientToScreen(Touches[0].Location.MidPoint(Touches[1].Location))) - else - Control := nil; - - InitializeMultiTouch(AForm); - PlatformWin.FMultiTouchManager.SetEnabledGestures(PlatformWin.FEnabledInteractiveGestures); - PlatformWin.FMultiTouchManager.HandleTouches(Touches, Action, Control); - Result := DefWindowProc(FormToHWND(AForm), uMsg, TouchInputCount, TouchInputInfo); - finally - CloseTouchInputHandle(TouchInputInfo); - end; -end; - -procedure HandleMouseGestures(const AForm: TCommonCustomForm; uMsg: UINT; const X, Y: Single); -var - GestureObj: IGestureControl; - Control: TComponent; - Obj: IControl; - Action: TTouchAction; - Point: TPointF; -begin - if TWinTouchGestureEngine.Supported(AForm) then - if not ((uMsg <> WM_LBUTTONDOWN) and (PlatformWin.FMultiTouchManager = nil)) then - begin - Point := TPointF.Create(X, Y); - Obj := AForm.ObjectAtPoint(Point); - if Obj <> nil then - Control := Obj.GetObject - else - Control := AForm; - - if Supports(Control, IGestureControl, GestureObj) then - begin - Control := GestureObj.GetFirstControlWithGestureEngine; - if Control <> nil then - begin - case uMsg of - WM_MOUSEMOVE: - Action := TTouchAction.Move; - WM_LBUTTONDOWN: - Action := TTouchAction.Down; - WM_LBUTTONUP: - Action := TTouchAction.Up; - else - Action := TTouchAction.None; - end; - - InitializeMultiTouch(AForm); - PlatformWin.FMultiTouchManager.HandleMouseGestures(Point, Action, Obj); - end; - end; - end; -end; - -// - -type - PDestroyChildData = ^TDestroyChildData; - - TDestroyChildData = record - Parent: HWND; - Recreating: Boolean; - end; - -var - LastKeyIsDeadKey: Boolean = False; - LastMousePos: TPoint; - -const - ImpossibleMousePosition: TPoint = (X: Low(FixedInt); Y: Low(FixedInt)); - -function WndProc(hwnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; -var - UpdateRects: array of TRectF; - LForm: TCommonCustomForm; - Wnd: Winapi.Windows.HWND; - WindowBorder: TWindowBorderWin; - - procedure ProcessUpdateMessages; - var - Msg: TMsg; - begin - SetLength(UpdateRects, 1); - UpdateRects[0] := TRectF.Create(TSmallPoint(Cardinal(wParam)).X, TSmallPoint(Cardinal(wParam)).Y, - TSmallPoint(Cardinal(lParam)).X, TSmallPoint(Cardinal(lParam)).Y); - while PeekMessage(Msg, hwnd, WM_ADDUPDATERECT, WM_ADDUPDATERECT, PM_REMOVE) do - begin - if Msg.Message = WM_QUIT then - begin - { Repost WM_QUIT messages } - PostQuitMessage(Msg.wParam); - Break; - end; - SetLength(UpdateRects, Length(UpdateRects) + 1); - UpdateRects[High(UpdateRects)] := RectF(TSmallPoint(Cardinal(Msg.wParam)).X, TSmallPoint(Cardinal(Msg.wParam)).Y, - TSmallPoint(Cardinal(Msg.lParam)).X, TSmallPoint(Cardinal(Msg.lParam)).Y); - end; - end; - - procedure PrepareClosePopups; - begin - if (Screen <> nil) and (LForm <> nil) and (not WindowHandleToPlatform(LForm.Handle).FDisableDeactivate) then - begin - if LForm.FormStyle = TFormStyle.Popup then - Screen.PrepareClosePopups(LForm) - else - Screen.PrepareClosePopups(nil); - end; - end; - - procedure ClosePopupList; - begin - if (Screen <> nil) and (LForm <> nil) and (not WindowHandleToPlatform(LForm.Handle).FDisableDeactivate) then - Screen.ClosePopupForms; - end; - - procedure InitialActionsOfPopups; - begin - case uMsg of - WM_NCLBUTTONDOWN, WM_NCRBUTTONDOWN, WM_NCMBUTTONDOWN, WM_NCLBUTTONDBLCLK, WM_NCRBUTTONDBLCLK, WM_NCMBUTTONDBLCLK: - begin - PrepareClosePopups; - ClosePopupList; - end; - WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MBUTTONDOWN, WM_LBUTTONDBLCLK, WM_RBUTTONDBLCLK, WM_MBUTTONDBLCLK: - PrepareClosePopups; - end; - end; - - procedure FinalActionsOfPopups; - begin - case uMsg of - WM_LBUTTONUP, WM_RBUTTONUP, WM_MBUTTONUP, WM_DESTROY: - begin - LForm := FindWindow(hwnd); - ClosePopupList; - end; - end; - end; - - function DispatchMouseWheelToPopups: Boolean; - var - I: Integer; - Handled: Boolean; - begin - Handled := False; - if Screen <> nil then - for I := Screen.PopupFormCount - 1 downto 0 do - if Screen.PopupForms[I].Visible then - begin - Screen.PopupForms[I].MouseWheel(KeysToShiftState(wParam), TSmallPoint(Cardinal(wParam)).Y, Handled); - if Handled then - Break; - end; - Result := Handled; - end; - - procedure CurrentChar(Msg: tagMsg; var Key: Word; var Ch: WideChar; var Shift: TShiftState); - begin - Key := wParam; - Ch := WideChar(Msg.wParam); - Shift := KeyDataToShiftState(lParam); - if (Ch >= ' ') then - begin - if ((Shift * [ssAlt, ssCtrl]) = [ssAlt, ssCtrl]) then - begin - // AltGr + Char (in German keyboard) - Shift := Shift - [ssAlt, ssCtrl]; - end; - if (([ssAlt, ssCtrl, ssCommand] * Shift) = []) then - Key := 0; - end; - if ((([ssAlt, ssCtrl, ssCommand] * Shift) <> []) or (Ch < ' ')) and (Key > 0) then - Ch := #0; - end; - - procedure ScaleMousePos(const Handle: TWindowHandle; var P: TPoint); - begin - ScreenToClient(WindowHandleToPlatform(Handle).Wnd, P); - P := TPoint.Create(Round(P.X / Handle.Scale), Round(P.Y / Handle.Scale)); - end; - -var - R: TRect; - P: TPoint; - H: Boolean; - Key: Word; - Ch: WideChar; - tme: TTRACKMOUSEEVENT; - Message: TMessage; - Shift: TShiftState; - Placement: TWindowPlacement; - Msg: tagMsg; - PaintControl: IPaintControl; - Obj: IControl; - MenuDisplayed: Boolean; - OldWindowState: TWindowState; - CharMsg, DeadCharMsg: UInt32; -const - FlagZOrder: UINT = SWP_NOSIZE or SWP_NOMOVE or SWP_NOACTIVATE; - -begin - - Result := 0; - LForm := FindWindow(hwnd); - - Message.Msg := uMsg; - Message.WParam := wParam; - Message.LParam := lParam; - Message.Result := 0; - // Check to see if this is a design message - if (LForm <> nil) and (LForm.Designer <> nil) and LForm.Designer.IsDesignMsg(LForm, Message) then - Exit; - - if LForm <> nil then - begin - LForm.Dispatch(Message); - Wnd := FormToHWND(LForm); - try - InitialActionsOfPopups; - try - case uMsg of - WM_NCHITTEST, - WM_NCACTIVATE, - WM_NCADDUPDATERECT, - WM_NCMOUSEMOVE, WM_NCLBUTTONDOWN, WM_NCLBUTTONUP, - WM_NCCALCSIZE, WM_NCPAINT: - Result := WMNCMessages(LForm, uMsg, wParam, lParam); - $B000 + 74: // CM_DESTROYHANDLE - begin - if (LForm.ClassName = 'TFormContainerForm') and (wParam = 1) then - begin - // IDE parent recreate - SetParent(Wnd, GetDesktopWindow); - SetWindowPos(Wnd, 0, $A000, $A000, 10, 10, SWP_NOSIZE or SWP_NOZORDER); - end; - end; - WM_DESTROY: - Result := DefWindowProc(hwnd, uMsg, wParam, lParam); - WM_ACTIVATE: - begin - if not ((TFmxFormState.Recreating in LForm.FormState) or (LForm.FormStyle = TFormStyle.Popup) or - (WindowHandleToPlatform(LForm.Handle).FDisableDeactivate)) then - begin - if LoWord(wParam) <> 0 then - begin - if HiWord(wParam) = 0 then - LForm.Activate; - // If the window is minimized, then do nothing. - end - else - begin - PrepareClosePopups; - LForm.Deactivate; - ClosePopupList; - end; - end; - Result := 0; - end; - WM_MOUSEACTIVATE: - begin - if not (TFmxFormState.Recreating in LForm.FormState) then - begin - if (LForm.FormStyle = TFormStyle.Popup) then - Result := MA_NOACTIVATE - else - Result := DefWindowProc(hwnd, uMsg, wParam, lParam); - // Default result if nothing happens - end; - end; - WM_ERASEBKGND: - begin - Result := 1; - end; - WM_PAINT: - begin - Result := WMPaint(hwnd, uMsg, wParam, lParam); - end; - WM_DPICHANGED: - begin - WindowHandleToPlatform(LForm.Handle).DpiChanged(HiWord(wParam)); - Result := 0; - end; - WM_ADDUPDATERECT: - begin - ProcessUpdateMessages; - if Supports(LForm, IPaintControl, PaintControl) then - PaintControl.PaintRects(UpdateRects); - WindowHandleToPlatform(LForm.Handle).UpdateLayer; - end; - WM_WINDOWPOSCHANGING: - begin - if ([csLoading, csDesigning] * LForm.ComponentState = [csLoading]) then - begin - if (LForm.Position in [TFormPosition.Default, TFormPosition.DefaultPosOnly]) and - (LForm.WindowState <> TWindowState.wsMaximized) then - begin - PWindowPos(lParam)^.Flags := PWindowPos(lParam)^.Flags or SWP_NOMOVE; - end; - if (LForm.Position in [TFormPosition.Default, TFormPosition.DefaultSizeOnly]) and - (LForm.BorderStyle in [TFmxFormBorderStyle.Sizeable, TFmxFormBorderStyle.SizeToolWin]) then - begin - PWindowPos(lParam)^.Flags := PWindowPos(lParam)^.Flags or SWP_NOSIZE; - end; - end; - if (not ((PWindowPos(lParam)^.Flags and FlagZOrder) = FlagZOrder)) then - begin - if (Screen <> nil) and (LForm <> nil) and (not WindowHandleToPlatform(LForm.Handle).FDisableDeactivate) - then - begin - if (LForm.FormStyle = TFormStyle.Popup) then - ClosePopupList; - end; - end; - if (not ((PWindowPos(lParam)^.Flags and SWP_NOSIZE) = SWP_NOSIZE)) then - WindowHandleToPlatform(LForm.Handle).CorrectWindowSize(PWindowPos(lParam)); - Result := DefWindowProc(hwnd, uMsg, wParam, lParam); - if (TFmxFormState.InDesigner in LForm.FormState) and (TFmxFormState.WasNotShown in LForm.FormState) then - begin - TOpenForm(LForm).ShowInDesigner; - end; - end; - WM_WINDOWPOSCHANGED: - begin - Placement.Length := SizeOf(TWindowPlacement); - GetWindowPlacement(hwnd, Placement); - if (Application.MainForm <> nil) and (LForm = Application.MainForm) - and (Placement.showCmd = SW_SHOWMINIMIZED) then - begin - PlatformWin.MinimizeApp; - Result := DefWindowProc(hwnd, uMsg, wParam, lParam); - end - else - begin - Result := DefWindowProc(hwnd, uMsg, wParam, lParam); - if (PWindowPos(lParam)^.Flags and SWP_NOSIZE = 0) or - (PWindowPos(lParam)^.Flags and SWP_NOMOVE = 0) then - begin - GetWindowRect(hwnd, R); - WindowHandleToPlatform(LForm.Handle).WndBounds := R; - R := WindowHandleToPlatform(LForm.Handle).Bounds; - LForm.SetBounds(R.Left, R.Top, R.Width, R.Height); - end; - if PWindowPos(lParam)^.Flags and SWP_FRAMECHANGED = SWP_FRAMECHANGED then - WindowHandleToPlatform(LForm.Handle).UpdateClientSize; - { update state } - PlatformWin.FDiableUpdateState := True; - try - OldWindowState := LForm.WindowState; - Placement.Length := SizeOf(TWindowPlacement); - GetWindowPlacement(hwnd, Placement); - case Placement.showCmd of - SW_SHOWMINIMIZED: - LForm.WindowState := TWindowState.wsMinimized; - SW_SHOWMAXIMIZED: - LForm.WindowState := TWindowState.wsMaximized; - else - if csDesigning in LForm.ComponentState then - begin - { for using Metro-style interface in designer we set Maximized but we can change window size } - if LForm.WindowState <> TWindowState.wsMaximized then - LForm.WindowState := TWindowState.wsNormal; - end - else - begin - if not (TFmxFormState.WasNotShown in LForm.FormState) then - LForm.WindowState := TWindowState.wsNormal; - end; - end; - if OldWindowState <> LForm.WindowState then - begin - PostMessage(hwnd, WM_CLOSEMENU, 0, 0); - PrepareClosePopups; - ClosePopupList; - end; - finally - PlatformWin.FDiableUpdateState := False; - end; - WMNCMessages(LForm, uMsg, wParam, lParam); - end; - end; - WM_CLOSE: - LForm.Close; - WM_LBUTTONDOWN: - begin - GetCursorPos(P); - LastMousePos := ImpossibleMousePosition; - ScaleMousePos(LForm.Handle, P); - LForm.MouseDown(TMouseButton.mbLeft, MouseToShiftState(wParam), P.X, P.Y); - HandleMouseGestures(LForm, uMsg, P.X, P.Y); - end; - WM_LBUTTONDBLCLK: - begin - GetCursorPos(P); - LastMousePos := ImpossibleMousePosition; - ScaleMousePos(LForm.Handle, P); - LForm.MouseDown(TMouseButton.mbLeft, MouseToShiftState(wParam) + [ssDouble], P.X, P.Y); - end; - WM_LBUTTONUP: - begin - WindowBorder := TWindowBorderWin(LForm.Border.WindowBorder); - if LForm.Border.IsSupported and WindowBorder.NCClick then - Result := WMNCMessages(LForm, uMsg, wParam, lParam) - else - begin - GetCursorPos(P); - LastMousePos := ImpossibleMousePosition; - ScaleMousePos(LForm.Handle, P); - LForm.MouseUp(TMouseButton.mbLeft, MouseToShiftState(wParam), P.X, P.Y); - end; - HandleMouseGestures(LForm, uMsg, P.X, P.Y); - end; - WM_RBUTTONDOWN, WM_RBUTTONDBLCLK: - begin - GetCursorPos(P); - LastMousePos := ImpossibleMousePosition; - Obj := IControl(LForm.ObjectAtPoint(P)); - if (Obj <> nil) and (Obj.GetObject <> nil) and not (csDesigning in Obj.GetObject.ComponentState) then - begin - Obj.SetFocus; - MenuDisplayed := Obj.ShowContextMenu(P); - end - else - MenuDisplayed := False; - if not MenuDisplayed then - begin - ScaleMousePos(LForm.Handle, P); - if uMsg = WM_RBUTTONDBLCLK then - LForm.MouseDown(TMouseButton.mbRight, MouseToShiftState(wParam) + [ssDouble], P.X, P.Y) - else - LForm.MouseDown(TMouseButton.mbRight, MouseToShiftState(wParam), P.X, P.Y); - end; - end; - WM_RBUTTONUP: - begin - GetCursorPos(P); - LastMousePos := ImpossibleMousePosition; - ScaleMousePos(LForm.Handle, P); - LForm.MouseUp(TMouseButton.mbRight, MouseToShiftState(wParam), P.X, P.Y); - end; - WM_MBUTTONDOWN: - begin - GetCursorPos(P); - LastMousePos := ImpossibleMousePosition; - ScaleMousePos(LForm.Handle, P); - LForm.MouseDown(TMouseButton.mbMiddle, MouseToShiftState(wParam), P.X, P.Y); - end; - WM_MBUTTONUP: - begin - GetCursorPos(P); - LastMousePos := ImpossibleMousePosition; - ScaleMousePos(LForm.Handle, P); - LForm.MouseUp(TMouseButton.mbMiddle, MouseToShiftState(wParam), P.X, P.Y); - end; - WM_MBUTTONDBLCLK: - begin - GetCursorPos(P); - LastMousePos := ImpossibleMousePosition; - ScaleMousePos(LForm.Handle, P); - LForm.MouseDown(TMouseButton.mbMiddle, MouseToShiftState(wParam) + [ssDouble], P.X, P.Y); - end; - WM_MENUSELECT: - begin - MenuServiceWin.Dispatch(Message); - end; - WM_INITMENUPOPUP: - begin - MenuServiceWin.Dispatch(Message); - end; - WM_MOUSEMOVE: - begin - WindowBorder := TWindowBorderWin(LForm.Border.WindowBorder); - if LForm.Border.IsSupported then - begin - if WindowBorder.NCClick then - Result := WMNCMessages(LForm, uMsg, wParam, lParam) - else - begin - WindowBorder.MouseLeave; - GetCursorPos(P); - if P <> LastMousePos then - begin - LastMousePos := P; - ScaleMousePos(LForm.Handle, P); - LForm.MouseMove(MouseToShiftState(wParam), P.X, P.Y); - end; - end; - end - else - begin - GetCursorPos(P); - if P <> LastMousePos then - begin - LastMousePos := P; - ScaleMousePos(LForm.Handle, P); - LForm.MouseMove(MouseToShiftState(wParam), P.X, P.Y); - end; - end; - tme.cbSize := SizeOf(tme); - tme.hwndTrack := hwnd; - tme.dwFlags := TME_LEAVE; - tme.dwHoverTime := HOVER_DEFAULT; - TrackMouseEvent(tme); - HandleMouseGestures(LForm, uMsg, P.X, P.Y); - end; - WM_MOUSELEAVE: - begin - WindowBorder := TWindowBorderWin(LForm.Border.WindowBorder); - if LForm.Border.IsSupported and WindowBorder.NCClick then - Result := WMNCMessages(LForm, uMsg, wParam, lParam) - else - LForm.MouseLeave; - end; - WM_MOUSEWHEEL: - begin - H := DispatchMouseWheelToPopups; - - if not H then - LForm.MouseWheel(KeysToShiftState(wParam), - TSmallPoint(Cardinal(wParam)).Y, H); - - Result := Integer(H = True); - end; - WM_GETDLGCODE: - begin - Result := DLGC_WANTTAB or dlgc_WantArrows or DLGC_WANTCHARS; - end; - WM_CHAR: - begin - Ch := WideChar(wParam); - Key := 0; - LForm.KeyDown(Key, Ch, KeyDataToShiftState(lParam)); - LForm.KeyUp(Key, Ch, KeyDataToShiftState(lParam)); - Result := 0; - end; - WM_KEYDOWN, - WM_SYSKEYDOWN: - begin - // Check if this key translates to a WM_CHAR/WM_SYSCHAR message - // and if it does, pass KeyDown with character code - // and clear the original WM_CHAR from the queue - Msg.hwnd := hwnd; - Msg.Message := uMsg; - Msg.wParam := wParam; - Msg.lParam := lParam; - - Result := 0; - - if uMsg = WM_SYSKEYDOWN then - begin - CharMsg := WM_SYSCHAR; - DeadCharMsg := WM_SYSDEADCHAR; - end - else - begin - CharMsg := WM_CHAR; - DeadCharMsg := WM_DEADCHAR; - end; - - LastKeyIsDeadKey := False; - if PeekMessage(Msg, hwnd, DeadCharMsg, DeadCharMsg, PM_NOREMOVE + PM_NOYIELD) then - LastKeyIsDeadKey := True - else if TranslateMessage(Msg) then - begin - if PeekMessage(Msg, hwnd, CharMsg, CharMsg, PM_REMOVE) then - begin - CurrentChar(Msg, Key, Ch, Shift); - // clear duplicate WM_CHAR - if CharMsg = WM_CHAR then - PeekMessage(Msg, hwnd, CharMsg, CharMsg, PM_REMOVE); - LForm.KeyDown(Key, Ch, Shift); - end - else - begin - Key := wParam; - Ch := #0; - LForm.KeyDown(Key, Ch, KeyDataToShiftState(lParam)); - end; - end; - - // always let the system handle system shortcuts - if uMsg = WM_SYSKEYDOWN then - Result := DefWindowProc(hwnd, uMsg, wParam, lParam); - end; - WM_DEADCHAR: - begin - PeekMessage(Msg, hwnd, WM_DEADCHAR, WM_DEADCHAR, PM_REMOVE); - PeekMessage(Msg, hwnd, WM_CHAR, WM_CHAR, PM_REMOVE); - end; - WM_KEYUP: - begin - Ch := #0; - Key := wParam; - Shift := KeyDataToShiftState(lParam); - if LastKeyIsDeadKey then - begin - Result := 0; - end - else - begin - Msg.hwnd := hwnd; - Msg.Message := WM_KEYDOWN; - Msg.wParam := wParam; - Msg.lParam := Msg.lParam and $7FFFFFFF; - if TranslateMessage(Msg) then - if PeekMessage(Msg, hwnd, WM_CHAR, WM_CHAR, PM_REMOVE) then - begin - CurrentChar(Msg, Key, Ch, Shift); - end; - LForm.KeyUp(Key, Ch, Shift); - Result := 0; - end - end; - WM_SYSKEYUP: - begin - if (wParam = VK_MENU) or (wParam = VK_F10) then - begin - LForm.EnterMenuLoop; - Result := 0; - end - else - Result := DefWindowProc(hwnd, uMsg, wParam, lParam); - end; - WM_RELEASEFORM: - begin - LForm.Free; - end; - { IME } - WM_INPUTLANGCHANGE: - begin - // Result := SetIMECompositionWndPosition(LForm, uMsg, wParam, lParam); - // OnInputLangChange(); - end; - WM_IME_SETCONTEXT, - WM_IME_STARTCOMPOSITION, - WM_IME_COMPOSITION, - WM_IME_NOTIFY, - WM_IME_ENDCOMPOSITION: - begin - PlatformWin.ImmManager[LForm].Dispatch(Message); - Result := Message.Result; - end; - WM_COMMAND: - begin - MenuServiceWin.Dispatch(Message); - Result := Message.Result; - end; - WM_GESTURENOTIFY: - begin - WMGestureNotify(LForm, uMsg, lParam); - Result := DefWindowProc(hwnd, uMsg, wParam, lParam); - end; - WM_GESTURE: - begin - Result := WMGesture(LForm, uMsg, wParam, lParam); - end; - WM_TOUCH: - begin - GetCursorPos(P); - Result := WMTouch(LForm, uMsg, wParam, lParam); - ScreenToClient(Wnd, P); - end; - WM_CTLCOLORMSGBOX..WM_CTLCOLORSTATIC: - Result := SendMessage(lParam, CN_BASE + uMsg, wParam, lParam); - else - Result := DefWindowProc(hwnd, uMsg, wParam, lParam); - // Default result if nothing happens - end; - finally - FinalActionsOfPopups; - end; - except - on E: Exception do - Application.HandleException(E); - end; - end - else { if LForm = nil } - begin - if (PlatformWin <> nil) and (hwnd = PlatformWin.FApplicationHWND) then - begin - case uMsg of - WM_SYSCOMMAND: - begin - case TWMSysCommand(Message).CmdType of - SC_MINIMIZE: - begin - PlatformWin.MinimizeApp; - Result := 0; - end; - SC_RESTORE: - begin - Result := DefWindowProc(hwnd, uMsg, wParam, lParam); - PlatformWin.RestoreApp; - end - else - Result := DefWindowProc(hwnd, uMsg, wParam, lParam); - end; - end; - WM_CLOSE: - begin - if Application.MainForm <> nil then - begin - try - if Screen <> nil then - Screen.ActiveForm := nil; - Application.MainForm.Close; - except - on E: Exception do - Application.HandleException(E); - end; - Exit; - end; - Result := DefWindowProc(hwnd, uMsg, wParam, lParam); - end; - WM_DESTROY: - Application.Terminate; - WM_ACTIVATEAPP: - begin - Result := DefWindowProc(hwnd, uMsg, wParam, lParam); - if BOOL(wParam) then - PlatformWin.RestoreApp; - end; - else - Result := DefWindowProc(hwnd, uMsg, wParam, lParam); - end; - end - else - Result := DefWindowProc(hwnd, uMsg, wParam, lParam); - end; - // Default result if nothing happens -end; - -var - FMAppClass: TWndClass = ( - style: 0; - lpfnWndProc: @WndProc; - cbClsExtra: 0; - cbWndExtra: 0; - hInstance: 0; - hIcon: 0; - hCursor: 0; - hbrBackground: 0; - lpszMenuName: nil; - lpszClassName: 'TFMAppClass'); - -function TPlatformWin.CreateAppHandle: HWND; -var - TempClass: TWndClass; - P: PChar; - ClassRegistered: Boolean; - ModuleName: array [0 .. 255] of Char; -begin - GetModuleFileName(MainInstance, ModuleName, Length(ModuleName)); - P := AnsiStrRScan(ModuleName, '\'); - if P <> nil then - StrCopy(ModuleName, P + 1); - P := AnsiStrScan(ModuleName, '.'); - if P <> nil then - P^ := #0; - CharLower(CharNext(ModuleName)); - FDefaultTitle := ModuleName; - if Application <> nil then - FTitle := Application.Title - else - FTitle := FDefaultTitle; - FMAppClass.hInstance := hInstance; - ClassRegistered := GetClassInfo(hInstance, FMAppClass.lpszClassName, TempClass); - FMAppClass.hIcon := LoadIconW(MainInstance, PChar('MAINICON')); - if not ClassRegistered or (TempClass.lpfnWndProc <> @WndProc) then - begin - if ClassRegistered then - Winapi.Windows.UnregisterClass(FMAppClass.lpszClassName, hInstance); - Winapi.Windows.RegisterClass(FMAppClass); - end; - Result := CreateWindowEx(WS_EX_WINDOWEDGE or WS_EX_APPWINDOW, FMAppClass.lpszClassName, PChar(FTitle), - WS_POPUP or WS_GROUP, 0, 0, 0, 0, GetDesktopWindow, 0, hInstance, nil); - Winapi.Windows.ShowWindow(Result, SW_SHOWNORMAL); -end; - -function TPlatformWin.GetApplicationHWND: HWND; -begin - UpdateApplicationHwnd; - Result := FApplicationHWND; -end; - -function TPlatformWin.CreateWindow(const AForm: TCommonCustomForm): TWindowHandle; -var - DesignerForm: IDesignerForm; - IsDesignerForm: Boolean; - WindowClass: TWndClass; - LDropTarget: TWinDropTarget; - Style, ExStyle: DWORD; - Wnd: HWND; - ParentWnd: HWND; - WndClassName: string; - LForm, LParentForm: TCommonCustomForm; - - function GetParentFormHandle: HWND; - begin - Result := 0; - if LForm.ParentForm <> nil then - begin - if LForm.ParentForm.Handle = nil then - raise EArgumentException.CreateFMT(SNotInstance, ['ParentForm.Handle'])at ReturnAddress; - Result := FormToHWND(LForm.ParentForm); - end; - end; - -begin - RaiseIfNil(AForm, 'AForm'); - - LDropTarget := nil; - LForm := AForm; - Style := WS_CLIPSIBLINGS or WS_CLIPCHILDREN; - ExStyle := 0; - WndClassName := 'FM' + LForm.ClassName; - IsDesignerForm := TFmxFormState.InDesigner in LForm.FormState; - if not GetClassInfo(hInstance, PChar(WndClassName), WindowClass) then - begin - FillChar(WindowClass, SizeOf(WindowClass), 0); - WindowClass.style := CS_DBLCLKS or CS_HREDRAW or CS_VREDRAW; - WindowClass.lpfnWndProc := @WndProc; - WindowClass.cbClsExtra := 0; - WindowClass.cbWndExtra := 0; - WindowClass.hInstance := hInstance; - WindowClass.hIcon := LoadIconW(MainInstance, PChar('MAINICON')); - if csDesigning in LForm.ComponentState then - WindowClass.hCursor := LoadCursorW(0, PChar(IDC_ARROW)) - else - WindowClass.hCursor := 0; - WindowClass.hbrBackground := GetStockObject(NULL_BRUSH); - WindowClass.lpszMenuName := nil; - WindowClass.lpszClassName := PChar(WndClassName); - if Winapi.Windows.RegisterClass(WindowClass) = 0 then - RaiseLastOSError; - end; - if (csDesigning in LForm.ComponentState) or IsDesignerForm then - begin - Style := Style or WS_CHILD; - // Parent handle going to set in IDE. - // Now set temporary value - ParentWnd := GetDesktopWindow; - end - else - begin - case LForm.FormStyle of - TFormStyle.Popup: - begin - Style := style or WS_POPUP; - ExStyle := ExStyle or WS_EX_NOACTIVATE; - end; - TFormStyle.StayOnTop: - begin - ExStyle := ExStyle or WS_EX_TOPMOST; - end; - end; - if LForm.Transparency then - begin - Style := style or WS_POPUP; - ExStyle := ExStyle or WS_EX_LAYERED; - end - else - begin - case LForm.BorderStyle of - TFmxFormBorderStyle.None: - Style := Style or WS_POPUP or WS_SYSMENU; - TFmxFormBorderStyle.Single, TFmxFormBorderStyle.ToolWindow: - Style := Style or (WS_CAPTION or WS_BORDER); - TFmxFormBorderStyle.Sizeable, TFmxFormBorderStyle.SizeToolWin: - Style := Style or (WS_CAPTION or WS_THICKFRAME); - end; - if LForm.BorderStyle in [TFmxFormBorderStyle.ToolWindow, TFmxFormBorderStyle.SizeToolWin] then - ExStyle := ExStyle or WS_EX_TOOLWINDOW; - if LForm.BorderStyle <> TFmxFormBorderStyle.None then - begin - if TBorderIcon.biMinimize in LForm.BorderIcons then - Style := Style or WS_MINIMIZEBOX; - if TBorderIcon.biMaximize in LForm.BorderIcons then - Style := Style or WS_MAXIMIZEBOX; - if TBorderIcon.biSystemMenu in LForm.BorderIcons then - Style := Style or WS_SYSMENU; - end; - end; - // Use handle of parent form - ParentWnd := GetParentFormHandle; - // For Dialogs and Popups we used handle of active form - if (ParentWnd = 0) and ((TFmxFormState.Modal in LForm.FormState) or (LForm.FormStyle = TFormStyle.Popup)) then - begin - if (Screen <> nil) and (Screen.ActiveForm <> nil) then - ParentWnd := FormToHWND(Screen.ActiveForm); - if (ParentWnd = 0) then - begin - ParentWnd := GetActiveWindow; - LParentForm := FindWindow(ParentWnd); - if LParentForm = nil then - ParentWnd := 0; - end; - end; - // If none parent then we use handle of Application - if ParentWnd = 0 then - ParentWnd := ApplicationHWND; - end; - Wnd := CheckWinapiHandle(CreateWindowEx(ExStyle, WindowClass.lpszClassName, PChar(LForm.Caption), style, - Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), ParentWnd, 0, - hInstance, nil)); - try - SetProp(Wnd, MakeIntAtom(WindowAtom), THandle(LForm)); - try - if not ((csDesigning in AForm.ComponentState) or Supports(AForm, IDesignerForm, DesignerForm)) then - begin - LDropTarget := TWinDropTarget.Create(nil); - LDropTarget.Form := LForm; - end; - try - if LDropTarget <> nil then - RegisterDragDrop(Wnd, LDropTarget); - Result := TWinWindowHandle.Create(LForm, Wnd); - TWinWindowHandle(Result).FWinDropTarget := LDropTarget; - except - if LDropTarget <> nil then - RevokeDragDrop(Wnd); - raise; - end; - except - FreeAndNil(LDropTarget); - raise; - end; - except - Winapi.Windows.DestroyWindow(Wnd); - raise; - end; - TWinWindowHandle(Result).FWinDropTarget := LDropTarget; - - FImmManagers.Add(AForm, TImmManager.Create(AForm)); -end; - -function TPlatformWin.CreateWindowBorder(const AForm: TCommonCustomForm): TWindowBorder; -begin - Result := FMX.Forms.Border.Win.CreateWindowBorder(AForm); -end; - -procedure TPlatformWin.DestroyWindow(const AForm: TCommonCustomForm); -var - Wnd: HWND; - DesignerForm: IDesignerForm; -begin - RaiseIfNil(AForm, 'AForm'); - - HideWindow(AForm); - Wnd := FormToHWND(AForm); - if not ((csDesigning in AForm.ComponentState) or Supports(AForm, IDesignerForm, DesignerForm)) then - RevokeDragDrop(Wnd); - WindowHandleToPlatform(AForm.Handle).FWinDropTarget.Free; - RemoveProp(Wnd, MakeIntAtom(WindowAtom)); - Winapi.Windows.DestroyWindow(Wnd); - - FImmManagers.Remove(AForm); -end; - -procedure TPlatformWin.ReleaseWindow(const AForm: TCommonCustomForm); -begin -end; - -procedure TPlatformWin.InvalidateImmediately(const AForm: TCommonCustomForm); -begin - RaiseIfNil(AForm, 'AForm'); - - InvalidateWindowRect(AForm, AForm.ClientRect); -end; - -procedure TPlatformWin.InvalidateWindowRect(const AForm: TCommonCustomForm; R: TRectF); -var - WR: TRect; - Wnd: HWND; - PaintControl: IPaintControl; - UpdateRects: TUpdateRects; - I: Integer; -begin - RaiseIfNil(AForm, 'AForm'); - - if IntersectRect(R, TRectF.Create(0, 0, AForm.ClientWidth, AForm.ClientHeight)) then - begin - Wnd := FormToHWND(AForm); - if AForm.Transparency and not (csDesigning in AForm.ComponentState) then - begin - PostMessage(Wnd, WM_ADDUPDATERECT, Integer(SmallPoint(Round(R.Left), Round(R.Top))), - Integer(SmallPoint(Round(R.Right), Round(R.Bottom)))); - end - else - begin - R := WindowHandleToPlatform(AForm.Handle).FormToWnd(R); - if Supports(AForm, IPaintControl, PaintControl) and (PaintControl.ContextHandle <> 0) then - begin - // In Paint - if not FInPaintUpdateRects.TryGetValue(AForm.Handle, UpdateRects) then - begin - SetLength(UpdateRects, 1); - UpdateRects[0] := R; - FInPaintUpdateRects.Add(AForm.Handle, UpdateRects); - Exit; - end - else - for I := 0 to High(UpdateRects) do - if (UpdateRects[I] = R) or (UpdateRects[I].Contains(R.TopLeft) and UpdateRects[I].Contains(R.BottomRight)) - then - Exit; - SetLength(UpdateRects, Length(UpdateRects) + 1); - UpdateRects[High(UpdateRects)] := R; - FInPaintUpdateRects.AddOrSetValue(AForm.Handle, UpdateRects); - end - else - begin - WR := TRect.Create(Trunc(R.Left), Trunc(R.Top), Ceil(R.Right), Ceil(R.Bottom)); - Winapi.Windows.InvalidateRect(Wnd, @WR, False); - end; - end; - end; -end; - -procedure TPlatformWin.MinimizeApp; -var - AnimationEnable: Boolean; - - function GetAnimation: Boolean; - var - Info: TAnimationInfo; - begin - Info.cbSize := SizeOf(TAnimationInfo); - if SystemParametersInfo(SPI_GETANIMATION, Info.cbSize, @Info, 0) then - Result := Info.iMinAnimate <> 0 - else - Result := False; - end; - - procedure SetAnimation(Value: Boolean); - var - Info: TAnimationInfo; - begin - Info.cbSize := SizeOf(TAnimationInfo); - Info.iMinAnimate := Integer(BOOL(Value)); - SystemParametersInfo(SPI_SETANIMATION, Info.cbSize, @Info, 0); - end; - - procedure MinimiseAllForms; - var - I: Integer; - WindowHandle: HWND; - begin - for I := 0 to Screen.FormCount - 1 do - begin - WindowHandle := FormToHWND(Screen.Forms[I]); - if IsWindowVisible(WindowHandle) then - DefWindowProc(WindowHandle, WM_SYSCOMMAND, SC_MINIMIZE, 0); - end; - end; - -begin - AnimationEnable := GetAnimation; - try - SetAnimation(False); - if Application.MainForm <> nil then - begin - SetWindowPos(ApplicationHWND, FormToHWND(Application.MainForm), Application.MainForm.Left, - Application.MainForm.Top, Application.MainForm.Width, 0, SWP_SHOWWINDOW); - MinimiseAllForms; - end; - DefWindowProc(ApplicationHWND, WM_SYSCOMMAND, SC_MINIMIZE, 0); - finally - SetAnimation(AnimationEnable); - end; -end; - -function TPlatformWin.GetWindowRect(const AForm: TCommonCustomForm): TRectF; -begin - RaiseIfNil(AForm, 'AForm'); - - if AForm.IsHandleAllocated then - Result := TRectF.Create(WindowHandleToPlatform(AForm.Handle).Bounds) - else - Result := TRectF.Create(0, 0, AForm.Width, AForm.Height); -end; - -function TPlatformWin.GetWindowScale(const AForm: TCommonCustomForm): Single; -begin - RaiseIfNil(AForm, 'AForm'); - - if AForm.IsHandleAllocated then - Result := AForm.Handle.Scale - else - Result := GetScreenScale; -end; - -procedure TPlatformWin.SetWindowRect(const AForm: TCommonCustomForm; ARect: TRectF); -begin - RaiseIfNil(AForm, 'AForm'); - - { for using Metro-style interface in designer we set Maximized but we can change window size } - if AForm.IsHandleAllocated and (AForm.WindowState in [TWindowState.wsNormal, TWindowState.wsMaximized]) then - WindowHandleToPlatform(AForm.Handle).Bounds := ARect.Round; -end; - -procedure TPlatformWin.SetWindowCaption(const AForm: TCommonCustomForm; const ACaption: string); -begin - RaiseIfNil(AForm, 'AForm'); - - SetWindowText(FormToHWND(AForm), ACaption); -end; - -procedure TPlatformWin.RegisterCanvasClasses; -begin - if GlobalUseGPUCanvas then - FMX.Canvas.GPU.RegisterCanvasClasses; - FMX.Canvas.D2D.RegisterCanvasClasses; - FMX.Canvas.GDIP.RegisterCanvasClasses; -end; - -procedure TPlatformWin.UnhookTouchHandler(const AForm: TCommonCustomForm); -begin - if TOSVersion.Check(6, 1) then - UnregisterTouchWindow(FormToHWND(AForm)); -end; - -procedure TPlatformWin.UnregisterCanvasClasses; -begin - if GlobalUseGPUCanvas then - FMX.Canvas.GPU.UnregisterCanvasClasses; - FMX.Canvas.D2D.UnregisterCanvasClasses; - FMX.Canvas.GDIP.UnregisterCanvasClasses; -end; - -procedure TPlatformWin.RegisterContextClasses; -begin - FMX.Context.DX9.RegisterContextClasses; - FMX.Context.DX11.RegisterContextClasses; -end; - -procedure TPlatformWin.UnregisterContextClasses; -begin - FMX.Context.DX9.UnregisterContextClasses; - FMX.Context.DX11.UnregisterContextClasses; -end; - -procedure TPlatformWin.ReleaseCapture(const AForm: TCommonCustomForm); -begin - Winapi.Windows.ReleaseCapture; -end; - -procedure TPlatformWin.SetApplicationHWNDProc(const Value: TApplicationHWNDProc); -begin - if @FApplicationHWNDProc <> @Value then - begin - FApplicationHWNDProc := Value; - UpdateApplicationHwnd; - end; -end; - -procedure TPlatformWin.SetCapture(const AForm: TCommonCustomForm); -begin - RaiseIfNil(AForm, 'AForm'); - - Winapi.Windows.SetCapture(FormToHWND(AForm)); -end; - -function TPlatformWin.GetCaretWidth: Integer; -begin - Result := 1; -end; - -function TPlatformWin.GetClientSize(const AForm: TCommonCustomForm): TPointF; -begin - RaiseIfNil(AForm, 'AForm'); - - if AForm.IsHandleAllocated then - Result := TSizeF.Create(WindowHandleToPlatform(AForm.Handle).ClientSize) - else - Result := TSizeF.Create(AForm.Width, AForm.Height); -end; - -procedure TPlatformWin.SetClientSize(const AForm: TCommonCustomForm; const ASize: TPointF); -begin - RaiseIfNil(AForm, 'AForm'); - - if AForm.IsHandleAllocated then - WindowHandleToPlatform(AForm.Handle).ClientSize := TSizeF.Create(ASize).Round; -end; - -procedure TPlatformWin.HideWindow(const AForm: TCommonCustomForm); -begin - RaiseIfNil(AForm, 'AForm'); - - SetWindowPos(FormToHWND(AForm), 0, 0, 0, 0, 0, SWP_HIDEWINDOW or SWP_NOSIZE or SWP_NOMOVE or SWP_NOZORDER or - SWP_NOACTIVATE); -end; - -const - ShowCommands: array [TWindowState] of Integer = (SW_SHOWNORMAL, SW_MINIMIZE, SW_SHOWMAXIMIZED); - -procedure TPlatformWin.ShowWindow(const AForm: TCommonCustomForm); -const - uFlags = SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE; -var - Wnd, WndParent: HWND; - nCmdShow: Integer; - OldActiveForm: TCommonCustomForm; - OldDisableDeactivate: Boolean; - OldActiveHandle: TWinWindowHandle; -begin - RaiseIfNil(AForm, 'AForm'); - - Wnd := FormToHWND(AForm); - nCmdShow := ShowCommands[AForm.WindowState]; - if (AForm.FormStyle = TFormStyle.Popup) then - begin - nCmdShow := nCmdShow or SW_SHOWNOACTIVATE; - OldDisableDeactivate := False; - OldActiveHandle := nil; - if Screen <> nil then - begin - OldActiveForm := Screen.ActiveForm; - if OldActiveForm <> nil then - OldActiveHandle := WindowHandleToPlatform(OldActiveForm.Handle); - end; - try - if OldActiveHandle <> nil then - begin - OldDisableDeactivate := OldActiveHandle.FDisableDeactivate; - OldActiveHandle.FDisableDeactivate := True; - end; - Winapi.Windows.ShowWindow(Wnd, nCmdShow); - if OldActiveHandle <> nil then - SetWindowPos(OldActiveHandle.Wnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER); - finally - if OldActiveHandle <> nil then - OldActiveHandle.FDisableDeactivate := OldDisableDeactivate; - end; - end - else - Winapi.Windows.ShowWindow(Wnd, nCmdShow); - - if AForm.Transparency and not (csDesigning in AForm.ComponentState) then - PostMessage(FormToHWND(AForm), WM_ADDUPDATERECT, Integer(SmallPoint(0, 0)), - Integer(SmallPoint(AForm.Width, AForm.Height))); - - if AForm.FormStyle in [TFormStyle.StayOnTop, TFormStyle.Popup] then - begin - WndParent := GetParent(Wnd); - if (WndParent = GetDesktopWindow) or (WndParent = 0) then - SetWindowPos(Wnd, HWND_TOPMOST, 0, 0, 0, 0, uFlags) - else - SetWindowPos(Wnd, HWND_TOP, 0, 0, 0, 0, uFlags); - end; -end; - -procedure TPlatformWin.BringToFront(const AForm: TCommonCustomForm); -var - Wnd: HWND; -begin - RaiseIfNil(AForm, 'AForm'); - - Wnd := FormToHWND(AForm); - SetWindowPos(Wnd, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); -end; - -procedure TPlatformWin.SendToBack(const AForm: TCommonCustomForm); -var - Wnd: HWND; -begin - RaiseIfNil(AForm, 'AForm'); - - Wnd := FormToHWND(AForm); - SetWindowPos(Wnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); -end; - -procedure TPlatformWin.Activate(const AForm: TCommonCustomForm); -var - Wnd: HWND; -begin - RaiseIfNil(AForm, 'AForm'); - - Wnd := FormToHWND(AForm); - if not IsWindowVisible(Wnd) or IsIconic(Wnd) then - begin - if AForm.FormStyle = TFormStyle.Popup then - Winapi.Windows.ShowWindow(Wnd, SW_RESTORE or SW_SHOWNOACTIVATE) - else - Winapi.Windows.ShowWindow(Wnd, SW_RESTORE); - end; - if AForm.FormStyle <> TFormStyle.Popup then - Winapi.Windows.SetActiveWindow(Wnd); -end; - -procedure TPlatformWin.SetWindowState(const AForm: TCommonCustomForm; const AState: TWindowState); -var - Wnd: HWND; - - procedure DoSetState(const AState: TWindowState); - begin - if AForm.FormStyle = TFormStyle.Popup then - Winapi.Windows.ShowWindow(Wnd, ShowCommands[AState] or SW_SHOWNOACTIVATE) - else - begin - if (Application.MainForm = AForm) and (AState = TWindowState.wsMinimized) then - Winapi.Windows.ShowWindow(ApplicationHWND, ShowCommands[AState]) - else - Winapi.Windows.ShowWindow(Wnd, ShowCommands[AState]) - end; - end; - -begin - RaiseIfNil(AForm, 'AForm'); - - if AForm.Visible and not FDiableUpdateState then - begin - Wnd := FormToHWND(AForm); - if AForm.FullScreen then - try - FDiableUpdateState := True; - AForm.WindowState := TWindowState.wsMaximized; - if not Winapi.Windows.IsZoomed(Wnd) then - DoSetState(TWindowState.wsMaximized); - finally - FDiableUpdateState := False; - end - else - DoSetState(AState); - end; -end; - -function TPlatformWin.ShowWindowModal(const AForm: TCommonCustomForm): TModalResult; -var - WindowList: Pointer; - AppService: IFMXApplicationService; - CloseRes: TCloseAction; -begin - RaiseIfNil(AForm, 'AForm'); - - Result := mrNone; - if GetCapture <> 0 then - SendMessage(GetCapture, WM_CANCELMODE, 0, 0); - Winapi.Windows.ReleaseCapture; - AForm.HandleNeeded; - WindowList := DisableTaskWindows(FormToHWND(AForm)); - try - CloseRes := TCloseAction.caNone; - AForm.Show; - AForm.ModalResult := mrNone; - SetActiveWindow(FormToHWND(AForm)); - SetFocus(FormToHWND(AForm)); - Screen.ActiveForm := AForm; - AppService := IFMXApplicationService(TPlatformServices.Current.GetPlatformService(IFMXApplicationService)); - repeat - if not Application.HandleMessage then - AppService.WaitMessage; - if Application.Terminated then - Break - else if AForm.ModalResult <> mrNone then - begin - CloseRes := AForm.CloseModal; - Result := AForm.ModalResult; - end; - until Result <> mrNone; - if not Application.Terminated and (CloseRes <> TCloseAction.caFree) then - AForm.Hide; - finally - EnableTaskWindows(WindowList); - end; - - Result := AForm.ModalResult; -end; - -function TPlatformWin.CanShowModal: Boolean; -begin - Result := True; -end; - -function TPlatformWin.ClientToScreen(const AForm: TCommonCustomForm; const Point: TPointF): TPointF; -var - P: TPoint; -begin - RaiseIfNil(AForm, 'AForm'); - - P := (Point * WindowHandleToPlatform(AForm.Handle).Scale).Round; - Winapi.Windows.ClientToScreen(FormToHWND(AForm), P); - Result := TPointF.Create(P); -end; - -function TPlatformWin.ScreenToClient(const AForm: TCommonCustomForm; const Point: TPointF): TPointF; -var - P: TPoint; -begin - RaiseIfNil(AForm, 'AForm'); - - P := Point.Round; - Winapi.Windows.ScreenToClient(FormToHWND(AForm), P); - Result := TPointF.Create(P) / WindowHandleToPlatform(AForm.Handle).Scale; -end; - -{ Menus } - -function TPlatformWin.SupportsDefaultSize(const AComponent: TComponentKind): Boolean; -begin - Result := AComponent = TComponentKind.Calendar; -end; - -procedure TPlatformWin.ThreadSync(var Msg: TMessage); -begin - if Msg.Msg = WM_NULL then - begin - CheckSynchronize; - Msg.Result := 0; - end - else - Msg.Result := DefWindowProc(FThreadSyncHandle, Msg.Msg, Msg.wParam, Msg.LPARAM); -end; - -procedure TPlatformWin.RemoveRecognizer(const ARec: TInteractiveGesture; const AForm: TCommonCustomForm); -begin - Exclude(FEnabledInteractiveGestures, ARec); -end; - -procedure TPlatformWin.RestoreApp; -var - I: Integer; - LWND: HWND; -begin - if Screen <> nil then - if Screen.ActiveForm <> nil then - Screen.ActiveForm.Activate - else - begin - LWND := GetActiveWindow; - if LWND <> 0 then - for I := 0 to Screen.FormCount - 1 do - if FormToHWND(Screen.Forms[I]) = LWND then - begin - Screen.Forms[I].Activate; - Exit; - end; - if Application.MainForm <> nil then - Application.MainForm.Activate; - end; -end; - -procedure TPlatformWin.HookTouchHandler(const AForm: TCommonCustomForm); -begin - if TOSVersion.Check(6, 1) and TWinTouchGestureEngine.Supported(AForm) then - RegisterTouchWindow(FormToHWND(AForm), TWF_WANTPALM); -end; - -{ Drag and Drop } - -const - SID_IDropTargetHelper = '{4657278B-411B-11d2-839A-00C04FD918D0}'; - CLSID_DragDropHelper: TGUID = (D1: $4657278A; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); - -type - IDropTargetHelper = interface(IUnknown) - [SID_IDropTargetHelper] - function DragEnter(hwndTarget: HWND; const dataObj: IDataObject; var pt: TPoint; - dwEffect: Longint): HRESULT; stdcall; - function DragLeave: HRESULT; stdcall; - function DragOver(var pt: TPoint; dwEffect: Longint): HRESULT; stdcall; - function Drop(const dataObj: IDataObject; var pt: TPoint; dwEffect: Longint): HRESULT; stdcall; - function Show(Show: BOOL): HRESULT; stdcall; - end; - -var - FDropTargetHelper: IDropTargetHelper; - FDataObj: IDataObject; - -function TWinDropTarget.GetDataObject: TDragObject; -var - FormatEtc: TFormatEtc; - StgMedium: TStgMedium; - str: string; - Drop: HDrop; - I, numFiles, buflen: Integer; - buffer: MarshaledString; -begin - FillChar(Result, SizeOf(Result), 0); - if FDataObj = nil then - Exit; - // get file name first - FormatEtc.cfFormat := CF_HDROP; - FormatEtc.ptd := nil; - FormatEtc.dwAspect := DVASPECT_CONTENT; - FormatEtc.lindex := -1; - FormatEtc.Tymed := TYMED_HGLOBAL; - // get FireMonkey - if PlatformWin.FDragAndDropActive then - begin - FormatEtc.cfFormat := CF_FMOBJECT; - if FDataObj.GetData(FormatEtc, StgMedium) = S_OK then - begin - Result := TDropSource(StgMedium.HGLOBAL).Data; - Exit; - end; - end; - // files - str := ''; - FormatEtc.cfFormat := CF_HDROP; - if FDataObj.GetData(FormatEtc, StgMedium) = S_OK then - begin - try - Drop := HDrop(GlobalLock(StgMedium.HGLOBAL)); - { Replace Text } - numFiles := DragQueryFile(Drop, $FFFFFFFF, nil, 0); - SetLength(Result.Files, numFiles); - for I := 0 to numFiles - 1 do - begin - // Setting length of buffer plus 1 for string end char (#0) - buflen := DragQueryFile(Drop, I, nil, 0) + 1; - buffer := StrAlloc(buflen); - DragQueryFile(Drop, I, buffer, buflen); - Result.Files[I] := buffer; - StrDispose(buffer); - if I = 0 then - Result.Data := Result.Files[0]; - end; - finally - GlobalUnlock(StgMedium.HGLOBAL); - { Free the memory } - ReleaseStgMedium(StgMedium); - end; - Exit; - end; - // get text - FormatEtc.cfFormat := CF_UNICODETEXT; - if FDataObj.GetData(FormatEtc, StgMedium) = S_OK then - begin - try - { Lock the global memory handle to get a pointer to the data } - str := PChar(GlobalLock(StgMedium.HGLOBAL)); - Result.Data := str; - finally - { Finished with the pointer } - GlobalUnlock(StgMedium.HGLOBAL); - { Free the memory } - ReleaseStgMedium(StgMedium); - end; - Exit; - end; -end; - -function TWinDropTarget.DragEnter(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint; - var dwEffect: Longint): HRESULT; -var - Res: HRESULT; -begin - try - FDataObj := dataObj; - Result := S_OK; - dwEffect := DROPEFFECT_NONE; - if (Succeeded(CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IDropTargetHelper, - FDropTargetHelper))) and (FDropTargetHelper <> nil) then - begin - Res := FDropTargetHelper.DragEnter(FormToHWND(Form), dataObj, pt, dwEffect); - if (Failed(Res)) then - FDropTargetHelper := nil; - end; - except - dwEffect := DROPEFFECT_NONE; - Result := E_UNEXPECTED; - end; -end; - -function TWinDropTarget.DragOver(grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HRESULT; -var - P: TPointF; - Operation: TDragOperation; -begin - Result := E_UNEXPECTED; - try - dwEffect := DROPEFFECT_NONE; - P := PointF(pt.X, pt.Y); - Operation := TDragOperation.None; - Form.DragOver(GetDataObject, P, Operation); - case Operation of - TDragOperation.None: - dwEffect := DROPEFFECT_NONE; - TDragOperation.Move: - dwEffect := DROPEFFECT_MOVE; - TDragOperation.Copy: - dwEffect := DROPEFFECT_COPY; - TDragOperation.Link: - dwEffect := DROPEFFECT_LINK; - end; - - // do NOT translate the screen coordinates to form coordinates because - // it seems that the drop target helper needs screen coordinates - if FDropTargetHelper <> nil then - FDropTargetHelper.DragOver(pt, dwEffect); - Result := S_OK; - except - dwEffect := DROPEFFECT_NONE; - end; -end; - -function TWinDropTarget.DragLeave: HRESULT; -begin - Form.DragLeave; - if (FDropTargetHelper <> nil) then - FDropTargetHelper.DragLeave; - FDropTargetHelper := nil; - FDataObj := nil; - Result := S_OK; -end; - -function TWinDropTarget.Drop(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint; - var dwEffect: Longint): HRESULT; -var - P: TPointF; -begin - Result := S_OK; - try - if (dataObj = nil) then - Exit; - P := PointF(pt.X, pt.Y); - Form.DragDrop(GetDataObject, P); - // do NOT translate the screen coordinates to form coordinates because - // it seems that the drop target helper needs screen coordinates - if (FDropTargetHelper <> nil) then - FDropTargetHelper.Drop(dataObj, pt, dwEffect) - finally - FDataObj := nil; - FDropTargetHelper := nil; - end; -end; - -{ TDropSource } - -{ IDropSource } - -function TDropSource.QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: Integer): HRESULT; -var - ContinueDrop: Boolean; -begin - if fEscapePressed then - Result := DRAGDROP_S_CANCEL - else if (grfKeyState and (MK_LBUTTON or MK_RBUTTON) = 0) then - begin - ContinueDrop := True; - if ContinueDrop then - Result := DRAGDROP_S_DROP - else - Result := DRAGDROP_S_CANCEL; - end - else - Result := S_OK; -end; - -function TDropSource.GiveFeedback(dwEffect: Integer): HRESULT; -begin - Result := DRAGDROP_S_USEDEFAULTCURSORS; -end; - -{ IDataObject } - -function TDropSource.dAdvise(const FormatEtc: TFormatEtc; advf: Longint; const advsink: IAdviseSink; - out dwConnection: Longint): HRESULT; -begin - Result := OLE_E_ADVISENOTSUPPORTED; -end; - -function TDropSource.dUnadvise(dwConnection: Longint): HRESULT; -begin - Result := OLE_E_ADVISENOTSUPPORTED; -end; - -function TDropSource.EnumdAdvise(out EnumAdvise: IEnumStatData): HRESULT; -begin - Result := OLE_E_ADVISENOTSUPPORTED; -end; - -function TDropSource.EnumFormatEtc(dwDirection: Longint; out EnumFormatEtc: IEnumFormatEtc): HRESULT; -begin - if (dwDirection = DATADIR_GET) then - Result := OleRegEnumFormatEtc(IEnumFormatEtc, dwDirection, EnumFormatEtc) - else - Result := E_NOTIMPL; -end; - -function TDropSource.GetCanonicalFormatEtc(const FormatEtc: TFormatEtc; out FormatEtcout: TFormatEtc): HRESULT; -begin - Result := DATA_S_SAMEFORMATETC; -end; - -function TDropSource.EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; -begin - Result := (FormatEtc1.cfFormat = FormatEtc2.cfFormat) and (FormatEtc1.ptd = FormatEtc2.ptd) and - (FormatEtc1.dwAspect = FormatEtc2.dwAspect) and (FormatEtc1.lindex = FormatEtc2.lindex) and - (FormatEtc1.Tymed = FormatEtc2.Tymed) -end; - -function TDropSource.FindFormatEtc(TestFormatEtc: TFormatEtc): Integer; -var - I: Integer; - Found: Boolean; -begin - I := 0; - Found := False; - Result := -1; - while (I < Length(Formats)) and not Found do - begin - Found := EqualFormatEtc(Formats[I].FormatEtc, TestFormatEtc); - if Found then - Result := I; - Inc(I); - end -end; - -function TDropSource.HGlobalClone(HGLOBAL: THandle): THandle; -// Returns a global memory block that is a copy of the passed memory block. -var - Size: LongWord; - Data, NewData: PByte; -begin - Size := GlobalSize(HGLOBAL); - Result := GlobalAlloc(GPTR, Size); - Data := GlobalLock(HGLOBAL); - try - NewData := GlobalLock(Result); - try - Move(Data, NewData, Size); - finally - GlobalUnlock(Result); - end - finally - GlobalUnlock(HGLOBAL) - end -end; - -function TDropSource.RetrieveOwnedStgMedium(Format: TFormatEtc; var StgMedium: TStgMedium): HRESULT; -var - I: Integer; -begin - Result := E_INVALIDARG; - I := FindFormatEtc(Format); - if (I > -1) and Formats[I].OwnedByDataObject then - Result := StgMediumIncRef(Formats[I].StgMedium, StgMedium, False) -end; - -function TDropSource.StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; - CopyInMedium: Boolean): HRESULT; -begin - Result := S_OK; - // Simply copy all fields to start with. - OutStgMedium := InStgMedium; - case InStgMedium.Tymed of - TYMED_HGLOBAL: - begin - if CopyInMedium then - begin - // Generate a unique copy of the data passed - OutStgMedium.HGLOBAL := HGlobalClone(InStgMedium.HGLOBAL); - if OutStgMedium.HGLOBAL = 0 then - Result := E_OUTOFMEMORY - end - else - // Don't generate a copy just use ourselves and the copy previoiusly saved - MySTGMEDIUM(OutStgMedium).UnkForRelease := Pointer(Self as IDataObject) // Does increase RefCount - end; - TYMED_FILE: - begin - if CopyInMedium then - begin - OutStgMedium.lpszFileName := CoTaskMemAlloc(lstrLenW(InStgMedium.lpszFileName)); - // !! StrCopyW(PChar(OutStgMedium.lpszFileName), PChar(InStgMedium.lpszFileName)) - end - else - MySTGMEDIUM(OutStgMedium).UnkForRelease := Pointer(Self as IDataObject) // Does increase RefCount - end; - TYMED_ISTREAM: - - IUnknown(MySTGMEDIUM(OutStgMedium).stm)._AddRef; - TYMED_ISTORAGE: - IUnknown(MySTGMEDIUM(OutStgMedium).stg)._AddRef; - TYMED_GDI: - if not CopyInMedium then - MySTGMEDIUM(OutStgMedium).UnkForRelease := Pointer(Self as IDataObject) - // Does not increase RefCount - else - Result := DV_E_TYMED; // Don't know how to copy GDI objects right now - TYMED_MFPICT: - if not CopyInMedium then - MySTGMEDIUM(OutStgMedium).UnkForRelease := Pointer(Self as IDataObject) - // Does not increase RefCount - else - Result := DV_E_TYMED; - // Don't know how to copy MetaFile objects right now - TYMED_ENHMF: - if not CopyInMedium then - MySTGMEDIUM(OutStgMedium).UnkForRelease := Pointer(Self as IDataObject) - // Does not increase RefCount - else - Result := DV_E_TYMED; - // Don't know how to copy enhanced metafiles objects right now - else - Result := DV_E_TYMED - end; - - // I still have to do this. The Compiler will call _Release on the above Self as IDataObject - // casts which is not what is necessary. The DataObject is released correctly. - if (MySTGMEDIUM(OutStgMedium).UnkForRelease <> nil) and (Result = S_OK) then - IUnknown(MySTGMEDIUM(OutStgMedium).UnkForRelease)._AddRef -end; - -function TDropSource.GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HRESULT; -var - Global: Cardinal; - P: Pointer; - TextData: string; - B: TBitmap; - BitmapHandle: HBITMAP; -begin - FillChar(Medium, SizeOf(Medium), 0); - Result := DV_E_FORMATETC; - if QueryGetData(FormatEtcIn) <> S_OK then - Exit; - - case FormatEtcIn.cfFormat of - CF_UNICODETEXT: - begin - TextData := Data.Data.ToString; - Global := GlobalAlloc(0, (Length(TextData) + 1) * 2); - P := GlobalLock(Global); - try - Move(PChar(TextData)^, P^, GlobalSize(Global)); - finally - GlobalUnlock(Global); - end; - Medium.Tymed := TYMED_HGLOBAL; - Medium.HGLOBAL := Global; - Result := S_OK; - end; - CF_BITMAP: - begin - BitmapHandle := 0; - if Data.Data.IsType then - BitmapHandle := BitmapToWinBitmap(TBitmap(Data.Data.AsObject), TAlphaColorRec.White) - else if Data.Data.IsType then - begin - B := TBitmap.Create; - try - B.Assign(TBitmapSurface(Data.Data.AsObject)); - BitmapHandle := BitmapToWinBitmap(B, TAlphaColorRec.White); - finally - B.Free; - end; - end; - if BitmapHandle <> 0 then - begin - Medium.Tymed := TYMED_GDI; - Medium.HBITMAP := BitmapHandle; - Result := S_OK; - end; - end; - CF_FMOBJECT: - if PlatformWin.FDragAndDropActive then - begin - Medium.Tymed := TYMED_HGLOBAL; - Medium.HGLOBAL := THandle(Self); - Result := S_OK; - end; - end; - if (Result <> S_OK) and (Formats <> nil) then - begin - Result := QueryGetData(FormatEtcIn); - if (Result = S_OK) and (RetrieveOwnedStgMedium(FormatEtcIn, Medium) = E_INVALIDARG) then - Result := E_UNEXPECTED - end -end; - -function TDropSource.GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HRESULT; -begin - Result := E_NOTIMPL; -end; - -function TDropSource.QueryGetData(const FormatEtc: TFormatEtc): HRESULT; -var - I: Integer; -begin - Result := DV_E_FORMATETC; - case FormatEtc.cfFormat of - CF_UNICODETEXT: - if not Data.Data.IsObject then - Result := S_OK; - CF_BITMAP: - if Data.Data.IsObject and (Data.Data.IsType or Data.Data.IsType) then - Result := S_OK; - CF_FMOBJECT: - if PlatformWin.FDragAndDropActive then - Result := S_OK; - end; - if Result <> S_OK then - begin - if Formats <> nil then - begin - I := 0; - Result := DV_E_FORMATETC; - while (I < Length(Formats)) and (Result = DV_E_FORMATETC) do - begin - if Formats[I].FormatEtc.cfFormat = FormatEtc.cfFormat then - begin - if (Formats[I].FormatEtc.dwAspect = FormatEtc.dwAspect) then - begin - if (Formats[I].FormatEtc.Tymed and FormatEtc.Tymed <> 0) then - Result := S_OK - else - Result := DV_E_TYMED; - end - else - Result := DV_E_DVASPECT; - end - else - Result := DV_E_FORMATETC; - Inc(I) - end - end - else - Result := E_UNEXPECTED; - end; -end; - -function TDropSource.CanonicalIUnknown(const TestUnknown: IUnknown): IUnknown; -// Uses COM object identity: An explicit call to the IUnknown::QueryInterface -// method, requesting the IUnknown interface, will always return the same -// pointer. -begin - if TestUnknown <> nil then - begin - if Supports(TestUnknown, IUnknown, Result) then - IUnknown(Result)._Release - // Don't actually need it just need the pointer value - else - Result := TestUnknown - end - else - Result := TestUnknown -end; - -function TDropSource.SetData(const FormatEtc: TFormatEtc; var Medium: TStgMedium; fRelease: BOOL): HRESULT; -var - Index: Integer; -begin - // See if we already have a format of that type available. - Index := FindFormatEtc(FormatEtc); - if Index > -1 then - begin - // Yes we already have that format type stored. Just use the TClipboardFormat - // in the List after releasing the data - ReleaseStgMedium(Formats[Index].StgMedium); - FillChar(Formats[Index].StgMedium, SizeOf(Formats[Index].StgMedium), #0); - end - else - begin - // It is a new format so create a new TDataObjectInfo record and store it in - // the Format array - SetLength(Formats, Length(Formats) + 1); - Formats[Length(Formats) - 1].FormatEtc := FormatEtc; - Index := Length(Formats) - 1; - end; - // The data is owned by the TClipboardFormat object - Formats[Index].OwnedByDataObject := True; - - if fRelease then - begin - // We are simply being given the data and we take control of it. - Formats[Index].StgMedium := Medium; - Result := S_OK - end - else - // We need to reference count or copy the data and keep our own references - // to it. - Result := StgMediumIncRef(Medium, Formats[Index].StgMedium, True); - - // Can get a circular reference if the client calls GetData then calls - // SetData with the same StgMedium. Because the unkForRelease and for - // the IDataObject can be marshalled it is necessary to get pointers that - // can be correctly compared. - // See the IDragSourceHelper article by Raymond Chen at MSDN. - if MySTGMEDIUM(Formats[Index].StgMedium).UnkForRelease <> nil then - begin - if CanonicalIUnknown(Self) = CanonicalIUnknown(IUnknown(MySTGMEDIUM(Formats[Index].StgMedium).UnkForRelease)) then - begin - IUnknown(MySTGMEDIUM(Formats[Index].StgMedium).UnkForRelease)._Release; - MySTGMEDIUM(Formats[Index].StgMedium).UnkForRelease := nil - end; - end; -end; - -{ Platform DragDrop } - -procedure TPlatformWin.AddRecognizer(const ARec: TInteractiveGesture; const AForm: TCommonCustomForm); -begin - Include(FEnabledInteractiveGestures, ARec); -end; - -procedure TPlatformWin.BeginDragDrop(AForm: TCommonCustomForm; const Data: TDragObject; ABitmap: TBitmap); -var - DropSource: TDropSource; - DropEffect: Longint; - DragSourceHelper: IDragSourceHelper; - SHDRAGIMAGE: TSHDRAGIMAGE; - DragMousePos, Offset: TPointF; - Control: IControl; -begin - DropSource := TDropSource.Create(nil); - try - DropSource.Data := Data; - - DragMousePos := GetMousePos; - // CoCreateInstance takes too long to execute so mouse position becomes different when called later - if (Succeeded(CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IDragSourceHelper, DragSourceHelper) - )) - and (DragSourceHelper <> nil) then - begin - if Data.Source is TControl then - Offset := TControl(Data.Source).AbsoluteToLocal(AForm.ScreenToClient(DragMousePos)) - else - Offset := PointF((ABitmap.Width div 2), ABitmap.Height div 2); - - FillChar(SHDRAGIMAGE, SizeOf(SHDRAGIMAGE), 0); - SHDRAGIMAGE.sizeDragImage.cx := ABitmap.Width; - SHDRAGIMAGE.sizeDragImage.cy := ABitmap.Height; - SHDRAGIMAGE.ptOffset.X := Round(Offset.X); - SHDRAGIMAGE.ptOffset.Y := Round(Offset.Y); - SHDRAGIMAGE.hbmpDragImage := BitmapToWinBitmap(ABitmap, True); - if not Succeeded(DragSourceHelper.InitializeFromBitmap(@SHDRAGIMAGE, DropSource)) then - DeleteObject(SHDRAGIMAGE.hbmpDragImage); - end; - - if not IsThemeActive then - begin - SetCursor(crDrag); - FDragAndDropActive := True; - try - DoDragDrop(DropSource, DropSource, DROPEFFECT_LINK or DROPEFFECT_COPY or DROPEFFECT_MOVE, DropEffect); - finally - FDragAndDropActive := False; - SetCursor(crDefault); - end; - end - else - try - FDragAndDropActive := True; - DoDragDrop(DropSource, DropSource, DROPEFFECT_LINK or DROPEFFECT_COPY or DROPEFFECT_MOVE, DropEffect); - finally - FDragAndDropActive := False; - end; - - if (DropEffect = 0) and Supports(Data.Source, IControl, Control) then - Control.DragEnd; - - if DragSourceHelper <> nil then - DragSourceHelper := nil; - finally - DropSource.Free; - end; -end; - -{ Mouse } - -procedure TPlatformWin.SetCursor(const ACursor: TCursor); -const - CustomCursorMap: array [crSizeAll .. crNone] of PChar = ( - nil, nil, nil, nil, nil, IDC_SQLWAIT, IDC_MULTIDRAG, nil, nil, IDC_NODROP, IDC_DRAG, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil); -const - CursorMap: array [crSizeAll .. crNone] of PChar = ( - IDC_SIZEALL, IDC_HAND, IDC_HELP, IDC_APPSTARTING, IDC_NO, nil, nil, IDC_SIZENS, IDC_SIZEWE, nil, nil, IDC_WAIT, - IDC_UPARROW, IDC_SIZEWE, IDC_SIZENWSE, IDC_SIZENS, IDC_SIZENESW, IDC_SIZEALL, IDC_IBEAM, IDC_CROSS, IDC_ARROW, nil); -var - NewCursor: HCURSOR; -begin - if not FDragAndDropActive then - begin - // We don't set cursor by default, when we create window. So we should use crArrow cursor by default. - if (ACursor = crDefault) and not (csDesigning in Application.ComponentState) then - FCursor := crArrow - else - FCursor := ACursor; - - if FCursor < 0 then - begin - if CustomCursorMap[FCursor] <> nil then - NewCursor := LoadCursorW(HInstance, CustomCursorMap[FCursor]) - else - NewCursor := LoadCursorW(0, CursorMap[FCursor]); - Winapi.Windows.SetCursor(NewCursor); - end; - end; -end; - -function TPlatformWin.GetCursor: TCursor; -begin - Result := FCursor; -end; - -function TPlatformWin.GetFullScreen(const AForm: TCommonCustomForm): Boolean; -var - LFSParam: TFullScreenParams; -begin - Result := False; - if FFullScreenSupport.TryGetValue(AForm, LFSParam) then - Result := LFSParam.IsFullScreen; -end; - -function TPlatformWin.GetImmManager(const Index: TCommonCustomForm): TImmManager; -begin - Result := FImmManagers[Index]; -end; - -procedure TPlatformWin.SetFullScreen(const AForm: TCommonCustomForm; - const AValue: Boolean); -var - LFSParam: TFullScreenParams; - LClean: TFullScreenParams; -begin - RaiseIfNil(AForm, 'AForm'); - - if AValue and not (TFmxFormState.Showing in AForm.FormState) then - AForm.Visible := True; - FillChar(LFSParam, SizeOf(LFSParam), 0); - if not FFullScreenSupport.TryGetValue(AForm, LFSParam) then - FFullScreenSupport.Add(AForm, LFSParam); - if AValue and (AForm.Visible or (TFmxFormState.Showing in AForm.FormState)) then - begin - LFSParam.WindowState := AForm.WindowState; - LFSParam.BorderStyle := AForm.BorderStyle; - if AForm.WindowState = TWindowState.wsNormal then - begin - LFSParam.Size := Point(AForm.Width, AForm.Height); - LFSParam.Position := Point(AForm.Left, AForm.Top); - end; - FFullScreenSupport.Items[AForm] := LFSParam; - if AForm.WindowState = TWindowState.wsMinimized then - AForm.WindowState := TWindowState.wsMaximized; - AForm.BorderStyle := TFmxFormBorderStyle.None; - AForm.WindowState := TWindowState.wsMaximized; - end - else - begin - LClean := LFSParam; - LClean.Clean; - FFullScreenSupport.Items[AForm] := LClean; - if (LFSParam.Size.X > 0) and (LFSParam.Size.Y > 0) then - begin - AForm.BorderStyle := LFSParam.BorderStyle; - AForm.SetBounds(LFSParam.Position.X, LFSParam.Position.Y, LFSParam.Size.X, LFSParam.Size.Y); - AForm.WindowState := LFSParam.WindowState; - end; - end; -end; - -procedure TPlatformWin.SetShowFullScreenIcon(const AForm: TCommonCustomForm; const AValue: Boolean); -begin -end; - -function TPlatformWin.GetMousePos: TPointF; -var - P: TPoint; -begin - GetCursorPos(P); - Result := PointF(P.X, P.Y); -end; - -{ Screen } - -function TPlatformWin.GetScreenSize: TPointF; -var - WR: TRect; -begin - Winapi.Windows.GetWindowRect(GetDesktopWindow, WR); - Result := PointF(WR.Right, WR.Bottom); -end; - -function TPlatformWin.GetScreenScale: Single; -var - DC: HDC; -begin - DC := GetDC(0); - try - Result := GetDCScale(DC); - finally - ReleaseDC(0, DC); - end; -end; - -function TPlatformWin.GetScreenOrientation: TScreenOrientation; -begin - Result := TScreenOrientation.Landscape; -end; - -procedure TPlatformWin.SetSupportedScreenOrientations(const AOrientations: TScreenOrientations); -begin - // Not needed for Windows -end; - -{ IFMXDeviceService } - -function TPlatformWin.GetFeatures: TDeviceFeatures; -var - Value: Integer; -begin - Value := GetSystemMetrics(SM_DIGITIZER); - if ((Value and NID_READY) = NID_READY) and (((Value and NID_MULTI_INPUT) = NID_MULTI_INPUT)) then - Result := [TDeviceFeature.HasTouchScreen] - else - Result := []; -end; - -function TPlatformWin.GetFirstWeekday: Byte; -const - MondayOffset = 1; -var - buffer: DWORD; -begin - // On Windows zero index corresponds to Monday, so we need to add offset to match DayMonday = 1 in RTL - if GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_IFIRSTDAYOFWEEK, @buffer, SizeOf(buffer) div SizeOf(Char)) > 0 then - Result := buffer - Ord('0') + MondayOffset - else - Result := DayMonday; -end; - -function TPlatformWin.GetModel: string; -begin - Result := ''; -end; - -function TPlatformWin.GetDeviceClass: TDeviceInfo.TDeviceClass; -begin - if (GetSystemMetrics(SM_TABLETPC) <> 0) and (GetSystemMetrics(SM_DIGITIZER) and NID_MULTI_INPUT = NID_MULTI_INPUT) - then - Result := TDeviceInfo.TDeviceClass.Tablet - else - Result := TDeviceInfo.TDeviceClass.Desktop; -end; - -{ IFMXSystemInformationService } - -function TPlatformWin.GetScrollingBehaviour: TScrollingBehaviours; -var - Value: Integer; -begin - Value := GetSystemMetrics(SM_DIGITIZER); - if ((Value and NID_READY) = NID_READY) and (((Value and NID_MULTI_INPUT) = NID_MULTI_INPUT)) then - Result := [TScrollingBehaviour.Animation, TScrollingBehaviour.TouchTracking] - else - Result := []; -end; - -function TPlatformWin.GetMinScrollThumbSize: Single; -begin - Result := 15; -end; - -function TPlatformWin.GetMenuShowDelay: Integer; -begin - if SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, @Result, 0) then - Result := Result div 2 - else - Result := 0; -end; - -function TPlatformWin.GetCurrentLangID: string; -var - buffer: MarshaledString; - UserLCID: LCID; - buflen: Integer; -begin - // defaults - UserLCID := GetUserDefaultLCID; - buflen := GetLocaleInfo(UserLCID, LOCALE_SISO639LANGNAME, nil, 0); - buffer := StrAlloc(buflen); - if GetLocaleInfo(UserLCID, LOCALE_SISO639LANGNAME, buffer, buflen) <> 0 then - Result := buffer - else - Result := 'en'; - StrDispose(buffer); -end; - -function TPlatformWin.GetDefaultFontFamilyName: string; -begin - if TOSVersion.Check(6) then - Result := 'Segoe UI' - else - Result := 'Tahoma'; -end; - -function TPlatformWin.GetDefaultFontSize: Single; -begin - Result := DefaultWindowsFontSize; -end; - -function TPlatformWin.GetDefaultSize(const AComponent: TComponentKind): TSize; -begin - if AComponent = TComponentKind.Calendar then - Result := TSize.Create(202, 180) - else - Result := TSize.Create(80, 22); -end; - -function TPlatformWin.GetLocaleFirstDayOfWeek: string; -var - buffer: DWORD; -begin - GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_IFIRSTDAYOFWEEK, @buffer, SizeOf(buffer) div SizeOf(Char)); - Result := Chr(buffer); -end; - -function TPlatformWin.FindForm(const AHandle: TWindowHandle): TCommonCustomForm; -begin - RaiseIfNil(AHandle, 'AHandle'); - - if AHandle is TWinWindowHandle then - Result := TWinWindowHandle(AHandle).Form - else - Result := nil; -end; - -procedure TPlatformWin.Log(const AFormat: string; const AParams: array of const); -begin - if Length(AParams) = 0 then - OutputDebugString(PChar(AFormat)) - else - OutputDebugString(PChar(Format(AFormat, AParams))); -end; - -function TPlatformWin.GetListingHeaderBehaviors: TListingHeaderBehaviors; -begin - Result := []; -end; - -function TPlatformWin.GetListingSearchFeatures: TListingSearchFeatures; -begin - Result := [TListingSearchFeature.StayOnTop]; -end; - -function TPlatformWin.GetListingTransitionFeatures: TListingTransitionFeatures; -begin - Result := []; -end; - -function TPlatformWin.GetListingEditModeFeatures: TListingEditModeFeatures; -begin - Result := []; -end; - -function TPlatformWin.GetSaveStateFileName(const ABlockName: string): string; -const - Prefix = '~'; - Separator = '_'; -var - S: TStringBuilder; - FilePath: string; -begin - if FSaveStateStoragePath.IsEmpty then - FilePath := TPath.GetTempPath - else - FilePath := FSaveStateStoragePath; - S := TStringBuilder.Create(FilePath.Length + Length(Prefix) + Length(Separator) + ABlockName.Length); - try - S.Append(FilePath); - S.Append(Prefix); - S.Append(ChangeFileExt(ExtractFileName(ParamStr(0)), '')); - S.Append(Separator); - S.Append(ABlockName); - Result := S.ToString(True); - finally - S.Free; - end; -end; - -function TPlatformWin.GetSaveStateBlock(const ABlockName: string; const ABlockData: TStream): Boolean; - - procedure ReadPersistent(const AFileName: string); - var - S: TFileStream; - begin - S := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite); - try - ABlockData.CopyFrom(S, S.Size); - finally - S.Free; - end; - end; - -var - LFileName: string; -begin - if ABlockName.IsEmpty or (ABlockData = nil) then - Exit(False); - LFileName := GetSaveStateFileName(ABlockName); - if not TFile.Exists(LFileName) then - Exit(False); - try - ReadPersistent(LFileName); - except - Exit(False); - end; - Result := True; -end; - -function TPlatformWin.SetSaveStateBlock(const ABlockName: string; const ABlockData: TStream): Boolean; - - procedure WritePersistent(const AFileName: string); - var - S: TFileStream; - begin - S := TFileStream.Create(AFileName, fmCreate or fmShareExclusive); - try - ABlockData.Seek(0, TSeekOrigin.soBeginning); - S.CopyFrom(ABlockData, ABlockData.Size); - finally - S.Free; - end; - end; - -var - LFileName: string; -begin - if ABlockName.IsEmpty then - Exit(False); - LFileName := GetSaveStateFileName(ABlockName); - if (ABlockData = nil) or (ABlockData.Size < 1) then - begin - if TFile.Exists(LFileName) then - TFile.Delete(LFileName); - end - else - try - WritePersistent(LFileName); - except - Exit(False); - end; - Result := True; -end; - -function TPlatformWin.GetSaveStateStoragePath: string; -begin - Result := FSaveStateStoragePath; -end; - -procedure TPlatformWin.SetSaveStateStoragePath(const ANewPath: string); -begin - if not ANewPath.IsEmpty then - FSaveStateStoragePath := IncludeTrailingPathDelimiter(ANewPath) - else - FSaveStateStoragePath := ''; -end; - -function TPlatformWin.GetSaveStateNotifications: Boolean; -begin - Result := False; -end; - -function TPlatformWin.GetDisplayMetrics: TDeviceDisplayMetrics; -var - R: TRect; -begin - Winapi.Windows.GetWindowRect(GetDesktopWindow, R); - Result.PhysicalScreenSize := TSize.Create(R.Width, R.Height); - Result.RawScreenSize := Result.PhysicalScreenSize; - Result.LogicalScreenSize := Result.PhysicalScreenSize; - if Result.PhysicalScreenSize.cx > 0 then - Result.AspectRatio := Result.PhysicalScreenSize.cy / Result.PhysicalScreenSize.cx - else - Result.AspectRatio := 1; - Result.PixelsPerInch := 96; // Windows Default - Result.ScreenScale := 1; - Result.FontScale := 1; -end; - -function TPlatformWin.RegisterKeyMapping(const PlatformKey, VirtualKey: Word; const KeyKind: TKeyKind): Boolean; -begin - Result := FKeyMapping.RegisterKeyMapping(PlatformKey, VirtualKey, KeyKind); -end; - -function TPlatformWin.UnregisterKeyMapping(const PlatformKey: Word): Boolean; -begin - Result := FKeyMapping.UnregisterKeyMapping(PlatformKey); -end; - -function TPlatformWin.PlatformKeyToVirtualKey(const PlatformKey: Word; var KeyKind: TKeyKind): Word; -begin - Result := FKeyMapping.PlatformKeyToVirtualKey(PlatformKey, KeyKind); -end; - -function TPlatformWin.VirtualKeyToPlatformKey(const VirtualKey: Word): Word; -begin - Result := FKeyMapping.VirtualKeyToPlatformKey(VirtualKey); -end; - -procedure RegisterApplicationHWNDProc(const Proc: TApplicationHWNDProc); -begin - if PlatformWin <> nil then - PlatformWin.ApplicationHWNDProc := Proc - else - raise EArgumentNilException.Create(SArgumentNil); -end; - -{ TVirtualKeyboardWin } - -constructor TVirtualKeyboardWin.Create; -var - L: Integer; - S: string; - HID: HKey; -begin - S := ''; - inherited Create; - SetLength(S, MAX_PATH); - L := GetSystemDirectory(PChar(S), MAX_PATH); - SetLength(S, L); - FPath := S; - FExeName := 'osk.exe'; - FWndClassName := 'OSKMainClass'; - FKBPresent := True; - if not TOSVersion.Check(6, 2) then - begin - if Winapi.Windows.RegOpenKeyEx(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Enum', 0, KEY_READ, - HID) = ERROR_SUCCESS then - try - S := FindKeyValue(HID, 'ClassGUID', '{4D36E96B-E325-11CE-BFC1-08002BE10318}', 'Control', - 'ActiveService'); - FKBPresent := S <> ''; - finally - RegCloseKey(HID); - end; - end; - FNewvkbState := vkbState; - StartTimerLang; -end; - -procedure TVirtualKeyboardWin.Clear; -var - H: HWND; -begin - H := vkbHandle; - if (H <> 0) and (FInst > 32) then - begin - PostMessage(H, WM_SYSCOMMAND, SC_CLOSE, 0); - end; - KillTimerVisible; - KillTimerLang; - FInst := 0; - FError := False; - FLastTime := 0; - FLastHandle := 0; -end; - -destructor TVirtualKeyboardWin.Destroy; -begin - Clear; - inherited; -end; - -function TVirtualKeyboardWin.FindKeyValue(const Key: HKey; const Name, Value, SubKeyName, SubValueName: string): string; -var - Buf, Val: string; - R, I, J: Integer; - SubKey: HKey; - BufSize, T, ValSize: Cardinal; -begin - Result := ''; - I := 0; - Buf := ''; - Val := ''; - BufSize := 2048; - SetLength(Buf, BufSize); - ValSize := BufSize; - SetLength(Val, ValSize); - repeat - BufSize := Length(Buf); - ValSize := Length(Val); - R := Winapi.Windows.RegEnumValue(Key, I, @Buf[1], BufSize, nil, @T, @Val[1], @ValSize); - if (R = ERROR_SUCCESS) then - begin - if (string(PChar(Buf)) = Name) and (T = REG_SZ) and (SameText(string(PChar(Val)), Value)) then - begin - if Winapi.Windows.RegOpenKeyEx(Key, PChar(SubKeyName), 0, KEY_READ, SubKey) = ERROR_SUCCESS - then - try - J := 0; - repeat - BufSize := Length(Buf); - ValSize := Length(Val); - R := Winapi.Windows.RegEnumValue(SubKey, J, @Buf[1], BufSize, nil, @T, @Val[1], - @ValSize); - if (R = ERROR_SUCCESS) and (string(PChar(Buf)) = SubValueName) and (T = REG_SZ) and - (string(PChar(Val)) <> '') then - begin - Result := string(PChar(Val)); - end; - Inc(J); - until (Result <> '') or (R <> ERROR_SUCCESS); - finally - RegCloseKey(SubKey); - end; - end; - Inc(I); - end; - until (Result <> '') or (R <> ERROR_SUCCESS); - if Result = '' then - begin - I := 0; - repeat - R := Winapi.Windows.RegEnumKey(Key, I, PChar(Buf), BufSize); - if R = ERROR_SUCCESS then - begin - if Winapi.Windows.RegOpenKeyEx(Key, PChar(Buf), 0, KEY_READ, SubKey) = ERROR_SUCCESS then - try - Result := FindKeyValue(SubKey, Name, Value, SubKeyName, SubValueName); - finally - RegCloseKey(SubKey); - end; - Inc(I); - end; - until (Result <> '') or (R <> ERROR_SUCCESS); - end; -end; - -function TVirtualKeyboardWin.GetVirtualKeyboardState: TVirtualKeyboardStates; -var - LState: TvkbState; -begin - if FError then - Result := [TVirtualKeyboardState.Error] - else - Result := []; - if IsAutoShow then - Result := Result + [TVirtualKeyboardState.AutoShow]; - if not FError then - begin - if Abs(Now - FLastTime) > 1 / SecsPerDay then - LState := vkbState - else - LState := FLastvkbState; - if LState = TvkbState.Shown then - Result := Result + [TVirtualKeyboardState.Visible]; - end; -end; - -function TVirtualKeyboardWin.GetVKBounds: TRect; -begin - if FLastHandle <> 0 then - GetWindowRect(FLastHandle, Result); -end; - -function TVirtualKeyboardWin.HideVirtualKeyboard: Boolean; -begin - Result := not FError; - if (not FError) then - begin - if IsAutoShow then - FNewvkbState := TvkbState.Hidden - else - FNewvkbState := TvkbState.None; - if FNewvkbState <> vkbState then - begin - StartTimerVisible; - end; - end; -end; - -procedure TVirtualKeyboardWin.SetTransientState(Value: Boolean); -begin -end; - -function TVirtualKeyboardWin.ShowVirtualKeyboard(const AControl: TFmxObject): Boolean; -var - Root: IRoot; -begin - Result := not FError; - if (not FError) then - begin - FNewvkbState := TvkbState.Shown; - if FNewvkbState <> vkbState then - StartTimerVisible; - FWait := True; - FFormHandle := 0; - if (AControl <> nil) then - begin - Root := AControl.Root; - if (Root <> nil) and (Root.GetObject is TCommonCustomForm) then - FFormHandle := FormToHWND(TCommonCustomForm(Root.GetObject)); - end; - end; -end; - -function TVirtualKeyboardWin.IsAutoShow: Boolean; -begin - Result := (VKAutoShowMode = TVKAutoShowMode.Always) or ((VKAutoShowMode = TVKAutoShowMode.DefinedBySystem) and - (not FKBPresent)); -end; - -procedure TVirtualKeyboardWin.KillTimerLang; -begin - if FHTmerLang <> 0 then - begin - if (FTimerService <> nil) or - TPlatformServices.Current.SupportsPlatformService(IFMXTimerService, FTimerService) then - begin - FTimerService.DestroyTimer(FHTmerLang); - FHTmerLang := 0; - end - else - raise EUnsupportedPlatformService.Create('IFMXTimerService'); - end; -end; - -procedure TVirtualKeyboardWin.StartTimerLang; -begin - if FHTmerLang = 0 then - begin - if (FTimerService <> nil) or - TPlatformServices.Current.SupportsPlatformService(IFMXTimerService, FTimerService) then - begin - FHTmerLang := FTimerService.CreateTimer(250, TimerLangProc); - end - else - raise EUnsupportedPlatformService.Create('IFMXTimerService'); - end; -end; - -procedure TVirtualKeyboardWin.TimerLangProc; -var - LCodeKeyboard: HKL; -begin - if FStepActivate > 0 then - begin - FLastHandle := vkbHandle; - case FStepActivate of - 1: - begin - SetActiveWindow(FLastHandle); - SetFocus(FLastHandle); - end; - 4: - begin - SetActiveWindow(FFormHandle); - end; - 5: - begin - SetFocus(FFormHandle); - FCodeKeyboard := GetKeyboardLayout(0); - end; - end; - if FStepActivate = 5 then - FStepActivate := 0 - else - begin - Inc(FStepActivate); - Exit; - end; - end - else - begin - if vkbState = TvkbState.Shown then - begin - LCodeKeyboard := GetKeyboardLayout(0); - if FCodeKeyboard <> LCodeKeyboard then - begin - SetActiveWindow(0); - SetActiveWindow(FFormHandle); - SetFocus(FFormHandle); - FCodeKeyboard := LCodeKeyboard; - end; - end; - end; -end; - -procedure TVirtualKeyboardWin.KillTimerVisible; -begin - if FHTmerVisible <> 0 then - begin - if (FTimerService <> nil) or - TPlatformServices.Current.SupportsPlatformService(IFMXTimerService, FTimerService) then - begin - FTimerService.DestroyTimer(FHTmerVisible); - FHTmerVisible := 0; - end - else - raise EUnsupportedPlatformService.Create('IFMXTimerService'); - end; -end; - -procedure TVirtualKeyboardWin.StartTimerVisible; -begin - if FHTmerVisible = 0 then - begin - if (FTimerService <> nil) or - TPlatformServices.Current.SupportsPlatformService(IFMXTimerService, FTimerService) then - begin - FHTmerVisible := FTimerService.CreateTimer(100, TimerVisibleProc); - end - else - raise EUnsupportedPlatformService.Create('IFMXTimerService'); - end; -end; - -procedure TVirtualKeyboardWin.TimerVisibleProc; -var - LState: TvkbState; - procedure Quit; - begin - if FLastHandle <> 0 then - PostMessage(FLastHandle, WM_SYSCOMMAND, SC_CLOSE, 0); - Sleep(40); - FLastHandle := 0; - TMessageManager.DefaultManager.SendMessage(Self, TVKStateChangeMessage.Create(False, TRect.Empty), True); - end; - procedure Restore; - begin - if FLastHandle <> 0 then - begin - if Winapi.Windows.GetActiveWindow <> FLastHandle then - begin - SendMessage(FLastHandle, WM_SYSCOMMAND, SC_RESTORE, 0); - TMessageManager.DefaultManager.SendMessage(Self, TVKStateChangeMessage.Create(True, GetVKBounds), True); - end; - end; - end; - procedure Hide; - begin - if FLastHandle <> 0 then - PostMessage(FLastHandle, WM_SYSCOMMAND, SC_CLOSE, 0); - FWait := True; - FLastHandle := 0; - TMessageManager.DefaultManager.SendMessage(Self, TVKStateChangeMessage.Create(False, TRect.Empty), True); - end; - -begin - if FWait then - begin - FLastHandle := vkbHandle; - FWait := False; - Exit; - end; - FWait := True; - LState := vkbState; - if LState <> FNewvkbState then - begin - case LState of - TvkbState.None: - case FNewvkbState of - TvkbState.Hidden: { none } - ; - TvkbState.Shown: - begin - vkbExecute(FFormHandle); - FWait := False; - FStepActivate := 1; - Exit; - end; - end; - TvkbState.Hidden: - case FNewvkbState of - TvkbState.None: - Quit; - TvkbState.Shown: - Restore; - end; - TvkbState.Shown: - case FNewvkbState of - TvkbState.None: - Quit; - TvkbState.Hidden: - Hide; - end; - end; - FNewvkbState := vkbState; - end - else if (FNewvkbState = TvkbState.Shown) and (FStepActivate = 1) then - // Here we are sending a deferred message, otherwise there will be incorrect coordinates - TMessageManager.DefaultManager.SendMessage(Self, TVKStateChangeMessage.Create(True, GetVKBounds), True); - KillTimerVisible; -end; - -procedure TVirtualKeyboardWin.vkbExecute(FormHandle: HWND); - - function IsFileExisted(const AFileName: string): Boolean; - begin - if FileExists(AFileName) then - Exit(True); - - TWow64Redirection.Current.Disable; - try - Result := FileExists(AFileName); - finally - TWow64Redirection.Current.Restore; - end; - end; - - function LaunchVirtualKeyboardApp(const AFileName: string): HINST; - begin - TWow64Redirection.Current.Disable; - try - Result := ShellExecute(FormHandle, 'open', PChar(AFileName), nil, PChar(ExtractFileDir(AFileName)), SW_SHOWNOACTIVATE); - finally - TWow64Redirection.Current.Restore; - end; - end; - - function WaitLaunchingVirtualKeyboardApp: Boolean; - const - StepPause = 40; //msec - MaxAttemptsCount = 100; - var - AttemptsCount: Integer; - begin - AttemptsCount := 0; - while (AttemptsCount < MaxAttemptsCount) and (vkbState = TvkbState.None) do - begin - Inc(AttemptsCount); - Sleep(StepPause); - end; - Result := AttemptsCount < MaxAttemptsCount; - end; - -var - VKAppFileName: string; - H: HWND; -begin - if FError then - Exit; - H := vkbHandle; - if H = 0 then - begin - VKAppFileName := TPath.Combine(Path, ExeName); - - if IsFileExisted(VKAppFileName) then - FInst := LaunchVirtualKeyboardApp(VKAppFileName) - else - FInst := 0; - - if FInst <= 32 then - FError := True - else if not WaitLaunchingVirtualKeyboardApp then - begin - FInst := 0; - FError := True; - end; - end; -end; - -function TVirtualKeyboardWin.vkbHandle: HWND; -begin - Result := Winapi.Windows.FindWindow(PChar(FWndClassName), nil); -end; - -function TVirtualKeyboardWin.vkbState: TvkbState; -var - H: HWND; -begin - H := vkbHandle; - if (H <> INVALID_HANDLE_VALUE) and (H <> 0) then - begin - if (not IsWindowVisible(H)) or (IsIconic(H)) then - Result := TvkbState.Hidden - else - Result := TvkbState.Shown; - FLastHandle := H; - end - else - begin - Result := TvkbState.None; - FLastHandle := 0; - end; - FLastvkbState := Result; - FLastTime := Now; -end; - -{ TMultiDisplayWin.TDisplayWin } - -constructor TMultiDisplayWin.TDisplayWin.Create(const AIndex: Integer; const APrimary: Boolean; const ABounds, - AWorkArea: TRect; const AHandle: HMONITOR); -begin - Display := TDisplay.Create(AIndex, APrimary, ABounds, AWorkArea); - Handle := AHandle; -end; - -{ TMultiDisplayWin } - -destructor TMultiDisplayWin.Destroy; -begin - FDisplayList.Free; - inherited; -end; - -function TMultiDisplayWin.GetDisplayCount: Integer; -begin - if FDisplayCount <= 0 then - FDisplayCount := GetSystemMetrics(SM_CMONITORS); - Result := FDisplayCount; -end; - -function TMultiDisplayWin.GetDesktopCenterRect(const Size: TSize): TRect; - function PointOutOfDisplay(const P: TPoint): Boolean; - var - I: Integer; - begin - for I := 0 to GetDisplayCount - 1 do - if PtInRect(GetDisplay(I).Bounds, P) then - Exit(False); - Result := True; - end; - function CornerOutOfDisplay(const R: TRect): Boolean; - begin - Result := PointOutOfDisplay(R.TopLeft) or PointOutOfDisplay(TPoint.Create(R.Right, R.Top)) or - PointOutOfDisplay(R.BottomRight) or PointOutOfDisplay(TPoint.Create(R.Left, R.Bottom)); - end; - -var - I, MinI: Integer; - DesktopCenter: TPoint; - Dist, MinDist: Double; - WorkArea: TRect; -begin - DesktopCenter := GetDesktopRect.CenterPoint; - Result := TRect.Create(TPoint.Create(DesktopCenter.X - Size.cx div 2, DesktopCenter.Y - Size.cy div 2), Size.cx, - Size.cy); - MinDist := MaxInt; - MinI := -1; - - for I := 0 to GetDisplayCount - 1 do - begin - Dist := GetDisplay(I).WorkArea.CenterPoint.Distance(DesktopCenter); - if Dist < MinDist then - begin - MinDist := Dist; - MinI := I; - end; - end; - WorkArea := GetDisplay(MinI).WorkArea; - if CornerOutOfDisplay(Result) then - begin - if Result.Top < WorkArea.Top then - Result.SetLocation(Result.Left, WorkArea.Top); - if Result.Bottom > WorkArea.Bottom then - Result.SetLocation(Result.Left, WorkArea.Bottom - Result.Height); - if CornerOutOfDisplay(Result) then - begin - if Result.Left < WorkArea.Left then - Result.SetLocation(WorkArea.Left, Result.Top); - if Result.Right > WorkArea.Right then - Result.SetLocation(WorkArea.Right - Result.Width, Result.Top); - end; - end; -end; - -function TMultiDisplayWin.GetDesktopRect: TRect; -begin - if (FDesktopRect.Width <= 0) or (FDesktopRect.Height <= 0) then - FDesktopRect := TRect.Create(TPoint.Create(GetSystemMetrics(SM_XVIRTUALSCREEN), - GetSystemMetrics(SM_YVIRTUALSCREEN)), GetSystemMetrics(SM_CXVIRTUALSCREEN), GetSystemMetrics(SM_CYVIRTUALSCREEN)); - Result := FDesktopRect; -end; - -function TMultiDisplayWin.GetWorkAreaRect: TRect; -begin - if (FWorkAreaRect.Width <= 0) or (FWorkAreaRect.Height <= 0) then - if not SystemParametersInfo(SPI_GETWORKAREA, 0, FWorkAreaRect, 0) then - FWorkAreaRect := TRect.Empty; - Result := FWorkAreaRect; -end; - -procedure TMultiDisplayWin.UpdateDisplayInformation; -begin - FDisplayCount := 0; - FDesktopRect := TRect.Empty; - FWorkAreaRect := TRect.Empty; - FreeAndNil(FDisplayList); -end; - -function TMultiDisplayWin.FindDisplay(const hm: HMONITOR): TDisplay; - function DoFind(const Handle: HMONITOR): Integer; - var - I: Integer; - begin - Result := -1; - if FDisplayList <> nil then - for I := 0 to FDisplayList.Count - 1 do - if Handle = FDisplayList[I].Handle then - Exit(I); - end; - -var - Index: Integer; -begin - if Screen = nil then - raise EInvalidFmxHandle.Create(sArgumentInvalid); - Index := DoFind(hm); - if Index = -1 then - begin - UpdateDisplays; - Index := DoFind(hm); - end; - if Index = -1 then - raise EInvalidArgument.Create(sArgumentInvalid) - else - Result := FDisplayList[Index].Display; -end; - -function IsPopupForm(const AForm: TCommonCustomForm): Boolean; -begin - Result := (AForm <> nil) and ((AForm.FormStyle = TFormStyle.Popup) or (AForm.Owner is TPopup) or (AForm is TCustomPopupForm)); -end; - -function TMultiDisplayWin.DisplayFromWindow(const Handle: TWindowHandle): TDisplay; -var - Wnd: TWinWindowHandle; - Form, ParentForm: TCommonCustomForm; - ParentControl: TFmxObject; - Control: TControl; - P: TPointF; - ScreenPosition: TPoint; -begin - if Handle = nil then - raise EArgumentNilException.Create(SArgumentNil); - Wnd := WindowHandleToPlatform(Handle); - Form := FindWindow(Wnd.Wnd); - ParentControl := nil; - if IsPopupForm(Form) then - begin - if Form is TCustomPopupForm then - begin - if GetKeyState(VK_RBUTTON) <> 0 then - begin - GetCursorPos(ScreenPosition); - Result := FindDisplay(Winapi.MultiMon.MonitorFromPoint(ScreenPosition, MONITOR_DEFAULTTONEAREST)); - Exit; - end; - ParentControl := TCustomPopupForm(Form).PlacementTarget; - end; - ParentForm := Form.ParentForm; - if (ParentControl = nil) and (ParentForm <> nil) then - begin - while IsPopupForm(ParentForm) and (ParentForm.ParentForm <> nil) do - ParentForm := ParentForm.ParentForm; - if ParentControl = nil then - begin - ParentControl := Form.Parent; - while (ParentControl <> nil) and (ParentControl.Root <> nil) and (ParentControl.Root.GetObject <> ParentForm) do - ParentControl := ParentControl.Parent; - while (ParentControl <> nil) and not (ParentControl is TControl) do - ParentControl := ParentControl.Parent; - end; - if (ParentControl = nil) and (ParentForm <> nil) and (ParentForm.Focused <> nil) then - ParentControl := ParentForm.Focused.GetObject; - end; - if ParentControl is TControl then - begin - Control := TControl(ParentControl); - P := Control.Padding.Rect.TopLeft; - P := Control.LocalToAbsolute(P); - if Control.Root.GetObject is TCommonCustomForm then - begin - ParentForm := TCommonCustomForm(Control.Root.GetObject); - P := ParentForm.ClientToScreen(P); - end; - P.Offset((Control.Width - Control.Padding.Right) / 2, (Control.Height - Control.Padding.Bottom) / 2); - ScreenPosition := TPoint.Create(Round(P.X), Round(P.Y)); - Result := FindDisplay(Winapi.MultiMon.MonitorFromPoint(ScreenPosition, MONITOR_DEFAULTTONEAREST)); - Exit; - end; - if ParentForm <> nil then - Wnd := WindowHandleToPlatform(ParentForm.Handle); - end; - if (Wnd = nil) or (Wnd.Wnd = 0) then - raise EArgumentException.Create(sArgumentInvalid); - Result := FindDisplay(Winapi.MultiMon.MonitorFromWindow(Wnd.Wnd, MONITOR_DEFAULTTONEAREST)); -end; - -function TMultiDisplayWin.DisplayFromPoint(const Handle: TWindowHandle; const Point: TPoint): TDisplay; -var - Wnd: TWinWindowHandle; - Form: TCommonCustomForm; - DispByPoint, DispByMouse: TDisplay; - PointF: TPointF; - ScreenPosition: TPoint; -begin - if Handle = nil then - raise EArgumentNilException.Create(SArgumentNil); - Wnd := WindowHandleToPlatform(Handle); - if (Wnd = nil) or (Wnd.Wnd = 0) then - raise EArgumentException.Create(sArgumentInvalid); - Form := FindWindow(Wnd.Wnd); - if not IsPopupForm(Form) then - begin - PointF := TPointF.Create(Point); - ScreenPosition := Form.ClientToScreen(PointF).Round; - DispByPoint := FindDisplay(Winapi.MultiMon.MonitorFromPoint(ScreenPosition, MONITOR_DEFAULTTONEAREST)); - if (GetKeyState(VK_RBUTTON) <> 0) or (GetKeyState(VK_LBUTTON) <> 0) or (GetKeyState(VK_MBUTTON) <> 0) then - begin - Result := DisplayFromWindow(Handle); - GetCursorPos(ScreenPosition); - DispByMouse := FindDisplay(Winapi.MultiMon.MonitorFromPoint(ScreenPosition, MONITOR_DEFAULTTONEAREST)); - if DispByMouse.Index <> Result.Index then - Result := DispByPoint; - end - else - Result := DispByPoint; - end - else if Form.Visible and (Form is TCustomPopupForm) then - Result := FindDisplay(Winapi.MultiMon.MonitorFromWindow(Wnd.Wnd, MONITOR_DEFAULTTONEAREST)) - else - Result := DisplayFromWindow(Handle); -end; - -function EnumMonitorsProc(hm: HMONITOR; dc: HDC; R: PRect; Data: Pointer): Boolean; stdcall; -var - Sender: TMultiDisplayWin; - MonInfo: TMonitorInfo; -begin - Sender := TMultiDisplayWin(Data); - MonInfo.cbSize := SizeOf(MonInfo); - if GetMonitorInfo(hm, @MonInfo) then - begin - if Sender.FDisplayList = nil then - Sender.FDisplayList := TList.Create; - Sender.FDisplayList.Add(TMultiDisplayWin.TDisplayWin.Create(Sender.FDisplayList.Count, - (MonInfo.dwFlags and MONITORINFOF_PRIMARY) <> 0, MonInfo.rcMonitor, MonInfo.rcWork, hm)); - end; - Result := True; -end; - -procedure TMultiDisplayWin.UpdateDisplays; -begin - UpdateDisplayInformation; - EnumDisplayMonitors(0, nil, @EnumMonitorsProc, Winapi.Windows.LPARAM(Self)); - if FDisplayList <> nil then - FDisplayCount := FDisplayList.Count - else - FDisplayCount := 0; -end; - -function TMultiDisplayWin.GetDisplay(const Index: Integer): TDisplay; -begin - if Index < 0 then - raise EListError.CreateFMT(SListIndexError, [Index]); - if (FDisplayList = nil) or (FDisplayList.Count <> GetDisplayCount) then - UpdateDisplays; - if Index >= GetDisplayCount then - raise EListError.CreateFMT(SListIndexError, [Index]); - Result := FDisplayList[Index].Display; -end; - -{ TFullScreenParams } - -procedure TFullScreenParams.Clean; -begin - Self.BorderStyle := TFmxFormBorderStyle.None; - Self.WindowState := TWindowState.wsMaximized; -end; - -function TFullScreenParams.IsFullScreen: Boolean; -begin - Result := not ((Self.BorderStyle = TFmxFormBorderStyle.None) and (Self.WindowState = TWindowState.wsMaximized)); -end; - -{ TWin32MenuInfo } - -constructor TWin32MenuInfo.Create(const AMenuId: Integer; const AnItem: TMenuItem); -begin - MenuID := AMenuId; - FMXMenuItem := AnItem; -end; - -procedure ShutDown; -begin - if IsLibrary then - begin - FMX.Canvas.D2D.UnregisterCanvasClasses; - FMX.Context.DX11.UnregisterContextClasses; - FMX.Forms.FinalizeForms; - end; -end; - -{ TMenuServiceWin } - -procedure TMenuServiceWin.AddBitmapToMenu(const AParentMenu: HMENU; const AMenuItemId: TMenuId; const ABitmap: HBITMAP); -var - MenuItemInfo: tagMENUITEMINFOW; -begin - if ABitmap <> 0 then - begin - FillChar(MenuItemInfo, SizeOf(MenuItemInfo), 0); - MenuItemInfo.cbSize := SizeOf(MenuItemInfo); - MenuItemInfo.fMask := MIIM_BITMAP; - if not GetMenuItemInfo(AParentMenu, AMenuItemId, False, MenuItemInfo) then - RaiseLastOSError; - MenuItemInfo.hbmpItem := ABitmap; - try - if not SetMenuItemInfo(AParentMenu, AMenuItemId, False, MenuItemInfo) then - RaiseLastOSError; - except - MenuItemInfo.hbmpItem := 0; - SetMenuItemInfo(AParentMenu, AMenuItemId, False, MenuItemInfo); - raise; - end; - end; -end; - -function TMenuServiceWin.AssignNewIdToMenu(const AParentMenu, AMenu: HMENU): TMenuId; -var - MenuItemInfo: tagMENUITEMINFOW; -begin - Result := GenerateMenuId; - - FillChar(MenuItemInfo, SizeOf(MenuItemInfo), 0); - MenuItemInfo.cbSize := SizeOf(MenuItemInfo); - MenuItemInfo.fMask := MIIM_ID; - if not GetMenuItemInfo(AParentMenu, AMenu, False, MenuItemInfo) then - RaiseLastOSError; - MenuItemInfo.wID := Result; - try - if not SetMenuItemInfo(AParentMenu, AMenu, False, MenuItemInfo) then - RaiseLastOSError; - FHMenuIdMap.Add(Result, AMenu); - except - MenuItemInfo.wID := 0; - SetMenuItemInfo(AParentMenu, AMenu, False, MenuItemInfo); - raise; - end; -end; - -constructor TMenuServiceWin.Create; -begin - FHMenuMap := TDictionary.Create; - FHMenuIdMap := TDictionary.Create; - FMenuLooper := TMenuLooperWin.Create; -end; - -procedure TMenuServiceWin.CreateOSMenu(AForm: TCommonCustomForm; const AMenu: IItemsContainer); - - function CalculateItemFlags(const AMenuItem: TMenuItem): Integer; - begin - Result := 0; - if AMenuItem.Text = SMenuSeparator then - Result := Result or MF_SEPARATOR - else - begin - if AMenuItem.IsChecked then - Result := Result or MF_CHECKED; - - if not AMenuItem.Enabled then - Result := Result or MF_DISABLED; - - Result := Result or MF_STRING; - end; - end; - - function CalculateVisibleCount(const AMenu: IItemsContainer): Integer; - var - I: Integer; - begin - Result := 0; - for I := 0 to AMenu.GetItemsCount - 1 do - if (AMenu.GetItem(I) is TMenuItem) and TMenuItem(AMenu.GetItem(I)).Visible then - Inc(Result); - end; - - procedure InsertItems(const AParent: HMENU; AChild: IItemsContainer; const AMenuLevel: Integer); - var - I, Flags, VisibleCount: Integer; - PopupMenu: HMENU; - Native: INativeControl; - MenuItem: TMenuItem; - SubChild: IItemsContainer; - S: string; - Bitmap: HBITMAP; - begin - if (AChild <> nil) and (AChild.GetObject is TMenuItem) then - begin - Bitmap := 0; - MenuItem := TMenuItem(AChild.GetObject); - if MenuItem.Visible and Supports(MenuItem, INativeControl, Native) then - begin - Flags := CalculateItemFlags(MenuItem); - VisibleCount := CalculateVisibleCount(AChild); - if VisibleCount > 0 then - Flags := Flags or MF_POPUP; - - Native.Handle := 0; - PopupMenu := CreateMenu; - if PopupMenu = 0 then - RaiseLastOSError; - try - if AMenuLevel > 0 then - S := ShortCutToText(MenuItem.ShortCut) - else - S := string.Empty; - if not S.IsEmpty then - S := #9 + S; - S := MenuItem.Text + S; - if AppendMenu(AParent, Flags, PopupMenu, PChar(S)) then - begin - Bitmap := ImageListToMenuBitmap(AMenuLevel = 0, MenuItem.Images, MenuItem.ImageIndex); - if Bitmap = 0 then - Bitmap := BitmapToMenuBitmap(AMenuLevel = 0, MenuItem.Bitmap); - if Bitmap <> 0 then - try - AddBitmapToMenu(AParent, PopupMenu, Bitmap); - except - DeleteObject(Bitmap); - Bitmap := 0; - raise; - end; - FHMenuMap.Add(PopupMenu, TWin32MenuInfo.Create(AssignNewIdToMenu(AParent, PopupMenu), MenuItem)); - if VisibleCount > 0 then - for I := 0 to AChild.GetItemsCount - 1 do - if Supports(AChild.GetItem(I), IItemsContainer, SubChild) then - InsertItems(PopupMenu, SubChild, AMenuLevel + 1); - Native.Handle := PopupMenu; - end - else - RaiseLastOSError; - except - if Bitmap <> 0 then - RemoveBitmapFromMenu(AParent, PopupMenu); - DestroyMenu(PopupMenu); - raise; - end; - end; - end; - end; - -var - Handle: HMENU; - Wnd: HWND; - I, VisibleCount: Integer; - WindowBorder: TWindowBorderWin; - Native: INativeControl; - SavedWindowState: TWindowState; -begin - if TState.CreatingOSMenu in FStates then - Exit; - SavedWindowState := AForm.WindowState; - try - Include(FStates, TState.CreatingOSMenu); - Wnd := FormToHWND(AForm); - if Wnd = 0 then - Exit; - - VisibleCount := 0; - Native := nil; - if AMenu <> nil then - begin - DestroysAllMenuItems(AMenu); - Supports(AMenu.GetObject, INativeControl, Native); - if not (csDesigning in AForm.ComponentState) and AForm.Border.IsSupported then - begin - WindowBorder := TWindowBorderWin(AForm.Border.WindowBorder); - WindowBorder.CreateOSMenu(AMenu); - end - else if (Native <> nil) and Native.HandleSupported then - VisibleCount := CalculateVisibleCount(AMenu); - end; - Handle := GetMenu(Wnd); - if VisibleCount > 0 then - begin - if Handle = 0 then - begin - Native.Handle := 0; - Handle := CreateMenu; - if Handle = 0 then - RaiseLastOSError; - end; - try - for I := 0 to AMenu.GetItemsCount - 1 do - if AMenu.GetItem(I) is TMenuItem and TMenuItem(AMenu.GetItem(I)).Visible then - InsertItems(Handle, TMenuItem(AMenu.GetItem(I)), 0); - except - DestroyMenu(Handle); - raise; - end; - SetMenu(Wnd, Handle); - end - else if Handle <> 0 then - begin - if not DestroyMenu(Handle) then - RaiseLastOSError; - SetMenu(Wnd, 0); - Handle := 0; - end; - if Native <> nil then - Native.Handle := Handle; - finally - AForm.WindowState := SavedWindowState; - Exclude(FStates, TState.CreatingOSMenu); - end; -end; - -destructor TMenuServiceWin.Destroy; -begin - FreeAndNil(FMenuLooper); - FreeAndNil(FHMenuMap); - FreeAndNil(FHMenuIdMap); - - inherited; -end; - -procedure TMenuServiceWin.DestroyMenuItem(const AItem: IItemsContainer); -var - Form: TCommonCustomForm; - MenuItem: TFmxObject; - Wnd: HWND; - MenuHandle, Handle: TFmxHandle; - Native: INativeControl; - Root: IRoot; -begin - if not (TState.DestroyingMenuItem in FStates) and (AItem <> nil) and (AItem.GetObject is TFmxObject) then - MenuItem := AItem.GetObject - else - Exit; - Include(FStates, TState.DestroyingMenuItem); - try - Root := MenuItem.Root; - if (Root <> nil) and (Root.GetObject is TCommonCustomForm) then - begin - Form := TCommonCustomForm(Root.GetObject); - if (MenuItem <> nil) and Supports(MenuItem, INativeControl, Native) and (Native.Handle <> 0) then - begin - Handle := Native.Handle; - if not (csDesigning in Form.ComponentState) and (Form.Border.WindowBorder is TWindowBorderWin) and - TWindowBorderWin(Form.Border.WindowBorder).HandleExists(Handle) then - begin - TWindowBorderWin(Form.Border.WindowBorder).RemoveHandle(Handle); - end - else - begin - if Handle <> INVALID_HANDLE_VALUE then - begin - Wnd := FormToHWND(Form); - MenuHandle := GetMenu(Wnd); - if MenuHandle = Handle then - begin - CreateOSMenu(Form, nil); - SetMenu(Wnd, 0) - end - else if MenuHandle <> 0 then - RemoveBitmapFromMenu(MenuHandle, Handle); - if IsMenu(Handle) then - CheckWinapiResult(DestroyMenu(Handle)); - end; - RemoveMenuFromMaps(Handle); - end; - Native.Handle := 0 - end; - end; - finally - Exclude(FStates, TState.DestroyingMenuItem); - end; -end; - -function TMenuServiceWin.FindMenuInfoById(const AMenuItemId: TMenuId; var AMenuInfo: TWin32MenuInfo): Boolean; -var - FmxHandle: TFmxHandle; -begin - Result := FHMenuIdMap.TryGetValue(AMenuItemId, FmxHandle) and FHMenuMap.TryGetValue(FmxHandle, AMenuInfo); -end; - -function TMenuServiceWin.GenerateMenuId: TMenuId; -begin - Result := NewUniqueMenuCommand; - if Result > 65535 then - begin - FreeUniqueMenuCommand(Result); - raise EUnavailableMenuId.Create(SUnavailableMenuId); - end; -end; - -function TMenuServiceWin.IsMenuBarOnWindowBorder: Boolean; -begin - Result := True; -end; - -procedure TMenuServiceWin.RemoveBitmapFromMenu(const AParentMenu, AMenu: HMENU); -var - MenuItemInfo: tagMENUITEMINFOW; - MenuInfo: TWin32MenuInfo; - MenuId: TMenuId; -begin - if FHMenuMap.TryGetValue(AMenu, MenuInfo) then - MenuId := MenuInfo.MenuID - else - Exit; - FillChar(MenuItemInfo, SizeOf(MenuItemInfo), 0); - MenuItemInfo.cbSize := SizeOf(MenuItemInfo); - MenuItemInfo.fMask := MIIM_BITMAP; - if not GetMenuItemInfo(AParentMenu, MenuId, False, MenuItemInfo) then - RaiseLastOSError; - if (MenuItemInfo.hbmpItem <> HBITMAP(-1)) and (MenuItemInfo.hbmpItem > HBMMENU_POPUP_MINIMIZE) then - begin - if not DeleteObject(MenuItemInfo.hbmpItem) then - RaiseLastOSError; - - MenuItemInfo.hbmpItem := HBITMAP(-1); - if not SetMenuItemInfo(AParentMenu, MenuId, False, MenuItemInfo) then - RaiseLastOSError; - end; -end; - -procedure TMenuServiceWin.DestroysAllMenuItems(const AMenu: IItemsContainer); -var - I: Integer; - ItemsContainer: IItemsContainer; -begin - for I := 0 to AMenu.GetItemsCount - 1 do - if Supports(AMenu.GetItem(I), IItemsContainer, ItemsContainer) then - DestroysAllMenuItems(ItemsContainer); - DestroyMenuItem(AMenu); -end; - -procedure TMenuServiceWin.RemoveMenuFromMaps(const AMenuHandle: TFmxHandle); -var - Pair: TPair; -begin - FHMenuMap.Remove(AMenuHandle); - - for Pair in FHMenuIdMap do - if Pair.Value = AMenuHandle then - begin - FreeUniqueMenuCommand(Pair.Key); - FHMenuIdMap.Remove(Pair.Key); - Break; - end; -end; - -procedure TMenuServiceWin.ShortCutToKey(ShortCut: TShortCut; var Key: Word; var Shift: TShiftState); -begin - FMX.Helpers.Win.ShortCutToKey(ShortCut, Key, Shift); -end; - -function TMenuServiceWin.ShortCutToText(ShortCut: TShortCut): string; -begin - Result := FMX.Helpers.Win.ShortCutToText(ShortCut); -end; - -procedure TMenuServiceWin.StartMenuLoop(const AView: IMenuView); -begin - FMenuLooper.StartLoop(AView); -end; - -function TMenuServiceWin.TextToShortCut(Text: string): Integer; -begin - Result := FMX.Helpers.Win.TextToShortCut(Text); -end; - -procedure TMenuServiceWin.UpdateMenuBar; -begin -end; - -procedure TMenuServiceWin.UpdateMenuItem(const AItem: IItemsContainer; AChange: TMenuItemChanges); - - function GetParentMenuItemHandle(const AMenuItem: TMenuItem): TFmxHandle; - var - NativeControl: INativeControl; - begin - if Supports(AMenuItem.ParentMenuItem, INativeControl, NativeControl) or Supports(AMenuItem.MainMenu, INativeControl, NativeControl) then - Result := NativeControl.Handle - else - Result := 0; - end; - - function GetBitmap(const AMenuItem: TMenuItem): HBITMAP; - var - IsTopLevelItem: Boolean; - begin - IsTopLevelItem := AMenuItem.Parent is TMainMenu; - Result := ImageListToMenuBitmap(IsTopLevelItem, AMenuItem.Images, AMenuItem.ImageIndex); - if Result = 0 then - Result := BitmapToMenuBitmap(IsTopLevelItem, AMenuItem.Bitmap); - end; - - procedure UpdateBitmap(const AMenuItem: TMenuItem); - var - ParentHandle: TFmxHandle; - Bitmap: HBITMAP; - MenuItemHandle: TFmxHandle; - begin - MenuItemHandle := (AMenuItem as INativeControl).Handle; - ParentHandle := GetParentMenuItemHandle(AMenuItem); - if ParentHandle = 0 then - Exit; - - Bitmap := GetBitmap(AMenuItem); - if Bitmap <> 0 then - try - AddBitmapToMenu(ParentHandle, FHMenuMap[MenuItemHandle].Menuid, Bitmap); - except - DeleteObject(Bitmap); - raise; - end - else - RemoveBitmapFromMenu(ParentHandle, MenuItemHandle); - end; - - procedure UpdateEnabled(const AMenuItem: TMenuItem); - const - Enables: array[Boolean] of DWORD = (MF_DISABLED or MF_GRAYED, MF_ENABLED); - var - ParentHandle: TFmxHandle; - MenuItemHandle: TFmxHandle; - begin - MenuItemHandle := (AMenuItem as INativeControl).Handle; - ParentHandle := GetParentMenuItemHandle(AMenuItem); - if ParentHandle = 0 then - Exit; - - EnableMenuItem(ParentHandle, FHMenuMap[MenuItemHandle].Menuid, MF_BYCOMMAND or Enables[AMenuItem.enabled]); - end; - - procedure UpdateChecked(const AMenuItem: TMenuItem); - const - Checks: array[Boolean] of DWORD = (MF_UNCHECKED, MF_CHECKED); - var - ParentHandle: TFmxHandle; - MenuItemHandle: TFmxHandle; - begin - MenuItemHandle := (AMenuItem as INativeControl).Handle; - ParentHandle := GetParentMenuItemHandle(AMenuItem); - if ParentHandle = 0 then - Exit; - - CheckMenuItem(ParentHandle, FHMenuMap[MenuItemHandle].Menuid, MF_BYCOMMAND or Checks[AMenuItem.IsChecked]); - end; - - procedure RecreateMainMenu(const AMenuItem: TMenuItem); - var - MainMenu: TMainMenu; - begin - MainMenu := AMenuItem.MainMenu; - if MainMenu <> nil then - MainMenu.RecreateOSMenu; - end; - - function IsStyledBorder(const AMenuItem: TMenuItem): Boolean; - var - Form: TCommonCustomForm; - begin - if AMenuItem.Root = nil then - Exit(False); - - Form := AMenuItem.Root.GetObject as TCommonCustomForm; - Result := Form.Border.IsSupported; - end; - -var - MenuItem: TMenuItem; - MenuItemHandle: TFmxHandle; -begin - if not (AItem.GetObject is TMenuItem) then - Exit; - - MenuItem := TMenuItem(AItem.GetObject); - MenuItemHandle := (MenuItem as INativeControl).Handle; - if (MenuItemHandle = 0) or IsStyledBorder(MenuItem) then - begin - RecreateMainMenu(MenuItem); - Exit; - end; - - if MenuItemHandle = INVALID_HANDLE_VALUE then - raise EInvalidFmxHandle.CreateFMT(SInvalidFmxHandle, [HexDisplayPrefix, SizeOf(MenuItemHandle) * 2, MenuItemHandle]); - - if AChange = [TMenuItemChange.Bitmap] then - UpdateBitmap(MenuItem) - else if AChange = [TMenuItemChange.Enabled] then - UpdateEnabled(MenuItem) - else if AChange = [TMenuItemChange.Checked] then - UpdateChecked(MenuItem) - else - // If Visible, Text or Shortcut are changed, then we need to rebuild menu. Because WinApi doesn't support - RecreateMainMenu(MenuItem); -end; - -procedure TMenuServiceWin.WMCommand(var Message: TWMCommand); -var - MenuInfo: TWin32MenuInfo; -begin - if FindMenuInfoById(Message.ItemId, MenuInfo) then - begin - TOpenMenuItem(MenuInfo.FMXMenuItem).Click; - Message.Result := 0; - end; -end; - -procedure TMenuServiceWin.WMInitMenuPopup(var Message: TWMInitMenuPopup); -var - MenuInfo: TWin32MenuInfo; -begin - if FHMenuMap.TryGetValue(Message.MenuPopup, MenuInfo) then - TOpenMenuItem(MenuInfo.FMXMenuItem).Click; -end; - -procedure TMenuServiceWin.WMMenuSelect(var Message: TWMMenuSelect); -var - MenuInfo: TWin32MenuInfo; - MenuHandle: HMENU; -begin - MenuHandle := GetSubMenu(Message.Menu, Message.IDItem); - if MenuHandle = 0 then - Exit; - - if FindMenuInfoById(Message.IDItem, MenuInfo) then - Application.Hint := MenuInfo.FMXMenuItem.Hint - else - Application.Hint := string.Empty; -end; - -{ TMenuLooperWin } - -function TMenuLooperWin.BackwardSelectNextMenuItem(const AView: IMenuView; const AStartInd, AEndInd: Integer): Boolean; -var - I: Integer; -begin - Result := False; - if AView <> nil then - for I := AStartInd downto AEndInd do - if IsItemSelectable(AView.GetItem(I)) then - begin - AView.Selected := TMenuItem(AView.GetItem(I)); - Result := True; - Break; - end; -end; - -procedure TMenuLooperWin.EndLoop(const AView: IMenuView); -var - View: IMenuView; -begin - View := AView; - while View <> nil do - begin - View.Loop := False; - View.Selected := nil; - View := View.ParentView; - end; -end; - -function TMenuLooperWin.ForwardSelectNextMenuItem(const AView: IMenuView; const AStartInd, AEndInd: Integer): Boolean; -var - I: Integer; -begin - Result := False; - if AView <> nil then - for I := AStartInd to AEndInd do - if IsItemSelectable(AView.GetItem(I)) then - begin - AView.Selected := TMenuItem(AView.GetItem(I)); - Result := True; - Break; - end; -end; - -function TMenuLooperWin.IsItemSelectable(const Item: TFmxObject): Boolean; -begin - Result := (Item is TMenuItem) and TMenuItem(Item).Visible and (TMenuItem(Item).Text <> SMenuSeparator); -end; - -procedure TMenuLooperWin.SelectFirstMenuItem(const AView: IMenuView); -var - I: Integer; -begin - if AView <> nil then - begin - I := 0; - while (I < AView.GetItemsCount) and not IsItemSelectable(AView.GetItem(I)) do - Inc(I); - if I < AView.GetItemsCount then - AView.Selected := TMenuItem(AView.GetItem(I)); - end; -end; - -procedure TMenuLooperWin.SelectLastMenuItem(const AView: IMenuView); -var - I: Integer; -begin - if AView <> nil then - begin - I := AView.GetItemsCount - 1; - while (I >= 0) and not IsItemSelectable(AView.GetItem(I)) do - Dec(I); - if I >= 0 then - AView.Selected := TMenuItem(AView.GetItem(I)); - end; -end; - -procedure TMenuLooperWin.SelectNextMenuItem(const AView: IMenuView; const ABackward: Boolean); -begin - if ABackward then - begin - if (AView.Selected = nil) or not BackwardSelectNextMenuItem(AView, AView.Selected.Index - 1, 0) then - SelectLastMenuItem(AView); - // otherwise nothing - end - else - begin - if (AView.Selected = nil) or not ForwardSelectNextMenuItem(AView, AView.Selected.Index + 1, AView.GetItemsCount - 1) then - SelectFirstMenuItem(AView); - // otherwise nothing - end; -end; - -procedure TMenuLooperWin.StartLoop(const AView: IMenuView); -var - FirstLoop: Boolean; - - function ContinueLoop: Boolean; - begin - Result := AView.Loop; - end; - - function ParentWindow(AView: IMenuView): HWND; - var - Obj: TFmxObject; - Form: TCommonCustomForm; - begin - Result := 0; - if (AView <> nil) and (AView.Parent <> nil) then - begin - Obj := AView.Parent; - while (Obj <> nil) and not (Obj is TCommonCustomForm) do - Obj := Obj.Parent; - if Obj is TCommonCustomForm then - begin - Form := TCommonCustomForm(Obj); - while (Form <> nil) and IsPopup(Form) do - Form := Form.ParentForm; - if (Form <> nil) and (Form.Handle <> nil) then - Result := WindowHandleToPlatform(Form.Handle).Wnd; - end; - end; - end; - -var - Msg: TMsg; - WP: TPoint; - ParentWnd: HWND; - P: TPointF; - InMenus: Boolean; - CurrentView, NewView: IMenuView; - Obj: IControl; - TimerID: THandle; - MenuItem: TMenuItem; -begin - FView := AView; - AView.Loop := True; - TimerID := SetTimer(0, 0, 50, nil); - try - FirstLoop := True; - while ContinueLoop do - begin - - if FirstLoop then - FirstLoop := False - else - WaitMessage; - - while ContinueLoop and PeekMessage(Msg, 0, 0, 0, PM_NOREMOVE) do - begin - case Msg.Message of - WM_WINDOWPOSCHANGING: - begin - EndLoop(AView); - Exit; - end; - WM_QUIT { , WM_NCLBUTTONDOWN..WM_NCMBUTTONDBLCLK } : - begin - EndLoop(AView); - Continue; - end; - WM_TIMER: - begin - TranslateMessage(Msg); - end; - end; - if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then - begin - case Msg.Message of - WM_CLOSEMENU: - EndLoop(AView); - WM_NCMOUSEMOVE, WM_NCLBUTTONDOWN, WM_NCRBUTTONDOWN, WM_NCLBUTTONUP: - begin - case Msg.Message of - WM_NCMOUSEMOVE: - begin - { Handle MouseOver } -{$IFDEF CPUX64} - WP := SmallPointToPoint(TSmallPoint(Cardinal(Msg.LPARAM))); -{$ELSE} - WP := SmallPointToPoint(TSmallPoint(Msg.LPARAM)); -{$ENDIF} - P := PointF(WP.X, WP.Y); - Obj := AView.ObjectAtPoint(P); - TranslateMessage(Msg); - DispatchMessage(Msg); - { Find top level menu } - CurrentView := AView; - while CurrentView.ParentView <> nil do - CurrentView := CurrentView.ParentView; - { Check all items } - while CurrentView <> nil do - begin - Obj := CurrentView.ObjectAtPoint(P); - if (Obj <> nil) and (Obj.GetObject is TMenuItem) and not (TMenuItem(Obj.GetObject).IsSelected) - then - begin - if (CurrentView <> AView) then - begin - NewView := AView; - while NewView <> CurrentView do - begin - NewView.Loop := False; - NewView := NewView.ParentView; - end; - TOpenMenuItem(Obj.GetObject).NeedPopup; - Exit; - end; - end; - CurrentView := CurrentView.ChildView; - end; - Continue; - end; - WM_NCLBUTTONDOWN, WM_NCRBUTTONDOWN: - begin - { Handle MouseOver if mouse over not menuitem } -{$IFDEF CPUX64} - WP := SmallPointToPoint(TSmallPoint(Cardinal(Msg.LPARAM))); -{$ELSE} - WP := SmallPointToPoint(TSmallPoint(Msg.LPARAM)); -{$ENDIF} - P := PointF(WP.X, WP.Y); - Obj := AView.ObjectAtPoint(P); - if (Obj <> nil) and not (Obj is TMenuItem) then - begin - TranslateMessage(Msg); - DispatchMessage(Msg); - Continue; - end; - { Menus } - if (Obj <> nil) and (Obj.GetObject is TMenuItem) then - begin - MenuItem := TMenuItem(Obj.GetObject); - if not MenuItem.IsSelected and MenuItem.HavePopup then - TOpenMenuItem(MenuItem).NeedPopup - else if MenuItem.CanBeClicked then - begin - EndLoop(AView); - TOpenMenuItem(Obj.GetObject).Click; - end; - end - else - begin - CurrentView := AView; - InMenus := False; - while (CurrentView <> nil) and not InMenus do - begin - if not (CurrentView.IsMenuBar) and (CurrentView.ObjectAtPoint(P) <> nil) then - InMenus := True; - CurrentView := CurrentView.ParentView; - end; - if not InMenus then - EndLoop(AView); - end; - end; - WM_NCLBUTTONUP: - begin - { Handle MouseOver if mouse over not menuitem } -{$IFDEF CPUX64} - WP := SmallPointToPoint(TSmallPoint(Cardinal(Msg.LPARAM))); -{$ELSE} - WP := SmallPointToPoint(TSmallPoint(Msg.LPARAM)); -{$ENDIF} - P := PointF(WP.X, WP.Y); - Obj := AView.ObjectAtPoint(P); - if (Obj <> nil) and not (Obj is TMenuItem) then - begin - TranslateMessage(Msg); - DispatchMessage(Msg); - Continue; - end; - end; - end; - end; - WM_MOUSEFIRST .. WM_MOUSELAST: - begin - { Handle MouseOver if mouse over not menuitem } -{$IFDEF CPUX64} - WP := SmallPointToPoint(TSmallPoint(Cardinal(Msg.LPARAM))); -{$ELSE} - WP := SmallPointToPoint(TSmallPoint(Msg.LPARAM)); -{$ENDIF} - Winapi.Windows.ClientToScreen(Msg.HWND, WP); - case Msg.Message of - WM_MOUSEMOVE: - begin - TranslateMessage(Msg); - DispatchMessage(Msg); - Continue; - end; - WM_LBUTTONDOWN, WM_RBUTTONDOWN: - begin - P := PointF(WP.X, WP.Y); - Obj := AView.ObjectAtPoint(P); - if (Obj <> nil) and not (Obj is TMenuItem) then - begin - TranslateMessage(Msg); - DispatchMessage(Msg); - Continue; - end; - { Menus } - if (Obj <> nil) and (Obj.GetObject is TMenuItem) then - begin - MenuItem := TMenuItem(Obj.GetObject); - if not MenuItem.IsSelected and MenuItem.HavePopup then - TOpenMenuItem(MenuItem).NeedPopup - else if MenuItem.CanBeClicked then - begin - EndLoop(AView); - TOpenMenuItem(MenuItem).Click; - end; - end - else - begin - CurrentView := AView; - InMenus := False; - while (CurrentView <> nil) and not InMenus do - begin - if not (CurrentView.IsMenuBar) and (CurrentView.ObjectAtPoint(P) <> nil) then - InMenus := True; - CurrentView := CurrentView.ParentView; - end; - if not InMenus then - begin - EndLoop(AView); - ParentWnd := ParentWindow(AView); - if ParentWnd <> 0 then - begin - // Redirect messages to the parent form - Winapi.Windows.ScreenToClient(ParentWnd, WP); - Msg.LPARAM := Cardinal(PointToSmallPoint(WP)); - PostMessage(ParentWnd, Msg.Message, Msg.wParam, Msg.LPARAM); - end; - end; - end; - end; - WM_LBUTTONUP, WM_RBUTTONUP: - begin - P := PointF(WP.X, WP.Y); - Obj := AView.ObjectAtPoint(P); - if (Obj <> nil) and not (Obj is TMenuItem) then - begin - TranslateMessage(Msg); - DispatchMessage(Msg); - Continue; - end; - end; - end; - end; - WM_KEYFIRST .. WM_KEYLAST: - if (GetKeyState(VK_LBUTTON) >= 0) then - case Msg.Message of - WM_KEYDOWN, WM_SYSKEYDOWN: - case Msg.wParam of - VK_RETURN: - begin - if AView.Selected <> nil then - begin - if AView.Selected.HavePopup then - AView.Selected.NeedPopup - else if AView.Selected.CanBeClicked then - begin - TOpenMenuItem(AView.Selected).Click; - EndLoop(AView); - end; - end - else - EndLoop(AView); - end; - VK_ESCAPE: - begin - AView.Selected := nil; - Exit; - end; - VK_MENU, VK_F10: - EndLoop(AView); - VK_LEFT, VK_RIGHT: - if AView.IsMenuBar then - SelectNextMenuItem(AView, Msg.wParam = VK_LEFT) - else if AView.ParentView <> nil then - if (AView.Selected <> nil) and AView.Selected.HavePopup and (Msg.wParam = VK_RIGHT) then - AView.Selected.NeedPopup - else if AView.ParentView.IsMenuBar then - begin - AView.Loop := False; - SelectNextMenuItem(AView.ParentView, Msg.wParam = VK_LEFT); - if AView.ParentView.Selected <> nil then - AView.ParentView.Selected.NeedPopup; - Exit; - end - else - AView.Loop := False; - VK_UP, VK_DOWN: - if AView.IsMenuBar then - begin - if (AView.Selected <> nil) and (Msg.wParam = VK_DOWN) then - AView.Selected.NeedPopup; - end - else - SelectNextMenuItem(AView, Msg.wParam = VK_UP); - end; - end; - else - TranslateMessage(Msg); - DispatchMessage(Msg); - end; - end; - end; - end; - finally - KillTimer(0, TimerID); - AView.Loop := False; - Winapi.Windows.ReleaseCapture; - FView := nil; - end; -end; - -{ TWinTimerService } - -procedure TWinTimerService.ApplicationTerminatingHandler(const Sender: TObject; const Msg: System.Messaging.TMessage); -begin - FTerminating := True; - DestroyTimers; -end; - -constructor TWinTimerService.Create; -begin - inherited; - FTimers := TList.Create; - FHandleCounter := 128; // Start counting handles at 128. All valid handles have lower nibble = 0; - FTerminating := False; - if not QueryPerformanceFrequency(FPerformanceFrequency) then - FPerformanceFrequency := 0; - - TMessageManager.DefaultManager.SubscribeToMessage(TApplicationTerminatingMessage, ApplicationTerminatingHandler); -end; - -destructor TWinTimerService.Destroy; -begin - TMessageManager.DefaultManager.Unsubscribe(TApplicationTerminatingMessage, ApplicationTerminatingHandler); - - FreeAndNil(FTimers); - inherited; -end; - -function TWinTimerService.CreateTimer(AInterval: Integer; ATimerFunc: TTimerProc): TFmxHandle; -var - TimerInfo: TWin32TimerInfo; -begin - Result := 0; - if not FTerminating and (AInterval > 0) and Assigned(ATimerFunc) then - begin - TimerInfo.TimerFunc := ATimerFunc; - TimerInfo.TimerID := Winapi.Windows.SetTimer(0, 0, AInterval, @TimerCallback); - if TimerInfo.TimerID <> 0 then - begin -{$IFDEF CPUX64} - TimerInfo.TimerHandle := TInterlocked.Add(Int64(FHandleCounter), 16); -{$ENDIF} -{$IFDEF CPUX86} - TimerInfo.TimerHandle := TInterlocked.Add(Integer(FHandleCounter), 16); -{$ENDIF} - FTimers.Add(TimerInfo); - Result := TimerInfo.TimerHandle; - end - else - raise Exception.CreateFmt(SCannotCreateTimer, [GetLastError]); - end; -end; - -function TWinTimerService.DestroyTimer(Timer: TFmxHandle): Boolean; -var - Index: Integer; - TimerInfo: TWin32TimerInfo; -begin - Result := False; - Index := FTimers.Count; - while (Index > 0) do - begin - Dec(Index); - TimerInfo := FTimers[Index]; - if TimerInfo.TimerHandle = Timer then - begin - Result := Winapi.Windows.KillTimer(0, TimerInfo.TimerID); - FTimers.Delete(Index); - end; - end; -end; - -procedure TWinTimerService.DestroyTimers; -var - I: Integer; -begin - for I := FTimers.Count - 1 downto 0 do - try - DestroyTimer(FTimers[I].TimerHandle); - except - end; -end; - -function TWinTimerService.GetTick: Double; -var - PerformanceCounter: Int64; -begin - if FPerformanceFrequency <> 0 then - begin - QueryPerformanceCounter(PerformanceCounter); - Result := PerformanceCounter / FPerformanceFrequency; - end - else - Result := timeGetTime / 1000; -end; - -class procedure TWinTimerService.TimerCallback(window_hwnd: HWND; Msg: Longint; idEvent: UINT; dwTime: Longint); -var - Index: Integer; -begin - try - Index := PlatformWin.TimerService.FTimers.Count; - while (Index > 0) do - begin - Dec(Index); - if PlatformWin.TimerService.FTimers[Index].TimerID = idEvent then - begin - PlatformWin.TimerService.FTimers[Index].TimerFunc; - Break; - end; - end; - except - on E: Exception do - begin - if Application <> nil then - Application.HandleException(nil) - else - raise; - end; - end; -end; - -{ TImmManager } - -constructor TImmManager.Create(const AForm: TCommonCustomForm); -begin - FForm := AForm; -end; - -function TImmManager.GetComposition(const AContext: HIMC): string; -var - BufferLength: Integer; -begin - BufferLength := ImmGetCompositionString(AContext, GCS_COMPSTR, nil, 0); - SetLength(Result, BufferLength div SizeOf(Char)); - ImmGetCompositionString(AContext, GCS_COMPSTR, PChar(Result), BufferLength); -end; - -function TImmManager.GetFormHandle: HWND; -begin - Result := FormToHWND(Form); -end; - -function TImmManager.GetResultComposition(const AContext: HIMC): string; -var - BufferLength: Integer; -begin - BufferLength := ImmGetCompositionString(AContext, GCS_RESULTSTR, nil, 0); - SetLength(Result, BufferLength div SizeOf(Char)); - ImmGetCompositionString(AContext, GCS_RESULTSTR, PChar(Result), BufferLength); -end; - -procedure TImmManager.ProcessImeParameters(const AContext: HIMC; const AParameters: LPARAM; const ATextService: TTextServiceWin); -var - CompositionString: string; -begin - CompositionString := GetComposition(AContext); - ATextService.InternalSetMarkedText(CompositionString); - - if AParameters and GCS_COMPATTR <> 0 then - UpdateCompositionAttributes(AContext, ATextService); - - if AParameters and GCS_CURSORPOS <> 0 then - UpdateCompositionCursorPos(AContext, ATextService) - else if GetKeyboardLayout(0) and $FFFF = TTextServiceWin.LCID_Korean_Default then - // Native Korean IME Input system doesn't use cursor position. Instead of it it hightlights the last character in - // marked text. Since FMX doesn't support displaying character selection, we just move caret in the end of marked - // text and use underline attribute for highlighting last character. - ATextService.MarkedTextCursorPosition := Max(1, ATextService.MarkedText.Length); -end; - -procedure TImmManager.UpdateCompositionAttributes(const AContext: HIMC; const ATextService: TTextServiceWin); -var - BufferLength: Integer; -begin - BufferLength := ImmGetCompositionString(AContext, GCS_COMPATTR, nil, 0); - if BufferLength > 0 then - begin - SetLength(ATextService.CompAttrBuf, BufferLength); - ImmGetCompositionString(AContext, GCS_COMPATTR, @(ATextService.CompAttrBuf[0]), BufferLength); - end; -end; - -procedure TImmManager.UpdateCompositionCursorPos(const AContext: HIMC; const ATextService: TTextServiceWin); -var - CursorPos: Integer; -begin - CursorPos := ImmGetCompositionString(AContext, GCS_CURSORPOS, nil, 0); - if CursorPos >= 0 then - ATextService.MarkedTextCursorPosition := CursorPos; -end; - -function TImmManager.UpdateIMEWindowPosition: LRESULT; - - function DpToPx(const APoint: TPointF): TPoint; overload; - var - FormScale: Single; - begin - FormScale := Form.Handle.Scale; - Result := TPointF.Create(APoint.X * FormScale, APoint.Y * FormScale).Round; - end; - - function DpToPx(const ARect: TRectF): TRect; overload; - begin - Result.TopLeft := DpToPx(ARect.TopLeft); - Result.BottomRight := DpToPx(ARect.BottomRight); - end; - - function DefineControlRect(const AFocusedControl: IControl; const ATextInput: ITextInput): TRectF; - var - SelectionRect: TRectF; - begin - SelectionRect := ATextInput.GetSelectionRect; - Result.TopLeft := Form.ScreenToClient(AFocusedControl.LocalToScreen(SelectionRect.TopLeft)); - Result.BottomRight := Form.ScreenToClient(AFocusedControl.LocalToScreen(SelectionRect.BottomRight)); - end; - -var - IMC: HIMC; - Candidate: TCandidateForm; - TextInput: ITextInput; -begin - Result := 0; - - if not Supports(Form.Focused, ITextInput, TextInput) then - Exit; - - IMC := ImmGetContext(FormHandle); - if IMC = 0 then - Exit; - - try - Candidate.dwIndex := 0; - Candidate.dwStyle := CFS_POINT; - Candidate.ptCurrentPos := DpToPx(TextInput.GetTargetClausePointF); - Result := LRESULT(ImmSetCandidateWindow(IMC, @Candidate)); - - Candidate.dwStyle := CFS_EXCLUDE; - Candidate.rcArea := DpToPx(DefineControlRect(Form.Focused, TextInput)); - ImmSetCandidateWindow(IMC, @Candidate); - finally - ImmReleaseContext(FormHandle, IMC); - end; -end; - -procedure TImmManager.WMComposition(var Message: TMessage); -var - IMC: HIMC; - S: string; - TextInput: ITextInput; - I: Integer; - Key: Word; - Ch: Char; - IsProcessed: Boolean; -begin - UpdateIMEWindowPosition; - - IsProcessed := False; - - // User selected result string - if Message.LParam and GCS_RESULTSTR <> 0 then - begin - IsProcessed := True; - IMC := ImmGetContext(FormHandle); - if IMC <> 0 then - begin - try - if Supports(Form.Focused, ITextInput, TextInput) then - begin - TTextServiceWin(TextInput.GetTextService).Reset; - TextInput.IMEStateUpdated; - end; - S := GetResultComposition(IMC); - finally - ImmReleaseContext(FormHandle, IMC); - end; - - for I := 0 to S.Length - 1 do - begin - Key := 0; - Ch := S.Chars[I]; - Form.KeyDown(Key, Ch, []); - Form.KeyUp(Key, Ch, []); - end; - end; - end; - - // User is inputting current composition string - if Message.LParam and GCS_COMPSTR <> 0 then - begin - IsProcessed := True; - IMC := ImmGetContext(FormHandle); - if IMC <> 0 then - try - if Supports(Form.Focused, ITextInput, TextInput) then - begin - ProcessImeParameters(IMC, Message.LParam, TTextServiceWin(TextInput.GetTextService)); - TextInput.IMEStateUpdated; - end; - finally - ImmReleaseContext(FormHandle, IMC); - end; - end; - - if IsProcessed then - Message.Result := 0 - else - Message.Result := DefWindowProc(FormHandle, Message.Msg, Message.WParam, Message.LParam); -end; - -procedure TImmManager.WMEndComposition(var Message: TMessage); -var - TextInput: ITextInput; -begin - UpdateIMEWindowPosition; - - if Supports(Form.Focused, ITextInput, TextInput) then - TTextServiceWin(TextInput.GetTextService).InternalEndIMEInput; -end; - -procedure TImmManager.WMNotify(var Message: TMessage); -begin - if Message.WParam = IMN_OPENCANDIDATE then - Message.Result := UpdateIMEWindowPosition - else - Message.Result := DefWindowProc(FormHandle, Message.Msg, Message.WParam, Message.LParam); -end; - -procedure TImmManager.WMSetContext(var Message: TMessage); -begin - Message.Result := DefWindowProc(FormHandle, Message.Msg, Message.WParam, Message.LParam and ISC_SHOWUIALLCANDIDATEWINDOW); -end; - -procedure TImmManager.WMStartComposition(var Message: TMessage); -var - TextInput: ITextInput; -begin - UpdateIMEWindowPosition; - - if Supports(Form.Focused, ITextInput, TextInput) then - TTextServiceWin(TextInput.GetTextService).InternalStartIMEInput; - - if System.SysUtils.Win32MajorVersion >= 6 then - Message.Result := DefWindowProc(FormHandle, Message.Msg, Message.WParam, Message.LParam) - else - Message.Result := 0; -end; - -initialization - OleInitialize(nil); - CapturedGestureControl := nil; - LastMousePos := ImpossibleMousePosition; -end. diff --git a/src/lib/FMX.Ani.pas b/src/lib/FMX/DX 10.4/FMX.Ani.pas similarity index 99% rename from src/lib/FMX.Ani.pas rename to src/lib/FMX/DX 10.4/FMX.Ani.pas index c926211..60c5d60 100644 --- a/src/lib/FMX.Ani.pas +++ b/src/lib/FMX/DX 10.4/FMX.Ani.pas @@ -2,7 +2,7 @@ { } { Delphi FireMonkey Platform } { } -{ Copyright(c) 2011-2020 Embarcadero Technologies, Inc. } +{ Copyright(c) 2011-2021 Embarcadero Technologies, Inc. } { All rights reserved } { } {*******************************************************} @@ -1343,9 +1343,9 @@ constructor TAniThread.Create; destructor TAniThread.Destroy; begin + inherited; FreeAndNil(FAniList); FTimerService := nil; - inherited; end; procedure TAniThread.AddAnimation(const Ani: TAnimation); @@ -2826,6 +2826,7 @@ constructor TTimerThread.Create; destructor TTimerThread.Destroy; begin Terminate; + FTimerEvent := nil; FEnabledEvent.setEvent; inherited; FreeAndNil(FEnabledEvent); diff --git a/src/lib/FMX.Graphics.pas b/src/lib/FMX/DX 10.4/FMX.Graphics.pas similarity index 99% rename from src/lib/FMX.Graphics.pas rename to src/lib/FMX/DX 10.4/FMX.Graphics.pas index 63db24a..9fa5e64 100644 --- a/src/lib/FMX.Graphics.pas +++ b/src/lib/FMX/DX 10.4/FMX.Graphics.pas @@ -2,7 +2,7 @@ { } { Delphi FireMonkey Platform } { } -{ Copyright(c) 2011-2020 Embarcadero Technologies, Inc. } +{ Copyright(c) 2011-2021 Embarcadero Technologies, Inc. } { All rights reserved } { } {*******************************************************} @@ -1592,16 +1592,29 @@ function TGradient.Equal(const AGradient: TGradient): Boolean; I: Integer; begin Result := True; - if FPoints.Count <> AGradient.FPoints.Count then Exit(False); - if not SameValue(FStartPosition.X, AGradient.FStartPosition.X, TEpsilon.Position) then Exit(False); - if not SameValue(FStartPosition.Y, AGradient.FStartPosition.Y, TEpsilon.Position) then Exit(False); - if not SameValue(FStopPosition.X, AGradient.FStopPosition.X, TEpsilon.Position) then Exit(False); - if not SameValue(FStopPosition.Y, AGradient.FStopPosition.Y, TEpsilon.Position) then Exit(False); + if FPoints.Count <> AGradient.FPoints.Count then + Exit(False); + if not SameValue(FStartPosition.X, AGradient.FStartPosition.X, TEpsilon.Position) then + Exit(False); + if not SameValue(FStartPosition.Y, AGradient.FStartPosition.Y, TEpsilon.Position) then + Exit(False); + if not SameValue(FStopPosition.X, AGradient.FStopPosition.X, TEpsilon.Position) then + Exit(False); + if not SameValue(FStopPosition.Y, AGradient.FStopPosition.Y, TEpsilon.Position) then + Exit(False); for I := 0 to FPoints.Count - 1 do begin - if FPoints[I].Color <> AGradient.FPoints[I].Color then Exit(False); - if not SameValue(FPoints[I].Offset, AGradient.FPoints[I].Offset, TEpsilon.Position) then Exit(False); + if FPoints[I].Color <> AGradient.FPoints[I].Color then + Exit(False); + if not SameValue(FPoints[I].Offset, AGradient.FPoints[I].Offset, TEpsilon.Position) then + Exit(False); end; + { Radial gradient } + if not SameValue(RadialTransform.RotationAngle, AGradient.RadialTransform.RotationAngle, TEpsilon.Angle) then + Exit(False); + if not SameValue(RadialTransform.RotationCenter.X, AGradient.RadialTransform.RotationCenter.X, TEpsilon.Position) or + not SameValue(RadialTransform.RotationCenter.Y, AGradient.RadialTransform.RotationCenter.Y, TEpsilon.Position) then + Exit(False); end; procedure TGradient.Change; @@ -4259,7 +4272,7 @@ procedure TBitmap.SaveToFile(const AFileName: string; const SaveParams: PBitmapC try Surf.Assign(Self); if not TBitmapCodecManager.SaveToFile(AFileName, Surf, SaveParams) then - raise EBitmapSavingFailed.CreateFMT(SBitmapSavingFailed, [AFileName]); + raise EBitmapSavingFailed.CreateFMT(SBitmapSavingFailedNamed, [AFileName]); finally Surf.Free; end; @@ -4294,6 +4307,7 @@ function TBitmap.GetCanvas: TCanvas; TMonitor.Enter(Self); try CopyToNewReference; + //! Launcher Fix FCanvas := CanvasClass.CreateFromBitmap(Self, TCanvasQuality.HighQuality); finally TMonitor.Exit(Self); diff --git a/src/lib/FMX/DX 10.4/FMX.TreeView.pas b/src/lib/FMX/DX 10.4/FMX.TreeView.pas new file mode 100644 index 0000000..053a550 --- /dev/null +++ b/src/lib/FMX/DX 10.4/FMX.TreeView.pas @@ -0,0 +1,2825 @@ +{*******************************************************} +{ } +{ Delphi FireMonkey Platform } +{ } +{ Copyright(c) 2011-2021 Embarcadero Technologies, Inc. } +{ All rights reserved } +{ } +{*******************************************************} + +unit FMX.TreeView; + +interface + +{$SCOPEDENUMS ON} + +uses + System.Classes, System.Types, System.UITypes, System.Generics.Collections, System.ImageList, FMX.Types, FMX.Layouts, + FMX.StdCtrls, FMX.Controls, FMX.TextLayout, FMX.Graphics, FMX.ActnList, FMX.ImgList; + +type + +{ TTreeViewItem } + + TCustomTreeView = class; + + TTreeViewItem = class(TTextControl, IItemsContainer, IGlyph) + public const + DefaultHeight = 19; + private + FIsExpanded: Boolean; + FExpander: TControl; + FButton: TCustomButton; + FCheck: TCheckBox; + FGlobalIndex: Integer; + FIsChecked: Boolean; + FIsSelected: Boolean; + FContent: TContent; + FNoItemsContent: TLayout; + FVisibleCount: Integer; + FMinItemSize: TSizeF; + FCustomHeight: Boolean; + FChildrenOffset: Single; + FOldButtonVisible: Boolean; + FOldCheckVisible: Boolean; + FOldChecked: Boolean; + FGlyph: TGlyph; + FOldGlyphVisible: Boolean; + FImageLink: TGlyphImageLink; + [Weak] FImages: TCustomImageList; + FCustomChildrenOffset: Single; + function GetLevelOffset: Single; + procedure DoButtonClick(Sender: TObject); + procedure DoCheckClick(Sender: TObject); + function GetCount: Integer; + procedure SetIsChecked(const Value: Boolean); + procedure UpdateCheckBoxVisibility; + procedure UpdateExpandedButtonVisibility; + procedure SetIsSelected(const Value: Boolean); + procedure RecountVisibleItems; + procedure RequestRecount; + function GetImages: TCustomImageList; + procedure SetImages(const Value: TCustomImageList); + { IGlyph } + function GetImageIndex: TImageIndex; + procedure SetImageIndex(const Value: TImageIndex); + function GetImageList: TBaseImageList; inline; + procedure SetImageList(const Value: TBaseImageList); + function IGlyph.GetImages = GetImageList; + procedure IGlyph.SetImages = SetImageList; + { IItemsContainer } + function IItemsContainer.GetItemsCount = GetCount; + function GetItem(const AIndex: Integer): TFmxObject; + function GetMinItemSize: TSizeF; + procedure OnExpandButtonStyleLookup(Sender: TObject); + procedure UpdateChildrenOffset; + procedure SetCustomChildrenOffset(const Value: Single); + function IsCustomChildrenOffsetStored: Boolean; + protected + procedure ChangeOrder; override; + procedure ApplyStyle; override; + procedure FreeStyle; override; + procedure DragEnd; override; + function GetTextSettingsClass: TTextSettingsInfo.TCustomTextSettingsClass; override; + function CalcMinSize: TSizeF; + procedure InvalidateTextSize; + /// Determines whether the ImageIndex property needs to be stored in the fmx-file + /// True if ImageIndex property needs to be stored in the fmx file + function ImageIndexStored: Boolean; virtual; + /// Should be called when you change an instance or reference to instance of TBaseImageList or the + /// ImageIndex property + /// See also FMX.ActnList.IGlyph + procedure ImagesChanged; virtual; + procedure DoChanged; override; + function IsSizeStored: Boolean; override; + function IsPositionStored: Boolean; override; + procedure SetText(const Value: string); override; + procedure DoAddObject(const AObject: TFmxObject); override; + procedure DoInsertObject(Index: Integer; const AObject: TFmxObject); override; + procedure DoRemoveObject(const AObject: TFmxObject); override; + function EnterChildren(AObject: IControl): Boolean; override; + function GetAbsoluteRect: TRectF; override; + function DoGetUpdateRect: TRectF; override; + procedure ContentAddObject(const AObject: TFmxObject); virtual; + procedure ContentInsertObject(const AIndex: Integer; const AObject: TFmxObject); virtual; + procedure ContentRemoveObject(const AObject: TFmxObject); virtual; + procedure DefineProperties(Filer: TFiler); override; + procedure Paint; override; + procedure SetVisible(const Value: Boolean); override; + procedure SetHeight(const Value: Single); override; + procedure SetIsExpanded(const Value: Boolean); virtual; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Sort(Compare: TFmxObjectSortCompare); override; + function ItemByPoint(const X, Y: Single): TTreeViewItem; + function ItemByIndex(const Idx: Integer): TTreeViewItem; + function TreeView: TCustomTreeView; + function Level: Integer; + function ParentItem: TTreeViewItem; + procedure Select; + procedure Deselect; + procedure ExpandAll; + procedure CollapseAll; + procedure Expand; + procedure Collapse; + procedure Inflate; override; + property Count: Integer read GetCount; + property VisibleCount: Integer read FVisibleCount; + property GlobalIndex: Integer read FGlobalIndex; + property MinItemSize: TSizeF read GetMinItemSize; + /// The actual offset in the right of children elements + property ChildrenOffset: Single read FChildrenOffset; + /// The offset of children elements which specified by user if this value is greater or equal to + /// zero otherwise the default value is used. This value affects + /// ChildrenOffset property + property CustomChildrenOffset: Single read FCustomChildrenOffset write SetCustomChildrenOffset + stored IsCustomChildrenOffsetStored nodefault; + property Items[const Index: Integer]: TTreeViewItem read ItemByIndex; default; + property Width: Single read GetWidth; + /// The list of images. Can be nil. See also FMX.ActnList.IGlyph + property Images: TCustomImageList read GetImages; + published + property Align; + property AutoTranslate default True; + property ClipChildren default False; + property ClipParent default False; + property Cursor default crDefault; + property DragMode default TDragMode.dmManual; + property EnableDragHighlight default True; + property Enabled default True; + property StyledSettings; + property TextSettings; + property Locked default False; + property Height; + property HelpContext; + property HelpKeyword; + property HelpType; + {triggers} + property IsChecked: Boolean read FIsChecked write SetIsChecked; + property IsExpanded: Boolean read FIsExpanded write SetIsExpanded; + property IsSelected: Boolean read FIsSelected write SetIsSelected; + /// Zero based index of an image. The default is -1. + /// See also FMX.ActnList.IGlyph + /// If non-existing index is specified, an image is not drawn and no exception is raised + property ImageIndex: TImageIndex read GetImageIndex write SetImageIndex stored ImageIndexStored; + property Padding; + property Opacity; + property Margins; + property PopupMenu; + property Position; + property RotationAngle; + property RotationCenter; + property Scale; + property Size; + property StyleLookup; + property TabOrder; + property TabStop; + property Text; + property Visible default True; + property ParentShowHint; + {events} + property OnApplyStyleLookup; + {Drag and Drop events} + property OnDragEnter; + property OnDragLeave; + property OnDragOver; + property OnDragDrop; + property OnDragEnd; + {Mouse events} + property OnClick; + property OnDblClick; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnMouseWheel; + property OnMouseEnter; + property OnMouseLeave; + property OnPainting; + property OnPaint; + property OnResize; + property OnResized; + end; + +{ TTreeView } + + TOnCompareTreeViewItemEvent = function(Item1, Item2: TTreeViewItem): Integer of object; + TOnTreeViewDragChange = procedure(SourceItem, DestItem: TTreeViewItem; + var Allow: Boolean) of object; + +{ TTreeView } + + TCustomTreeView = class(TScrollBox, IItemsContainer, IInflatableContent, IGlyph) + private + FMouseSelecting: Boolean; + FOnChange: TNotifyEvent; + FSelected: TTreeViewItem; + FItemHeight: Single; + FCountExpanded: Integer; + FShowCheckboxes: Boolean; + FOnChangeCheck: TNotifyEvent; + FSorted: Boolean; + FOnCompare: TOnCompareTreeViewItemEvent; + FMultiSelect: Boolean; + FFirstSelect: TTreeViewItem; + FFocusedSelection: TControl; + FSelection: TControl; + FSelections: TControlList; + FAllowDrag: Boolean; + FStartDrag: Boolean; + FDragItem: TTreeViewItem; + FOnDragChange: TOnTreeViewDragChange; + FGlobalList: TList; + FAlternatingRowBackground: Boolean; + FOddFill: TBrush; + FFirstVisibleItem, FLastVisibleItem: Integer; + FNoItemsContent: TContent; + [Weak] FHoveredItem: TTreeViewItem; + FTextLayout: TTextLayout; + FToInflate: TList; + FInflater: TContentInflater; + FSelectionChanging: Boolean; + FImageLink: TGlyphImageLink; + [Weak] FImages: TCustomImageList; + procedure SetItemHeight(const Value: Single); + procedure SetCheckboxesVisibility(const Value: Boolean); + function GetTreeItem(Index: Integer): TTreeViewItem; + procedure SetSorted(const Value: Boolean); + procedure SortItems; + procedure SelectRange(const Item1, Item2: TTreeViewItem); + procedure UpdateSelection; + procedure UpdateVisibleItems; + procedure UpdateGlobalIndexes(const Force: Boolean = False); + procedure SetAllowDrag(const Value: Boolean); + function GetCount: Integer; + procedure SetAlternatingRowBackground(const Value: Boolean); + procedure SetHoveredItem(const Value: TTreeViewItem); + function LocalPointToHoveredItemLocalPoint(const AX, AY: Single): TPointF; + function GetImages: TCustomImageList; + procedure SetImages(const Value: TCustomImageList); + { IGlyph } + function GetImageIndex: TImageIndex; + procedure SetImageIndex(const Value: TImageIndex); + function GetImageList: TBaseImageList; inline; + procedure SetImageList(const Value: TBaseImageList); + function IGlyph.GetImages = GetImageList; + procedure IGlyph.SetImages = SetImageList; + { IItemsContainer } + function IItemsContainer.GetItemsCount = GetCount; + function GetItem(const AIndex: Integer): TFmxObject; + function MouseInContentLayout(const X, Y: Single): Boolean; + function GetGlobalCount: Integer; + procedure InvalidateGlobalList; + procedure ItemSizeMightHaveChanged(const AItem: TTreeViewItem); + { Inflatable } + function GetInflatableItems: TList; + procedure NotifyInflated; + protected + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + procedure DoUpdateAniCalculations(const AAniCalculations: TScrollCalculations); override; + procedure Loaded; override; + /// Should be called when you change an instance or reference to instance of TBaseImageList or + /// ImageIndex property + /// See also FMX.ActnList.IGlyph + procedure ImagesChanged; virtual; + { Selection } + procedure ClearSelection; + procedure SelectAll; + procedure SetSelected(const Value: TTreeViewItem); virtual; + { Styles } + procedure ApplyStyle; override; + procedure FreeStyle; override; + { Tree View Events } + procedure DoChange; virtual; + procedure DoChangeCheck(const Item: TTreeViewItem); virtual; + { Focus } + procedure DoEnter; override; + procedure DoExit; override; + { Children structure } + procedure DoAddObject(const AObject: TFmxObject); override; + procedure DoInsertObject(Index: Integer; const AObject: TFmxObject); override; + procedure DoRemoveObject(const AObject: TFmxObject); override; + function IsAddToContent(const AObject: TFmxObject): Boolean; override; + procedure ContentAddObject(const AObject: TFmxObject); override; + procedure ContentInsertObject(Index: Integer; const AObject: TFmxObject); override; + procedure ContentRemoveObject(const AObject: TFmxObject); override; + procedure ContentBeforeRemoveObject(AObject: TFmxObject); override; + { Content Scrolling } + procedure ViewportPositionChange(const OldViewportPosition, NewViewportPosition: TPointF; + const ContentSizeChanged: Boolean); override; + function CreateScrollContent: TScrollContent; override; + function DoCalcContentBounds: TRectF; override; + function GetItemRect(const Item: TTreeViewItem): TRectF; + { Painting } + procedure DoContentPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); + function IsOpaque: Boolean; override; + { Mouse events } + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override; + procedure MouseMove(Shift: TShiftState; X, Y: Single); override; + procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override; + procedure MouseWheel(Shift: TShiftState; WheelDelta: Integer; var Handled: Boolean); override; + procedure MouseClick(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override; + { Keyboards events } + procedure KeyDown(var Key: Word; var KeyChar: System.WideChar; Shift: TShiftState); override; + procedure KeyUp(var Key: Word; var KeyChar: System.WideChar; Shift: TShiftState); override; + { Drag And Drop } + procedure DragOver(const Data: TDragObject; const Point: TPointF; var Operation: TDragOperation); override; + procedure DragDrop(const Data: TDragObject; const Point: TPointF); override; + procedure DragLeave; override; + function ObjectAtPoint(P: TPointF): IControl; override; + procedure ChangeOrder; override; + procedure ItemExpanded(const Item: TTreeViewItem); + property HoveredItem: TTreeViewItem read FHoveredItem write SetHoveredItem; + property FirstSelectedItem: TTreeViewItem read FFirstSelect; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Clear; + procedure ExpandAll; + procedure CollapseAll; + function ItemByText(const AText: string): TTreeViewItem; + function ItemByPoint(const X, Y: Single): TTreeViewItem; + function ItemByIndex(const Idx: Integer): TTreeViewItem; + function ItemByGlobalIndex(const Idx: Integer): TTreeViewItem; + property Count: Integer read GetCount; + property GlobalCount: Integer read GetGlobalCount; + property CountExpanded: Integer read FCountExpanded; + property Selected: TTreeViewItem read FSelected write SetSelected; + property Items[Index: Integer]: TTreeViewItem read GetTreeItem; + property AllowDrag: Boolean read FAllowDrag write SetAllowDrag; + property AlternatingRowBackground: Boolean read FAlternatingRowBackground write SetAlternatingRowBackground; + property ItemHeight: Single read FItemHeight write SetItemHeight; + /// The list of images. Can be nil. See also FMX.ActnList.IGlyph + property Images: TCustomImageList read GetImages write SetImages; + property MultiSelect: Boolean read FMultiSelect write FMultiSelect default False; + property ShowCheckboxes: Boolean read FShowCheckboxes write SetCheckboxesVisibility default False; + property Sorted: Boolean read FSorted write SetSorted default False; + property OnChange: TNotifyEvent read FOnChange write FOnChange; + property OnChangeCheck: TNotifyEvent read FOnChangeCheck write FOnChangeCheck; + property OnCompare: TOnCompareTreeViewItemEvent read FOnCompare write FOnCompare; + property OnDragChange: TOnTreeViewDragChange read FOnDragChange write FOnDragChange; + end; + + TTreeView = class(TCustomTreeView) + published + property StyleLookup; + property CanFocus default True; + property CanParentFocus; + property DisableFocusEffect default True; + property TabOrder; + property TabStop; + property AllowDrag default False; + property AlternatingRowBackground default False; + property Hint; + property ItemHeight; + property Images; + property MultiSelect default False; + property ShowCheckboxes default False; + property Sorted default False; + property ParentShowHint; + property ShowHint; + property OnCanFocus; + property OnChange; + property OnChangeCheck; + property OnCompare; + property OnDragChange; + property OnKeyDown; + property OnKeyUp; + end; + +implementation + +uses + System.Math, System.Math.Vectors, System.RTLConsts, System.SysUtils, FMX.Consts, FMX.Ani, FMX.Utils; + +type + TTreeViewItemContent = class(TContent) + private + FItem: TTreeViewItem; + protected + function GetFirstVisibleObjectIndex: Integer; override; + function GetLastVisibleObjectIndex: Integer; override; + function GetAbsoluteRect: TRectF; override; + function DoGetUpdateRect: TRectF; override; + procedure DoRealign; override; + procedure DoAddObject(const AObject: TFmxObject); override; + procedure DoInsertObject(Index: Integer; const AObject: TFmxObject); override; + procedure DoRemoveObject(const AObject: TFmxObject); override; + public + end; + +{ TTreeViewItemContent } + +procedure TTreeViewItemContent.DoAddObject(const AObject: TFmxObject); +begin + inherited DoAddObject(AObject); + if Parent is TTreeViewItem then + TTreeViewItem(Parent).ContentAddObject(AObject); +end; + +procedure TTreeViewItemContent.DoRemoveObject(const AObject: TFmxObject); +begin + inherited; + if Parent is TTreeViewItem then + TTreeViewItem(Parent).ContentRemoveObject(AObject); +end; + +procedure TTreeViewItemContent.DoInsertObject(Index: Integer; + const AObject: TFmxObject); +begin + inherited DoInsertObject(Index, AObject); + if Parent is TTreeViewItem then + TTreeViewItem(Parent).ContentInsertObject(Index, AObject); +end; + +procedure TTreeViewItemContent.DoRealign; +begin +end; + +function TTreeViewItemContent.GetAbsoluteRect: TRectF; +begin + if FItem <> nil then + Result := FItem.GetAbsoluteRect + else + Result := inherited; +end; + +function TTreeViewItemContent.DoGetUpdateRect: TRectF; +begin + if FItem <> nil then + Result := FItem.DoGetUpdateRect + else + Result := inherited; +end; + +function TTreeViewItemContent.GetFirstVisibleObjectIndex: Integer; +begin + Result := 0; +end; + +function TTreeViewItemContent.GetLastVisibleObjectIndex: Integer; +begin + if FItem.IsExpanded then + Result := ControlsCount + else + Result := 0; +end; + +{ TTreeViewItem } + +constructor TTreeViewItem.Create(AOwner: TComponent); +begin + inherited; + FImageLink := TGlyphImageLink.Create(Self); + AutoTranslate := True; + TextAlign := TTextAlign.Leading; + Size.SetSizeWithoutNotification(TSizeF.Create(Width, 0)); + FCustomHeight := False; + HitTest := False; + CanFocus := False; + FContent := TTreeViewItemContent.Create(Self); + FChildrenOffset := 0; + FCustomChildrenOffset := -1; + TTreeViewItemContent(FContent).FItem := Self; + FContent.Stored := False; + FContent.Parent := Self; + FContent.Locked := True; + FContent.HitTest := False; +end; + +procedure TTreeViewItem.ChangeOrder; +var + LTreeView : TCustomTreeView; +begin + inherited ChangeOrder; + LTreeView := TreeView; + if (LTreeView <> nil) and not LTreeView.IsUpdating then + begin + LTreeView.UpdateGlobalIndexes(True); + LTreeView.RealignContent; + end; +end; + +procedure TTreeViewItem.ContentAddObject(const AObject: TFmxObject); +var + LTreeView : TCustomTreeView; +begin + if not (AObject is TTreeViewItem) then + begin + if FNoItemsContent = nil then + begin + FNoItemsContent := TLayout.Create(nil); + FNoItemsContent.Parent := Self; + FNoItemsContent.SetBounds(0, 0, 0, 0); + FNoItemsContent.Stored := False; + FNoItemsContent.Locked := True; + FNoItemsContent.HitTest := False; + end; + FNoItemsContent.AddObject(AObject) + end + else + begin + LTreeView := TreeView; + if LTreeView <> nil then + begin + if [csLoading, csDestroying] * LTreeView.ComponentState = [] then + TTreeViewItem(AObject).SetImages(LTreeView.Images); + LTreeView.InvalidateGlobalList; + LTreeView.RealignContent; + end; + end; +end; + +type + TTreeViewItemTextSettings = class(TTextSettingsInfo.TCustomTextSettings) + public + constructor Create(const AOwner: TPersistent); override; + property WordWrap default False; + published + property Font; + property FontColor; + property HorzAlign; + end; + +{ TTreeViewItemTextSettings } + +constructor TTreeViewItemTextSettings.Create(const AOwner: TPersistent); +begin + inherited; + WordWrap := False; +end; + +function TTreeViewItem.GetTextSettingsClass: TTextSettingsInfo.TCustomTextSettingsClass; +begin + Result := TTreeViewItemTextSettings; +end; + +procedure TTreeViewItem.ContentInsertObject(const AIndex: Integer; + const AObject: TFmxObject); +begin + ContentAddObject(AObject); +end; + +procedure TTreeViewItem.ContentRemoveObject(const AObject: TFmxObject); +var + LTreeView: TCustomTreeView; +begin + if AObject is TTreeViewItem then + begin + // After removing child item, we need recalculate Visible Items Count + // and update Visible of 'Expand' button + RecountVisibleItems; + UpdateExpandedButtonVisibility; + + TTreeViewItem(AObject).Deselect; + LTreeView := TreeView; + if LTreeView <> nil then + begin + if [csLoading, csDestroying] * LTreeView.ComponentState = [] then + TTreeViewItem(AObject).SetImages(nil); + LTreeView.InvalidateGlobalList; + LTreeView.RealignContent; + end; + end; +end; + +procedure TTreeViewItem.RecountVisibleItems; +var + I: Integer; +begin + FVisibleCount := 0; + for I := 0 to Count - 1 do + if FContent.Controls[I].IsVisible then + Inc(FVisibleCount); +end; + +procedure TTreeViewItem.RequestRecount; +var + LTreeView: TCustomTreeView; +begin + LTreeView := TreeView; + if LTreeView <> nil then + begin + LTreeView.InvalidateGlobalList; + LTreeView.InvalidateContentSize; + end; +end; + +procedure TTreeViewItem.DragEnd; +var + LTreeView : TCustomTreeView; +begin + inherited; + DragLeave; + LTreeView := TreeView; + if (LTreeView <> nil) and (LTreeView.FDragItem <> nil) then + begin + LTreeView.FDragItem.RemoveFreeNotify(LTreeView); + LTreeView.FDragItem := nil; + end; +end; + +function TTreeViewItem.GetAbsoluteRect: TRectF; +var + I: Integer; +begin + Result := inherited GetAbsoluteRect; + if IsExpanded and (Count > 0) then + begin + for I := 0 to Count - 1 do + Result := UnionRect(Result, Items[I].AbsoluteRect); + end; +end; + +function TTreeViewItem.DoGetUpdateRect: TRectF; +var + I: Integer; +begin + Result := inherited DoGetUpdateRect; + if IsExpanded and (Count > 0) then + for I := 0 to Count - 1 do + Result := UnionRect(Result, Items[I].UpdateRect); +end; + +function TTreeViewItem.GetLevelOffset: Single; +var + Item: TTreeViewItem; + Offs: Single; + function NextLevel(var Item: TTreeViewItem): Boolean; + var + P: TFmxObject; + begin + Result := False; + P := Item.Parent; + if (P is TContent) then + P := P.Parent; + if P is TTreeViewItem then + begin + Result := True; + Item := TTreeViewItem(P); + end; + end; +begin + Result := 0; + Item := self; + while NextLevel(Item) do + begin + Offs := Item.ChildrenOffset; + Result := Result + Offs; + end; +end; + +function TTreeViewItem.GetCount: Integer; +begin + Result := FContent.ControlsCount; +end; + +procedure TTreeViewItem.DefineProperties(Filer: TFiler); +begin + inherited; + Filer.DefineProperty('HitTest', IgnoreBooleanValue, nil, False); // do not localize + Filer.DefineProperty('Width', IgnoreFloatValue, nil, False); // do not localize +end; + +procedure TTreeViewItem.Deselect; +begin + IsSelected := False; +end; + +destructor TTreeViewItem.Destroy; + procedure ClearRef(var Value: TTreeViewItem); + begin + if Value = Self then + Value := nil; + end; +var + LTreeView: TCustomTreeView; +begin + LTreeView := TreeView; + if LTreeView <> nil then + begin + ClearRef(LTreeView.FFirstSelect); + ClearRef(LTreeView.FDragItem); + ClearRef(LTreeView.FSelected); + if LTreeView.FGlobalList <> nil then + LTreeView.FGlobalList.Remove(Self); + end; + FImageLink.DisposeOf; + FImageLink := nil; + inherited; +end; + +procedure TTreeViewItem.DoAddObject(const AObject: TFmxObject); +begin + if AObject is TTreeViewItem then + begin + if FUpdating > TTreeViewItem(AObject).FUpdating then + TTreeViewItem(AObject).BeginUpdate; + FContent.AddObject(AObject); + RecountVisibleItems; + UpdateExpandedButtonVisibility; + if IsExpanded then + RequestRecount; + end + else + inherited; +end; + +procedure TTreeViewItem.DoInsertObject(Index: Integer; const AObject: TFmxObject); +begin + if AObject is TTreeViewItem then + begin + if FUpdating > TTreeViewItem(AObject).FUpdating then + TTreeViewItem(AObject).BeginUpdate; + FContent.InsertObject(Index, AObject); + RecountVisibleItems; + UpdateExpandedButtonVisibility; + if IsExpanded then + RequestRecount; + end + else + inherited; +end; + +procedure TTreeViewItem.DoRemoveObject(const AObject: TFmxObject); +begin + if (AObject is TTreeViewItem) and (TTreeViewItem(AObject).TreeView = TreeView) then + begin + TTreeViewItem(AObject).Parent := nil; + TTreeViewItem(AObject).Deselect; + RecountVisibleItems; + UpdateExpandedButtonVisibility; + if IsExpanded then + RequestRecount; + end + else + inherited; +end; + +function TTreeViewItem.GetItem(const AIndex: Integer): TFmxObject; +begin + Result := Items[AIndex]; +end; + +function TTreeViewItem.ItemByPoint(const X, Y: Single): TTreeViewItem; +var + I: Integer; + P, P1: TPointF; + LItem: TTreeViewItem; +begin + P := LocalToAbsolute(TPointF.Create(X, Y)); + for I := 0 to Count - 1 do + begin + LItem := ItemByIndex(I); + if not LItem.Visible then + Continue; + if LItem.PointInObject(P.X, P.Y) then + begin + Result := LItem; + Exit; + end + else if (LItem.Count > 0) and (LItem.IsExpanded) then + begin + P1 := LItem.AbsoluteToLocal(P); + Result := LItem.ItemByPoint(P1.X, P1.Y); + if Result <> nil then + Exit; + end; + end; + Result := nil; +end; + +function TTreeViewItem.IsPositionStored: Boolean; +begin + Result := False; +end; + +function TTreeViewItem.IsSizeStored: Boolean; +begin + Result := FCustomHeight; +end; + +function TTreeViewItem.ItemByIndex(const Idx: Integer): TTreeViewItem; +begin + if (Idx >= 0) and (Idx < Count) then + Result := TTreeViewItem(FContent.Controls[Idx]) + else + raise ERangeError.CreateFMT(sArgumentOutOfRange_Index, [Idx, Count]); +end; + +procedure TTreeViewItem.Paint; +var + R: TRectF; +begin + inherited Paint; + if (csDesigning in ComponentState) and not Locked and not FInPaintTo then + begin + R := LocalRect; + InflateRect(R, -0.5, -0.5); + Canvas.Stroke.Thickness := 1; + Canvas.Stroke.Dash := TStrokeDash.Dash; + Canvas.Stroke.Kind := TBrushKind.Solid; + Canvas.Stroke.Color := $A0909090; + Canvas.DrawRect(R, 0, 0, AllCorners, AbsoluteOpacity); + Canvas.Stroke.Dash := TStrokeDash.Solid; + end; +end; + +function TTreeViewItem.ParentItem: TTreeViewItem; +begin + TFMXObjectHelper.FindNearestParentOfClass(Self, Result); +end; + +function TTreeViewItem.EnterChildren(AObject: IControl): Boolean; +var + LTreeView : TCustomTreeView ; +begin + Result := inherited EnterChildren(AObject); + LTreeView := TreeView; + if LTreeView <> nil then + begin + LTreeView.Selected := Self; + Result := True; + end; +end; + +procedure TTreeViewItem.Collapse; +begin + IsExpanded := False; +end; + +procedure TTreeViewItem.CollapseAll; +var + i: Integer; + Item: TTreeViewItem; +begin + BeginUpdate; + try + Collapse; + for i := Count - 1 downto 0 do + begin + Item := ItemByIndex(i); + if Item <> nil then + Item.CollapseAll; + end; + finally + EndUpdate; + end; +end; + +procedure TTreeViewItem.Expand; +begin + IsExpanded := True; +end; + +procedure TTreeViewItem.ExpandAll; +var + i: Integer; + Item: TTreeViewItem; +begin + BeginUpdate; + try + Expand; + for i := Count - 1 downto 0 do + begin + Item := ItemByIndex(i); + if Item <> nil then + Item.ExpandAll; + end; + finally + EndUpdate; + end; +end; + +function TTreeViewItem.Level: Integer; +var + P: TFmxObject; +begin + Result := 0; + P := Parent; + while (P <> nil) and not (P is TCustomTreeView) do + begin + Result := Result + 1; + P := P.Parent; + if (P is TContent) then + P := P.Parent; + end; +end; + +procedure TTreeViewItem.OnExpandButtonStyleLookup(Sender: TObject); +begin + UpdateExpandedButtonVisibility; +end; + +function TTreeViewItem.TreeView: TCustomTreeView; +begin + TFMXObjectHelper.FindNearestParentOfClass(Self, Result); +end; + +procedure TTreeViewItem.FreeStyle; +begin + inherited; + if FButton <> nil then + begin + FButton.OnClick := nil; + FButton.OnApplyStyleLookup := nil; + FButton.Visible := FOldButtonVisible; + FButton := nil; + end; + FExpander := nil; + if FCheck <> nil then + begin + FCheck.OnClick := nil; + FCheck.OnChange := nil; + FCheck.Visible := FOldCheckVisible; + FCheck.IsChecked := FOldChecked; + FCheck := nil; + end; + if FGlyph <> nil then + begin + FGlyph.BeginUpdate; + try + FGlyph.ImageIndex := -1; + FGlyph.Images := nil; + finally + FGlyph.EndUpdate; + end; + FGlyph := nil; + end; +end; + +procedure TTreeViewItem.UpdateChildrenOffset; +begin + if FCustomChildrenOffset >= 0 then + FChildrenOffset := FCustomChildrenOffset + else if FExpander <> nil then + FChildrenOffset := FExpander.Width + else if FCheck <> nil then + FChildrenOffset := FCheck.Width + else if FButton <> nil then + FChildrenOffset := FButton.Width + else + FChildrenOffset := DefaultHeight; +end; + +procedure TTreeViewItem.ApplyStyle; +var + LTreeView: TCustomTreeView; + LHeight: Single; + LCustomHeight: Boolean; +begin + LCustomHeight := FCustomHeight and (Height > 0); + LHeight := Height; + try + inherited; + FindStyleResource('expander', FExpander); + if FindStyleResource('button', FButton) then + begin + FOldButtonVisible := FButton.Visible; + FButton.OnClick := DoButtonClick; + FButton.OnApplyStyleLookup := OnExpandButtonStyleLookup; + UpdateExpandedButtonVisibility; + end; + if FindStyleResource('check', FCheck) then + begin + FOldCheckVisible := FCheck.Visible; + FOldChecked := FCheck.IsChecked; + FCheck.IsChecked := IsChecked; + FCheck.OnChange := DoCheckClick; + LTreeView := TreeView ; + if LTreeView <> nil then + FCheck.Visible := LTreeView.ShowCheckboxes; + end; + if FindStyleResource('glyphstyle', FGlyph) then + begin + FGlyph.Images := TCustomImageList(FImageLink.Images); + FGlyph.ImageIndex := FImageLink.ImageIndex; + FOldGlyphVisible := FGlyph.Visible; + end + else + FOldGlyphVisible := False; + if IsSelected then + begin + StartTriggerAnimation(Self, 'IsSelected'); + ApplyTriggerEffect(Self, 'IsSelected'); + end; + Align := TAlignLayout.None; + UpdateChildrenOffset; + finally + if LCustomHeight then + Height := LHeight; + FCustomHeight := LCustomHeight; + end; +end; + +function TTreeViewItem.CalcMinSize: TSizeF; +const + MinText = '1'; + + procedure UpdateWidth(const Control: TControl; const VisibleOnly: Boolean); + var + R: TRectF; + begin + if (Control <> nil) and (not VisibleOnly or Control.Visible) then + begin + R := Control.BoundsRect; + R := Control.Margins.MarginRect(R); + Result.cx := Result.cx + R.Width; + end; + end; + + function FirstWord(const Text: string; const NeedEllipsis: Boolean): string; + var + I: Integer; + begin + I := Text.IndexOf(' '); + if I >= 0 then + begin + Result := Text.Substring(0, I); + if NeedEllipsis then + Result := Result + SChrHorizontalEllipsis; + end + else + Result := Text; + end; + +var + R: TRectF; + LLayout: TTextLayout; + LTree: TCustomTreeView; + TextSettings: ITextSettings; +begin + Result := TSizeF.Create(0, 0); + LTree := TreeView; + if LTree = nil then + Exit; + if Visible then + begin + if (TextObject <> nil) and TextObject.GetInterface(ITextSettings, TextSettings) then + begin + LLayout := LTree.FTextLayout; + if LLayout <> nil then + begin + LLayout.BeginUpdate; + try + LLayout.WordWrap := False; + LLayout.HorizontalAlign := TTextAlign.Leading; + LLayout.VerticalAlign := TTextAlign.Leading; + LLayout.Color := TAlphaColorRec.Black; + LLayout.Font := TextSettings.ResultingTextSettings.Font; + LLayout.Opacity := 1; + LLayout.Trimming := TTextTrimming.None; + if Text.IsEmpty then + LLayout.Text := MinText + else + case TextSettings.ResultingTextSettings.Trimming of + TTextTrimming.None: + begin + if TextSettings.ResultingTextSettings.WordWrap then + LLayout.Text := FirstWord(Text, False) + else + LLayout.Text := Text; + end; + TTextTrimming.Character: + LLayout.Text := MinText + SChrHorizontalEllipsis; + TTextTrimming.Word: + LLayout.Text := FirstWord(Text, True); + end; + finally + LLayout.EndUpdate; + end; + R := LLayout.TextRect; + Result.Width := Ceil(R.Width) + 2; + Result.Height := Ceil(R.Height) + 4; + UpdateWidth(FButton, False); + UpdateWidth(FCheck, True); + UpdateWidth(FGlyph, True); + Result.cx := Result.cx + Padding.Left + Padding.Right; + Result.cy := Result.cy + Padding.Top + Padding.Bottom; + end; + end; + end; +end; + +procedure TTreeViewItem.Inflate; +begin + InvalidateTextSize; + inherited; + DisableDisappear := True; + try + ApplyStyleLookup; + finally + DisableDisappear := False; + end; + CalcMinSize; +end; + +procedure TTreeViewItem.InvalidateTextSize; +begin + FMinItemSize := TSizeF.Create(0, 0); +end; + +function TTreeViewItem.GetMinItemSize: TSizeF; +begin + if FMinItemSize.IsZero then + FMinItemSize := CalcMinSize; + Result := FMinItemSize; +end; + +procedure TTreeViewItem.DoChanged; +begin + inherited; + if not FCustomHeight then + InvalidateTextSize; +end; + +procedure TTreeViewItem.DoCheckClick(Sender: TObject); +var + LTreeView : TCustomTreeView; +begin + if FCheck <> nil then + FIsChecked := FCheck.IsChecked; + LTreeView := TreeView; + if LTreeView <> nil then + begin + LTreeView.SetFocus; + LTreeView.DoChangeCheck(Self); + end; +end; + +procedure TTreeViewItem.UpdateCheckBoxVisibility; +var + i, j: Integer; + LTreeView: TCustomTreeView; +begin + LTreeView := TreeView; + if (LTreeView <> nil) and (FCheck <> nil) and + (FCheck.Visible <> LTreeView.ShowCheckboxes) then + begin + FCheck.Visible := LTreeView.ShowCheckboxes; + InvalidateTextSize; + end; + if ControlsCount > 0 then + for i := 0 to ControlsCount - 1 do + if Controls[i] is TTreeViewItem then + TTreeViewItem(Controls[i]).UpdateCheckBoxVisibility + else if Controls[i] is TTreeViewItemContent then + for j := 0 to Controls[i].ControlsCount - 1 do + if Controls[i].Controls[j] is TTreeViewItem then + TTreeViewItem(Controls[i].Controls[j]).UpdateCheckBoxVisibility +end; + +procedure TTreeViewItem.UpdateExpandedButtonVisibility; +begin + if (FButton <> nil) and not (csLoading in ComponentState) then + begin + FButton.Visible := VisibleCount > 0; + if FButton.Visible then + TAnimator.StartTriggerAnimation(FButton, Self, 'IsExpanded'); + end; +end; + +procedure TTreeViewItem.Select; +begin + IsSelected := True; +end; + +function TTreeViewItem.IsCustomChildrenOffsetStored: Boolean; +begin + Result := FCustomChildrenOffset >= 0; +end; + +procedure TTreeViewItem.SetCustomChildrenOffset(const Value: Single); +var + Parent: TTreeViewItem; +begin + if not SameValue(FCustomChildrenOffset, Value, TEpsilon.FontSize) then + begin + FCustomChildrenOffset := Value; + UpdateChildrenOffset; + if not IsUpdating and IsExpanded and (TreeView <> nil) then + begin + Parent := ParentItem; + while Parent <> nil do + if Parent.IsExpanded then + Parent := Parent.ParentItem + else + Exit; + TreeView.RealignContent; + TreeView.UpdateSelection; + end; + end; +end; + +procedure TTreeViewItem.SetHeight(const Value: Single); +var + ItemSize: TSizeF; +begin + if not SameValue(Value, Height) then + begin + if (not (csLoading in ComponentState)) then + begin + if Value <= 0 then + FCustomHeight := False + else + begin + ItemSize := MinItemSize; + if ItemSize.cy > 0 then + FCustomHeight := not SameValue(Value, ItemSize.cy) + else + FCustomHeight := True; + end; + end + else + begin + FCustomHeight := Value >= 1; + end; + end; + inherited; +end; + +procedure TTreeViewItem.SetIsChecked(const Value: Boolean); +var + LTreeView: TCustomTreeView; +begin + if FIsChecked <> Value then + begin + FIsChecked := Value; + if FCheck <> nil then + FCheck.IsChecked := FIsChecked; + LTreeView := TreeView; + if LTreeView <> nil then + LTreeView.DoChangeCheck(Self); + end; +end; + +procedure TTreeViewItem.SetIsSelected(const Value: Boolean); +var + LTreeView : TCustomTreeView; +begin + if FIsSelected <> Value then + begin + FIsSelected := Value; + StartTriggerAnimation(Self, 'IsSelected'); + LTreeView := TreeView; + if LTreeView <> nil then + begin + if not LTreeView.MultiSelect then + if Value then + LTreeView.Selected := Self + else + LTreeView.Selected := nil; + LTreeView.UpdateSelection; + end; + end; +end; + +procedure TTreeViewItem.SetText(const Value: string); +var + LTreeView: TCustomTreeView; +begin + if Value <> Text then + begin + inherited; + InvalidateTextSize; + LTreeView := TreeView; + if LTreeView <> nil then + LTreeView.ItemSizeMightHaveChanged(Self); + end; +end; + +procedure TTreeViewItem.SetVisible(const Value: Boolean); +var + LChanged: Boolean; + LParentItem: TTreeViewItem; + LTreeView: TCustomTreeView; +begin + LChanged := inherited Visible <> Value; + inherited; + if LChanged then + begin + LParentItem := ParentItem; + if LParentItem <> nil then + ParentItem.RecountVisibleItems; + LTreeView := TreeView; + if LTreeView <> nil then + LTreeView.RealignContent; + end; +end; + +procedure TTreeViewItem.Sort(Compare: TFmxObjectSortCompare); +begin + FContent.Sort(Compare); +end; + +procedure TTreeViewItem.DoButtonClick(Sender: TObject); +begin + IsExpanded := not IsExpanded; +end; + +procedure TTreeViewItem.SetIsExpanded(const Value: Boolean); +var + LTreeView: TCustomTreeView; +begin + if FIsExpanded <> Value then + begin + FIsExpanded := Value; + UpdateExpandedButtonVisibility; + InvalidateTextSize; + LTreeView := TreeView; + if LTreeView <> nil then + LTreeView.ItemExpanded(Self); + end; +end; + +function TTreeViewItem.GetImages: TCustomImageList; +begin + if FImageLink <> nil then + Result := TCustomImageList(FImageLink.Images) + else + Result := FImages; +end; + +procedure TTreeViewItem.SetImages(const Value: TCustomImageList); +begin + if FImageLink <> nil then + FImageLink.Images := Value + else + FImages := Value; +end; + +function TTreeViewItem.GetImageIndex: TImageIndex; +begin + if FImageLink <> nil then + Result := FImageLink.ImageIndex + else + Result := -1; +end; + +procedure TTreeViewItem.SetImageIndex(const Value: TImageIndex); +begin + if FImageLink <> nil then + FImageLink.ImageIndex := Value; +end; + +function TTreeViewItem.GetImageList: TBaseImageList; +begin + Result := GetImages; +end; + +procedure TTreeViewItem.SetImageList(const Value: TBaseImageList); +begin + // none. +end; + +function TTreeViewItem.ImageIndexStored: Boolean; +begin + Result := ActionClient or (ImageIndex <> -1); +end; + +procedure TTreeViewItem.ImagesChanged; + + procedure UpdateImages; + var + I: Integer; + begin + if FImages <> FImageLink.Images then + begin + FImages := TCustomImageList(FImageLink.Images); + if [csLoading, csDestroying] * ComponentState = [] then + for I := 0 to Count - 1 do + Items[I].SetImages(FImages); + end; + end; + + procedure UpdateTreeView; + var + LTreeView: TCustomTreeView; + begin + if [csLoading, csDestroying] * ComponentState = [] then + begin + LTreeView := TreeView; + if (LTreeView <> nil) and not LTreeView.IsUpdating then + begin + LTreeView.BeginUpdate; + try + UpdateImages; + InvalidateTextSize; + LTreeView.ItemSizeMightHaveChanged(Self); + finally + LTreeView.EndUpdate; + end; + end + else + UpdateImages; + end; + end; + +var + NewGlyphVisible: Boolean; +begin + if FGlyph <> nil then + begin + FGlyph.BeginUpdate; + try + FGlyph.Images := TCustomImageList(FImageLink.Images); + FGlyph.ImageIndex := FImageLink.ImageIndex; + finally + FGlyph.EndUpdate; + end; + if ([csLoading, csDestroying] * ComponentState = []) then + FGlyph.Repaint; + end; + + NewGlyphVisible := (FGlyph <> nil) and (FGlyph.Visible); + if FOldGlyphVisible <> NewGlyphVisible then + begin + FOldGlyphVisible := NewGlyphVisible; + UpdateTreeView; + end + else + UpdateImages; +end; + +{ TTreeViewContent } + +type + + TTreeViewContent = class(TScrollContent) + private + [Weak] FTreeView: TCustomTreeView; + protected + function GetFirstVisibleObjectIndex: Integer; override; + function GetLastVisibleObjectIndex: Integer; override; + procedure DoRealign; override; + public + end; + +function TTreeViewContent.GetFirstVisibleObjectIndex: Integer; +var + Item: TTreeViewItem; +begin + if FTreeView.FGlobalList.Count > 0 then + begin + Item := FTreeView.FGlobalList[FTreeView.FFirstVisibleItem]; + while Item.ParentItem <> nil do + Item := Item.ParentItem; + Result := Item.Index; + end + else + Result := 0; +end; + +function TTreeViewContent.GetLastVisibleObjectIndex: Integer; +var + Item: TTreeViewItem; +begin + if (FTreeView.FGlobalList.Count > 0) and (FTreeView.FLastVisibleItem < FTreeView.FGlobalList.Count) then + begin + Item := FTreeView.FGlobalList[FTreeView.FLastVisibleItem]; + while Item.ParentItem <> nil do + Item := Item.ParentItem; + Result := Item.Index + 1; + if Result > ControlsCount then + Result := ControlsCount; + end + else + Result := ControlsCount; +end; + +procedure TTreeViewContent.DoRealign; +begin +end; + +{ TTreeView } + +constructor TCustomTreeView.Create(AOwner: TComponent); +begin + inherited; + FImageLink := TGlyphImageLink.Create(Self); + FGlobalList := TList.Create; + FGlobalList.Capacity := 100; + FOddFill := TBrush.Create(TBrushKind.Solid, $20000000); + DisableFocusEffect := True; + CanFocus := True; + AutoCapture := True; + Width := 100; + Height := 100; + FItemHeight := 0; + SetAcceptsControls(False); + FToInflate := TList.Create; + FInflater := TContentInflater.Create(Self); +end; + +function TCustomTreeView.CreateScrollContent: TScrollContent; +begin + Result := TTreeViewContent.Create(Self); + TTreeViewContent(Result).FTreeView := Self; +end; + +destructor TCustomTreeView.Destroy; +begin + FreeAndNil(FSelections); + FreeAndNil(FGlobalList); + FreeAndNil(FOddFill); + FInflater.DisposeOf; + FreeAndNil(FToInflate); + FImageLink.DisposeOf; + inherited; +end; + +procedure TCustomTreeView.ApplyStyle; +var + T: TFmxObject; + ContentLayout: TControl; +begin + inherited ApplyStyle; + if FindStyleResource('content', ContentLayout) then + ContentLayout.OnPainting := DoContentPaint; + if FindStyleResource('selection', FSelection) then + FSelection.Visible := False; + if FindStyleResource('focusedselection', FFocusedSelection) then + FFocusedSelection.Visible := False; + T := FindStyleResource('AlternatingRowBackground'); + if T is TBrushObject then + FOddFill.Assign(TBrushObject(T).Brush); + if T is TControl then + TControl(T).Visible := False; + UpdateSelection; +end; + +procedure TCustomTreeView.FreeStyle; +begin + inherited FreeStyle; + FSelection := nil; + FFocusedSelection := nil; + if FSelections <> nil then + FSelections.Clear; +end; + +procedure TCustomTreeView.UpdateGlobalIndexes(const Force: Boolean); +var + GlobalIdx: Integer; + + procedure RecountItem(const AItem: TTreeViewItem); + var + I: Integer; + begin + if AItem <> nil then + begin + AItem.FGlobalIndex := GlobalIdx; + Inc(GlobalIdx); + FGlobalList.Add(AItem); + if AItem.IsExpanded then + for I := 0 to AItem.Count - 1 do + RecountItem(AItem.ItemByIndex(I)); + end; + end; + +var + I: Integer; +begin + if Force then + FGlobalList.Clear; + if (FGlobalList.Count = 0) and (Count > 0) then + begin + GlobalIdx := 0; + for I := 0 to Count - 1 do + RecountItem(ItemByIndex(I)); + end; +end; + +function CompareTreeItem(Item1, Item2: TFmxObject): Integer; +var + LItem1TV: TCustomTreeView; +begin + if (Item1 is TTreeViewItem) and (Item2 is TTreeViewItem) then + begin + LItem1TV := TTreeViewItem(Item1).TreeView; + if (LItem1TV <> nil) and Assigned(LItem1TV.OnCompare) then + Result := LItem1TV.OnCompare(TTreeViewItem(Item1), + TTreeViewItem(Item2)) + else + Result := CompareText(TTreeViewItem(Item1).Text, + TTreeViewItem(Item2).Text); + end + else + Result := 0; +end; + +procedure TCustomTreeView.SortItems; +begin + if not FSorted then + Exit; + Content.Sort(CompareTreeItem); + InvalidateGlobalList; + UpdateGlobalIndexes; + UpdateVisibleItems; +end; + +function TCustomTreeView.GetItemRect(const Item: TTreeViewItem): TRectF; +begin + if Item <> nil then + begin + Result := TRectF.Create(0, 0, Item.Width, Item.Height); + Result.Offset(Content.AbsoluteToLocal(Item.LocaltoAbsolute(TPointF.Zero))); + end + else + Result := TRectF.Empty; +end; + +function TCustomTreeView.GetInflatableItems: TList; +begin + Result := FToInflate; +end; + +function TCustomTreeView.GetItem(const AIndex: Integer): TFmxObject; +begin + Result := Items[AIndex]; +end; + +procedure TCustomTreeView.UpdateSelection; +var + I: Integer; + P: TPointF; + R: TRectF; + SelRects: array of TRectF; + Clone: TControl; + Item: TTreeViewItem; +begin + if FSelection = nil then + Exit; + // calc rects + SetLength(SelRects, 0); + if GlobalCount > 0 then + for I := FFirstVisibleItem to FLastVisibleItem do + begin + Item := ItemByGlobalIndex(I); + if Item.IsSelected and Item.Visible then + begin + P := Item.LocaltoAbsolute(TPointF.Zero); + if (FSelection.Parent <> nil) and (FSelection.Parent is TControl) then + P := FSelection.ParentControl.AbsoluteToLocal(P); + R := RectF(P.X, P.Y, P.X + Item.Width, + P.Y + Item.Height); + if (Length(SelRects) > 0) and (I > 0) and ItemByGlobalIndex(I - 1).IsSelected then + SelRects[High(SelRects)] := UnionRect(R, SelRects[High(SelRects)]) + else + begin + SetLength(SelRects, Length(SelRects) + 1); + SelRects[High(SelRects)] := R; + end; + end; + end; + // Create selection list + if FSelections = nil then + FSelections := TControlList.Create; + for I := 0 to FSelections.Count - 1 do + FSelections[I].DisposeOf; + FSelections.Clear; + // create selections + for I := 0 to Length(SelRects) - 1 do + begin + if Self.IsFocused and (FFocusedSelection <> nil) then + Clone := TControl(FFocusedSelection.Clone(Self)) + else + Clone := TControl(FSelection.Clone(Self)); + Clone.StyleName := string.Empty; + FSelections.Add(Clone); + Clone.Parent := FSelection.Parent; + end; + // hide if not needed + if Length(SelRects) < FSelections.Count then + for I := Length(SelRects) to FSelections.Count - 1 do + FSelections[I].Visible := False; + // align selections + for I := 0 to High(SelRects) do + begin + FSelections[I].Visible := True; + R := SelRects[I]; + FSelections[I].SetBounds(R.Left, R.Top, R.Right - R.Left, R.Bottom - R.Top); + end; +end; + +procedure TCustomTreeView.UpdateVisibleItems; +var + First, Last, Mid: Integer; + R: TRectF; +begin + First := 0; + Last := GlobalCount - 1; + while First < Last do + begin + Mid := First + (Last - First) div 2; + R := FGlobalList[Mid].AbsoluteRect; + R.TopLeft := AbsoluteToLocal(R.TopLeft); + R.BottomRight := AbsoluteToLocal(R.BottomRight); + if R.Bottom < 0 then + First := Mid + 1 + else if R.Top > Height then + Last := Mid + else + Break; + end; + FFirstVisibleItem := First; + FLastVisibleItem := Last; + TTreeViewContent(Content).RecalcUpdateRect; + if FNoItemsContent <> nil then + FNoItemsContent.SetBounds(Content.Position.X, Content.Position.Y, Content.Width, Content.Height); +end; + +procedure TCustomTreeView.ItemSizeMightHaveChanged(const AItem: TTreeViewItem); +begin + if (ItemHeight = 0) and not AItem.FCustomHeight then + RealignContent; +end; + +function TCustomTreeView.DoCalcContentBounds: TRectF; +var + FirstItemHeight: Single; + + function UpdateSize(const AItem: TTreeViewItem; const CurY: Single; const ContentWidth: Single; + var BottomRight: TPointF): Single; + var + I: Integer; + OffsetX: Single; + ItemSize: TSizeF; + TopLeft: TPointF; + MinWidth: Single; + begin + Result := CurY; + OffsetX := AItem.GetLevelOffset; + TopLeft := AItem.ParentControl.AbsoluteToLocal(Content.LocalToAbsolute( + TPointF.Create(OffsetX + AItem.Margins.Left, CurY + AItem.Margins.Top))); + if AItem.IsVisible or AItem.ShowInDesigner then + begin + AItem.UpdateExpandedButtonVisibility; + MinWidth := ContentWidth - OffsetX - AItem.Margins.Left - AItem.Margins.Right; + + ItemSize := AItem.MinItemSize; + if FItemHeight > 0 then + ItemSize.cy := FItemHeight + else if AItem.FCustomHeight then + ItemSize.cy := AItem.Height + else if ItemSize.cy <= 0 then + begin + if SameValue(FirstItemHeight, 0, TEpsilon.Position) then + begin + AItem.Inflate; + if AItem.MinItemSize.Height > 0 then + FirstItemHeight := AItem.MinItemSize.Height + else + FirstItemHeight := TTreeViewItem.DefaultHeight; + end; + ItemSize.cy := FirstItemHeight; + end; + + if ItemSize.Width <= 0 then + ItemSize.cx := MinWidth + else + ItemSize.cx := Max(ItemSize.cx, MinWidth); + + Result := CurY + ItemSize.cy + AItem.Margins.Top + AItem.Margins.Bottom; + BottomRight.X := Max(BottomRight.X, OffsetX + ItemSize.cx + AItem.Margins.Left + AItem.Margins.Right); + BottomRight.Y := Max(BottomRight.Y, Result); + AItem.SetBounds(TopLeft.X, TopLeft.Y, AItem.Width, ItemSize.cy); + + if (AItem.Count > 0) and AItem.IsExpanded then + for I := 0 to AItem.Count - 1 do + Result := UpdateSize(AItem.ItemByIndex(I), Result, ContentWidth, BottomRight); + end + else + AItem.SetBounds(TopLeft.X, TopLeft.Y, AItem.Width, 0); + end; + + procedure AdjustWidth(const AItem: TTreeViewItem; const BottomRight: TPointF); + var + I: Integer; + P: TPointF; + begin + if AItem.IsVisible or AItem.ShowInDesigner then + begin + P := Content.LocalToAbsolute(BottomRight); + P := AItem.ParentControl.AbsoluteToLocal(Content.LocalToAbsolute(BottomRight)); + AItem.SetWidth(P.X - AItem.Position.X); + if AItem.IsExpanded then + for I := 0 to AItem.Count - 1 do + AdjustWidth(AItem.ItemByIndex(I), BottomRight); + end; + end; + +var + I: Integer; + CurY: Single; + LLocalRect: TRectF; +begin + FirstItemHeight := 0; + UpdateGlobalIndexes; + if (not IsUpdating) and (ContentLayout <> nil) then + begin + LLocalRect := ContentLayout.LocalRect; + Result := LLocalRect; + if Result.Bottom = Result.Top then + Result.Bottom := Result.Top + 1; + { content } + FCountExpanded := 0; + if Content <> nil then + begin + { Sort if need } + SortItems; + { align } + CurY := 0; + FTextLayout := TTextLayoutManager.DefaultTextLayout.Create; + try + for I := 0 to Count - 1 do + CurY := UpdateSize(ItemByIndex(I), CurY, LLocalRect.Width, Result.BottomRight); + finally + FreeAndNil(FTextLayout); + end; + for I := 0 to Count - 1 do + AdjustWidth(ItemByIndex(I), Result.BottomRight); + end; + UpdateVisibleItems; + end; +end; + +procedure TCustomTreeView.ViewportPositionChange(const OldViewportPosition, NewViewportPosition: TPointF; + const ContentSizeChanged: Boolean); +begin + inherited; + UpdateVisibleItems; + UpdateSelection; +end; + +function TCustomTreeView.ItemByIndex(const Idx: Integer): TTreeViewItem; +begin + if (Idx >= 0) and (Idx < Count) then + begin + Assert(Content.Controls[Idx] is TTreeViewItem); + Result := TTreeViewItem(Content.Controls[Idx]); + end + else + raise ERangeError.CreateFMT(sArgumentOutOfRange_Index, [Idx, Count]); +end; + +function TCustomTreeView.ItemByGlobalIndex(const Idx: Integer): TTreeViewItem; +begin + Result := FGlobalList[Idx]; +end; + +function TCustomTreeView.ObjectAtPoint(P: TPointF): IControl; +var + Local, Abs: TPointF; + Inner: IControl; + function CheckScrollBar(ScrollBar: TScrollBar): Boolean; + var + R: TRectF; + begin + Result := (ScrollBar <> nil) and + (ScrollBar.Visible) and + (ScrollBar.Enabled) and + (ScrollBar.HitTest); + if Result then + begin + R := ScrollBar.AbsoluteRect; + Result := R.Contains(Abs); + end; + end; +begin + Local := ScreenToLocal(P); + if LocalRect.Contains(Local) then + begin + Abs := LocalToAbsolute(Local); + if CheckScrollBar(VScrollBar) then + Result := IControl(VScrollBar).ObjectAtPoint(P) + else if CheckScrollBar(HScrollBar) then + Result := IControl(HScrollBar).ObjectAtPoint(P) + else + begin + if not Supports(ItemByPoint(Local.X, Local.Y), IControl, Result) then + Result := inherited ObjectAtPoint(P) + else + begin + Inner := Result.ObjectAtPoint(P); + if Inner <> nil then + Result := Inner + else + if CheckHitTest(HitTest) then + Result := Self + else + Result := inherited ObjectAtPoint(P); + end; + end; + end + else + Result := nil; +end; + +function TCustomTreeView.ItemByPoint(const X, Y: Single): TTreeViewItem; +var + I: Integer; + P: TPointF; + Item: TTreeViewItem; + + function PointInItem(const Itm: TTreeViewItem; const Pt: TPointF): Boolean; + var + ItemPt: TPointF; + begin + ItemPt := Item.AbsoluteToLocal(Pt); + Result := Content.PointInObject(Pt.X, Pt.Y) + and (ItemPt.Y >= (0 - TouchTargetExpansion.Top)) and (ItemPt.Y <= (Itm.Height + TouchTargetExpansion.Bottom)); + end; + +begin + P := LocaltoAbsolute(PointF(X, Y)); + if GlobalCount > 0 then + for I := FFirstVisibleItem to FLastVisibleItem do + begin + Item := FGlobalList[I]; + if not Item.Visible then + Continue; + if not IntersectRect(Item.UpdateRect, UpdateRect) then + Continue; + if PointInItem(Item, P) then + Exit(Item); + end; + Result := nil; +end; + +function TCustomTreeView.ItemByText(const AText: string): TTreeViewItem; +var + Item: TTreeViewItem; + I: Integer; +begin + Result := nil; + for I := 0 to GlobalCount - 1 do + begin + Item := ItemByGlobalIndex(I); + if CompareText(AText, Item.Text) = 0 then + Exit(Item); + end; +end; + +procedure TCustomTreeView.KeyDown(var Key: Word; var KeyChar: System.WideChar; Shift: TShiftState); + + procedure SelectUpperItem; + var + I: Integer; + begin + if Selected.GlobalIndex > 0 then + begin + I := Selected.GlobalIndex - 1; + while (I >= 0) and (ItemByGlobalIndex(I).GlobalIndex > 0) and (not ItemByGlobalIndex(I).IsVisible) do + Dec(I); + if (I >= 0) and ItemByGlobalIndex(I).IsVisible then + Selected := ItemByGlobalIndex(I); + end; + end; + + procedure SelectLowerItem; + var + I: Integer; + begin + if Selected.GlobalIndex < GlobalCount - 1 then + begin + I := Selected.GlobalIndex + 1; + while (I < GlobalCount) and (ItemByGlobalIndex(I).GlobalIndex < Pred(GlobalCount)) and (not ItemByGlobalIndex(I).IsVisible) do + Inc(I); + if (I < GlobalCount) and ItemByGlobalIndex(I).IsVisible then + Selected := ItemByGlobalIndex(I); + end; + end; + +var + LSelParentItem : TTreeViewItem; +begin + inherited KeyDown(Key, KeyChar, Shift); + if (Count > 0) and (Selected <> nil) then + begin + case Key of + vkAdd: + Selected.Expand; + vkSubtract: + Selected.Collapse; + vkHome: + begin + Selected := ItemByGlobalIndex(0); + if not Selected.Visible then + SelectLowerItem; + end; + vkEnd: + begin + Selected := ItemByGlobalIndex(GlobalCount - 1); + if not Selected.Visible then + SelectUpperItem; + end; + vkUp: + SelectUpperItem; + vkDown: + SelectLowerItem; + vkLeft: + if Selected.IsExpanded then + Selected.Collapse + else + begin + LSelParentItem := Selected.ParentItem; + if LSelParentItem <> nil then + begin + Selected := LSelParentItem; + if not Selected.IsVisible then + SelectUpperItem; + end; + end; + vkRight: + if not Selected.IsExpanded then + Selected.Expand + else + if Selected.FContent.ControlsCount > 0 then + SelectLowerItem; + else + Exit; + end; + Key := 0; + end; +end; + +procedure TCustomTreeView.KeyUp(var Key: Word; var KeyChar: System.WideChar; Shift: TShiftState); +begin + inherited; +end; + +function TCustomTreeView.LocalPointToHoveredItemLocalPoint(const AX, AY: Single): TPointF; +begin + if HoveredItem <> nil then + begin + Result := Self.LocalToScreen(PointF(AX, AY)); + Result := HoveredItem.ScreenToLocal(Result); + end; +end; + +procedure TCustomTreeView.DragOver(const Data: TDragObject; const Point: TPointF; + var Operation: TDragOperation); +var + Obj: TTreeViewItem; +begin + inherited ; + Obj := ItemByPoint(Point.X, Point.Y); + if Obj <> FDragItem then + begin + if FDragItem <> nil then + begin + FDragItem.DragLeave; + FDragItem.RemoveFreeNotify(Self); + end; + FDragItem := Obj; + if FDragItem <> nil then + begin + inherited DragLeave; + FDragItem.AddFreeNotify(Self); + FDragItem.DragEnter(Data, FDragItem.AbsoluteToLocal(LocalToAbsolute(Point))); + Operation := TDragOperation.Move; + end + else + begin + DragEnter(Data, Point); + Operation := TDragOperation.None; + end; + end + else + Operation := TDragOperation.Move; + + if (Data.Source is TTreeViewItem) and (TTreeViewItem(Data.Source) = FDragItem) then + Operation := TDragOperation.None; +end; + +procedure TCustomTreeView.DragDrop(const Data: TDragObject; const Point: TPointF); +var + Allow: Boolean; + WasSelected: Boolean; + SourceItem, DestItem: TTreeViewItem; +begin + if FDragItem <> nil then + begin + FDragItem.DragLeave; + FDragItem.RemoveFreeNotify(Self); + FDragItem := nil; + end; + DestItem := ItemByPoint(Point.X, Point.Y); + if (Data.Source is TTreeViewItem) and IsChild(TTreeViewItem(Data.Source)) then + begin + SourceItem := TTreeViewItem(Data.Source); + Allow := True; + if Assigned(OnDragChange) then + OnDragChange(SourceItem, DestItem, Allow); + if Allow and not SourceItem.IsChild(DestItem) then + begin + WasSelected := SourceItem.FIsSelected; + if DestItem <> nil then + begin + SourceItem.Parent := DestItem; + DestItem.Expand; + end + else + begin + SourceItem.Parent := Self; + SourceItem.Expand; + end; + SourceItem.IsSelected := WasSelected; + end; + end + else if DestItem <> nil then + DestItem.DragDrop(Data, DestItem.AbsoluteToLocal(LocalToAbsolute(Point))) + else + inherited DragDrop(Data, Point); +end; + +procedure TCustomTreeView.DragLeave; +begin + inherited; + if FDragItem <> nil then + begin + FDragItem.DragLeave; + FDragItem.RemoveFreeNotify(Self); + FDragItem := nil; + end; +end; + +procedure TCustomTreeView.MouseClick(Button: TMouseButton; Shift: TShiftState; + X, Y: Single); +var + P: TPointF; +begin + inherited; + if (HoveredItem <> nil) and MouseInContentLayout(X, Y) then + begin + P := LocalPointToHoveredItemLocalPoint(X, Y); + HoveredItem.MouseClick(Button, Shift, P.X, P.Y); + end; +end; + +procedure TCustomTreeView.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Single); + + procedure TryMakeMultiSelect; + var + Item: TTreeViewItem; + begin + Item := ItemByPoint(X, Y); + if Item = nil then + Exit; + + if ([ssCtrl, ssCommand] * Shift) <> [] then + Item.IsSelected := not Item.IsSelected + else if ssShift in Shift then + begin + SelectRange(Selected, Item); + Selected := Item; + end + else + begin + SelectRange(Item, Item); + Selected := Item; + end; + FFirstSelect := Item; + end; + + procedure TryMakeSingleSelectAndStartDrag; + var + Item: TTreeViewItem; + begin + Item := ItemByPoint(X, Y); + if Item = nil then + Exit; + Selected := Item; + if AllowDrag then + FStartDrag := True; + end; + +var + P: TPointF; + IsMouseInContent: Boolean; +begin + // It's important to make selection before base mouse down processing. Because developer can remove nodes from this + // event handler. In this case, if he removes selected items, new node on old place will be repeatedly selected again. + IsMouseInContent := MouseInContentLayout(X, Y); + if IsMouseInContent then + begin + // Making selection of Items + if Button = TMouseButton.mbLeft then + begin + if MultiSelect then + TryMakeMultiSelect + else + TryMakeSingleSelectAndStartDrag; + FMouseSelecting := True; + end; + end; + + inherited MouseDown(Button, Shift, X, Y); + + // Transfer Click to Hovered Item + if IsMouseInContent and (HoveredItem <> nil) then + begin + P := LocalPointToHoveredItemLocalPoint(X, Y); + HoveredItem.MouseDown(Button, Shift, P.X, P.Y); + end; +end; + +function TCustomTreeView.MouseInContentLayout(const X, Y: Single): Boolean; +var + P: TPointF; +begin + Result := False; + if ContentLayout <> nil then + begin + P := TPointF.Create(X, Y); + P := LocalToAbsolute(P); + Result := ContentLayout.AbsoluteRect.Contains(P); + end; +end; + +procedure TCustomTreeView.MouseMove(Shift: TShiftState; X, Y: Single); +var + Item: TTreeViewItem; + P: TPointF; + LBitMap: TBitmap; +begin + inherited MouseMove(Shift, X, Y); + if MouseInContentLayout(X, Y) then + begin + Item := ItemByPoint(X, Y); + + /// There is a case when Selected can be equal to nil + /// by doing additional check here, we are + /// saving ourselves from yet another AV error + if AllowDrag and FStartDrag and (Selected <> nil) then + begin + FStartDrag := False; + LBitMap := Selected.MakeScreenshot; + try + Root.BeginInternalDrag(Selected, LBitMap); + finally + LBitMap.Free; + end; + end; + SetHoveredItem(Item); + if HoveredItem <> nil then + begin + P := LocalPointToHoveredItemLocalPoint(X, Y); + HoveredItem.MouseMove(Shift, P.X, P.Y); + end; + end; +end; + +procedure TCustomTreeView.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Single); +var + P: TPointF; +begin + inherited MouseUp(Button, Shift, X, Y); + FFirstSelect := nil; + FMouseSelecting := False; + if (HoveredItem <> nil) and MouseInContentLayout(X, Y) then + begin + P := LocalPointToHoveredItemLocalPoint(X, Y); + HoveredItem.MouseUp(Button, Shift, P.X, P.Y); + end; + FStartDrag := False; +end; + +procedure TCustomTreeView.MouseWheel(Shift: TShiftState; WheelDelta: Integer; + var Handled: Boolean); +begin + inherited; + if HoveredItem <> nil then + HoveredItem.MouseWheel(Shift, WheelDelta, Handled); +end; + +procedure TCustomTreeView.ChangeOrder; +begin + inherited ChangeOrder; + InvalidateContentSize; + if not IsUpdating then + RealignContent; +end; + +procedure TCustomTreeView.Clear; +var + i: Integer; + TmpObj: TFmxObject; +begin + BeginUpdate; + try + FToInflate.Clear; + if (Content <> nil) and (Count > 0) then + for i := Content.ControlsCount - 1 downto 0 do + if Content.Controls[i] is TTreeViewItem then + begin + TmpObj := Content.Controls[i]; + TmpObj.DisposeOf; + end; + FSelected := nil; + FFirstVisibleItem := 0; + FLastVisibleItem := 0; + UpdateGlobalIndexes; + UpdateSelection; + finally + EndUpdate; + end; +end; + +procedure TCustomTreeView.SelectRange(const Item1, Item2: TTreeViewItem); +var + i: Integer; + FirstItemIndex: Integer; + LastItemIndex: Integer; +begin + if (Item1 = nil) or (Item2 = nil) then + Exit; + FirstItemIndex := Min(Item1.GlobalIndex, Item2.GlobalIndex); + LastItemIndex := Max(Item1.GlobalIndex, Item2.GlobalIndex); + + for i := 0 to FirstItemIndex - 1 do + ItemByGlobalIndex(i).Deselect; + for i := FirstItemIndex to LastItemIndex do + ItemByGlobalIndex(i).Select; + for i := LastItemIndex + 1 to GlobalCount - 1 do + ItemByGlobalIndex(i).Deselect; +end; + +procedure TCustomTreeView.ClearSelection; +var + Item: TTreeViewItem; +begin + for Item in FGlobalList do + Item.IsSelected := False; +end; + +procedure TCustomTreeView.SelectAll; +var + Item: TTreeViewItem; +begin + for Item in FGlobalList do + Item.IsSelected := True; +end; + +procedure TCustomTreeView.DoChange; +begin + if Assigned(FOnChange) and not (csLoading in ComponentState) then + FOnChange(Self); +end; + +procedure TCustomTreeView.DoChangeCheck(const Item: TTreeViewItem); +begin + if Assigned(FOnChangeCheck) then + FOnChangeCheck(Item); +end; + +procedure TCustomTreeView.DoContentPaint(Sender: TObject; Canvas: TCanvas; + const ARect: TRectF); +var + I: Integer; + Item: TTreeViewItem; + P: TPointF; + R: TRectF; +begin + if (Content <> nil) and (ContentLayout <> nil) then + begin + if FAlternatingRowBackground then + begin + Canvas.Fill.Assign(FOddFill); + for I := FFirstVisibleItem to FLastVisibleItem do + begin + if Odd(I) then + begin + Item := ItemByGlobalIndex(I); + P := Item.LocalToAbsolute(PointF(0, 0)); + P := TControl(Sender).AbsoluteToLocal(P); + R := RectF(0, P.Y, ContentLayout.Width, P.Y + Item.Height); + if not IntersectRect(R, ARect) then + Continue; + Canvas.FillRect(R, 0, 0, [], AbsoluteOpacity); + end; + end; + end; + end; +end; + +procedure TCustomTreeView.DoEnter; +begin + inherited DoEnter; + if Selected <> nil then + UpdateSelection; +end; + +procedure TCustomTreeView.DoExit; +begin + inherited DoExit; + if Selected <> nil then + UpdateSelection; +end; + +procedure TCustomTreeView.DoInsertObject(Index: Integer; const AObject: TFmxObject); +begin + if (Content <> nil) and (AObject is TTreeViewItem) then + begin + if FUpdating > TTreeViewItem(AObject).FUpdating then + TTreeViewItem(AObject).BeginUpdate; + Content.InsertObject(Index, AObject); + if [csLoading, csDestroying] * ComponentState = [] then + TTreeViewItem(AObject).SetImages(Images); + end + else + inherited DoInsertObject(Index, AObject); +end; + +procedure TCustomTreeView.DoAddObject(const AObject: TFmxObject); +begin + if (Content <> nil) and (AObject is TTreeViewItem) then + begin + if FUpdating > TTreeViewItem(AObject).FUpdating then + TTreeViewItem(AObject).BeginUpdate; + Content.AddObject(AObject); + if [csLoading, csDestroying] * ComponentState = [] then + TTreeViewItem(AObject).SetImages(Images); + end + else + inherited DoAddObject(AObject); +end; + +procedure TCustomTreeView.DoRemoveObject(const AObject: TFmxObject); +begin + if (AObject is TTreeViewItem) and (TTreeViewItem(AObject).TreeView = Self) then + begin + TTreeViewItem(AObject).Parent := nil; + if [csLoading, csDestroying] * ComponentState = [] then + TTreeViewItem(AObject).SetImages(nil); + end + else + inherited DoRemoveObject(AObject); +end; + +procedure TCustomTreeView.DoUpdateAniCalculations(const AAniCalculations: TScrollCalculations); +begin + inherited; + AAniCalculations.AutoShowing := False; + AAniCalculations.Animation := False; + AAniCalculations.BoundsAnimation := False; +end; + +function TCustomTreeView.IsAddToContent(const AObject: TFmxObject): Boolean; +begin + Result := inherited IsAddToContent(AObject) and (AObject <> FNoItemsContent); +end; + +function TCustomTreeView.IsOpaque: Boolean; +begin + Result := True; +end; + +procedure TCustomTreeView.ContentAddObject(const AObject: TFmxObject); +begin + if not (AObject is TTreeViewItem) then + begin + if FNoItemsContent = nil then + begin + FNoItemsContent := TContent.Create(Self); + FNoItemsContent.Parent := Self; + FNoItemsContent.SetBounds(0, 0, 0, 0); + FNoItemsContent.Stored := False; + FNoItemsContent.Locked := True; + FNoItemsContent.HitTest := False; + end; + FNoItemsContent.AddObject(AObject) + end + else + begin + InvalidateContentSize; + InvalidateGlobalList; + if not TTreeViewItem(AObject).IsInflated then + FToInflate.Add(TTreeViewItem(AObject)); + if not IsUpdating then + RealignContent; + end; +end; + +procedure TCustomTreeView.ContentInsertObject(Index: Integer; const AObject: TFmxObject); +begin + ContentAddObject(AObject); +end; + +procedure TCustomTreeView.ContentRemoveObject(const AObject: TFmxObject); +begin + inherited; + if AObject is TTreeViewItem and not IsUpdating then + begin + Realign; + UpdateVisibleItems; + UpdateSelection; + end; +end; + +procedure TCustomTreeView.ContentBeforeRemoveObject(AObject: TFmxObject); +begin + inherited; + if AObject is TTreeViewItem then + begin + TTreeViewItem(AObject).FIsSelected := False; + if AObject = FSelected then + FSelected := nil; + InvalidateContentSize; + InvalidateGlobalList; + FToInflate.Remove(TTreeViewItem(AObject)); + end; +end; + +procedure TCustomTreeView.SetSelected(const Value: TTreeViewItem); +var + LFmxObject: TFmxObject; + P: TPointF; +begin + if (FSelected <> Value) and not FSelectionChanging then + begin + FSelectionChanging := True; + try + if (FSelected <> nil) and not MultiSelect then + FSelected.IsSelected := False; + + FSelected := Value; + if (FSelected <> nil) and (Content <> nil) then + begin + LFmxObject := FSelected.Parent; + while ((LFmxObject <> nil) and not (LFmxObject is TCustomTreeView)) do + begin + if LFmxObject is TTreeViewItem then + TTreeViewItem(LFmxObject).Expand; + LFmxObject := LFmxObject.Parent; + end; + if (Content <> nil) and (ContentLayout <> nil) and (VScrollBar <> nil) then + begin + P := ContentLayout.AbsoluteToLocal(FSelected.LocaltoAbsolute(TPointF.Zero)); + if P.Y < 0 then + VScrollBar.Value := VScrollBar.Value + P.Y; + if P.Y + FSelected.Margins.Top + FSelected.Margins.Bottom + FSelected.Height > ContentLayout.Height then + VScrollBar.Value := VScrollBar.Value + (P.Y + FSelected.Margins.Top + FSelected.Margins.Bottom + + FSelected.Height - ContentLayout.Height); + end; + FSelected.IsSelected := True; + end; + finally + FSelectionChanging := False; + end; + DoChange; + end; +end; + +procedure TCustomTreeView.Notification(AComponent: TComponent; Operation: TOperation); +begin + inherited; + if Operation = opRemove then + begin + if AComponent = FSelected then + FSelected := nil; + if AComponent = FDragItem then + FDragItem := nil; + if AComponent = FHoveredItem then + FHoveredItem := nil; + if AComponent = FFirstSelect then + FFirstSelect := nil; + end; +end; + +procedure TCustomTreeView.NotifyInflated; +begin + RealignContent; +end; + +procedure TCustomTreeView.SetItemHeight(const Value: Single); +var + OldSetItemHeight, NewSetItemHeight: Boolean; + I: Integer; + procedure ClearHeight(Item: TTreeViewItem); + var + I: Integer; + begin + Item.Height := 0; + for I := 0 to Item.Count - 1 do + ClearHeight(Item.Items[I]); + end; +begin + if FItemHeight <> Value then + begin + OldSetItemHeight := FItemHeight > 0; + FItemHeight := Value; + NewSetItemHeight := FItemHeight > 0; + if (OldSetItemHeight <> NewSetItemHeight) and (not NewSetItemHeight) then + begin + BeginUpdate; + try + for I := 0 to Count - 1 do + ClearHeight(Items[I]); + finally + EndUpdate + end; + end; + RealignContent; + end; +end; + +procedure TCustomTreeView.CollapseAll; +var + i: Integer; + Item: TTreeViewItem; +begin + BeginUpdate; + try + for i := Count - 1 downto 0 do + begin + Item := Items[i]; + if Item <> nil then + Item.CollapseAll; + end; + finally + EndUpdate; + end; +end; + +procedure TCustomTreeView.ExpandAll; +var + i: Integer; + Item: TTreeViewItem; +begin + BeginUpdate; + try + for i := Count - 1 downto 0 do + begin + Item := Items[i]; + if Item <> nil then + Item.ExpandAll; + end; + finally + EndUpdate; + end; +end; + +procedure TCustomTreeView.SetCheckboxesVisibility(const Value: Boolean); +var + i: Integer; + Item : TTreeViewItem; +begin + if FShowCheckboxes <> Value then + begin + FShowCheckboxes := Value; + for i := 0 to Count - 1 do + begin + Item := Items[i]; + if Item <> nil then + Item.UpdateCheckBoxVisibility; + end; + RealignContent; + end; +end; + +function TCustomTreeView.GetTreeItem(Index: Integer): TTreeViewItem; +begin + Result := ItemByIndex(Index); +end; + +procedure TCustomTreeView.SetSorted(const Value: Boolean); +begin + if FSorted <> Value then + begin + FSorted := Value; + RealignContent; + end; +end; + +procedure TCustomTreeView.SetAllowDrag(const Value: Boolean); +begin + if FAllowDrag <> Value then + begin + FAllowDrag := Value; + if FAllowDrag then + EnableDragHighlight := True; + end; +end; + +procedure TCustomTreeView.SetAlternatingRowBackground(const Value: Boolean); +begin + if FAlternatingRowBackground <> Value then + begin + FAlternatingRowBackground := Value; + Repaint; + end; +end; + +procedure TCustomTreeView.SetHoveredItem(const Value: TTreeViewItem); +begin + if FHoveredItem <> Value then + begin + try + if FHoveredItem <> nil then + begin + TComponent(FHoveredItem).RemoveFreeNotification(Self); + FHoveredItem.DoMouseLeave; + end; + finally + FHoveredItem := Value; + if FHoveredItem <> nil then + begin + TComponent(FHoveredItem).FreeNotification(Self); + FHoveredItem.DoMouseEnter; + end; + end; + end; +end; + +function TCustomTreeView.GetCount: Integer; +begin + Result := 0; + if Content <> nil then + Result := Content.ControlsCount; +end; + +function TCustomTreeView.GetGlobalCount: Integer; +begin + UpdateGlobalIndexes(False); + Result := FGlobalList.Count; +end; + +procedure TCustomTreeView.InvalidateGlobalList; +begin + FGlobalList.Clear; +end; + +procedure TCustomTreeView.ItemExpanded(const Item: TTreeViewItem); +var + I: Integer; + Child: TTreeViewItem; +begin + InvalidateGlobalList; + if Item.IsExpanded then + for I := 0 to Item.Count - 1 do + begin + Child := Item.Items[I]; + if not Child.IsInflated then + Child.Inflate; + end; + RealignContent; +end; + +function TCustomTreeView.GetImages: TCustomImageList; +begin + Result := TCustomImageList(FImageLink.Images); +end; + +procedure TCustomTreeView.SetImages(const Value: TCustomImageList); +begin + FImageLink.Images := Value; +end; + +function TCustomTreeView.GetImageIndex: TImageIndex; +begin + Result := -1; +end; + +procedure TCustomTreeView.SetImageIndex(const Value: TImageIndex); +begin + // none +end; + +function TCustomTreeView.GetImageList: TBaseImageList; +begin + Result := GetImages; +end; + +procedure TCustomTreeView.Loaded; +begin + inherited; + ImagesChanged; +end; + +procedure TCustomTreeView.ImagesChanged; +var + I: Integer; +begin + if (FImages <> FImageLink.Images) and ([csDestroying, csLoading] * ComponentState = []) then + begin + FImages := TCustomImageList(FImageLink.Images); + BeginUpdate; + try + for I := 0 to Count - 1 do + Items[I].SetImages(FImages); + finally + EndUpdate; + end; + end; +end; + +procedure TCustomTreeView.SetImageList(const Value: TBaseImageList); +begin + ValidateInheritance(Value, TCustomImageList); + SetImages(TCustomImageList(Value)); +end; + +initialization + RegisterFmxClasses([TTreeView, TTreeViewItem]); +end. diff --git a/src/lib/FMX/DX 11.0/FMX.Graphics.pas b/src/lib/FMX/DX 11.0/FMX.Graphics.pas new file mode 100644 index 0000000..a2dcf12 --- /dev/null +++ b/src/lib/FMX/DX 11.0/FMX.Graphics.pas @@ -0,0 +1,7439 @@ +{*******************************************************} +{ } +{ Delphi FireMonkey Platform } +{ } +{ Copyright(c) 2011-2021 Embarcadero Technologies, Inc. } +{ All rights reserved } +{ } +{*******************************************************} + +unit FMX.Graphics; + +{$MINENUMSIZE 4} +{$H+} + +interface + +{$SCOPEDENUMS ON} + +uses + System.Types, System.UITypes, System.Classes, System.Messaging, System.Generics.Collections, System.SysUtils, + FMX.Types, FMX.Surfaces, System.Math.Vectors; + +type + TCanvas = class; + TCanvasClass = class of TCanvas; + TBitmap = class; + TBitmapImage = class; + TTextSettings = class; + +{ TGradientPoint } + + TGradientPoint = class(TCollectionItem) + private + FColor: TAlphaColor; + FOffset: Single; + procedure SetColor(const Value: TAlphaColor); + procedure SetOffset(const Value: Single); + public + procedure Assign(Source: TPersistent); override; + property IntColor: TAlphaColor read FColor write FColor; + published + property Color: TAlphaColor read FColor write SetColor; + property Offset: Single read FOffset write SetOffset nodefault; + end; + +{ TGradientPoints } + + TGradientPoints = class(TCollection) + private + function GetPoint(Index: Integer): TGradientPoint; + protected + procedure Update(Item: TCollectionItem); override; + public + property Points[Index: Integer]: TGradientPoint read GetPoint; default; + end; + +{ TGradient } + + TGradientStyle = (Linear, Radial); + + TGradient = class(TPersistent) + private + FPoints: TGradientPoints; + FOnChanged: TNotifyEvent; + FStartPosition: TPosition; + FStopPosition: TPosition; + FStyle: TGradientStyle; + FRadialTransform: TTransform; + procedure SetStartPosition(const Value: TPosition); + procedure SetStopPosition(const Value: TPosition); + procedure PositionChanged(Sender: TObject); + procedure SetColor(const Value: TAlphaColor); + procedure SetColor1(const Value: TAlphaColor); + function IsLinearStored: Boolean; + procedure SetStyle(const Value: TGradientStyle); + function IsRadialStored: Boolean; + procedure SetRadialTransform(const Value: TTransform); + procedure SetPoints(const Value: TGradientPoints); + public + constructor Create; + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + procedure Change; + procedure ApplyOpacity(const AOpacity: Single); + function InterpolateColor(Offset: Single): TAlphaColor; overload; + function InterpolateColor(X, Y: Single): TAlphaColor; overload; + function Equal(const AGradient: TGradient): Boolean; + property OnChanged: TNotifyEvent read FOnChanged write FOnChanged; + { fast access } + property Color: TAlphaColor write SetColor; + property Color1: TAlphaColor write SetColor1; + published + property Points: TGradientPoints read FPoints write SetPoints; + property Style: TGradientStyle read FStyle write SetStyle default TGradientStyle.Linear; + { linear } + property StartPosition: TPosition read FStartPosition write SetStartPosition stored IsLinearStored; + property StopPosition: TPosition read FStopPosition write SetStopPosition stored IsLinearStored; + { radial } + property RadialTransform: TTransform read FRadialTransform write SetRadialTransform stored IsRadialStored; + end; + +{ TBrushResource } + + TBrush = class; + TBrushObject = class; + + TBrushResource = class(TInterfacedPersistent, IFreeNotification) + private + FStyleResource: TBrushObject; + FStyleLookup: string; + FOnChanged: TNotifyEvent; + function GetBrush: TBrush; + procedure SetStyleResource(const Value: TBrushObject); + function GetStyleLookup: string; + procedure SetStyleLookup(const Value: string); + { IFreeNotification } + procedure FreeNotification(AObject: TObject); + public + destructor Destroy; override; + property OnChanged: TNotifyEvent read FOnChanged write FOnChanged; + procedure Assign(Source: TPersistent); override; + property Brush: TBrush read GetBrush; + published + property StyleResource: TBrushObject read FStyleResource write SetStyleResource stored False; + property StyleLookup: string read GetStyleLookup write SetStyleLookup; + end; + +{ TBrushBitmap } + + TWrapMode = (Tile, TileOriginal, TileStretch); + + TBrushBitmap = class(TInterfacedPersistent) + private + FOnChanged: TNotifyEvent; + FBitmap: TBitmap; + FWrapMode: TWrapMode; + procedure SetWrapMode(const Value: TWrapMode); + procedure SetBitmap(const Value: TBitmap); + function GetBitmapImage: TBitmapImage; + protected + procedure DoChanged; virtual; + public + constructor Create; + destructor Destroy; override; + property OnChanged: TNotifyEvent read FOnChanged write FOnChanged; + procedure Assign(Source: TPersistent); override; + published + property Bitmap: TBitmap read FBitmap write SetBitmap; + /// Image to be used by the brush. + property Image: TBitmapImage read GetBitmapImage; + property WrapMode: TWrapMode read FWrapMode write SetWrapMode; + end; + +{ TBrush } + + TBrushKind = (None, Solid, Gradient, Bitmap, Resource); + + TBrush = class(TPersistent) + private + FColor: TAlphaColor; + FKind: TBrushKind; + FOnChanged: TNotifyEvent; + FGradient: TGradient; + FDefaultKind: TBrushKind; + FDefaultColor: TAlphaColor; + FResource: TBrushResource; + FBitmap: TBrushBitmap; + FOnGradientChanged: TNotifyEvent; + procedure SetColor(const Value: TAlphaColor); + procedure SetKind(const Value: TBrushKind); + procedure SetGradient(const Value: TGradient); + function IsColorStored: Boolean; + function IsGradientStored: Boolean; + function GetColor: TAlphaColor; + function IsKindStored: Boolean; + procedure SetResource(const Value: TBrushResource); + function IsResourceStored: Boolean; + function IsBitmapStored: Boolean; + protected + procedure GradientChanged(Sender: TObject); + procedure ResourceChanged(Sender: TObject); + procedure BitmapChanged(Sender: TObject); + public + constructor Create(const ADefaultKind: TBrushKind; const ADefaultColor: TAlphaColor); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + property OnChanged: TNotifyEvent read FOnChanged write FOnChanged; + property OnGradientChanged: TNotifyEvent read FOnGradientChanged write FOnGradientChanged; + property DefaultColor: TAlphaColor read FDefaultColor write FDefaultColor; + property DefaultKind: TBrushKind read FDefaultKind write FDefaultKind; + published + property Color: TAlphaColor read GetColor write SetColor stored IsColorStored; + property Bitmap: TBrushBitmap read FBitmap write FBitmap stored IsBitmapStored; + property Kind: TBrushKind read FKind write SetKind stored IsKindStored; + property Gradient: TGradient read FGradient write SetGradient stored IsGradientStored; + property Resource: TBrushResource read FResource write SetResource stored IsResourceStored; + end; + + TStrokeCap = (Flat, Round); + + TStrokeJoin = (Miter, Round, Bevel); + + TStrokeDash = (Solid, Dash, Dot, DashDot, DashDotDot, Custom); + + TDashArray = TArray; + + TStrokeBrush = class(TBrush) + public type + TDashData = record + DashArray: TDashArray; + DashOffset: Single; + constructor Create(const ADashArray: TDashArray; ADashOffset: Single); + end; + + TDashDevice = (Screen, Printer); + TStdDashes = array [TDashDevice, TStrokeDash] of TDashData; + private class var + FStdDash: TStdDashes; + FStdDashCreated: Boolean; + private + FJoin: TStrokeJoin; + FThickness: Single; + FCap: TStrokeCap; + FDash: TStrokeDash; + FDashArray: TDashArray; + FDashOffset: Single; + function IsThicknessStored: Boolean; + procedure SetCap(const Value: TStrokeCap); + procedure SetDash(const Value: TStrokeDash); + procedure SetJoin(const Value: TStrokeJoin); + procedure SetThickness(const Value: Single); + function GetDashArray: TDashArray; + class function GetStdDash(const Device: TDashDevice; const Dash: TStrokeDash): TDashData; static; + procedure ReadCustomDash(AStream: TStream); + procedure WriteCustomDash(AStream: TStream); + protected + procedure DefineProperties(Filer: TFiler); override; + public + constructor Create(const ADefaultKind: TBrushKind; const ADefaultColor: TAlphaColor); reintroduce; + procedure Assign(Source: TPersistent); override; + procedure SetCustomDash(const Dash: array of Single; Offset: Single); + property DashArray: TDashArray read GetDashArray; + property DashOffset: Single read FDashOffset; + class property StdDash[const Device: TDashDevice; const Dash: TStrokeDash]: TDashData read GetStdDash; + published + property Thickness: Single read FThickness write SetThickness stored IsThicknessStored nodefault; + property Cap: TStrokeCap read FCap write SetCap default TStrokeCap.Flat; + property Dash: TStrokeDash read FDash write SetDash default TStrokeDash.Solid; + property Join: TStrokeJoin read FJoin write SetJoin default TStrokeJoin.Miter; + end; + + IFMXSystemFontService = interface(IInterface) + ['{62017F22-ADF1-44D9-A21D-796D8C7F3CF0}'] + function GetDefaultFontFamilyName: string; + function GetDefaultFontSize: Single; + end; + +{ TFont } + + TFontClass = class of TFont; + + TFontWeight = (Thin, UltraLight, Light, SemiLight, Regular, Medium, Semibold, Bold, UltraBold, Black, UltraBlack); + + /// + /// Font weight type helper + /// + TFontWeightHelper = record helper for TFontWeight + /// + /// Checks wherever current weight value is TFontWeight.Regular + /// + function IsRegular: Boolean; + end; + + TFontSlant = (Regular, Italic, Oblique); + + /// + /// Font slant type helper + /// + TFontSlantHelper = record helper for TFontSlant + /// + /// Checks wherever current slant value is TFontSlant.Regular + /// + function IsRegular: Boolean; + end; + + TFontStretch = (UltraCondensed, ExtraCondensed, Condensed, SemiCondensed, Regular, SemiExpanded, Expanded, + ExtraExpanded, UltraExpanded); + + /// + /// Font stretch type helper + /// + TFontStretchHelper = record helper for TFontStretch + /// + /// Checks wherever current stretch value is TFontStretch.Regular + /// + function IsRegular: Boolean; + end; + + /// + /// Extended font style based on TFontStyles. Support multi-weight and multi-stretch fonts + /// + TFontStyleExt = record + /// + /// Set of regular TFontStyle. May contains any TFontStyle value but TFont will process only + /// fsOutline and fsStrikeOut values + /// + SimpleStyle: TFontStyles; + /// + /// Default font weight value + /// + Weight: TFontWeight; + /// + /// Default font slant value + /// + Slant: TFontSlant; + /// + /// Default font stretch value + /// + Stretch: TFontStretch; + + /// + /// Common extended font style constructor. + /// Initialy new style is initializing using AOtherStyles values. After that AWeight, ASlant + /// and AStretch values are applying + /// + /// + /// Basicaly bsBold or fsItalic values in AOtherStyles are ignoring. Because after creating result from the set of + /// TFontStyle values system will set styles from AWeight, ASlant and AStretch which + /// will replace style values. + /// + class function Create(const AWeight: TFontWeight = TFontWeight.Regular; + const AStant: TFontSlant = TFontSlant.Regular; const AStretch: TFontStretch = TFontStretch.Regular; + const AOtherStyles: TFontStyles = []): TFontStyleExt; overload; static; inline; + /// Constructor that allows to create extended style from the regular TFontStyles + class function Create(const AStyle: TFontStyles): TFontStyleExt; overload; static; inline; + /// Default style with regular parameters without any decorations + class function Default: TFontStyleExt; static; inline; + // Operators + /// Overriding equality check operator + class operator Equal(const A, B: TFontStyleExt): Boolean; + /// Overriding inequality check operator + class operator NotEqual(const A, B: TFontStyleExt): Boolean; + /// Overriding implicit conversion to TFontStyles + class operator Implicit(const AStyle: TFontStyleExt): TFontStyles; + /// Overriding addition operator with both extended styles + class operator Add(const A, B: TFontStyleExt): TFontStyleExt; + /// Overriding addition operator with single font style item + class operator Add(const A: TFontStyleExt; const B: TFontStyle): TFontStyleExt; + /// Overriding addition operator with set of font styles + class operator Add(const A: TFontStyleExt; const B: TFontStyles): TFontStyleExt; + /// Overriding subtraction operator with single font style item + class operator Subtract(const A: TFontStyleExt; const B: TFontStyle): TFontStyleExt; + /// Overriding subtraction operator with set of font styles + class operator Subtract(const A: TFontStyleExt; const B: TFontStyles): TFontStyleExt; + /// Overriding check whether TFontStyle contains in TFontStyleExt + class operator In(const A: TFontStyle; const B: TFontStyleExt): Boolean; + /// Overriding Multiply set of TFontStyle to the TFontStyleExt + class operator Multiply(const A: TFontStyles; const B: TFontStyleExt): TFontStyles; + + /// + /// Overriding Multiply set of TFontStyle to the TFontStyleExt + /// + function IsRegular: Boolean; + end; + + TFont = class(TPersistent) + private const + DefaultFontSize: Single = 12.0; + DefaultFontFamily = 'Tahoma'; + MaxFontSize: Single = 512.0; + public + class var FontService: IFMXSystemFontService; + private + FSize: Single; + FFamily: TFontName; + FStyleExt: TFontStyleExt; + FUpdating: Boolean; + FChanged: Boolean; + FOnChanged: TNotifyEvent; + procedure SetFamily(const Value: TFontName); + procedure SetSize(const Value: Single); + function GetStyle: TFontStyles; + procedure SetStyle(const Value: TFontStyles); + procedure SetStyleExt(const Value: TFontStyleExt); + procedure ReadStyleExt(AStream: TStream); + procedure WriteStyleExt(AStream: TStream); + protected + procedure DefineProperties(Filer: TFiler); override; + function DefaultFamily: string; virtual; + function DefaultSize: Single; virtual; + procedure DoChanged; virtual; + public + constructor Create; + procedure AfterConstruction; override; + procedure Change; + procedure Assign(Source: TPersistent); override; + procedure SetSettings(const AFamily: string; const ASize: Single; const AStyle: TFontStyleExt); + function Equals(Obj: TObject): Boolean; override; + function IsFamilyStored: Boolean; + function IsSizeStored: Boolean; + property OnChanged: TNotifyEvent read FOnChanged write FOnChanged; + /// + /// Refrects current font style, including underline and strikeout + /// + property StyleExt: TFontStyleExt read FStyleExt write SetStyleExt; + published + property Family: TFontName read FFamily write SetFamily stored IsFamilyStored; + property Size: Single read FSize write SetSize stored IsSizeStored nodefault; + property Style: TFontStyles read GetStyle write SetStyle stored False; + end; + +{ TBitmapCodec } + + TBitmapCodecSaveParams = record + // encode quality 0..100 + Quality: Integer; + end; + PBitmapCodecSaveParams = ^TBitmapCodecSaveParams; + + TCustomBitmapCodec = class abstract + public + class function GetImageSize(const AFileName: string): TPointF; virtual; abstract; + class function IsValid(const AStream: TStream): Boolean; virtual; abstract; + function LoadFromFile(const AFileName: string; const ABitmap: TBitmapSurface; + const AMaxSizeLimit: Cardinal = 0): Boolean; virtual; abstract; + function LoadThumbnailFromFile(const AFileName: string; const AFitWidth, AFitHeight: Single; + const UseEmbedded: Boolean; const ABitmap: TBitmapSurface): Boolean; virtual; abstract; + function LoadFromStream(const AStream: TStream; const ABitmap: TBitmapSurface; + const AMaxSizeLimit: Cardinal = 0): Boolean; virtual; abstract; + function SaveToFile(const AFileName: string; const ABitmap: TBitmapSurface; const ASaveParams: PBitmapCodecSaveParams = nil): Boolean; virtual; abstract; + function SaveToStream(const AStream: TStream; const ABitmap: TBitmapSurface; const AExtension: string; + const ASaveParams: PBitmapCodecSaveParams = nil): Boolean; virtual; abstract; + end; + TCustomBitmapCodecClass = class of TCustomBitmapCodec; + +{ TBitmapCodecManager } + + EBitmapCodecManagerException = class(Exception); + + TBitmapCodecManager = class sealed + private type + TCodecDescriptor = record + Extension: string; + Description: string; + CodecClass: TCustomBitmapCodecClass; + CanSave: Boolean; + function ToFilterString: string; + end; + strict private + class var FCodecsDescriptors: TList; + class function SameExtension(const ALeft, ARight: string): Boolean; + class function FindCodecClass(const AFileExtension: string; var ACodecClass: TCustomBitmapCodecClass): Boolean; + class function FindWritableCodecClass(const AFileExtension: string; var ACodecClass: TCustomBitmapCodecClass): Boolean; + class function GuessCodecClass(const AFileExtension: string): TCustomBitmapCodecClass; + class function GetCodecsDescriptors: TList; static; + class property CodecsDescriptors: TList read GetCodecsDescriptors; + public + // Reserved for internal use only - do not call directly! + class procedure UnInitialize; + + { Registration and Unregistration } + + /// Register a bitmap codec class with a specified file extension and description. + /// If codec with specified AFileExtension was already registered or AFileExtension is empty + /// or ACodecClass is nil will raise EBitmapCodecManagerException. + class procedure RegisterBitmapCodecClass(const AFileExtension, ADescription: string; const ACanSave: Boolean; + const ACodecClass: TCustomBitmapCodecClass); + /// Unregisters codec with specified file extension AFileExtension. + class procedure UnregisterBitmapCodecClass(const AFileExtension: string); + + { Helpers } + + /// Returns list of supported image file extensions separated by ';'. + class function GetFileTypes: string; + /// Returns filter presentation of supported image types for TXXXDialog components. + class function GetFilterString: string; + /// Returns true, if codec with specified file extension was registered. + class function CodecExists(const AFileName: string): Boolean; overload; + /// Returns image size for specified file by AFileName. + class function GetImageSize(const AFileName: string): TPointF; + + { Loading } + + /// Loads image from file by AFileName to Bitmap surface ABitmap. If image successfully + /// loaded, it returns true, otherwise - false. + /// If ABitmap is nil, it will raise EBitmapCodecManagerException. + class function LoadFromFile(const AFileName: string; const ABitmap: TBitmapSurface; + const AMaxSizeLimit: Cardinal = 0): Boolean; + /// Loads image thumbnail with specified size AFitWidth and AFitHeight by file name + /// AFileName. If image successfully loaded, it returns true, otherwise - false. + /// If ABitmap is nil, it will raise EBitmapCodecManagerException. + class function LoadThumbnailFromFile(const AFileName: string; const AFitWidth, AFitHeight: Single; + const AUseEmbedded: Boolean; const ABitmap: TBitmapSurface): Boolean; + /// Loads image from the stream AStream. If image successfully loaded, it returns true, + /// otherwise - false. + /// If ABitmap or AStream is nil, it will raise EBitmapCodecManagerException. + class function LoadFromStream(const AStream: TStream; const ABitmap: TBitmapSurface; + const AMaxSizeLimit: Cardinal = 0): Boolean; + + { Saving } + + /// Saves bitmap ABitmap to the stream AStream with using codec with specified extension + /// AExtension. Optionally, you can specify save options. For example, the quality. If image successfully + /// saved to the stream, it returns true, otherwise - false. + /// If ABitmap or AStream is nil, it will raise EBitmapCodecManagerException. + class function SaveToStream(const AStream: TStream; const ABitmap: TBitmapSurface; const AExtension: string; + const ASaveParams: PBitmapCodecSaveParams = nil): Boolean; overload; + /// Saves bitmap ABitmap to the file AFileName . It uses codec extracted by FileName + /// extension. Optionally, you can specify save options. For example, the quality. If image successfully saved to + /// the file, it returns true, otherwise - false. + /// If ABitmap is nil, it will raise EBitmapCodecManagerException. + class function SaveToFile(const AFileName: string; const ABitmap: TBitmapSurface; + const ASaveParams: PBitmapCodecSaveParams = nil): Boolean; + end; + +{ TImageTypeChecker } + + /// Helper class for BitmapCodec. + TImageTypeChecker = class + private type + TImageData = record + DataType: string; + Length: Integer; + Header: array [0..3] of Byte; + end; + public + /// Analyzes the header to guess the image format of he given file. + class function GetType(const AFileName: string): string; overload; + /// Analyzes the header to guess the image format of he given stream. + class function GetType(const AData: TStream): string; overload; + end; + +{ TBitmap } + + IBitmapObject = interface(IFreeNotificationBehavior) + ['{5C17D001-47C1-462F-856D-8358B7B2C842}'] + function GetBitmap: TBitmap; + property Bitmap: TBitmap read GetBitmap; + end; + + TBitmapData = record + private + FPixelFormat: TPixelFormat; + FWidth: Integer; + FHeight: Integer; + function GetBytesPerPixel: Integer; + function GetBytesPerLine: Integer; + public + Data: Pointer; + Pitch: Integer; + constructor Create(const AWidth, AHeight: Integer; const APixelFormat: TPixelFormat); + function GetPixel(const X, Y: Integer): TAlphaColor; + procedure SetPixel(const X, Y: Integer; const AColor: TAlphaColor); + procedure Copy(const Source: TBitmapData); + // Access to scanline in PixelFormat + function GetScanline(const I: Integer): Pointer; + function GetPixelAddr(const I, J: Integer): Pointer; + property PixelFormat: TPixelFormat read FPixelFormat; + property BytesPerPixel: Integer read GetBytesPerPixel; + property BytesPerLine: Integer read GetBytesPerLine; + property Width: Integer read FWidth; + property Height: Integer read FHeight; + end; + + TMapAccess = (Read, Write, ReadWrite); + + TBitmapImage = class + private + FRefCount: Integer; + FHandle: THandle; + FCanvasClass: TCanvasClass; + FWidth: Integer; + FHeight: Integer; + FBitmapScale: Single; + FPixelFormat: TPixelFormat; + procedure CreateHandle; + procedure FreeHandle; + function GetCanvasClass: TCanvasClass; + public + constructor Create; + procedure IncreaseRefCount; inline; + procedure DecreaseRefCount; + property RefCount: Integer read FRefCount; + property CanvasClass: TCanvasClass read GetCanvasClass; + property Handle: THandle read FHandle; + property BitmapScale: Single read FBitmapScale; + property PixelFormat: TPixelFormat read FPixelFormat; + property Height: Integer read FHeight; + property Width: Integer read FWidth; + end; + + TBitmap = class(TInterfacedPersistent, IStreamPersist) + private + FImage: TBitmapImage; + FCanvas: TCanvas; + FMapped: Boolean; + FMapAccess: TMapAccess; + FOnChange: TNotifyEvent; + function GetBytesPerLine: Integer; + function GetBytesPerPixel: Integer; + function GetCanvas: TCanvas; + function GetPixelFormat: TPixelFormat; + function GetImage: TBitmapImage; + function GetHeight: Integer; + function GetWidth: Integer; + function GetBitmapScale: Single; + function GetHandle: THandle; + procedure SetWidth(const Value: Integer); + procedure SetHeight(const Value: Integer); + procedure SetBitmapScale(const Scale: Single); + procedure ReadBitmap(Stream: TStream); + procedure WriteBitmap(Stream: TStream); + function GetCanvasClass: TCanvasClass; + function GetBounds: TRect; + function GetSize: TSize; + function GetBoundsF: TRectF; + protected + procedure CreateNewReference; + procedure CopyToNewReference; + procedure DestroyResources; virtual; + procedure BitmapChanged; virtual; + procedure AssignFromSurface(const Source: TBitmapSurface); + procedure DoChange; virtual; + protected + procedure AssignTo(Dest: TPersistent); override; + procedure DefineProperties(Filer: TFiler); override; + procedure ReadStyleLookup(Reader: TReader); virtual; + public + constructor Create; overload; virtual; + constructor Create(const AWidth, AHeight: Integer); overload; virtual; + constructor CreateFromStream(const AStream: TStream); virtual; + constructor CreateFromFile(const AFileName: string); virtual; + constructor CreateFromBitmapAndMask(const Bitmap, Mask: TBitmap); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + function EqualsBitmap(const Bitmap: TBitmap): Boolean; + procedure SetSize(const ASize: TSize); overload; + procedure SetSize(const AWidth, AHeight: Integer); overload; + procedure CopyFromBitmap(const Source: TBitmap); overload; + procedure CopyFromBitmap(const Source: TBitmap; SrcRect: TRect; DestX, DestY: Integer); overload; + + function IsEmpty: Boolean; + function HandleAllocated: Boolean; + procedure FreeHandle; + + procedure Clear(const AColor: TAlphaColor); virtual; + procedure ClearRect(const ARect: TRectF; const AColor: TAlphaColor = 0); + procedure Rotate(const Angle: Single); + procedure Resize(const AWidth, AHeight: Integer); + procedure FlipHorizontal; + procedure FlipVertical; + procedure InvertAlpha; + procedure ReplaceOpaqueColor(const Color: TAlphaColor); + + function CreateMask: PByteArray; + procedure ApplyMask(const Mask: PByteArray; const DstX: Integer = 0; const DstY: Integer = 0); + + function CreateThumbnail(const AWidth, AHeight: Integer): TBitmap; + + function Map(const Access: TMapAccess; var Data: TBitmapData): Boolean; + procedure Unmap(var Data: TBitmapData); + + procedure LoadFromFile(const AFileName: string); + procedure LoadThumbnailFromFile(const AFileName: string; const AFitWidth, AFitHeight: Single; + const UseEmbedded: Boolean = True); + procedure SaveToFile(const AFileName: string; const SaveParams: PBitmapCodecSaveParams = nil); + procedure LoadFromStream(Stream: TStream); + procedure SaveToStream(Stream: TStream); + + property Canvas: TCanvas read GetCanvas; + property CanvasClass: TCanvasClass read GetCanvasClass; + property Image: TBitmapImage read GetImage; + property Handle: THandle read GetHandle; + property PixelFormat: TPixelFormat read GetPixelFormat; + property BytesPerPixel: Integer read GetBytesPerPixel; + property BytesPerLine: Integer read GetBytesPerLine; + /// Helper property that returns bitmap bounds in TRect + property Bounds: TRect read GetBounds; + /// Helper property that returns bitmap bounds in TRectF + property BoundsF: TRectF read GetBoundsF; + property BitmapScale: Single read GetBitmapScale write SetBitmapScale; + property Width: Integer read GetWidth write SetWidth; + property Height: Integer read GetHeight write SetHeight; + /// Helper property that returns dimention of bitmap as TSize + property Size: TSize read GetSize write SetSize; + property OnChange: TNotifyEvent read FOnChange write FOnChange; + end; + +{ TPathData } + + TPathData = class; + + IPathObject = interface(IFreeNotificationBehavior) + ['{8C014863-4F69-48F2-9CF7-E336BFD3F06B}'] + function GetPath: TPathData; + property Path: TPathData read GetPath; + end; + + TPathPointKind = (MoveTo, LineTo, CurveTo, Close); + + TPathPoint = packed record + Kind: TPathPointKind; + Point: TPointF; + class function Create(const AKind: TPathPointKind; const APoint: TPointF): TPathPoint; static; inline; + class operator Equal(const APoint1, APoint2: TPathPoint): Boolean; + class operator NotEqual(const APoint1, APoint2: TPathPoint): Boolean; + end; + + TPathObject = class; + + TPathData = class(TInterfacedPersistent, IFreeNotification) + private const + MinFlatness = 0.05; + public const + DefaultFlatness = 0.25; + private + FOnChanged: TNotifyEvent; + FStyleResource: TObject; + FStyleLookup: string; + FStartPoint: TPointF; + FPathData: TList; + FRecalcBounds: Boolean; + FBounds: TRectF; + function GetPathString: string; + procedure SetPathString(const Value: string); + procedure CalculateBezierCoefficients(const Bezier: TCubicBezier; out AX, BX, CX, AY, BY, CY: Single); + function PointOnBezier(const StartPoint: TPointF; const AX, BX, CX, AY, BY, CY, T: Single): TPointF; + function CreateBezier(const Bezier: TCubicBezier; const PointCount: Integer): TPolygon; + procedure AddArcSvgPart(const Center, Radius: TPointF; StartAngle, SweepAngle: Single); + procedure AddArcSvg(const P1, Radius: TPointF; Angle: Single; const LargeFlag, SweepFlag: Boolean; const P2: TPointF); + function GetStyleLookup: string; + procedure SetStyleLookup(const Value: string); + function GetPath: TPathData; + function GetCount: Integer; inline; + function GetPoint(AIndex: Integer): TPathPoint; inline; + function GetTokensFromString(const PathString: string; var Pos: Integer): string; + function GetNumberFromString(const PathString: string; var Pos: Integer): string; + function GetPointFromString(const PathString: string; var Pos: Integer): TPointF; + function HasRelativeOffset(const PathString: string; const Pos: Integer): Boolean; + protected + { rtl } + procedure DefineProperties(Filer: TFiler); override; + procedure ReadPath(Stream: TStream); + procedure WritePath(Stream: TStream); + { IFreeNotification } + procedure FreeNotification(AObject: TObject); + procedure DoChanged(NeedRecalcBounds: Boolean = True); virtual; + public + constructor Create; virtual; + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + function EqualsPath(const Path: TPathData): Boolean; + property OnChanged: TNotifyEvent read FOnChanged write FOnChanged; + { creation } + function LastPoint: TPointF; + procedure MoveTo(const P: TPointF); + procedure MoveToRel(const P: TPointF); + procedure LineTo(const P: TPointF); + procedure LineToRel(const P: TPointF); + procedure HLineTo(const X: Single); + procedure HLineToRel(const X: Single); + procedure VLineTo(const Y: Single); + procedure VLineToRel(const Y: Single); + procedure CurveTo(const ControlPoint1, ControlPoint2, EndPoint: TPointF); + procedure CurveToRel(const ControlPoint1, ControlPoint2, EndPoint: TPointF); + procedure SmoothCurveTo(const ControlPoint2, EndPoint: TPointF); + procedure SmoothCurveToRel(const ControlPoint2, EndPoint: TPointF); + procedure QuadCurveTo(const ControlPoint, EndPoint: TPointF); + procedure ClosePath; + { shapes } + procedure AddEllipse(const ARect: TRectF); + procedure AddRectangle(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const ACornerType: TCornerType = TCornerType.Round); + procedure AddArc(const Center, Radius: TPointF; StartAngle, SweepAngle: Single); + { modification } + procedure AddPath(APath: TPathData); + procedure Clear; + procedure Flatten(const Flatness: Single = DefaultFlatness); + procedure Scale(const ScaleX, ScaleY: Single); overload; + procedure Scale(const AScale: TPointF); overload; inline; + procedure Translate(const DX, DY: Single); overload; + procedure Translate(const Delta: TPointF); overload; inline; + procedure FitToRect(const ARect: TRectF); + procedure ApplyMatrix(const M: TMatrix); + { params } + function GetBounds: TRectF; + { convert } + function FlattenToPolygon(var Polygon: TPolygon; const Flatness: Single = DefaultFlatness): TPointF; + function IsEmpty: Boolean; + { access } + property Count: Integer read GetCount; + property Points[AIndex: Integer]: TPathPoint read GetPoint; default; + { resoruces } + property ResourcePath: TPathData read GetPath; + published + property Data: string read GetPathString write SetPathString stored False; + { This property allow to link path with PathObject by name. } + property StyleLookup: string read GetStyleLookup write SetStyleLookup; + end; + +{ TCanvasSaveState } + + TCanvasSaveState = class(TPersistent) + protected + FAssigned: Boolean; + FFill: TBrush; + FStroke: TStrokeBrush; + FDash: TDashArray; + FDashOffset: Single; + FFont: TFont; + FMatrix: TMatrix; + FOffset: TPointF; + procedure AssignTo(Dest: TPersistent); override; + public + constructor Create; + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + property Assigned: Boolean read FAssigned; + end; + + TRegion = array of TRectF; + TRegionArray = array of TRegion; + +{ TCanvas } + + ECanvasException = class(Exception); + + TFillTextFlag = (RightToLeft); + TFillTextFlags = set of TFillTextFlag; + + TAbstractPrinter = class(TPersistent); + + PClipRects = ^TClipRects; + TClipRects = array of TRectF; + + ICanvasObject = interface + ['{61166E3B-9BC3-41E3-9D9A-5C6AB6460950}'] + function GetCanvas: TCanvas; + property Canvas: TCanvas read GetCanvas; + end; + + IModulateCanvas = interface + ['{B7CFFA1B-FBCF-4B36-AA32-93856F621F28}'] + function GetModulateColor: TAlphaColor; + procedure SetModulateColor(const AColor: TAlphaColor); + property ModulateColor: TAlphaColor read GetModulateColor write SetModulateColor; + end; + + TCanvasStyle = (NeedGPUSurface, SupportClipRects, SupportModulation); + TCanvasStyles = set of TCanvasStyle; + + TCanvasAttribute = (MaxBitmapSize); + + TCanvasQuality = (SystemDefault, HighPerformance, HighQuality); + + TCanvas = class abstract(TInterfacedPersistent) + public const + MaxAllowedBitmapSize = $FFFF; + DefaultScale = 1; + protected + class var FLock: TObject; + private + FBeginSceneCount: Integer; + FFill: TBrush; + FStroke: TStrokeBrush; + FParent: TWindowHandle; + [Weak] FBitmap: TBitmap; + FScale: Single; + FQuality: TCanvasQuality; + FMatrix: TMatrix; + procedure SetFill(const Value: TBrush); + protected type + TMatrixMeaning = (Unknown, Identity, Translate); + + TCustomMetaBrush = class + private + FValid: Boolean; + public + property Valid: Boolean read FValid write FValid; + end; + + TMetaBrush = class(TCustomMetaBrush) + private + FKind: TBrushKind; + FColor: TAlphaColor; + FOpacity: Single; + FGradient: TGradient; + FRect: TRectF; + [Weak] FBitmapImage: TBitmapImage; + FWrapMode: TWrapMode; + function GetGradient: TGradient; + public + destructor Destroy; override; + property Kind: TBrushKind read FKind write FKind; + property Color: TAlphaColor read FColor write FColor; + property Opacity: Single read FOpacity write FOpacity; + property Rect: TRectF read FRect write FRect; + property WrapMode: TWrapMode read FWrapMode write FWrapMode; + property Gradient: TGradient read GetGradient; + property Image: TBitmapImage read FBitmapImage write FBitmapImage; + end; + + TMetaStrokeBrush = class(TCustomMetaBrush) + private + FCap: TStrokeCap; + FDash: TStrokeDash; + FJoin: TStrokeJoin; + FDashArray: TDashArray; + FDashOffset: Single; + public + property Cap: TStrokeCap read FCap write FCap; + property Dash: TStrokeDash read FDash write FDash; + property Join: TStrokeJoin read FJoin write FJoin; + property DashArray: TDashArray read FDashArray write FDashArray; + property DashOffset: Single read FDashOffset write FDashOffset; + end; + private + FMatrixMeaning: TMatrixMeaning; + FMatrixTranslate: TPointF; + FBlending: Boolean; + /// Indicates offset of drawing area + FOffset: TPointF; + procedure SetBlending(const Value: Boolean); + class constructor Create; + class destructor Destroy; + type + TCanvasSaveStateList = TObjectList; + protected + FClippingChangeCount: Integer; + FSavingStateCount: Integer; + FWidth, FHeight: Integer; + FFont: TFont; + FCanvasSaveData: TCanvasSaveStateList; + FPrinter: TAbstractPrinter; + procedure FontChanged(Sender: TObject); virtual; + { Window } + function CreateSaveState: TCanvasSaveState; virtual; + procedure Initialize; + procedure UnInitialize; + function GetCanvasScale: Single; virtual; + { scene } + function DoBeginScene(AClipRects: PClipRects = nil; AContextHandle: THandle = 0): Boolean; virtual; + procedure DoEndScene; virtual; + /// Checks if we are in BeginScene/EndScene process and raises exception, if we are not. + procedure RaiseIfBeginSceneCountZero; + procedure DoFlush; virtual; + { constructors } + constructor CreateFromWindow(const AParent: TWindowHandle; const AWidth, AHeight: Integer; + const AQuality: TCanvasQuality = TCanvasQuality.SystemDefault); virtual; + constructor CreateFromBitmap(const ABitmap: TBitmap; const AQuality: TCanvasQuality = TCanvasQuality.SystemDefault); virtual; + constructor CreateFromPrinter(const APrinter: TAbstractPrinter); virtual; + { bitmap } + class function DoInitializeBitmap(const Width, Height: Integer; const Scale: Single; var PixelFormat: TPixelFormat): THandle; virtual; abstract; + class procedure DoFinalizeBitmap(var Bitmap: THandle); virtual; abstract; + class function DoMapBitmap(const Bitmap: THandle; const Access: TMapAccess; var Data: TBitmapData): Boolean; virtual; abstract; + class procedure DoUnmapBitmap(const Bitmap: THandle; var Data: TBitmapData); virtual; abstract; + class procedure DoCopyBitmap(const Source, Dest: TBitmap); virtual; + { states } + procedure DoBlendingChanged; virtual; + { drawing } + /// Apply a new matrix transformations to the canvas. + procedure DoSetMatrix(const M: TMatrix); virtual; + procedure DoFillRect(const ARect: TRectF; const AOpacity: Single; const ABrush: TBrush); virtual; abstract; + procedure DoFillRoundRect(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const AOpacity: Single; const ABrush: TBrush; const ACornerType: TCornerType = TCornerType.Round); virtual; + procedure DoFillPath(const APath: TPathData; const AOpacity: Single; const ABrush: TBrush); virtual; abstract; + procedure DoFillEllipse(const ARect: TRectF; const AOpacity: Single; const ABrush: TBrush); virtual; abstract; + function DoFillPolygon(const Points: TPolygon; const AOpacity: Single; const ABrush: TBrush): Boolean; virtual; + procedure DoDrawBitmap(const ABitmap: TBitmap; const SrcRect, DstRect: TRectF; const AOpacity: Single; const HighSpeed: Boolean); virtual; abstract; + procedure DoDrawLine(const APt1, APt2: TPointF; const AOpacity: Single; const ABrush: TStrokeBrush); virtual; abstract; + procedure DoDrawRect(const ARect: TRectF; const AOpacity: Single; const ABrush: TStrokeBrush); virtual; abstract; + function DoDrawPolygon(const Points: TPolygon; const AOpacity: Single; const ABrush: TStrokeBrush): Boolean; virtual; + procedure DoDrawPath(const APath: TPathData; const AOpacity: Single; const ABrush: TStrokeBrush); virtual; abstract; + procedure DoDrawEllipse(const ARect: TRectF; const AOpacity: Single; const ABrush: TStrokeBrush); virtual; abstract; + { Clipping } + procedure DoIntersectClipRect(const ARect: TRectF); virtual; + procedure DoExcludeClipRect(const ARect: TRectF); virtual; + { Clearing } + procedure DoClear(const Color: TAlphaColor); virtual; + procedure DoClearRect(const ARect: TRectF; const AColor: TAlphaColor = 0); virtual; + property Parent: TWindowHandle read FParent; + protected + function TransformPoint(const P: TPointF): TPointF; inline; + function TransformRect(const Rect: TRectF): TRectF; inline; + property MatrixMeaning: TMatrixMeaning read FMatrixMeaning; + property MatrixTranslate: TPointF read FMatrixTranslate; + public + destructor Destroy; override; + { lock } + class procedure Lock; + class procedure Unlock; + { caps } + class function GetCanvasStyle: TCanvasStyles; virtual; + class function GetAttribute(const Value: TCanvasAttribute): Integer; virtual; + { scene } + procedure SetSize(const AWidth, AHeight: Integer); virtual; + function BeginScene(AClipRects: PClipRects = nil; AContextHandle: THandle = 0): Boolean; + procedure EndScene; + property BeginSceneCount: Integer read FBeginSceneCount; + procedure Flush; + { buffer } + /// Clear whole canvas using Color. + procedure Clear(const AColor: TAlphaColor); virtual; + /// Clear rectangular area of canvas using Color. + procedure ClearRect(const ARect: TRectF; const AColor: TAlphaColor = 0); virtual; + /// Return True if Scale is integer value. + function IsScaleInteger: Boolean; + { matrix } + procedure SetMatrix(const M: TMatrix); + procedure MultiplyMatrix(const M: TMatrix); + { state } + function SaveState: TCanvasSaveState; + procedure RestoreState(const State: TCanvasSaveState); + { bitmap } + class function InitializeBitmap(const Width, Height: Integer; const Scale: Single; var PixelFormat: TPixelFormat): THandle; + class procedure FinalizeBitmap(var Bitmap: THandle); + class function MapBitmap(const Bitmap: THandle; const Access: TMapAccess; var Data: TBitmapData): Boolean; + class procedure UnmapBitmap(const Bitmap: THandle; var Data: TBitmapData); + class procedure CopyBitmap(const Source, Dest: TBitmap); + { aligning } + function AlignToPixel(const Value: TPointF): TPointF; overload; inline; + function AlignToPixel(const Rect: TRectF): TRectF; overload; inline; + function AlignToPixelVertically(const Value: Single): Single; inline; + function AlignToPixelHorizontally(const Value: Single): Single; inline; + { clipping } + /// Set current clipping area using intersection of current area and rectangle. + procedure IntersectClipRect(const ARect: TRectF); virtual; + /// Exclude rectangular area from current clipping area. + procedure ExcludeClipRect(const ARect: TRectF); virtual; + { drawing } + procedure FillArc(const Center, Radius: TPointF; StartAngle, SweepAngle: Single; const AOpacity: Single); overload; + procedure FillArc(const Center, Radius: TPointF; StartAngle, SweepAngle: Single; + const AOpacity: Single; const ABrush: TBrush); overload; + procedure FillRect(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const AOpacity: Single; const ACornerType: TCornerType = TCornerType.Round); overload; + procedure FillRect(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const AOpacity: Single; const ABrush: TBrush; const ACornerType: TCornerType = TCornerType.Round); overload; + procedure FillRect(const ARect: TRectF; const AOpacity: Single); overload; + procedure FillRect(const ARect: TRectF; const AOpacity: Single; const ABrush: TBrush); overload; + procedure FillPath(const APath: TPathData; const AOpacity: Single); overload; + procedure FillPath(const APath: TPathData; const AOpacity: Single; const ABrush: TBrush); overload; + procedure FillEllipse(const ARect: TRectF; const AOpacity: Single); overload; + procedure FillEllipse(const ARect: TRectF; const AOpacity: Single; const ABrush: TBrush); overload; + procedure DrawBitmap(const ABitmap: TBitmap; const SrcRect, DstRect: TRectF; const AOpacity: Single; + const HighSpeed: Boolean = False); + procedure DrawLine(const APt1, APt2: TPointF; const AOpacity: Single); overload; + procedure DrawLine(const APt1, APt2: TPointF; const AOpacity: Single; const ABrush: TStrokeBrush); overload; + procedure DrawRect(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const AOpacity: Single; const ACornerType: TCornerType = TCornerType.Round); overload; + procedure DrawRect(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const AOpacity: Single; const ABrush: TStrokeBrush; const ACornerType: TCornerType = TCornerType.Round); overload; + procedure DrawRect(const ARect: TRectF; const AOpacity: Single); overload; + procedure DrawRect(const ARect: TRectF; const AOpacity: Single; const ABrush: TStrokeBrush); overload; + procedure DrawPath(const APath: TPathData; const AOpacity: Single); overload; + procedure DrawPath(const APath: TPathData; const AOpacity: Single; const ABrush: TStrokeBrush); overload; + procedure DrawEllipse(const ARect: TRectF; const AOpacity: Single); overload; + procedure DrawEllipse(const ARect: TRectF; const AOpacity: Single; const ABrush: TStrokeBrush); overload; + procedure DrawArc(const Center, Radius: TPointF; StartAngle, SweepAngle: Single; const AOpacity: Single); overload; + procedure DrawArc(const Center, Radius: TPointF; StartAngle, SweepAngle: Single; const AOpacity: Single; const ABrush: TStrokeBrush); overload; + { mesauring } + function PtInPath(const APoint: TPointF; const APath: TPathData): Boolean; virtual; abstract; + { helpers } + procedure DrawRectSides(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const AOpacity: Single; const ASides: TSides; const ACornerType: TCornerType = TCornerType.Round); overload; + procedure DrawRectSides(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const AOpacity: Single; const ASides: TSides; const ABrush: TStrokeBrush; const ACornerType: TCornerType = TCornerType.Round); overload; + procedure DrawDashRect(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const AOpacity: Single; const AColor: TAlphaColor); + { linear polygon } + procedure FillPolygon(const Points: TPolygon; const AOpacity: Single); virtual; + procedure DrawPolygon(const Points: TPolygon; const AOpacity: Single); virtual; + { text } + function LoadFontFromStream(const AStream: TStream): Boolean; virtual; + { deprecated, use TTextLayout } + procedure FillText(const ARect: TRectF; const AText: string; const WordWrap: Boolean; const AOpacity: Single; + const Flags: TFillTextFlags; const ATextAlign: TTextAlign; const AVTextAlign: TTextAlign = TTextAlign.Center); virtual; + procedure MeasureText(var ARect: TRectF; const AText: string; const WordWrap: Boolean; const Flags: TFillTextFlags; + const ATextAlign: TTextAlign; const AVTextAlign: TTextAlign = TTextAlign.Center); virtual; + procedure MeasureLines(const ALines: TLineMetricInfo; const ARect: TRectF; const AText: string; const WordWrap: Boolean; const Flags: TFillTextFlags; + const ATextAlign: TTextAlign; const AVTextAlign: TTextAlign = TTextAlign.Center); virtual; + function TextToPath(Path: TPathData; const ARect: TRectF; const AText: string; const WordWrap: Boolean; + const ATextAlign: TTextAlign; const AVTextAlign: TTextAlign = TTextAlign.Center): Boolean; virtual; + function TextWidth(const AText: string): Single; + function TextHeight(const AText: string): Single; + { properties } + property Blending: Boolean read FBlending write SetBlending; + property Quality: TCanvasQuality read FQuality; + property Stroke: TStrokeBrush read FStroke; + property Fill: TBrush read FFill write SetFill; + property Font: TFont read FFont; + property Matrix: TMatrix read FMatrix; + property Width: Integer read FWidth; + property Height: Integer read FHeight; + property Bitmap: TBitmap read FBitmap; + property Scale: Single read FScale; + /// Allows to offset drawing area + property Offset: TPointF read FOffset write FOffset; + { statistics } + property ClippingChangeCount: Integer read FClippingChangeCount; + property SavingStateCount: Integer read FSavingStateCount; + end; + + ECanvasManagerException = class(Exception); + + TCanvasDestroyMessage = class(TMessage); + + TCanvasManager = class sealed + private type + TCanvasClassRec = record + CanvasClass: TCanvasClass; + Default: Boolean; + PrinterCanvas: Boolean; + end; + strict private + class var FCanvasList: TList; + class var FDefaultCanvasClass: TCanvasClass; + class var FDefaultPrinterCanvasClass: TCanvasClass; + class var FMeasureBitmap: TBitmap; + class var FEnableSoftwareCanvas: Boolean; + private + class function GetDefaultCanvas: TCanvasClass; static; + class function GetMeasureCanvas: TCanvas; static; + class function GetDefaultPrinterCanvas: TCanvasClass; static; + public + // Reserved for internal use only - do not call directly! + class procedure UnInitialize; + // Register a rendering Canvas class + class procedure RegisterCanvas(const CanvasClass: TCanvasClass; const ADefault: Boolean; const APrinterCanvas: Boolean); + // Return default Canvas + class property DefaultCanvas: TCanvasClass read GetDefaultCanvas; + // Return default Canvas + class property DefaultPrinterCanvas: TCanvasClass read GetDefaultPrinterCanvas; + // Return canvas instance used for text measuring for example + class property MeasureCanvas: TCanvas read GetMeasureCanvas; + // Creation helper + class function CreateFromWindow(const AParent: TWindowHandle; const AWidth, AHeight: Integer; + const AQuality: TCanvasQuality = TCanvasQuality.SystemDefault): TCanvas; + class function CreateFromBitmap(const ABitmap: TBitmap; + const AQuality: TCanvasQuality = TCanvasQuality.SystemDefault): TCanvas; + class function CreateFromPrinter(const APrinter: TAbstractPrinter): TCanvas; + class procedure RecreateFromPrinter(const Canvas: TCanvas; const APrinter: TAbstractPrinter); + class procedure EnableSoftwareCanvas(const Enable: Boolean); + end; + + TPrinterCanvas = class(TCanvas); + TPrinterCanvasClass = class of TPrinterCanvas; + +{ TBrushObject } + + IBrushObject = interface(IFreeNotificationBehavior) + ['{BB870DB6-0228-4165-9906-CF75BFF8C7CA}'] + function GetBrush: TBrush; + property Brush: TBrush read GetBrush; + end; + + TBrushObject = class(TFmxObject, IBrushObject) + private + FBrush: TBrush; + { IBrushObject } + function GetBrush: TBrush; + protected + procedure SetName(const NewName: TComponentName); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + property Brush: TBrush read FBrush write FBrush; + end; + +{ TFontObject } + + IFontObject = interface(IFreeNotificationBehavior) + ['{F87FBCFE-CE5F-430C-8F46-B20B2E395C1B}'] + function GetFont: TFont; + property Font: TFont read GetFont; + end; + + TFontObject = class(TFmxObject, IFontObject) + private + FFont: TFont; + { IFontObject } + function GetFont: TFont; + protected + procedure SetName(const NewName: TComponentName); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + property Font: TFont read FFont write FFont; + end; + +{ TPathObject } + + TPathObject = class(TFmxObject, IPathObject) + private + FPath: TPathData; + { IPathObject } + function GetPath: TPathData; + protected + procedure SetName(const NewName: TComponentName); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + property Path: TPathData read FPath write FPath; + end; + +{ TBitmapObject } + + TBitmapObject = class(TFmxObject, IBitmapObject) + private + FBitmap: TBitmap; + { IBitmapObject } + function GetBitmap: TBitmap; + protected + procedure SetName(const NewName: TComponentName); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + property Bitmap: TBitmap read FBitmap write FBitmap; + end; + +{ TColorObject } + + TColorObject = class(TFmxObject) + private + FColor: TAlphaColor; + protected + procedure SetName(const NewName: TComponentName); override; + published + property Color: TAlphaColor read FColor write FColor; + end; + + TFontColorForStateClass = class of TFontColorForState; + + TFontColorForState = class(TPersistent) + public type + TIndex = (Normal, Hot, Pressed, Focused, Active); + private + [Weak] FOwner: TTextSettings; + FColor: array [TIndex] of TAlphaColor; + FUpdateCount: Integer; + FChanged: Boolean; + function GetColor(const Index: TIndex): TAlphaColor; + procedure SetColor(const Index: TIndex; const Value: TAlphaColor); + protected + function GetOwner: TPersistent; override; + function GetCurrentColor(const Index: TIndex): TAlphaColor; virtual; + procedure DoChanged; virtual; + public + constructor Create(const AOwner: TTextSettings); virtual; + procedure AfterConstruction; override; + procedure BeginUpdate; + procedure EndUpdate; + procedure Change; + property Owner: TTextSettings read FOwner; + procedure Assign(Source: TPersistent); override; + function Equals(Obj: TObject): Boolean; override; + property CurrentColor[const Index: TIndex]: TAlphaColor read GetCurrentColor; + property Color[const Index: TIndex]: TAlphaColor read GetColor write SetColor; default; + property Normal: TAlphaColor index TIndex.Normal read GetColor write SetColor default TAlphaColorRec.Null; + property Hot: TAlphaColor index TIndex.Hot read GetColor write SetColor default TAlphaColorRec.Null; + property Pressed: TAlphaColor index TIndex.Pressed read GetColor write SetColor default TAlphaColorRec.Null; + property Focused: TAlphaColor index TIndex.Focused read GetColor write SetColor default TAlphaColorRec.Null; + property Active: TAlphaColor index TIndex.Active read GetColor write SetColor default TAlphaColorRec.Null; + end; + + TTextSettingsClass = class of TTextSettings; + + /// + /// This class combines some of properties that relate to the text + /// + TTextSettings = class(TPersistent) + private + [Weak] FOwner: TPersistent; + FFont: TFont; + FUpdateCount: Integer; + FHorzAlign: TTextAlign; + FVertAlign: TTextAlign; + FWordWrap: Boolean; + FFontColor: TAlphaColor; + FIsChanged: Boolean; + FIsAdjustChanged: Boolean; + FOnChanged: TNotifyEvent; + FTrimming: TTextTrimming; + FFontColorForState: TFontColorForState; + procedure SetFontColor(const Value: TAlphaColor); + procedure SetHorzAlign(const Value: TTextAlign); + procedure SetVertAlign(const Value: TTextAlign); + procedure SetWordWrap(const Value: Boolean); + procedure SetTrimming(const Value: TTextTrimming); + procedure SetFontColorForState(const Value: TFontColorForState); + function StoreFontColorForState: Boolean; + function CreateFontColorForState: TFontColorForState; + protected + procedure DoChanged; virtual; + procedure SetFont(const Value: TFont); virtual; + function GetOwner: TPersistent; override; + function GetTextColorsClass: TFontColorForStateClass; virtual; + procedure DoAssign(const Source: TTextSettings); virtual; + procedure DoAssignNotStyled(const TextSettings: TTextSettings; const StyledSettings: TStyledSettings); virtual; + public + constructor Create(const AOwner: TPersistent); virtual; + destructor Destroy; override; + procedure AfterConstruction; override; + procedure Assign(Source: TPersistent); override; + procedure AssignNotStyled(const TextSettings: TTextSettings; const StyledSettings: TStyledSettings); + function Equals(Obj: TObject): Boolean; override; + procedure Change; + procedure BeginUpdate; + procedure EndUpdate; + procedure UpdateStyledSettings(const OldTextSettings, DefaultTextSettings: TTextSettings; + var StyledSettings: TStyledSettings); virtual; + property UpdateCount: Integer read FUpdateCount; + property IsChanged: Boolean read FIsChanged write FIsChanged; + property IsAdjustChanged: Boolean read FIsAdjustChanged write FIsAdjustChanged; + property Font: TFont read FFont write SetFont; + property FontColor: TAlphaColor read FFontColor write SetFontColor default TAlphaColorRec.Black; + property FontColorForState: TFontColorForState read FFontColorForState write SetFontColorForState + stored StoreFontColorForState; + property HorzAlign: TTextAlign read FHorzAlign write SetHorzAlign default TTextAlign.Leading; + property VertAlign: TTextAlign read FVertAlign write SetVertAlign default TTextAlign.Center; + property WordWrap: Boolean read FWordWrap write SetWordWrap default False; + property Trimming: TTextTrimming read FTrimming write SetTrimming default TTextTrimming.None; + property Owner: TPersistent read FOwner; + property OnChanged: TNotifyEvent read FOnChanged write FOnChanged; + end; + + ITextSettings = interface + ['{FD99635D-D8DB-4E26-B36F-97D3AABBCCB3}'] + function GetDefaultTextSettings: TTextSettings; + function GetTextSettings: TTextSettings; + procedure SetTextSettings(const Value: TTextSettings); + function GetResultingTextSettings: TTextSettings; + function GetStyledSettings: TStyledSettings; + procedure SetStyledSettings(const Value: TStyledSettings); + + property DefaultTextSettings: TTextSettings read GetDefaultTextSettings; + property TextSettings: TTextSettings read GetTextSettings write SetTextSettings; + property ResultingTextSettings: TTextSettings read GetResultingTextSettings; + property StyledSettings: TStyledSettings read GetStyledSettings write SetStyledSettings; + end; + +implementation + +uses + System.UIConsts, System.Math, System.TypInfo, System.Character, System.Generics.Defaults, FMX.Consts, FMX.Platform, + FMX.TextLayout, FMX.Utils; + +{ TImageTypeChecker } + +class function TImageTypeChecker.GetType(const AFileName: string): string; +var + LStream: TStream; +begin + LStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite); + try + Result := GetType(LStream); + if Result.IsEmpty then + Result := ExtractFileExt(AFileName); + finally + LStream.Free; + end; +end; + +class function TImageTypeChecker.GetType(const AData: TStream): String; +var + LBuffer: TBytes; + I: Integer; + LOldPos: Int64; +const + MaxImageDataLength = 4; + ImageData: array[0..6] of TImageData = ( + (DataType: SGIFImageExtension; Length: 3; Header: (71,73,70,0)), // gif + (DataType: SBMPImageExtension; Length: 2; Header: (66,77,0,0)), // bmp + (DataType: SPNGImageExtension; Length: 4; Header: (137,80,78,71)), // png + (DataType: STIFFImageExtension; Length: 3; Header: (73,73,42,0)), // tiff + (DataType: STIFFImageExtension; Length: 3; Header: (77,77,42,0)), // tiff 2 + (DataType: SJPGImageExtension; Length: 4; Header: (255,216,255,224)), // jpg + (DataType: SJPGImageExtension; Length: 4; Header: (255,216,255,225)) // jpg (canon) + ); +begin + Result := string.Empty; + SetLength(LBuffer, MaxImageDataLength); + LOldPos := AData.Position; + try + if AData.Read(LBuffer, MaxImageDataLength) = MaxImageDataLength then + begin + for I := Low(ImageData) to High(ImageData) do + begin + if (CompareMem(@ImageData[I].Header[0], LBuffer, ImageData[I].Length)) then + begin + Result := ImageData[I].DataType; + Break; + end; + end; + end; + finally + AData.Position := LOldPos; + end; +end; + +{ TGradientPoint } + +procedure TGradientPoint.Assign(Source: TPersistent); +begin + if Source is TGradientPoint then + begin + FColor := TGradientPoint(Source).FColor; + FOffset := TGradientPoint(Source).FOffset; + end + else + inherited; +end; + +procedure TGradientPoint.SetColor(const Value: TAlphaColor); +begin + if FColor <> Value then + begin + FColor := Value; + Changed(False); + end; +end; + +procedure TGradientPoint.SetOffset(const Value: Single); +begin + if not SameValue(FOffset, Value, Single.Epsilon) then + begin + FOffset := Value; + Changed(False); + end; +end; + +{ TGradientPoints } + +function TGradientPoints.GetPoint(Index: Integer): TGradientPoint; +begin + Result := TGradientPoint(Items[Index]); +end; + +procedure TGradientPoints.Update(Item: TCollectionItem); +begin + inherited; + if Item = nil then + Exit; + + Sort(TComparer.Construct(function(const Left, Right: TCollectionItem): Integer + begin + Result := CompareValue(TGradientPoint(Left).Offset, TGradientPoint(Right).Offset); + end)); +end; + +{ TGradient } + +constructor TGradient.Create; +var + P: TGradientPoint; +begin + inherited; + FStartPosition := TPosition.Create(PointF(0, 0)); + FStartPosition.OnChange := PositionChanged; + FStopPosition := TPosition.Create(PointF(0, 1)); + FStopPosition.OnChange := PositionChanged; + FRadialTransform := TTransform.Create; + FRadialTransform.OnChanged := PositionChanged; + FPoints := TGradientPoints.Create(TGradientPoint); + P := TGradientPoint(FPoints.Add); + P.IntColor := $FF000000; + P := TGradientPoint(FPoints.Add); + P.IntColor := $FFFFFFFF; + P.Offset := 1; +end; + +procedure TGradient.ApplyOpacity(const AOpacity: Single); +var + I: Integer; +begin + if AOpacity < 1.0 then + for I := 0 to FPoints.Count - 1 do + FPoints[I].Color := MakeColor(FPoints[I].Color, AOpacity); +end; + +procedure TGradient.Assign(Source: TPersistent); +var + SaveChanged: TNotifyEvent; +begin + if Source is TGradient then + begin + SaveChanged := FOnChanged; + FOnChanged := nil; + FPoints.Clear; + FPoints.Assign(TGradient(Source).FPoints); + FStyle := TGradient(Source).Style; + if FStyle = TGradientStyle.Linear then + begin + FStopPosition.Assign(TGradient(Source).StopPosition); + FStartPosition.Assign(TGradient(Source).StartPosition); + end + else + begin + FRadialTransform.Assign(TGradient(Source).RadialTransform); + end; + FOnChanged := SaveChanged; + if Assigned(FOnChanged) then + FOnChanged(Self); + end + else + inherited; +end; + +destructor TGradient.Destroy; +begin + FreeAndNil(FStartPosition); + FreeAndNil(FStopPosition); + FreeAndNil(FRadialTransform); + FreeAndNil(FPoints); + inherited; +end; + +function TGradient.Equal(const AGradient: TGradient): Boolean; +var + I: Integer; +begin + Result := True; + if FPoints.Count <> AGradient.FPoints.Count then + Exit(False); + if not SameValue(FStartPosition.X, AGradient.FStartPosition.X, TEpsilon.Position) then + Exit(False); + if not SameValue(FStartPosition.Y, AGradient.FStartPosition.Y, TEpsilon.Position) then + Exit(False); + if not SameValue(FStopPosition.X, AGradient.FStopPosition.X, TEpsilon.Position) then + Exit(False); + if not SameValue(FStopPosition.Y, AGradient.FStopPosition.Y, TEpsilon.Position) then + Exit(False); + for I := 0 to FPoints.Count - 1 do + begin + if FPoints[I].Color <> AGradient.FPoints[I].Color then + Exit(False); + if not SameValue(FPoints[I].Offset, AGradient.FPoints[I].Offset, TEpsilon.Position) then + Exit(False); + end; + { Radial gradient } + if not SameValue(RadialTransform.RotationAngle, AGradient.RadialTransform.RotationAngle, TEpsilon.Angle) then + Exit(False); + if not SameValue(RadialTransform.RotationCenter.X, AGradient.RadialTransform.RotationCenter.X, TEpsilon.Position) or + not SameValue(RadialTransform.RotationCenter.Y, AGradient.RadialTransform.RotationCenter.Y, TEpsilon.Position) then + Exit(False); +end; + +procedure TGradient.Change; +begin + if Assigned(FOnChanged) then + FOnChanged(Self); +end; + +function TGradient.InterpolateColor(X, Y: Single): TAlphaColor; +var + A, B: TPointF; + Projection: Single; +begin + case Style of + TGradientStyle.Linear: + begin + A := StopPosition.Point - StartPosition.Point; + B := TPointF.Create(X, Y) - StartPosition.Point; + Projection := A.Normalize.DotProduct(B) / A.Length; + Result := InterpolateColor(Projection); + end; + TGradientStyle.Radial: + begin + A := TPointF.Create(X, Y) - RadialTransform.RotationCenter.Point; + Result := InterpolateColor(1 - (A.Length * 2)); + end; + else + Result := 0; + end; +end; + +function TGradient.InterpolateColor(Offset: Single): TAlphaColor; +var + I: Integer; +begin + Result := 0; + if FPoints.Count > 1 then + begin + if Offset < 0 then + Offset := 0; + if Offset > 1 then + Offset := 1; + if Offset < FPoints[0].Offset then + begin + Result := Points[0].IntColor; + Exit; + end; + if Offset > FPoints[FPoints.Count - 1].Offset then + begin + Result := FPoints[FPoints.Count - 1].IntColor; + Exit; + end; + for I := 0 to FPoints.Count - 2 do + begin + if (Offset < Points[I].Offset) then + Continue; + if Offset > Points[I + 1].Offset then + Continue; + if Points[I + 1].Offset - Points[I].Offset <= 0 then + Result := Points[I].IntColor + else if (I = FPoints.Count - 2) and (Offset > Points[Points.Count - 1].Offset) then // last + Result := Points[Points.Count - 1].IntColor + else + Result := FMX.Utils.InterpolateColor(Points[I].IntColor, Points[I + 1].IntColor, + (Offset - Points[I].Offset) / (Points[I + 1].Offset - Points[I].Offset)); + end; + end; +end; + +procedure TGradient.PositionChanged(Sender: TObject); +begin + if Assigned(FOnChanged) then + FOnChanged(Self); +end; + +function TGradient.IsLinearStored: Boolean; +begin + Result := FStyle = TGradientStyle.Linear; +end; + +function TGradient.IsRadialStored: Boolean; +begin + Result := FStyle = TGradientStyle.Radial; +end; + +procedure TGradient.SetRadialTransform(const Value: TTransform); +begin + FRadialTransform.Assign(Value); +end; + +procedure TGradient.SetStartPosition(const Value: TPosition); +begin + FStartPosition.Assign(Value); +end; + +procedure TGradient.SetStopPosition(const Value: TPosition); +begin + FStopPosition.Assign(Value); +end; + +procedure TGradient.SetColor(const Value: TAlphaColor); +begin + if (FPoints.Count > 0) and (Points[0].Color <> Value) then + begin + Points[0].Color := Value; + if Assigned(FOnChanged) then + FOnChanged(Self); + end; +end; + +procedure TGradient.SetColor1(const Value: TAlphaColor); +begin + if (FPoints.Count > 1) and (Points[1].Color <> Value) then + begin + Points[1].Color := Value; + if Assigned(FOnChanged) then + FOnChanged(Self); + end; +end; + +procedure TGradient.SetPoints(const Value: TGradientPoints); +begin + FPoints.Assign(Value); +end; + +procedure TGradient.SetStyle(const Value: TGradientStyle); +begin + if FStyle <> Value then + begin + FStyle := Value; + if Assigned(FOnChanged) then + FOnChanged(Self); + end; +end; + +{ TBrushResource } + +destructor TBrushResource.Destroy; +begin + if FStyleResource <> nil then + begin + FStyleResource.RemoveFreeNotify(Self); + FStyleResource := nil; + end; + inherited; +end; + +procedure TBrushResource.FreeNotification(AObject: TObject); +begin + if AObject = FStyleResource then + FStyleResource := nil; +end; + +procedure TBrushResource.Assign(Source: TPersistent); +begin + if Source is TBrushResource then + begin + StyleResource := TBrushResource(Source).StyleResource; + FStyleLookup := TBrushResource(Source).StyleLookup; + end + else + inherited; +end; + +procedure TBrushResource.SetStyleResource(const Value: TBrushObject); +begin + if FStyleResource <> Value then + begin + if FStyleResource <> nil then + FStyleResource.RemoveFreeNotify(Self); + FStyleResource := Value; + if FStyleResource <> nil then + begin + FStyleLookup := FStyleResource.StyleName; + FStyleResource.AddFreeNotify(Self); + end; + end; +end; + +function TBrushResource.GetStyleLookup: string; +begin + Result := FStyleLookup; +end; + +procedure TBrushResource.SetStyleLookup(const Value: string); +begin + if Value <> FStyleLookup then + begin + FStyleLookup := Value; + end; +end; + +function TBrushResource.GetBrush: TBrush; +var + O: TFmxObject; +begin + Result := nil; + if FStyleResource <> nil then + Result := TBrushObject(FStyleResource).Brush + else if FStyleLookup <> '' then + begin + O := FindStyleResource(FStyleLookup); + if O is TBrushObject then + StyleResource := TBrushObject(O); + if FStyleResource <> nil then + Result := TBrushObject(FStyleResource).Brush; + end; +end; + +{ TBrushBitmap } + +constructor TBrushBitmap.Create; +begin + inherited Create; + FBitmap := TBitmap.Create(0, 0); +end; + +destructor TBrushBitmap.Destroy; +begin + FBitmap.DisposeOf; + inherited; +end; + +procedure TBrushBitmap.DoChanged; +begin + if Assigned(FOnChanged) then + FOnChanged(Self); +end; + +function TBrushBitmap.GetBitmapImage: TBitmapImage; +begin + if FBitmap <> nil then + Result := FBitmap.Image + else + Result := nil; +end; + +procedure TBrushBitmap.Assign(Source: TPersistent); +begin + if Source is TBrushBitmap then + begin + FWrapMode := TBrushBitmap(Source).FWrapMode; + FBitmap.Assign(TBrushBitmap(Source).FBitmap); + DoChanged; + end + else + inherited; +end; + +procedure TBrushBitmap.SetWrapMode(const Value: TWrapMode); +begin + if FWrapMode <> Value then + begin + FWrapMode := Value; + DoChanged; + end; +end; + +procedure TBrushBitmap.SetBitmap(const Value: TBitmap); +begin + FBitmap.Assign(Value); + DoChanged; +end; + +{ TBrush } + +constructor TBrush.Create; +begin + inherited Create; + FDefaultKind := ADefaultKind; + FDefaultColor := ADefaultColor; + FColor := ADefaultColor; + FKind := FDefaultKind; + FGradient := TGradient.Create; + FGradient.OnChanged := GradientChanged; + FResource := TBrushResource.Create; + FResource.OnChanged := ResourceChanged; + FBitmap := TBrushBitmap.Create; + FBitmap.OnChanged := BitmapChanged; + FBitmap.Bitmap.OnChange := BitmapChanged; +end; + +destructor TBrush.Destroy; +begin + FBitmap.DisposeOf; + FResource.DisposeOf; + FGradient.DisposeOf; + inherited; +end; + +procedure TBrush.Assign(Source: TPersistent); +var + SaveChange: TNotifyEvent; +begin + if Source is TBrush then + begin + SaveChange := FOnChanged; + FOnChanged := nil; + FDefaultKind := TBrush(Source).FDefaultKind; + FDefaultColor := TBrush(Source).FDefaultColor; + FColor := TBrush(Source).FColor; + FKind := TBrush(Source).FKind; + case FKind of + TBrushKind.Gradient: + FGradient.Assign(TBrush(Source).Gradient); + TBrushKind.Resource: + FResource.Assign(TBrush(Source).Resource); + TBrushKind.Bitmap: + FBitmap.Assign(TBrush(Source).Bitmap); + end; + FOnChanged := SaveChange; + if Assigned(FOnChanged) then + FOnChanged(Self); + end + else + inherited; +end; + +procedure TBrush.GradientChanged(Sender: TObject); +begin + if Assigned(FOnChanged) then + FOnChanged(Self); + if Assigned(FOnGradientChanged) then + FOnGradientChanged(Self); +end; + +procedure TBrush.ResourceChanged(Sender: TObject); +begin + if Assigned(FOnChanged) then + FOnChanged(Self); +end; + +procedure TBrush.BitmapChanged(Sender: TObject); +begin + if Assigned(FOnChanged) then + FOnChanged(Self); +end; + +function TBrush.IsBitmapStored: Boolean; +begin + Result := (FKind = TBrushKind.Bitmap); +end; + +function TBrush.IsColorStored: Boolean; +begin + Result := (FKind = TBrushKind.Solid) and (FColor <> FDefaultColor); +end; + +function TBrush.IsGradientStored: Boolean; +begin + Result := FKind = TBrushKind.Gradient; +end; + +function TBrush.IsKindStored: Boolean; +begin + Result := FKind <> FDefaultKind; +end; + +function TBrush.IsResourceStored: Boolean; +begin + Result := FKind = TBrushKind.Resource; +end; + +procedure TBrush.SetResource(const Value: TBrushResource); +begin + FResource.Assign(Value); +end; + +procedure TBrush.SetGradient(const Value: TGradient); +begin + FGradient.Assign(Value); +end; + +function TBrush.GetColor: TAlphaColor; +begin + Result := FColor; +end; + +procedure TBrush.SetColor(const Value: TAlphaColor); +begin + if FColor <> Value then + begin + FColor := Value; + if FKind = TBrushKind.Gradient then + FGradient.Color := Value + else if Assigned(FOnChanged) then + FOnChanged(Self); + end; +end; + +procedure TBrush.SetKind(const Value: TBrushKind); +begin + if FKind <> Value then + begin + FKind := Value; + if Assigned(FOnChanged) then + FOnChanged(Self); + end; +end; + +{ TStrokeBrush.TDashData } + +constructor TStrokeBrush.TDashData.Create(const ADashArray: TDashArray; ADashOffset: Single); +begin + DashArray := ADashArray; + DashOffset := ADashOffset; +end; + +{ TStrokeBrush } + +constructor TStrokeBrush.Create(const ADefaultKind: TBrushKind; const ADefaultColor: TAlphaColor); +begin + inherited; + FThickness := 1; +end; + +procedure TStrokeBrush.ReadCustomDash(AStream: TStream); +var + Len: Integer; +begin + AStream.Read(Len, SizeOf(Len)); + SetLength(FDashArray, Len); + if Len > 0 then + AStream.Read(FDashArray[0], SizeOf(Single) * Len); + AStream.Read(FDashOffset, SizeOf(FDashOffset)); +end; + +procedure TStrokeBrush.WriteCustomDash(AStream: TStream); +var + Len: Integer; +begin + Len := Length(FDashArray); + AStream.Write(Len, SizeOf(Len)); + if Len > 0 then + AStream.Write(FDashArray[0], SizeOf(Single) * Len); + AStream.Write(FDashOffset, SizeOf(FDashOffset)); +end; + +procedure TStrokeBrush.DefineProperties(Filer: TFiler); +begin + inherited; + Filer.DefineBinaryProperty('CustomDash', ReadCustomDash, WriteCustomDash, Dash = TStrokeDash.Custom); +end; + +function TStrokeBrush.GetDashArray: TDashArray; +begin + Result := Copy(FDashArray); +end; + +class function TStrokeBrush.GetStdDash(const Device: TDashDevice; const Dash: TStrokeDash): TDashData; +begin + if not FStdDashCreated then + begin + // create the screen line dashes + FStdDash[TDashDevice.Screen, TStrokeDash.Solid] := TDashData.Create(nil, 0); + FStdDash[TDashDevice.Screen, TStrokeDash.Dash] := TDashData.Create(TDashArray.Create(3, 1), 0); + FStdDash[TDashDevice.Screen, TStrokeDash.Dot] := TDashData.Create(TDashArray.Create(1, 1), 0); + FStdDash[TDashDevice.Screen, TStrokeDash.DashDot] := TDashData.Create(TDashArray.Create(3, 1, 1, 1), 0); + FStdDash[TDashDevice.Screen, TStrokeDash.DashDotDot] := TDashData.Create(TDashArray.Create(3, 1, 1, 1, 1, 1), 0); + FStdDash[TDashDevice.Screen, TStrokeDash.Custom] := TDashData.Create(nil, 0); + + // create the printer line dashes +{$IFDEF MACOS} + // MacOS dashes work strange; these values are experimental values that + // seem to work correctly + FStdDash[TDashDevice.Printer, TStrokeDash.Solid] := TDashData.Create(nil, 0); + FStdDash[TDashDevice.Printer, TStrokeDash.Dash] := TDashData.Create(TDashArray.Create(3 * 2, 6 * 2), 0); + FStdDash[TDashDevice.Printer, TStrokeDash.Dot] := TDashData.Create(TDashArray.Create(1 * 2, 3 * 2), 0); + FStdDash[TDashDevice.Printer, TStrokeDash.DashDot] := + TDashData.Create(TDashArray.Create(3 * 3, 6 * 3, 1 * 3, 3 * 3), 0); + FStdDash[TDashDevice.Printer, TStrokeDash.DashDotDot] := + TDashData.Create(TDashArray.Create(3 * 2, 9 * 2, 1 * 2, 3 * 2, 1 * 2, 3 * 2), 0); + FStdDash[TDashDevice.Printer, TStrokeDash.Custom] := TDashData.Create(nil, 0); +{$ELSE} + FStdDash[TDashDevice.Printer] := FStdDash[TDashDevice.Screen]; +{$ENDIF} + FStdDashCreated := True; + end; + + Result.DashArray := Copy(FStdDash[Device, Dash].DashArray); + Result.DashOffset := FStdDash[Device, Dash].DashOffset; +end; + +procedure TStrokeBrush.Assign(Source: TPersistent); +var + SaveChange: TNotifyEvent; +begin + if Source is TStrokeBrush then + begin + SaveChange := FOnChanged; + FOnChanged := nil; + + FDefaultKind := TStrokeBrush(Source).FDefaultKind; + FDefaultColor := TStrokeBrush(Source).FDefaultColor; + FColor := TStrokeBrush(Source).Color; + FKind := TStrokeBrush(Source).Kind; + case FKind of + TBrushKind.Gradient: + FGradient.Assign(TStrokeBrush(Source).Gradient); + TBrushKind.Resource: + FResource.Assign(TStrokeBrush(Source).Resource); + TBrushKind.Bitmap: + FBitmap.Assign(TStrokeBrush(Source).Bitmap); + end; + + FThickness := TStrokeBrush(Source).Thickness; + FCap := TStrokeBrush(Source).Cap; + FDash := TStrokeBrush(Source).Dash; + FJoin := TStrokeBrush(Source).Join; + FDashArray := Copy(TStrokeBrush(Source).FDashArray); + FDashOffset := TStrokeBrush(Source).FDashOffset; + FOnChanged := SaveChange; + if Assigned(FOnChanged) then + FOnChanged(Self); + end + else + inherited; +end; + +procedure TStrokeBrush.SetCustomDash(const Dash: array of Single; Offset: Single); +var + I: Integer; +begin + FDash := TStrokeDash.Custom; + SetLength(FDashArray, Length(Dash)); + for I := 0 to High(Dash) do + FDashArray[I] := Dash[I]; + FDashOffset := Offset; +end; + +function TStrokeBrush.IsThicknessStored: Boolean; +begin + Result := Thickness <> 1; +end; + +procedure TStrokeBrush.SetCap(const Value: TStrokeCap); +begin + if FCap <> Value then + begin + FCap := Value; + if Assigned(FOnChanged) then + FOnChanged(Self); + end; +end; + +procedure TStrokeBrush.SetDash(const Value: TStrokeDash); +begin + if FDash <> Value then + begin + FDash := Value; + case FDash of + TStrokeDash.Solid: + begin + FDashOffset := 0; + SetLength(FDashArray, 0); + end; + TStrokeDash.Dash: + begin + FDashOffset := 0; + SetLength(FDashArray, 2); + FDashArray[0] := 1 * 3; + FDashArray[1] := 1; + end; + TStrokeDash.Dot: + begin + FDashOffset := 0; + SetLength(FDashArray, 2); + FDashArray[0] := 1; + FDashArray[1] := 1; + end; + TStrokeDash.DashDot: + begin + FDashOffset := 0; + SetLength(FDashArray, 4); + FDashArray[0] := 1 * 3; + FDashArray[1] := 1; + FDashArray[2] := 1; + FDashArray[3] := 1; + end; + TStrokeDash.DashDotDot: + begin + FDashOffset := 0; + SetLength(FDashArray, 6); + FDashArray[0] := 1 * 3; + FDashArray[1] := 1; + FDashArray[2] := 1; + FDashArray[3] := 1; + FDashArray[4] := 1; + FDashArray[5] := 1; + end; + TStrokeDash.Custom: + ; + else + FDashOffset := 0; + SetLength(FDashArray, 0); + end; + if Assigned(FOnChanged) then + FOnChanged(Self); + end; +end; + +procedure TStrokeBrush.SetJoin(const Value: TStrokeJoin); +begin + if FJoin <> Value then + begin + FJoin := Value; + if Assigned(FOnChanged) then + FOnChanged(Self); + end; +end; + +procedure TStrokeBrush.SetThickness(const Value: Single); +var + NewValue: Single; +begin + NewValue := Max(Value, 0); + if not SameValue(FThickness, NewValue, TEpsilon.Vector) then + begin + FThickness := NewValue; + if Assigned(FOnChanged) then + FOnChanged(Self); + end; +end; + +{ TFontWeightHelper } + +function TFontWeightHelper.IsRegular: Boolean; +begin + Result := Self = TFontWeight.Regular; +end; + +{ TFontSlantHelper } + +function TFontSlantHelper.IsRegular: Boolean; +begin + Result := Self = TFontSlant.Regular; +end; + +{ TFontStretchHelper } + +function TFontStretchHelper.IsRegular: Boolean; +begin + Result := Self = TFontStretch.Regular; +end; + +{ TFontStyleExt } + +class function TFontStyleExt.Create(const AWeight: TFontWeight; const AStant: TFontSlant; const AStretch: TFontStretch; + const AOtherStyles: TFontStyles): TFontStyleExt; +begin + Result := TFontStyleExt.Create(AOtherStyles); + Result.Weight := AWeight; + Result.Slant := AStant; + Result.Stretch := AStretch; +end; + +class function TFontStyleExt.Create(const AStyle: TFontStyles): TFontStyleExt; +begin + Result.Weight := TFontWeight.Regular; + Result.Slant := TFontSlant.Regular; + Result.Stretch := TFontStretch.Regular; + if AStyle <> [] then + begin + if TFontStyle.fsBold in AStyle then + Result.Weight := TFontWeight.Bold; + if TFontStyle.fsItalic in AStyle then + Result.Slant := TFontSlant.Oblique; + end; + Result.SimpleStyle := AStyle - [TFontStyle.fsBold, TFontStyle.fsItalic]; +end; + +class function TFontStyleExt.Default: TFontStyleExt; +begin + Result := TFontStyleExt.Create([]); +end; + +class operator TFontStyleExt.Equal(const A, B: TFontStyleExt): Boolean; +begin + Result := (A.SimpleStyle = B.SimpleStyle) and (A.Weight = B.Weight) and (A.Slant = B.Slant) + and (A.Stretch = B.Stretch); +end; + +class operator TFontStyleExt.NotEqual(const A, B: TFontStyleExt): Boolean; +begin + Result := (A.SimpleStyle <> B.SimpleStyle) or (A.Weight <> B.Weight) or (A.Slant <> B.Slant) + or (A.Stretch <> B.Stretch); +end; + +class operator TFontStyleExt.Implicit(const AStyle: TFontStyleExt): TFontStyles; +begin + Result := AStyle.SimpleStyle; + if not AStyle.Weight.IsRegular then + Include(Result, TFontStyle.fsBold); + if not AStyle.Slant.IsRegular then + Include(Result, TFontStyle.fsItalic); +end; + +class operator TFontStyleExt.Add(const A, B: TFontStyleExt): TFontStyleExt; +begin + Result := A; + Result.SimpleStyle := Result.SimpleStyle + B.SimpleStyle; +end; + +class operator TFontStyleExt.Add(const A: TFontStyleExt; const B: TFontStyle): TFontStyleExt; +begin + Result := A; + Result.SimpleStyle := Result.SimpleStyle + [B] - [TFontStyle.fsBold, TFontStyle.fsItalic]; + if B = TFontStyle.fsBold then + Result.Weight := TFontWeight.Bold; + if B = TFontStyle.fsItalic then + Result.Slant := TFontSlant.Oblique; +end; + +class operator TFontStyleExt.Add(const A: TFontStyleExt; const B: TFontStyles): TFontStyleExt; +begin + Result := A; + Result.SimpleStyle := Result.SimpleStyle + B - [TFontStyle.fsBold, TFontStyle.fsItalic]; + if TFontStyle.fsBold in B then + Result.Weight := TFontWeight.Bold; + if TFontStyle.fsItalic in B then + Result.Slant := TFontSlant.Oblique; +end; + +class operator TFontStyleExt.Subtract(const A: TFontStyleExt; const B: TFontStyle): TFontStyleExt; +begin + Result := A; + Result.SimpleStyle := Result.SimpleStyle - [B] - [TFontStyle.fsBold, TFontStyle.fsItalic]; + if B = TFontStyle.fsBold then + Result.Weight := TFontWeight.Regular; + if B = TFontStyle.fsItalic then + Result.Slant := TFontSlant.Regular; +end; + +class operator TFontStyleExt.Subtract(const A: TFontStyleExt; const B: TFontStyles): TFontStyleExt; +begin + Result := A; + Result.SimpleStyle := Result.SimpleStyle - B - [TFontStyle.fsBold, TFontStyle.fsItalic]; + if TFontStyle.fsBold in B then + Result.Weight := TFontWeight.Regular; + if TFontStyle.fsItalic in B then + Result.Slant := TFontSlant.Regular; +end; + +class operator TFontStyleExt.In(const A: TFontStyle; const B: TFontStyleExt): Boolean; +begin + if A in [TFontStyle.fsUnderline, TFontStyle.fsStrikeOut] then + Result := A in B.SimpleStyle + else if A = TFontStyle.fsBold then + Result := B.Weight > TFontWeight.Regular + else if A = TFontStyle.fsItalic then + Result := not B.Slant.IsRegular + else + Result := False; +end; + +class operator TFontStyleExt.Multiply(const A: TFontStyles; const B: TFontStyleExt): TFontStyles; +begin + Result := A * B; +end; + +function TFontStyleExt.IsRegular: Boolean; +begin + Result := (Weight = TFontWeight.Regular) and (Stretch = TFontStretch.Regular) and (Slant = TFontSlant.Regular); +end; + +{ TFont } + +procedure TFont.SetFamily(const Value: TFontName); +begin + if FFamily <> Value then + begin + FFamily := Value; + Change; + end; +end; + +procedure TFont.SetSize(const Value: Single); +var + LSize: Single; +begin + LSize := EnsureRange(Value, 1, MaxFontSize); + if not SameValue(FSize, LSize, TEpsilon.FontSize) then + begin + FSize := LSize; + Change; + end; +end; + +function TFont.GetStyle: TFontStyles; +begin + Result := FStyleExt; +end; + +procedure TFont.SetStyle(const Value: TFontStyles); +var + LStyle: TFontStyleExt; +begin + LStyle := TFontStyleExt.Create(Value); + if FStyleExt <> LStyle then + begin + FStyleExt := LStyle; + Change; + end; +end; + +procedure TFont.SetStyleExt(const Value: TFontStyleExt); +begin + if FStyleExt <> Value then + begin + FStyleExt := Value; + Change; + end; +end; + +procedure TFont.ReadStyleExt(AStream: TStream); +begin + AStream.Read(FStyleExt.SimpleStyle, SizeOf(TFontStyles)); + AStream.Read(FStyleExt.Weight, SizeOf(TFontWeight)); + AStream.Read(FStyleExt.Slant, SizeOf(TFontSlant)); + AStream.Read(FStyleExt.Stretch, SizeOf(TFontStretch)); +end; + +procedure TFont.WriteStyleExt(AStream: TStream); +begin + AStream.Write(FStyleExt.SimpleStyle, SizeOf(TFontStyles)); + AStream.Write(FStyleExt.Weight, SizeOf(TFontWeight)); + AStream.Write(FStyleExt.Slant, SizeOf(TFontSlant)); + AStream.Write(FStyleExt.Stretch, SizeOf(TFontStretch)); +end; + +procedure TFont.DefineProperties(Filer: TFiler); +begin + Filer.DefineBinaryProperty('StyleExt', ReadStyleExt, WriteStyleExt, not FStyleExt.IsRegular or (FStyleExt.SimpleStyle <> [])); + inherited; +end; + +function TFont.DefaultFamily: string; +var + Service: IFMXSystemFontService; +begin + if FontService = nil then + begin + TPlatformServices.Current.SupportsPlatformService(IFMXSystemFontService, Service); + FontService := Service; + end; + if FontService <> nil then + Result := FontService.GetDefaultFontFamilyName + else + Result := DefaultFontFamily; +end; + +function TFont.DefaultSize: Single; +var + Service: IFMXSystemFontService; +begin + if FontService = nil then + begin + TPlatformServices.Current.SupportsPlatformService(IFMXSystemFontService, Service); + FontService := Service; + end; + if FontService <> nil then + Result := FontService.GetDefaultFontSize + else + Result := DefaultFontSize; +end; + +procedure TFont.DoChanged; +begin + if Assigned(FOnChanged) then + FOnChanged(Self); +end; + +constructor TFont.Create; +begin + inherited; + FUpdating := True; + SetSettings(DefaultFamily, DefaultSize, TFontStyleExt.Default); +end; + +procedure TFont.AfterConstruction; +begin + inherited; + FChanged := False; + FUpdating := False; +end; + +procedure TFont.Change; +begin + if not FUpdating then + begin + FChanged := False; + DoChanged; + end + else + FChanged := True; +end; + +procedure TFont.Assign(Source: TPersistent); +var + LFont: TFont; +begin + if (Source = nil) or (Source is TFont) then + begin + if Source = nil then + LFont := TFontClass(ClassType).Create + else + LFont := TFont(Source); + try + SetSettings(LFont.Family, LFont.Size, LFont.StyleExt); + finally + if Source = nil then + LFont.Free; + end; + end + else + inherited; +end; + +procedure TFont.SetSettings(const AFamily: string; const ASize: Single; const AStyle: TFontStyleExt); +var + LUpdating: Boolean; +begin + LUpdating := FUpdating; + try + FUpdating := True; + Family := AFamily; + Size := ASize; + StyleExt := AStyle; + finally + FUpdating := LUpdating; + end; + if not FUpdating and FChanged then + Change; +end; + +function TFont.Equals(Obj: TObject): Boolean; +begin + Result := (Obj is TFont) and SameValue(Size, TFont(Obj).Size, TEpsilon.FontSize) and (Family = TFont(Obj).Family) and + (StyleExt = TFont(Obj).StyleExt); +end; + +function TFont.IsFamilyStored: Boolean; +begin + Result := FFamily <> DefaultFamily; +end; + +function TFont.IsSizeStored: Boolean; +begin + Result := not SameValue(FSize, DefaultSize, TEpsilon.FontSize); +end; + +{ TFontColorForState } + +constructor TFontColorForState.Create(const AOwner: TTextSettings); +begin + inherited Create; + FOwner := AOwner; + BeginUpdate; +end; + +procedure TFontColorForState.AfterConstruction; +begin + inherited; + FChanged := False; + EndUpdate; +end; + +procedure TFontColorForState.Assign(Source: TPersistent); +var + LFontColors: TFontColorForState; + I: TIndex; +begin + if (Source is TFontColorForState) or (Source = nil) then + begin + if Source = nil then + LFontColors := TFontColorForStateClass(ClassType).Create(Owner) + else + LFontColors := TFontColorForState(Source); + try + BeginUpdate; + try + for I := Low(TIndex) to High(TIndex) do + Color[I] := LFontColors.Color[I]; + finally + EndUpdate; + end; + finally + if Source = nil then + LFontColors.Free; + end; + end + else + inherited; +end; + +function TFontColorForState.Equals(Obj: TObject): Boolean; +var + I: TIndex; +begin + Result := Obj is TFontColorForState; + if Result then + for I := Low(TIndex) to High(TIndex) do + if FColor[I] <> TFontColorForState(Obj).FColor[I] then + Exit(False); +end; + +procedure TFontColorForState.BeginUpdate; +begin + Inc(FUpdateCount); +end; + +procedure TFontColorForState.EndUpdate; +begin + if FUpdateCount > 0 then + begin + Dec(FUpdateCount); + if (FUpdateCount = 0) and FChanged then + try + DoChanged; + finally + FChanged := False; + end; + end; +end; + +procedure TFontColorForState.Change; +begin + if FUpdateCount = 0 then + begin + try + DoChanged; + finally + FChanged := False; + end; + end + else + FChanged := True; +end; + +procedure TFontColorForState.DoChanged; +begin + if FOwner <> nil then + FOwner.Change; +end; + +function TFontColorForState.GetColor(const Index: TIndex): TAlphaColor; +begin + Result := FColor[Index]; +end; + +procedure TFontColorForState.SetColor(const Index: TIndex; const Value: TAlphaColor); +begin + if FColor[Index] <> Value then + begin + FColor[Index] := Value; + Change; + end; +end; + +function TFontColorForState.GetCurrentColor(const Index: TIndex): TAlphaColor; +begin + Result := FColor[Index]; + if (Result = claNull) and (Owner <> nil) then + Result := Owner.FontColor; +end; + +function TFontColorForState.GetOwner: TPersistent; +begin + Result := FOwner; +end; + +{ TTextSettings } + +type + TSettingsFont = class(TFont) + private + [Weak] FTextSettings: TTextSettings; + protected + procedure DoChanged; override; + public + constructor Create(const ATextSettings: TTextSettings); + property TextSettings: TTextSettings read FTextSettings; + end; + +{ TSettingsFont } + +constructor TSettingsFont.Create(const ATextSettings: TTextSettings); +begin + inherited Create; + FTextSettings := ATextSettings; +end; + +procedure TSettingsFont.DoChanged; +begin + if FTextSettings <> nil then + begin + FTextSettings.IsAdjustChanged := True; + FTextSettings.Change; + end; + inherited; +end; + +constructor TTextSettings.Create(const AOwner: TPersistent); +begin + inherited Create; + FOwner := AOwner; + BeginUpdate; + FFontColorForState := CreateFontColorForState; + FFont := TSettingsFont.Create(Self); + FontColor := TAlphaColorRec.Black; + HorzAlign := TTextAlign.Leading; + VertAlign := TTextAlign.Center; + Trimming := TTextTrimming.None; + WordWrap := False; +end; + +procedure TTextSettings.AfterConstruction; +begin + inherited; + FIsChanged := False; + FIsAdjustChanged := False; + EndUpdate; +end; + +destructor TTextSettings.Destroy; +begin + FFont.Free; + FFontColorForState.Free; + inherited; +end; + +function TTextSettings.GetOwner: TPersistent; +begin + Result := FOwner; +end; + +procedure TTextSettings.DoAssign(const Source: TTextSettings); +begin + Font.Assign(Source.Font); + FontColor := Source.FontColor; + FontColorForState.Assign(Source.FontColorForState); + HorzAlign := Source.HorzAlign; + VertAlign := Source.VertAlign; + WordWrap := Source.WordWrap; + Trimming := Source.Trimming; +end; + +procedure TTextSettings.Assign(Source: TPersistent); +var + LTextSettings: TTextSettings; +begin + if (Source = nil) or (Source is TTextSettings) then + begin + if Source = nil then + LTextSettings := TTextSettingsClass(ClassType).Create(Owner) + else + LTextSettings := TTextSettings(Source); + try + BeginUpdate; + try + DoAssign(LTextSettings); + finally + EndUpdate; + end; + finally + if Source = nil then + LTextSettings.Free; + end; + end + else + inherited; +end; + +function TTextSettings.Equals(Obj: TObject): Boolean; +var + Source: TTextSettings; +begin + Result := Obj is TTextSettings; + if Result then + begin + Source := TTextSettings(Obj); + Result := (HorzAlign = Source.HorzAlign) and (VertAlign = Source.VertAlign) and (WordWrap = Source.WordWrap) and + (FontColor = Source.FontColor) and (Trimming = Source.Trimming) and (Font.Equals(Source.Font)) and + (FontColorForState.Equals(Source.FontColorForState)); + end; +end; + +procedure TTextSettings.DoAssignNotStyled(const TextSettings: TTextSettings; const StyledSettings: TStyledSettings); +begin + if not (TStyledSetting.Family in StyledSettings) then + Font.Family := TextSettings.Font.FFamily; + if not (TStyledSetting.Size in StyledSettings) then + Font.Size := TextSettings.Font.Size; + if not (TStyledSetting.Style in StyledSettings) then + Font.StyleExt := TextSettings.Font.StyleExt; + if not (TStyledSetting.FontColor in StyledSettings) then + begin + FontColor := TextSettings.FontColor; + FontColorForState := TextSettings.FontColorForState; + end; + if not (TStyledSetting.Other in StyledSettings) then + begin + HorzAlign := TextSettings.HorzAlign; + VertAlign := TextSettings.VertAlign; + WordWrap := TextSettings.WordWrap; + Trimming := TextSettings.Trimming; + end; +end; + +procedure TTextSettings.AssignNotStyled(const TextSettings: TTextSettings; const StyledSettings: TStyledSettings); +var + LTextSettings: TTextSettings; +begin + if StyledSettings <> AllStyledSettings then + begin + if StyledSettings = [] then + Assign(TextSettings) + else + begin + if TextSettings = nil then + LTextSettings := TTextSettingsClass(ClassType).Create(Owner) + else + LTextSettings := TextSettings; + try + BeginUpdate; + try + DoAssignNotStyled(LTextSettings, StyledSettings); + finally + EndUpdate; + end; + finally + if TextSettings = nil then + LTextSettings.Free; + end; + end; + end; +end; + +procedure TTextSettings.UpdateStyledSettings(const OldTextSettings, DefaultTextSettings: TTextSettings; var StyledSettings: TStyledSettings); +begin + // If the user changed the value of the property, and it differs from the default, + // then delete the corresponding value from StyledSettings + if (not SameText(OldTextSettings.Font.Family, Font.Family)) and + (not SameText(DefaultTextSettings.Font.Family, Font.Family)) then + Exclude(StyledSettings, TStyledSetting.Family); + + if (not SameValue(OldTextSettings.Font.Size, Font.Size, TEpsilon.FontSize)) and + (not SameValue(DefaultTextSettings.Font.Size, Font.Size, TEpsilon.FontSize)) then + Exclude(StyledSettings, TStyledSetting.Size); + + if (OldTextSettings.Font.StyleExt <> Font.StyleExt) and (DefaultTextSettings.Font.StyleExt <> Font.StyleExt) then + Exclude(StyledSettings, TStyledSetting.Style); + + if ((OldTextSettings.FontColor <> FontColor) and (DefaultTextSettings.FontColor <> FontColor)) then + Exclude(StyledSettings, TStyledSetting.FontColor); + + if ((OldTextSettings.HorzAlign <> HorzAlign) and (DefaultTextSettings.HorzAlign <> HorzAlign)) or + ((OldTextSettings.VertAlign <> VertAlign) and (DefaultTextSettings.VertAlign <> VertAlign)) or + ((OldTextSettings.Trimming <> Trimming) and (DefaultTextSettings.Trimming <> Trimming)) or + ((OldTextSettings.WordWrap <> WordWrap) and (DefaultTextSettings.WordWrap <> WordWrap)) then + Exclude(StyledSettings, TStyledSetting.Other); + + if (not OldTextSettings.FontColorForState.Equals(FontColorForState)) and + (not DefaultTextSettings.FontColorForState.Equals(FontColorForState)) then + Exclude(StyledSettings, TStyledSetting.FontColor); +end; + +procedure TTextSettings.BeginUpdate; +begin + Inc(FUpdateCount); +end; + +procedure TTextSettings.EndUpdate; +begin + if FUpdateCount > 0 then + begin + Dec(FUpdateCount); + if (FUpdateCount = 0) and (FIsChanged or FIsAdjustChanged) then + try + DoChanged; + finally + FIsChanged := False; + FIsAdjustChanged := False; + end; + end; +end; + +procedure TTextSettings.Change; +begin + FIsChanged := True; + if (FUpdateCount = 0) then + begin + try + DoChanged; + finally + FIsChanged := False; + FIsAdjustChanged := False; + end; + end; +end; + +procedure TTextSettings.DoChanged; +begin + if Assigned(OnChanged) then + OnChanged(Self); +end; + +procedure TTextSettings.SetFont(const Value: TFont); +begin + if not (((Font = nil) and (Value = nil)) or ((Font <> nil) and Font.Equals(Value))) then + begin + Font.Assign(Value); + IsAdjustChanged := True; + Change; + end; +end; + +procedure TTextSettings.SetFontColor(const Value: TAlphaColor); +begin + if FFontColor <> Value then + begin + FFontColor := Value; + Change; + end; +end; + +procedure TTextSettings.SetHorzAlign(const Value: TTextAlign); +begin + if FHorzAlign <> Value then + begin + FHorzAlign := Value; + IsAdjustChanged := True; + Change; + end; +end; + +procedure TTextSettings.SetVertAlign(const Value: TTextAlign); +begin + if FVertAlign <> Value then + begin + FVertAlign := Value; + IsAdjustChanged := True; + Change; + end; +end; + +procedure TTextSettings.SetTrimming(const Value: TTextTrimming); +begin + if FTrimming <> Value then + begin + FTrimming := Value; + IsAdjustChanged := True; + Change; + end; +end; + +procedure TTextSettings.SetWordWrap(const Value: Boolean); +begin + if FWordWrap <> Value then + begin + FWordWrap := Value; + IsAdjustChanged := True; + Change; + end; +end; + +function TTextSettings.GetTextColorsClass: TFontColorForStateClass; +begin + Result := nil; +end; + +function TTextSettings.CreateFontColorForState: TFontColorForState; +var + LClass: TFontColorForStateClass; +begin + LClass := GetTextColorsClass; + if LClass = nil then + LClass := TFontColorForState; + Result := LClass.Create(Self); +end; + +procedure TTextSettings.SetFontColorForState(const Value: TFontColorForState); +begin + FFontColorForState.Assign(Value); +end; + +function TTextSettings.StoreFontColorForState: Boolean; +var + LFontColors: TFontColorForState; +begin + LFontColors := CreateFontColorForState; + try + Result := not FFontColorForState.Equals(LFontColors); + finally + LFontColors.Free; + end; +end; + +{ TBitmapCodecManager } + +class procedure TBitmapCodecManager.UnInitialize; +begin + FreeAndNil(FCodecsDescriptors); +end; + +class function TBitmapCodecManager.FindCodecClass(const AFileExtension: string; var ACodecClass: TCustomBitmapCodecClass): Boolean; +var + Descriptor: TCodecDescriptor; +begin + Result := False; + ACodecClass := nil; + for Descriptor in CodecsDescriptors do + if SameExtension(AFileExtension, Descriptor.Extension) then + begin + ACodecClass := Descriptor.CodecClass; + Exit(True); + end; +end; + +class function TBitmapCodecManager.FindWritableCodecClass(const AFileExtension: string; + var ACodecClass: TCustomBitmapCodecClass): Boolean; +var + Descriptor: TCodecDescriptor; +begin + Result := False; + ACodecClass := nil; + for Descriptor in CodecsDescriptors do + if Descriptor.CanSave and SameExtension(AFileExtension, Descriptor.Extension) then + begin + ACodecClass := Descriptor.CodecClass; + Exit(True); + end; +end; + +class function TBitmapCodecManager.GuessCodecClass(const AFileExtension: string): TCustomBitmapCodecClass; +begin + if not FindCodecClass(AFileExtension, Result) and (CodecsDescriptors.Count > 0) then + // If none found, fallback to the first one. + Result := CodecsDescriptors.First.CodecClass; +end; + +class procedure TBitmapCodecManager.RegisterBitmapCodecClass(const AFileExtension, ADescription: string; const ACanSave: Boolean; + const ACodecClass: TCustomBitmapCodecClass); +var + LDescriptor: TCodecDescriptor; +begin + if AFileExtension.Trim.IsEmpty then + raise EBitmapCodecManagerException.CreateRes(@SCodecFileExtensionCannotEmpty); + + if ACodecClass = nil then + raise EBitmapCodecManagerException.CreateRes(@SCodecClassCannotBeNil); + + if CodecExists(AFileExtension) then + raise EBitmapCodecManagerException.CreateResFmt(@SCodecAlreadyExists, [AFileExtension]); + + LDescriptor.Extension := AFileExtension; + LDescriptor.Description := ADescription; + LDescriptor.CodecClass := ACodecClass; + LDescriptor.CanSave := ACanSave; + CodecsDescriptors.Add(LDescriptor); +end; + +class procedure TBitmapCodecManager.UnregisterBitmapCodecClass(const AFileExtension: string); +var + I: Integer; +begin + for I := CodecsDescriptors.Count - 1 downto 0 do + if SameText(AFileExtension, CodecsDescriptors[I].Extension) then + begin + CodecsDescriptors.Delete(I); + Exit; + end; +end; + +class function TBitmapCodecManager.CodecExists(const AFileName: string): Boolean; +var + CodecClass: TCustomBitmapCodecClass; +begin + Result := FindCodecClass(ExtractFileExt(AFileName), CodecClass); +end; + +class function TBitmapCodecManager.GetCodecsDescriptors: TList; +begin + if FCodecsDescriptors = nil then + FCodecsDescriptors := TList.Create; + + Result := FCodecsDescriptors; +end; + +class function TBitmapCodecManager.GetFileTypes: string; +var + Descriptor: TCodecDescriptor; +begin + Result := string.Empty; + for Descriptor in CodecsDescriptors do + if Result.IsEmpty then + Result := '*' + Descriptor.Extension + else + Result := Result + ';' + '*' + Descriptor.Extension; +end; + +class function TBitmapCodecManager.GetFilterString: string; +var + Descriptor: TCodecDescriptor; + CodecFilter: string; + FileTypes: string; +begin + Result := string.Empty; + for Descriptor in CodecsDescriptors do + begin + CodecFilter := Descriptor.ToFilterString; + if Result.IsEmpty then + Result := CodecFilter + else + Result := Result + '|' + CodecFilter; + end; + // all files + FileTypes := GetFileTypes; + Result := SVAllFiles + ' (' + FileTypes + ')|' + FileTypes + '|' + Result; +end; + +class function TBitmapCodecManager.GetImageSize(const AFileName: string): TPointF; +var + CodecClass: TCustomBitmapCodecClass; + DataType: string; +begin + DataType := TImageTypeChecker.GetType(AFileName); + CodecClass := GuessCodecClass(DataType); + if CodecClass <> nil then + Result := CodecClass.GetImageSize(AFileName) + else + Result := TPointF.Zero; +end; + +class function TBitmapCodecManager.LoadFromFile(const AFileName: string; const ABitmap: TBitmapSurface; + const AMaxSizeLimit: Cardinal = 0): Boolean; +var + CodecClass: TCustomBitmapCodecClass; + Codec: TCustomBitmapCodec; + DataType: string; +begin + if ABitmap = nil then + raise EBitmapCodecManagerException.CreateResFmt(@SWrongParameter, ['ABitmap']); + + DataType := TImageTypeChecker.GetType(AFileName); + CodecClass := GuessCodecClass(DataType); + if CodecClass <> nil then + begin + Codec := CodecClass.Create; + try + Result := Codec.LoadFromFile(AFileName, ABitmap, AMaxSizeLimit); + finally + Codec.Free; + end; + end + else + Result := False; +end; + +class function TBitmapCodecManager.LoadThumbnailFromFile(const AFileName: string; const AFitWidth, AFitHeight: Single; + const AUseEmbedded: Boolean; const ABitmap: TBitmapSurface): Boolean; +var + CodecClass: TCustomBitmapCodecClass; + Codec: TCustomBitmapCodec; + DataType: string; +begin + if ABitmap = nil then + raise EBitmapCodecManagerException.CreateResFmt(@SWrongParameter, ['ABitmap']); + + DataType := TImageTypeChecker.GetType(AFileName); + CodecClass := GuessCodecClass(DataType); + if CodecClass <> nil then + begin + Codec := CodecClass.Create; + try + Result := Codec.LoadThumbnailFromFile(AFileName, AFitWidth, AFitHeight, AUseEmbedded, ABitmap); + finally + Codec.Free; + end; + end + else + Result := False; +end; + +class function TBitmapCodecManager.LoadFromStream(const AStream: TStream; const ABitmap: TBitmapSurface; + const AMaxSizeLimit: Cardinal = 0): Boolean; +var + CodecClass: TCustomBitmapCodecClass; + Codec: TCustomBitmapCodec; + DataType: string; +begin + if AStream = nil then + raise EBitmapCodecManagerException.CreateResFmt(@SWrongParameter, ['AStream']); + if ABitmap = nil then + raise EBitmapCodecManagerException.CreateResFmt(@SWrongParameter, ['ABitmap']); + + Result := False; + DataType := TImageTypeChecker.GetType(AStream); + CodecClass := GuessCodecClass(DataType); + if CodecClass <> nil then + begin + Codec := CodecClass.Create; + try + Result := Codec.LoadFromStream(AStream, ABitmap, AMaxSizeLimit); + finally + Codec.Free; + end; + end +end; + +class function TBitmapCodecManager.SameExtension(const ALeft, ARight: string): Boolean; +begin + Result := SameText(ALeft, ARight, loUserLocale) or SameText('.' + ALeft, ARight, loUserLocale); +end; + +class function TBitmapCodecManager.SaveToFile(const AFileName: string; const ABitmap: TBitmapSurface; + const ASaveParams: PBitmapCodecSaveParams = nil): Boolean; +var + Codec: TCustomBitmapCodec; + CodecClass: TCustomBitmapCodecClass; +begin + if ABitmap = nil then + raise EBitmapCodecManagerException.CreateResFmt(@SWrongParameter, ['ABitmap']); + + Result := False; + if FindWritableCodecClass(ExtractFileExt(AFileName), CodecClass) then + begin + Codec := CodecClass.Create; + try + Result := Codec.SaveToFile(AFileName, ABitmap, ASaveParams); + finally + Codec.Free; + end; + end; +end; + +class function TBitmapCodecManager.SaveToStream(const AStream: TStream; const ABitmap: TBitmapSurface; const AExtension: string; + const ASaveParams: PBitmapCodecSaveParams = nil): Boolean; +var + Codec: TCustomBitmapCodec; + CodecClass: TCustomBitmapCodecClass; +begin + if AStream = nil then + raise EBitmapCodecManagerException.CreateResFmt(@SWrongParameter, ['AStream']); + if ABitmap = nil then + raise EBitmapCodecManagerException.CreateResFmt(@SWrongParameter, ['ABitmap']); + + Result := False; + if FindWritableCodecClass(AExtension, CodecClass) then + begin + Codec := CodecClass.Create; + try + Result := Codec.SaveToStream(AStream, ABitmap, AExtension, ASaveParams); + finally + Codec.Free; + end; + end; +end; + +{ TBitmapData } + +constructor TBitmapData.Create(const AWidth, AHeight: Integer; const APixelFormat: TPixelFormat); +begin + Self.FWidth := AWidth; + Self.FHeight := AHeight; + Self.FPixelFormat := APixelFormat; +end; + +function TBitmapData.GetBytesPerLine: Integer; +begin + Result := Width * BytesPerPixel; +end; + +function TBitmapData.GetBytesPerPixel: Integer; +begin + Result := PixelFormatBytes[PixelFormat]; +end; + +function TBitmapData.GetPixel(const X, Y: Integer): TAlphaColor; +begin + Result := PixelToAlphaColor(GetPixelAddr(X, Y), PixelFormat); +end; + +function TBitmapData.GetPixelAddr(const I, J: Integer): Pointer; +begin + Result := Pointer(NativeInt(GetScanline(J)) + I * BytesPerPixel); +end; + +function TBitmapData.GetScanline(const I: Integer): Pointer; +begin + Result := Pointer(NativeInt(Data) + I * Pitch); +end; + +procedure TBitmapData.Copy(const Source: TBitmapData); +var + I: Integer; +begin + for I := 0 to Height - 1 do + Move(Source.GetScanline(I)^, GetScanline(I)^, BytesPerLine); +end; + +procedure TBitmapData.SetPixel(const X, Y: Integer; const AColor: TAlphaColor); +begin + AlphaColorToPixel(AColor, GetPixelAddr(X, Y), PixelFormat); +end; + +{ TBitmapImage } + +constructor TBitmapImage.Create; +begin + inherited; + FBitmapScale := 1; +end; + +procedure TBitmapImage.CreateHandle; +begin + FHandle := CanvasClass.InitializeBitmap(Width, Height, BitmapScale, FPixelFormat); +end; + +procedure TBitmapImage.FreeHandle; +begin + FCanvasClass.FinalizeBitmap(FHandle); + FHandle := 0; +end; + +function TBitmapImage.GetCanvasClass: TCanvasClass; +begin + if FCanvasClass = nil then + FCanvasClass := TCanvasManager.GetDefaultCanvas; + Result := FCanvasClass; +end; + +procedure TBitmapImage.IncreaseRefCount; +begin + AtomicIncrement(FRefCount); +end; + +procedure TBitmapImage.DecreaseRefCount; +begin + if Self <> nil then + begin + AtomicDecrement(FRefCount); + if FRefCount = 0 then + begin + if FHandle <> 0 then + FreeHandle; + DisposeOf; + end; + end; +end; + +{ TBitmap } + +constructor TBitmap.Create; +begin + inherited; + FImage := TBitmapImage.Create; + FImage.IncreaseRefCount; +end; + +constructor TBitmap.Create(const AWidth, AHeight: Integer); +begin + Create; + SetSize(AWidth, AHeight); +end; + +constructor TBitmap.CreateFromStream(const AStream: TStream); +begin + Create; + LoadFromStream(AStream); +end; + +constructor TBitmap.CreateFromFile(const AFileName: string); +begin + Create; + LoadFromFile(AFileName); +end; + +constructor TBitmap.CreateFromBitmapAndMask(const Bitmap, Mask: TBitmap); + + function GetBrightness(const Color: TAlphaColor): Integer; + begin + { Faster integer variant of formula: + Result = R * 0.2126 + G * 0.7152 + B * 0.0722 } + Result := ((Integer(TAlphaColorRec(Color).R) * 54) + (Integer(TAlphaColorRec(Color).G) * 183) + + (Integer(TAlphaColorRec(Color).B) * 19)) div 256; + end; + +var + I, J: Integer; + D, B, M: TBitmapData; + C: TAlphaColor; +begin + Create(Bitmap.Width, Bitmap.Height); + if (Bitmap.Width <> Mask.Width) or (Bitmap.Height <> Mask.Height) then + raise EBitmapIncorrectSize.Create(SBitmapIncorrectSize); + if Map(TMapAccess.Write, D) then + try + if Bitmap.Map(TMapAccess.Read, B) then + try + if Mask.Map(TMapAccess.Read, M) then + try + for J := 0 to Height - 1 do + for I := 0 to Width - 1 do + begin + C := B.GetPixel(I, J); + TAlphaColorRec(C).A := GetBrightness(M.GetPixel(I, J)); + D.SetPixel(I, J, C); + end; + finally + Mask.Unmap(M); + end; + finally + Bitmap.Unmap(B); + end; + finally + Unmap(D); + end; +end; + +destructor TBitmap.Destroy; +begin + DestroyResources; + FImage.DecreaseRefCount; + inherited; +end; + +function TBitmap.GetImage: TBitmapImage; +begin + if FImage.Handle = 0 then + FImage.CreateHandle; + Result := FImage; +end; + +function TBitmap.GetHandle: THandle; +begin + Result := Image.Handle; +end; + +function TBitmap.GetHeight: Integer; +begin + Result := FImage.Height; +end; + +function TBitmap.GetPixelFormat: TPixelFormat; +begin + Result := Image.PixelFormat; +end; + +function TBitmap.GetSize: TSize; +begin + Result := TSize.Create(Width, Height); +end; + +function TBitmap.GetWidth: Integer; +begin + Result := FImage.Width; +end; + +function TBitmap.HandleAllocated: Boolean; +begin + Result := (FImage <> nil) and (Image.Handle <> 0); +end; + +procedure TBitmap.SetWidth(const Value: Integer); +begin + SetSize(Value, Height); +end; + +function TBitmap.GetBitmapScale: Single; +begin + Result := FImage.BitmapScale; +end; + +function TBitmap.GetBounds: TRect; +begin + Result := TRect.Create(0, 0, Width, Height); +end; + +function TBitmap.GetBoundsF: TRectF; +begin + Result := TRectF.Create(0, 0, Width, Height); +end; + +function TBitmap.GetBytesPerLine: Integer; +begin + Result := BytesPerPixel * Width; +end; + +function TBitmap.GetBytesPerPixel: Integer; +begin + Result := PixelFormatBytes[PixelFormat]; +end; + +procedure TBitmap.SetBitmapScale(const Scale: Single); +begin + if BitmapScale <> Scale then + begin + TMonitor.Enter(Self); + try + CopyToNewReference; + FImage.FBitmapScale := Scale; + finally + TMonitor.Exit(Self); + end; + end; +end; + +procedure TBitmap.SetHeight(const Value: Integer); +begin + SetSize(Width, Value); +end; + +procedure TBitmap.SetSize(const ASize: TSize); +begin + SetSize(ASize.Width, ASize.Height); +end; + +procedure TBitmap.SetSize(const AWidth, AHeight: Integer); +var + SaveBitmapScale: Single; + SavePixelFormat: TPixelFormat; +begin + if (FImage.FWidth <> AWidth) or (FImage.FHeight <> AHeight) then + begin + if (AWidth > CanvasClass.GetAttribute(TCanvasAttribute.MaxBitmapSize)) or + (AHeight > CanvasClass.GetAttribute(TCanvasAttribute.MaxBitmapSize)) then + raise EBitmapSizeTooBig.CreateRes(@SBitmapSizeTooBig); + + TMonitor.Enter(Self); + try + SaveBitmapScale := BitmapScale; + SavePixelFormat := FImage.PixelFormat; + try + CreateNewReference; + FImage.FWidth := Max(0, AWidth); + FImage.FHeight := Max(0, AHeight); + finally + FImage.FBitmapScale := SaveBitmapScale; + FImage.FPixelFormat := SavePixelFormat; + end; + BitmapChanged; + finally + TMonitor.Exit(Self); + end; + end; +end; + +procedure TBitmap.DestroyResources; +begin + TMonitor.Enter(Self); + try + if FCanvas <> nil then + FCanvas.DisposeOf; + FCanvas := nil; + finally + TMonitor.Exit(Self); + end; +end; + +procedure TBitmap.FreeHandle; +begin + TMonitor.Enter(Self); + try + CreateNewReference; + BitmapChanged; + finally + TMonitor.Exit(Self); + end; +end; + +procedure TBitmap.CreateNewReference; +begin + TMonitor.Enter(Self); + try + DestroyResources; + FImage.DecreaseRefCount; + FImage := TBitmapImage.Create; + FImage.IncreaseRefCount; + finally + TMonitor.Exit(Self); + end; +end; + +procedure TBitmap.CopyToNewReference; +var + OldHandle: TBitmapImage; + Source, Dest: TBitmapData; +begin + if FImage.RefCount > 1 then + begin + TMonitor.Enter(Self); + try + OldHandle := FImage; + OldHandle.IncreaseRefCount; + try + CreateNewReference; + + FImage.FWidth := OldHandle.Width; + FImage.FHeight := OldHandle.Height; + FImage.FPixelFormat := OldHandle.PixelFormat; + FImage.FBitmapScale := OldHandle.BitmapScale; + + if CanvasClass.MapBitmap(Handle, TMapAccess.Write, Dest) then + begin + if CanvasClass.MapBitmap(OldHandle.Handle, TMapAccess.Read, Source) then + begin + Move(Source.Data^, Dest.Data^, Source.Pitch * FImage.Height); + CanvasClass.UnmapBitmap(OldHandle.Handle, Source); + end; + CanvasClass.UnmapBitmap(Handle, Dest); + end; + finally + OldHandle.DecreaseRefCount; + end; + finally + TMonitor.Exit(Self); + end; + end; +end; + +function TBitmap.GetCanvasClass: TCanvasClass; +begin + Result := Image.CanvasClass; +end; + +procedure TBitmap.Clear(const AColor: TAlphaColor); +begin + ClearRect(TRectF.Create(0, 0, Width, Height), AColor); +end; + +procedure TBitmap.ClearRect(const ARect: TRectF; const AColor: TAlphaColor); +var + R: TRectF; + M: TBitmapData; + C: Cardinal; +begin + TMonitor.Enter(Self); + try + R := ARect; + if R.Left < 0 then + R.Left := 0; + if R.Top < 0 then + R.Top := 0; + if R.Right > Width then + R.Right := Width; + if R.Bottom > Height then + R.Bottom := Height; + if R.Bottom < R.Top then + R.Bottom := R.Top; + if R.Right < R.Left then + R.Right := R.Left; + if (R.Right < 0) or (R.Top < 0) or (R.Left > Width) or (R.Top > Height) then + Exit; + if not R.IsEmpty and Map(TMapAccess.Write, M) then + try + AlphaColorToPixel(PremultiplyAlpha(AColor), @C, PixelFormat); + FillAlphaColorRect(PAlphaColorArray(M.Data), M.Pitch div 4, Height, Trunc(R.Left), Trunc(R.Top), Trunc(R.Right), + Trunc(R.Bottom), C); + finally + Unmap(M); + end; + finally + TMonitor.Exit(Self); + end; +end; + +procedure TBitmap.CopyFromBitmap(const Source: TBitmap); +begin + TMonitor.Enter(Self); + try + TCanvas.CopyBitmap(Source, Self); + BitmapChanged; + finally + TMonitor.Exit(Self); + end; +end; + +procedure TBitmap.CopyFromBitmap(const Source: TBitmap; SrcRect: TRect; DestX, DestY: Integer); +var + I, MoveBytes: Integer; + SrcData, DestData: TBitmapData; +begin + if Map(TMapAccess.Write, DestData) then + try + if Source.Map(TMapAccess.Read, SrcData) then + try + if SrcRect.Left < 0 then + begin + Dec(DestX, SrcRect.Left); + SrcRect.Left := 0; + end; + if SrcRect.Top < 0 then + begin + Dec(DestY, SrcRect.Top); + SrcRect.Top := 0; + end; + SrcRect.Right := Min(SrcRect.Right, Source.Width); + SrcRect.Bottom := Min(SrcRect.Bottom, Source.Height); + if DestX < 0 then + begin + Dec(SrcRect.Left, DestX); + DestX := 0; + end; + if DestY < 0 then + begin + Dec(SrcRect.Top, DestY); + DestY := 0; + end; + if DestX + SrcRect.Width > Width then + SrcRect.Width := Width - DestX; + if DestY + SrcRect.Height > Height then + SrcRect.Height := Height - DestY; + + if (SrcRect.Left < SrcRect.Right) and (SrcRect.Top < SrcRect.Bottom) then + begin + MoveBytes := SrcRect.Width * SrcData.BytesPerPixel; + for I := 0 to SrcRect.Height - 1 do + Move(SrcData.GetPixelAddr(SrcRect.Left, SrcRect.Top + I)^, + DestData.GetPixelAddr(DestX, DestY + I)^, MoveBytes); + end; + finally + Source.Unmap(SrcData); + end; + finally + Unmap(DestData); + end; +end; + +procedure TBitmap.DoChange; +begin + if Assigned(FOnChange) then + FOnChange(Self); +end; + +function TBitmap.EqualsBitmap(const Bitmap: TBitmap): Boolean; +var + MyMap, BitmapMap: TBitmapData; + I: Integer; +begin + if IsEmpty or Bitmap.IsEmpty then + begin + Result := IsEmpty and Bitmap.IsEmpty; + Exit; + end; + Result := (Width = Bitmap.Width) and (Height = Bitmap.Height) and (PixelFormat = Bitmap.PixelFormat); + if Result then + begin + if Map(TMapAccess.Read, MyMap) then + try + if Bitmap.Map(TMapAccess.Read, BitmapMap) then + try + for I := 0 to Height - 1 do + if not CompareMem(MyMap.GetScanline(I), BitmapMap.GetScanline(I), MyMap.BytesPerLine) then + begin + Result := False; + Exit; + end; + finally + Bitmap.Unmap(BitmapMap); + end; + finally + Unmap(MyMap); + end; + end; +end; + +procedure TBitmap.BitmapChanged; +begin + DoChange; +end; + +function TBitmap.IsEmpty: Boolean; +begin + Result := (Width = 0) or (Height = 0); +end; + +procedure TBitmap.Assign(Source: TPersistent); +begin + TMonitor.Enter(Self); + try + if Source = nil then + SetSize(0, 0) + else if Source is TBitmap then + begin + DestroyResources; + TBitmap(Source).FImage.IncreaseRefCount; + FImage.DecreaseRefCount; + FImage := TBitmap(Source).FImage; + BitmapChanged; + end + else if Source is TBitmapSurface then + AssignFromSurface(TBitmapSurface(Source)) + else + inherited; + finally + TMonitor.Exit(Self); + end; +end; + +procedure TBitmap.AssignFromSurface(const Source: TBitmapSurface); +var + BitmapData: TBitmapData; + MaxSize: Integer; + ResampledSurface: TBitmapSurface; + I: Integer; + SourceRect: TRectF; +begin + TMonitor.Enter(Self); + try + MaxSize := CanvasClass.GetAttribute(TCanvasAttribute.MaxBitmapSize); + if (Source.Width > MaxSize) or (Source.Height > MaxSize) then + begin + SourceRect := TRectF.Create(0, 0, Source.Width, Source.Height); + SourceRect.Fit(TRectF.Create(0, 0, MaxSize, MaxSize)); + ResampledSurface := TBitmapSurface.Create; + try + ResampledSurface.StretchFrom(Source, Trunc(SourceRect.Width), Trunc(SourceRect.Height), PixelFormat); + AssignFromSurface(ResampledSurface); + finally + ResampledSurface.Free; + end; + end + else + begin + if Source.PixelFormat <> TPixelFormat.None then + FImage.FPixelFormat := Source.PixelFormat; + SetSize(Source.Width, Source.Height); + if Map(TMapAccess.Write, BitmapData) then + try + for I := 0 to TBitmapSurface(Source).Height - 1 do + Move(TBitmapSurface(Source).Scanline[I]^, BitmapData.GetScanline(I)^, BitmapData.BytesPerLine); + finally + Unmap(BitmapData); + end; + end; + finally + TMonitor.Exit(Self); + end; +end; + +procedure TBitmap.AssignTo(Dest: TPersistent); +var + I: Integer; + BitmapData: TBitmapData; +begin + if Dest is TBitmapSurface then + begin + TMonitor.Enter(Self); + try + TBitmapSurface(Dest).SetSize(Width, Height, PixelFormat); + if Map(TMapAccess.Read, BitmapData) then + try + for I := 0 to Height - 1 do + Move(BitmapData.GetScanline(I)^, TBitmapSurface(Dest).Scanline[I]^, BitmapData.BytesPerLine); + finally + Unmap(BitmapData); + end; + finally + TMonitor.Exit(Self); + end; + end + else + inherited; +end; + +procedure TBitmap.DefineProperties(Filer: TFiler); + + function DoWrite: Boolean; + begin + if Filer.Ancestor <> nil then + Result := not (Filer.Ancestor is TBitmap) or not EqualsBitmap(TBitmap(Filer.Ancestor)) + else + Result := not IsEmpty; + end; + +begin + inherited; + Filer.DefineBinaryProperty('PNG', ReadBitmap, WriteBitmap, DoWrite); + Filer.DefineProperty('StyleLookup', ReadStyleLookup, nil, False); +end; + +procedure TBitmap.ReadStyleLookup(Reader: TReader); +begin + Reader.ReadString; +end; + +procedure TBitmap.ReadBitmap(Stream: TStream); +begin + LoadFromStream(Stream); +end; + +procedure TBitmap.WriteBitmap(Stream: TStream); +begin + SaveToStream(Stream); +end; + +procedure TBitmap.Rotate(const Angle: Single); +var + Temp: TBitmap; + M, M2: TMatrix; + Pts: array of TPointF; + R: TRectF; +begin + if Angle = 0 then + Exit; + + TMonitor.Enter(Self); + try + M := TMatrix.Identity; + M.m31 := -Width / 2; + M.m32 := -Height / 2; + M := M * TMatrix.CreateRotation(DegToRad(Angle)); + { calc new size } + SetLength(Pts, 4); + Pts[0] := TPointF.Zero * M; + Pts[1] := TPointF.Create(Width, 0) * M; + Pts[2] := TPointF.Create(Width, Height) * M; + Pts[3] := TPointF.Create(0, Height) * M; + R := NormalizeRectF(Pts); + { translate } + M2 := TMatrix.Identity; + M2.m31 := R.Width / 2; + M2.m32 := R.Height / 2; + M := M * M2; + + Temp := TBitmap.Create(Trunc(R.Width), Trunc(R.Height)); + try + if Temp.Canvas.BeginScene then + try + Temp.Canvas.Clear(0); + Temp.Canvas.SetMatrix(M); + Temp.Canvas.DrawBitmap(Self, TRectF.Create(0, 0, Width, Height), TRectF.Create(0, 0, Width, Height), 1); + finally + Temp.Canvas.EndScene; + end; + Assign(Temp); + finally + Temp.DisposeOf; + end; + finally + TMonitor.Exit(Self); + end; +end; + +procedure TBitmap.FlipHorizontal; +var + I, J: Integer; + Tmp: TAlphaColor; + M: TBitmapData; +begin + if Map(TMapAccess.ReadWrite, M) then + try + for J := 0 to Height - 1 do + for I := 0 to (Width - 1) div 2 do + begin + Tmp := PAlphaColorArray(M.Data)[J * (M.Pitch div 4) + Width - 1 - I]; + PAlphaColorArray(M.Data)[J * (M.Pitch div 4) + Width - 1 - I] := PAlphaColorArray(M.Data)[J * (M.Pitch div 4) + I]; + PAlphaColorArray(M.Data)[J * (M.Pitch div 4) + I] := Tmp; + end; + finally + Unmap(M); + end; +end; + +procedure TBitmap.FlipVertical; +var + I: Integer; + Tmp: PAlphaColorArray; + M: TBitmapData; +begin + GetMem(Tmp, Width * 4); + if Map(TMapAccess.ReadWrite, M) then + try + for I := 0 to (Height - 1) div 2 do + begin + System.Move(PAlphaColorArray(M.Data)[(Height - 1 - I) * (M.Pitch div 4)], Tmp[0], M.Pitch); + System.Move(PAlphaColorArray(M.Data)[I * (M.Pitch div 4)], PAlphaColorArray(M.Data)[(Height - 1 - I) * (M.Pitch div 4)], M.Pitch); + System.Move(Tmp[0], PAlphaColorArray(M.Data)[I * (M.Pitch div 4)], M.Pitch); + end; + finally + Unmap(M); + end; + FreeMem(Tmp, Width * 4); +end; + +procedure TBitmap.InvertAlpha; +var + I, J: Integer; + M: TBitmapData; + C: PAlphaColorRec; +begin + if Map(TMapAccess.ReadWrite, M) then + try + for J := 0 to Height - 1 do + for I := 0 to Width - 1 do + begin + C := @PAlphaColorArray(M.Data)[J * (M.Pitch div 4) + I]; + C^.Color := UnpremultiplyAlpha(C^.Color); + C^.A := $FF - C^.A; + C^.Color := PremultiplyAlpha(C^.Color); + end; + finally + Unmap(M); + end; +end; + +procedure TBitmap.ReplaceOpaqueColor(const Color: TAlphaColor); +var + I, J: Integer; + M: TBitmapData; + C: PAlphaColorRec; +begin + if Map(TMapAccess.ReadWrite, M) then + try + for J := 0 to Height - 1 do + for I := 0 to Width - 1 do + begin + C := @PAlphaColorArray(M.Data)[J * (M.Pitch div 4) + I]; + if C^.A > 0 then + C^.Color := PremultiplyAlpha(MakeColor(Color, C^.A / $FF)); + end; + finally + Unmap(M); + end; +end; + +procedure TBitmap.Resize(const AWidth, AHeight: Integer); +var + BufferTmp: TBitmap; +begin + if not IsEmpty then + begin + TMonitor.Enter(Self); + try + BufferTmp := CreateThumbnail(AWidth, AHeight); + try + Assign(BufferTmp); + finally + BufferTmp.Free; + end; + finally + TMonitor.Exit(Self); + end; + end + else + SetSize(AWidth, AHeight); +end; + +function TBitmap.CreateMask: PByteArray; +var + I, J: Integer; + M: TBitmapData; + C: PAlphaColorRec; +begin + GetMem(Result, Width * Height); + if Map(TMapAccess.ReadWrite, M) then + try + for J := 0 to Height - 1 do + for I := 0 to Width - 1 do + begin + C := @PAlphaColorArray(M.Data)[J * (M.Pitch div 4) + I]; + Result[I + (J * Width)] := C^.A; + end; + finally + Unmap(M); + end; +end; + +procedure TBitmap.ApplyMask(const Mask: PByteArray; const DstX: Integer = 0; const DstY: Integer = 0); +var + I, J: Integer; + M: TBitmapData; + C: PAlphaColorRec; +begin + if Map(TMapAccess.ReadWrite, M) then + try + for J := 0 to Height - 1 do + for I := 0 to Width - 1 do + begin + if (I - DstX < 0) or (I - DstX > Width - 1) or (J - DstY < 0) or (J - DstY > Height - 1) then + Continue; + if Mask[I - DstX + ((J - DstY) * Width)] > 0 then + begin + C := @PAlphaColorArray(M.Data)[J * (M.Pitch div 4) + I]; + C^.Color := PremultiplyAlpha(MakeColor(UnpremultiplyAlpha(C^.Color), ($FF - Mask[I - DstX + ((J - DstY) * Width)]) / $FF)); + end; + end; + finally + Unmap(M); + end; +end; + +function TBitmap.CreateThumbnail(const AWidth, AHeight: Integer): TBitmap; +var + FitRect: TRectF; +begin + TMonitor.Enter(Self); + try + Result := TBitmap.Create(AWidth, AHeight); + if not IsEmpty and Result.Canvas.BeginScene then + try + FitRect := TRectF.Create(0, 0, Width, Height); + FitRect := FitRect.FitInto(TRectF.Create(0, 0, AWidth, AHeight)); + Result.Canvas.DrawBitmap(Self, TRectF.Create(0, 0, Width, Height), FitRect, 1); + finally + Result.Canvas.EndScene; + end; + finally + TMonitor.Exit(Self); + end; +end; + +function TBitmap.Map(const Access: TMapAccess; var Data: TBitmapData): Boolean; +begin + Result := False; + TMonitor.Enter(Self); + try + if Access in [TMapAccess.Write, TMapAccess.ReadWrite] then + CopyToNewReference; + + if CanvasClass.MapBitmap(Handle, Access, Data) then + begin + Data.Create(Width, Height, PixelFormat); + FMapped := True; + FMapAccess := Access; + Result := True; + end; + finally + if not Result then + TMonitor.Exit(Self); + end; +end; + +procedure TBitmap.Unmap(var Data: TBitmapData); +begin + if FMapped then + try + CanvasClass.UnmapBitmap(Handle, Data); + FMapped := False; + if FMapAccess in [TMapAccess.Write, TMapAccess.ReadWrite] then + BitmapChanged; + finally + TMonitor.Exit(Self); + end; +end; + +procedure TBitmap.LoadFromFile(const AFileName: string); +var + Surf: TBitmapSurface; +begin + TMonitor.Enter(Self); + try + Surf := TBitmapSurface.Create; + try + if TBitmapCodecManager.LoadFromFile(AFileName, Surf, CanvasClass.GetAttribute(TCanvasAttribute.MaxBitmapSize)) then + Assign(Surf) + else + raise EBitmapLoadingFailed.CreateFMT(SBitmapLoadingFailedNamed, [AFileName]); + finally + Surf.Free; + end; + finally + TMonitor.Exit(Self); + end; +end; + +procedure TBitmap.LoadThumbnailFromFile(const AFileName: string; const AFitWidth, AFitHeight: Single; + const UseEmbedded: Boolean = True); +var + Surf: TBitmapSurface; +begin + TMonitor.Enter(Self); + try + Surf := TBitmapSurface.Create; + try + if TBitmapCodecManager.LoadThumbnailFromFile(AFileName, AFitWidth, AFitHeight, UseEmbedded, Surf) then + Assign(Surf) + else + raise EThumbnailLoadingFailed.CreateFMT(SThumbnailLoadingFailedNamed, [AFileName]); + finally + Surf.Free; + end; + finally + TMonitor.Exit(Self); + end; +end; + +procedure TBitmap.LoadFromStream(Stream: TStream); +var + S: TStream; + Surf: TBitmapSurface; +begin + TMonitor.Enter(Self); + try + if Stream.Position > 0 then + begin + // need to create temp stream + S := TMemoryStream.Create; + try + S.CopyFrom(Stream, Stream.Size - Stream.Position); + S.Position := 0; + Surf := TBitmapSurface.Create; + try + if TBitmapCodecManager.LoadFromStream(S, Surf, CanvasClass.GetAttribute(TCanvasAttribute.MaxBitmapSize)) then + Assign(Surf) + else + raise EBitmapLoadingFailed.Create(SBitmapLoadingFailed); + finally + Surf.Free; + end; + finally + S.Free; + end; + end + else if Stream.Size = 0 then + Clear(0) + else + begin + Surf := TBitmapSurface.Create; + try + if TBitmapCodecManager.LoadFromStream(Stream, Surf, CanvasClass.GetAttribute(TCanvasAttribute.MaxBitmapSize)) then + Assign(Surf) + else + raise EBitmapLoadingFailed.Create(SBitmapLoadingFailed); + finally + Surf.Free; + end; + end; + finally + TMonitor.Exit(Self); + end; +end; + +procedure TBitmap.SaveToFile(const AFileName: string; const SaveParams: PBitmapCodecSaveParams = nil); +var + Surf: TBitmapSurface; +begin + TMonitor.Enter(Self); + try + Surf := TBitmapSurface.Create; + try + Surf.Assign(Self); + if not TBitmapCodecManager.SaveToFile(AFileName, Surf, SaveParams) then + raise EBitmapSavingFailed.CreateFMT(SBitmapSavingFailedNamed, [AFileName]); + finally + Surf.Free; + end; + finally + TMonitor.Exit(Self); + end; +end; + +procedure TBitmap.SaveToStream(Stream: TStream); +var + Surf: TBitmapSurface; +begin + TMonitor.Enter(Self); + try + Surf := TBitmapSurface.Create; + try + Surf.Assign(Self); + if not TBitmapCodecManager.SaveToStream(Stream, Surf, SPNGImageExtension) then + raise EBitmapSavingFailed.Create(SBitmapSavingFailed); + finally + Surf.Free; + end; + finally + TMonitor.Exit(Self); + end; +end; + +function TBitmap.GetCanvas: TCanvas; +begin + if FCanvas = nil then + begin + TMonitor.Enter(Self); + try + CopyToNewReference; + //! Launcher Fix + FCanvas := CanvasClass.CreateFromBitmap(Self, TCanvasQuality.HighQuality); + finally + TMonitor.Exit(Self); + end; + end; + Result := FCanvas; +end; + +{ TPathPoint } + +class function TPathPoint.Create(const AKind: TPathPointKind; const APoint: TPointF): TPathPoint; +begin + Result.Kind := AKind; + Result.Point := APoint; +end; + +class operator TPathPoint.Equal(const APoint1, APoint2: TPathPoint): Boolean; +begin + Result := (APoint1.Kind = APoint2.Kind) and (APoint1.Point = APoint2.Point); +end; + +class operator TPathPoint.NotEqual(const APoint1, APoint2: TPathPoint): Boolean; +begin + Result := not (APoint1 = APoint2); +end; + +{ TPath } + +constructor TPathData.Create; +begin + inherited Create; + FPathData := TList.Create; + FRecalcBounds := True; +end; + +destructor TPathData.Destroy; +var + PathObject: IPathObject; +begin + if FStyleResource <> nil then + begin + if Supports(FStyleResource, IPathObject, PathObject) then + PathObject.RemoveFreeNotify(Self); + FStyleResource := nil; + end; + FPathData.Free; + inherited; +end; + +function TPathData.EqualsPath(const Path: TPathData): Boolean; +var + I: Integer; +begin + if IsEmpty or Path.IsEmpty then + Exit(True); + Result := Count = Path.Count; + if Result then + for I := 0 to Count - 1 do + if Points[I] <> Path.Points[I] then + Exit(False); +end; + +procedure TPathData.Assign(Source: TPersistent); +var + I: Integer; +begin + if Source is TPathData then + begin + if TPathData(Source).ResourcePath <> nil then + begin + FStyleLookup := TPathData(Source).StyleLookup; + DoChanged(False); + end + else + begin + FPathData.Count := TPathData(Source).Count; + for I := 0 to TPathData(Source).Count - 1 do + FPathData[I] := TPathData(Source)[I]; + DoChanged; + end; + end + else + inherited +end; + +function TPathData.GetStyleLookup: string; +begin + Result := FStyleLookup; +end; + +procedure TPathData.SetStyleLookup(const Value: string); +begin + if Value <> FStyleLookup then + begin + FStyleLookup := Value; + if Assigned(FOnChanged) then + FOnChanged(Self); + end; +end; + +function TPathData.GetPath: TPathData; +var + O: TFmxObject; + PO: IPathObject; +begin + Result := nil; + if (FStyleResource <> nil) and Supports(FStyleResource, IPathObject, PO) then + Result := PO.Path + else if FStyleLookup <> '' then + begin + O := FindStyleResource(FStyleLookup); + if Supports(O, IPathObject, PO) then + begin + if FStyleResource <> nil then + PO.RemoveFreeNotify(Self); + FStyleResource := O; + if FStyleResource <> nil then + PO.AddFreeNotify(Self); + Result := PO.Path; + end; + end; +end; + +function TPathData.GetCount: Integer; +begin + Result := FPathData.Count; +end; + +function TPathData.GetPoint(AIndex: Integer): TPathPoint; +begin + Result := FPathData[AIndex]; +end; + +procedure TPathData.DefineProperties(Filer: TFiler); + + function DoWrite: Boolean; + begin + if Filer.Ancestor <> nil then + Result := not (Filer.Ancestor is TPathData) or not EqualsPath(TPathData(Filer.Ancestor)) + else + Result := Count > 0; + end; + +begin + inherited; + Filer.DefineBinaryProperty('Path', ReadPath, WritePath, DoWrite); +end; + +procedure TPathData.DoChanged(NeedRecalcBounds: Boolean); +begin + if NeedRecalcBounds then + FRecalcBounds := True; + if Assigned(FOnChanged) then + FOnChanged(Self); +end; + +procedure TPathData.ReadPath(Stream: TStream); +var + ReadCount: Cardinal; + I: Integer; + ByteKind: Byte; + Point: TPointF; + PathPoint: TPathPoint; +begin + Stream.Read(ReadCount, SizeOf(ReadCount)); + FPathData.Count := ReadCount; + if ReadCount > 0 then + if (Stream.Size - 4) div ReadCount = 9 then + for I := 0 to ReadCount - 1 do + begin + Stream.Read(ByteKind, SizeOf(Byte)); + Stream.Read(Point, SizeOf(TPointF)); + FPathData[I] := TPathPoint.Create(TPathPointKind(ByteKind), Point); + end + else + for I := 0 to ReadCount - 1 do + begin + Stream.Read(PathPoint, SizeOf(PathPoint)); + FPathData[I] := PathPoint; + end; + DoChanged; +end; + +procedure TPathData.WritePath(Stream: TStream); +var + WriteCount: Cardinal; + PathPoint: TPathPoint; + I: Integer; +begin + WriteCount := Count; + Stream.Write(WriteCount, SizeOf(WriteCount)); + for I := 0 to WriteCount - 1 do + begin + PathPoint := FPathData[I]; + Stream.Write(PathPoint, SizeOf(PathPoint)); + end; +end; + +function TPathData.LastPoint: TPointF; +begin + if Count > 0 then + Result := FPathData[FPathData.Count - 1].Point + else + Result := TPointF.Zero; +end; + +procedure TPathData.MoveTo(const P: TPointF); +begin + FPathData.Add(TPathPoint.Create(TPathPointKind.MoveTo, P)); + FStartPoint := FPathData[FPathData.Count - 1].Point; + DoChanged; +end; + +procedure TPathData.MoveToRel(const P: TPointF); +begin + FPathData.Add(TPathPoint.Create(TPathPointKind.MoveTo, LastPoint + P)); + FStartPoint := FPathData[FPathData.Count - 1].Point; + DoChanged; +end; + +procedure TPathData.LineTo(const P: TPointF); +begin + FPathData.Add(TPathPoint.Create(TPathPointKind.LineTo, P)); + DoChanged; +end; + +procedure TPathData.LineToRel(const P: TPointF); +begin + FPathData.Add(TPathPoint.Create(TPathPointKind.LineTo, LastPoint + P)); + DoChanged; +end; + +procedure TPathData.HLineTo(const X: Single); +begin + FPathData.Add(TPathPoint.Create(TPathPointKind.LineTo, TPointF.Create(X, LastPoint.Y))); + DoChanged; +end; + +procedure TPathData.HLineToRel(const X: Single); +begin + LineToRel(TPointF.Create(X, 0)); +end; + +procedure TPathData.VLineTo(const Y: Single); +begin + FPathData.Add(TPathPoint.Create(TPathPointKind.LineTo, TPointF.Create(LastPoint.X, Y))); + DoChanged; +end; + +procedure TPathData.VLineToRel(const Y: Single); +begin + LineToRel(TPointF.Create(0, Y)); +end; + +procedure TPathData.QuadCurveTo(const ControlPoint, EndPoint: TPointF); +const + OneThird = 1 / 3; + TwoThirds = 2 / 3; +var + LP, CP1, CP2: TPointF; +begin + LP := LastPoint; + CP1.X := OneThird * LP.X + TwoThirds * ControlPoint.X; + CP1.Y := OneThird * LP.Y + TwoThirds * ControlPoint.Y; + CP2.X := TwoThirds * ControlPoint.X + OneThird * EndPoint.X; + CP2.Y := TwoThirds * ControlPoint.Y + OneThird * EndPoint.Y; + CurveTo(CP1, CP2, EndPoint); +end; + +procedure TPathData.CurveTo(const ControlPoint1, ControlPoint2, EndPoint: TPointF); +begin + FPathData.Add(TPathPoint.Create(TPathPointKind.CurveTo, ControlPoint1)); + FPathData.Add(TPathPoint.Create(TPathPointKind.CurveTo, ControlPoint2)); + FPathData.Add(TPathPoint.Create(TPathPointKind.CurveTo, EndPoint)); + DoChanged; +end; + +procedure TPathData.CurveToRel(const ControlPoint1, ControlPoint2, EndPoint: TPointF); +var + LP: TPointF; +begin + LP := LastPoint; + CurveTo(LP + ControlPoint1, LP + ControlPoint2, LP + EndPoint); +end; + +procedure TPathData.SmoothCurveTo(const ControlPoint2, EndPoint: TPointF); +var + ControlPoint1: TPointF; +begin + if Count > 2 then + ControlPoint1 := LastPoint + (LastPoint - FPathData[FPathData.Count - 2].Point) + else + ControlPoint1 := ControlPoint2; + CurveTo(ControlPoint1, ControlPoint2, EndPoint); +end; + +procedure TPathData.SmoothCurveToRel(const ControlPoint2, EndPoint: TPointF); +var + ControlPoint1: TPointF; +begin + if Count > 2 then + ControlPoint1 := LastPoint - FPathData[FPathData.Count - 2].Point + else + ControlPoint1 := ControlPoint2; + CurveToRel(ControlPoint1, ControlPoint2, EndPoint); +end; + +procedure TPathData.ClosePath; +begin + FPathData.Add(TPathPoint.Create(TPathPointKind.Close, FStartPoint)); + DoChanged; +end; + +procedure TPathData.AddPath(APath: TPathData); +var + I: Integer; +begin + FPathData.Capacity := FPathData.Count + APath.Count; + for I := 0 to APath.Count - 1 do + FPathData.Add(APath.Points[I]); + DoChanged; +end; + +procedure TPathData.Clear; +begin + FPathData.Clear; + DoChanged; +end; + +function TPathData.GetBounds: TRectF; +const + SmallAmount = 0.001; +var + I: Integer; +begin + if FPathData.Count < 1 then + Exit(TRectF.Create(0, 0, 0, 0)); + if FRecalcBounds then + begin + Result := TRectF.Create($FFFF, $FFFF, -$FFFF, -$FFFF); + for I := 0 to FPathData.Count - 1 do + begin + if FPathData[I].Kind = TPathPointKind.Close then + Continue; + + if FPathData[I].Point.X < Result.Left then + Result.Left := FPathData[I].Point.X; + if FPathData[I].Point.X > Result.Right then + Result.Right := FPathData[I].Point.X; + if FPathData[I].Point.Y < Result.Top then + Result.Top := FPathData[I].Point.Y; + if FPathData[I].Point.Y > Result.Bottom then + Result.Bottom := FPathData[I].Point.Y; + end; + // add small amount + if SameValue(Result.Width, 0, TEpsilon.Position) then + Result.Right := Result.Left + SmallAmount; + if SameValue(Result.Height, 0, TEpsilon.Position) then + Result.Bottom := Result.Top + SmallAmount; + FBounds := Result; + FRecalcBounds := False; + end + else + Result := FBounds; +end; + +procedure TPathData.Scale(const ScaleX, ScaleY: Single); +var + I: Integer; + ScalePoint: TPointF; +begin + if FPathData.Count > 0 then + begin + ScalePoint := TPointF.Create(ScaleX, ScaleY); + for I := 0 to FPathData.Count - 1 do + if FPathData[I].Kind in [TPathPointKind.MoveTo, TPathPointKind.LineTo, TPathPointKind.CurveTo] then + FPathData[I] := TPathPoint.Create(FPathData[I].Kind, FPathData[I].Point * ScalePoint); + DoChanged; + end; +end; + +procedure TPathData.Scale(const AScale: TPointF); +begin + Scale(AScale.X, AScale.Y); +end; + +procedure TPathData.Translate(const DX, DY: Single); +var + I: Integer; + TranslatePoint: TPointF; +begin + if FPathData.Count > 0 then + begin + TranslatePoint := TPointF.Create(DX, DY); + for I := 0 to FPathData.Count - 1 do + if FPathData[I].Kind in [TPathPointKind.MoveTo, TPathPointKind.LineTo, TPathPointKind.CurveTo] then + FPathData[I] := TPathPoint.Create(FPathData[I].Kind, FPathData[I].Point + TranslatePoint); + DoChanged; + end; +end; + +procedure TPathData.Translate(const Delta: TPointF); +begin + Translate(Delta.X, Delta.Y); +end; + +procedure TPathData.FitToRect(const ARect: TRectF); +var + FitBounds, Bounds: TRectF; + Ratio: Single; +begin + Bounds := GetBounds; + FitBounds := Bounds.FitInto(ARect, Ratio); + if not SameValue(Ratio, 0, TEpsilon.Scale) then + begin + Ratio := 1 / Ratio; + Translate(-Bounds.Left, -Bounds.Top); + Scale(Ratio, Ratio); + Translate(FitBounds.Left, FitBounds.Top); + end; +end; + +procedure TPathData.ApplyMatrix(const M: TMatrix); +var + I: Integer; +begin + if FPathData.Count > 0 then + begin + for I := 0 to FPathData.Count - 1 do + if FPathData[I].Kind in [TPathPointKind.MoveTo, TPathPointKind.LineTo, TPathPointKind.CurveTo] then + FPathData[I] := TPathPoint.Create(FPathData[I].Kind, FPathData[I].Point * M); + DoChanged; + end; +end; + +procedure TPathData.CalculateBezierCoefficients(const Bezier: TCubicBezier; out AX, BX, CX, AY, BY, CY: Single); +begin + CX := 3 * (Bezier[1].X - Bezier[0].X); + CY := 3 * (Bezier[1].Y - Bezier[0].Y); + BX := 3 * (Bezier[2].X - Bezier[1].X) - CX; + BY := 3 * (Bezier[2].Y - Bezier[1].Y) - CY; + AX := Bezier[3].X - Bezier[0].X - CX - BX; + AY := Bezier[3].Y - Bezier[0].Y - CY - BY; +end; + +function TPathData.PointOnBezier(const StartPoint: TPointF; const AX, BX, CX, AY, BY, CY, T: Single): TPointF; +var + SquareT, CubeT: Single; +begin + SquareT := T * T; + CubeT := SquareT * T; + Result.X := (AX * CubeT) + (BX * SquareT) + (CX * T) + StartPoint.X; + Result.Y := (AY * CubeT) + (BY * SquareT) + (CY * T) + StartPoint.Y; +end; + +function TPathData.CreateBezier(const Bezier: TCubicBezier; const PointCount: Integer): TPolygon; +var + AX, BX, CX, AY, BY, CY, DT, T: Single; + I: Integer; +begin + if PointCount = 0 then + Exit; + DT := 1 / (1 * PointCount - 1); + T := 0; + SetLength(Result, PointCount); + CalculateBezierCoefficients(Bezier, AX, BX, CX, AY, BY, CY); + for I := 0 to PointCount - 1 do + begin + Result[I] := PointOnBezier(Bezier[0], AX, BX, CX, AY, BY, CY, T); + T := T + DT; + end; +end; + +procedure TPathData.Flatten(const Flatness: Single); +var + J, I: Integer; + BPts: TPolygon; + B: TCubicBezier; + F, Len: Single; + SegCount: Integer; + OldPathData: TList; + CurPoint: TPointF; +begin + if FPathData.Count > 0 then + begin + F := Max(Flatness, MinFlatness); + OldPathData := TList.Create; + try + OldPathData.Count := FPathData.Count; + for J := 0 to FPathData.Count - 1 do + OldPathData.Add(FPathData[J]); + FPathData.Clear; + J := 0; + while J < OldPathData.Count do + begin + case OldPathData[J].Kind of + TPathPointKind.MoveTo: + begin + MoveTo(OldPathData[J].Point); + CurPoint := OldPathData[J].Point; + end; + TPathPointKind.LineTo: + begin + LineTo(OldPathData[J].Point); + CurPoint := OldPathData[J].Point; + end; + TPathPointKind.CurveTo: + begin + B[0] := CurPoint; + B[1] := OldPathData[J].Point; + Inc(J); + B[2] := OldPathData[J].Point; + Inc(J); + B[3] := OldPathData[J].Point; + BPts := CreateBezier(B, 6); + Len := 0; + for I := 0 to High(BPts) - 1 do + Len := Len + (BPts[I] - BPts[I + 1]).Length; + SegCount := Round(Len / F); + if SegCount < 2 then + LineTo(B[3]) + else + begin + BPts := CreateBezier(B, SegCount); + for I := 0 to High(BPts) do + LineTo(BPts[I]); + CurPoint := OldPathData[J].Point; + end; + end; + TPathPointKind.Close: + ClosePath; + end; + Inc(J); + end; + DoChanged(False); + finally + OldPathData.Free; + end; + end; +end; + +function TPathData.FlattenToPolygon(var Polygon: TPolygon; const Flatness: Single = 0.25): TPointF; + + procedure AddPoint(const P: TPointF); + begin + if (Length(Polygon) > 0) and (SameValue(P.X, Polygon[High(Polygon)].X, TEpsilon.Position) and + SameValue(P.Y, Polygon[High(Polygon)].Y, TEpsilon.Position)) then + Exit; + SetLength(Polygon, Length(Polygon) + 1); + Polygon[High(Polygon)] := P; + end; + +var + J, I: Integer; + BPts: TPolygon; + B: TCubicBezier; + SP, CurPoint: TPointF; + F, Len: Single; + SegCount: Integer; + CurBounds: TRectF; +begin + Result := TPointF.Zero; + SetLength(Polygon, 0); + if FPathData.Count > 0 then + begin + F := Max(Flatness, MinFlatness); + J := 0; + while J < FPathData.Count do + begin + case FPathData[J].Kind of + TPathPointKind.MoveTo: + begin + if Length(Polygon) > 0 then + AddPoint(PolygonPointBreak); + AddPoint(FPathData[J].Point); + CurPoint := FPathData[J].Point; + SP := CurPoint; + end; + TPathPointKind.LineTo: + begin + AddPoint(FPathData[J].Point); + CurPoint := FPathData[J].Point; + end; + TPathPointKind.CurveTo: + begin + B[0] := CurPoint; + B[1] := FPathData[J].Point; + Inc(J); + B[2] := FPathData[J].Point; + Inc(J); + B[3] := FPathData[J].Point; + BPts := CreateBezier(B, 6); + Len := 0; + for I := 0 to High(BPts) - 1 do + Len := Len + (BPts[I] - BPts[I + 1]).Length; + SegCount := Round(Len / F); + if SegCount < 2 then + begin + AddPoint(B[0]); + AddPoint(B[3]); + end + else + begin + BPts := CreateBezier(B, SegCount); + for I := 0 to High(BPts) do + AddPoint(BPts[I]); + end; + CurPoint := FPathData[J].Point; + end; + TPathPointKind.Close: + begin + AddPoint(SP); + AddPoint(PolygonPointBreak); + end; + end; + Inc(J); + end; + CurBounds := GetBounds; + Result := TPointF.Create(Abs(CurBounds.Width), Abs(CurBounds.Height)); + end; +end; + +procedure TPathData.FreeNotification(AObject: TObject); +begin + if FStyleResource = AObject then + FStyleResource := nil; +end; + +procedure TPathData.AddEllipse(const ARect: TRectF); +var + CX, CY, PX, PY: Single; +begin + CX := (ARect.Left + ARect.Right) / 2; + CY := (ARect.Top + ARect.Bottom) / 2; + PX := CurveKappa * (ARect.Width / 2); + PY := CurveKappa * (ARect.Height / 2); + MoveTo(TPointF.Create(ARect.Left, CY)); + CurveTo(TPointF.Create(ARect.Left, CY - PY), TPointF.Create(CX - PX, ARect.Top), TPointF.Create(CX, ARect.Top)); + CurveTo(TPointF.Create(CX + PX, ARect.Top), TPointF.Create(ARect.Right, CY - PY), TPointF.Create(ARect.Right, CY)); + CurveTo(TPointF.Create(ARect.Right, CY + PY), TPointF.Create(CX + PX, ARect.Bottom), TPointF.Create(CX, ARect.Bottom)); + CurveTo(TPointF.Create(CX - PX, ARect.Bottom), TPointF.Create(ARect.Left, CY + PY), TPointF.Create(ARect.Left, CY)); +end; + +procedure TPathData.AddRectangle(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const ACornerType: TCornerType = TCornerType.Round); +var + X1, X2, Y1, Y2: Single; +begin + if SameValue(XRadius, 0, TEpsilon.Vector) or SameValue(YRadius, 0, TEpsilon.Vector) then + begin + MoveTo(ARect.TopLeft); + LineTo(TPointF.Create(ARect.Right, ARect.Top)); + LineTo(ARect.BottomRight); + LineTo(TPointF.Create(ARect.Left, ARect.Bottom)); + end + else + begin + X1 := XRadius; + if ARect.Width - (X1 * 2) < 0 then + X1 := XRadius * (ARect.Width / (X1 * 2)); + X2 := X1 / 2; + Y1 := YRadius; + if ARect.Height - (Y1 * 2) < 0 then + Y1 := YRadius * (ARect.Height / (Y1 * 2)); + Y2 := Y1 / 2; + MoveTo(TPointF.Create(ARect.Left, ARect.Top + Y1)); + if TCorner.TopLeft in ACorners then + begin + case ACornerType of + TCornerType.Bevel: + LineTo(TPointF.Create(ARect.Left + X1, ARect.Top)); + TCornerType.InnerRound: + CurveTo(TPointF.Create(ARect.Left + X2, ARect.Top + Y1), TPointF.Create(ARect.Left + X1, ARect.Top + Y2), + TPointF.Create(ARect.Left + X1, ARect.Top)); + TCornerType.InnerLine: + begin + LineTo(TPointF.Create(ARect.Left + X2, ARect.Top + Y1)); + LineTo(TPointF.Create(ARect.Left + X1, ARect.Top + Y2)); + LineTo(TPointF.Create(ARect.Left + X1, ARect.Top)); + end; + else + CurveTo(TPointF.Create(ARect.Left, ARect.Top + Y2), TPointF.Create(ARect.Left + X2, ARect.Top), + TPointF.Create(ARect.Left + X1, ARect.Top)); + end; + end + else + begin + LineTo(TPointF.Create(ARect.Left, ARect.Top)); + LineTo(TPointF.Create(ARect.Left + X1, ARect.Top)); + end; + LineTo(TPointF.Create(ARect.Right - X1, ARect.Top)); + if TCorner.TopRight in ACorners then + begin + case ACornerType of + TCornerType.Bevel: + LineTo(TPointF.Create(ARect.Right, ARect.Top + Y1)); + TCornerType.InnerRound: + CurveTo(TPointF.Create(ARect.Right - X1, ARect.Top + Y2), TPointF.Create(ARect.Right - X2, ARect.Top + Y1), + TPointF.Create(ARect.Right, ARect.Top + Y1)); + TCornerType.InnerLine: + begin + LineTo(TPointF.Create(ARect.Right - X1, ARect.Top + Y2)); + LineTo(TPointF.Create(ARect.Right - X2, ARect.Top + Y1)); + LineTo(TPointF.Create(ARect.Right, ARect.Top + Y1)); + end; + else + CurveTo(TPointF.Create(ARect.Right - X2, ARect.Top), TPointF.Create(ARect.Right, ARect.Top + Y2), + TPointF.Create(ARect.Right, ARect.Top + Y1)); + end; + end + else + begin + LineTo(TPointF.Create(ARect.Right, ARect.Top)); + LineTo(TPointF.Create(ARect.Right, ARect.Top + Y1)); + end; + LineTo(TPointF.Create(ARect.Right, ARect.Bottom - Y1)); + if TCorner.BottomRight in ACorners then + begin + case ACornerType of + TCornerType.Bevel: + LineTo(TPointF.Create(ARect.Right - X1, ARect.Bottom)); + TCornerType.InnerRound: + CurveTo(TPointF.Create(ARect.Right - X2, ARect.Bottom - Y1), TPointF.Create(ARect.Right - X1, ARect.Bottom - Y2), + TPointF.Create(ARect.Right - X1, ARect.Bottom)); + TCornerType.InnerLine: + begin + LineTo(TPointF.Create(ARect.Right - X2, ARect.Bottom - Y1)); + LineTo(TPointF.Create(ARect.Right - X1, ARect.Bottom - Y2)); + LineTo(TPointF.Create(ARect.Right - X1, ARect.Bottom)); + end; + else + CurveTo(TPointF.Create(ARect.Right, ARect.Bottom - Y2), TPointF.Create(ARect.Right - X2, ARect.Bottom), + TPointF.Create(ARect.Right - X1, ARect.Bottom)); + end; + end + else + begin + LineTo(TPointF.Create(ARect.Right, ARect.Bottom)); + LineTo(TPointF.Create(ARect.Right - X1, ARect.Bottom)); + end; + LineTo(TPointF.Create(ARect.Left + X1, ARect.Bottom)); + if TCorner.BottomLeft in ACorners then + begin + case ACornerType of + TCornerType.Bevel: + LineTo(TPointF.Create(ARect.Left, ARect.Bottom - Y1)); + TCornerType.InnerRound: + CurveTo(TPointF.Create(ARect.Left + X1, ARect.Bottom - Y2), TPointF.Create(ARect.Left + X2, ARect.Bottom - Y1), + TPointF.Create(ARect.Left, ARect.Bottom - Y1)); + TCornerType.InnerLine: + begin + LineTo(TPointF.Create(ARect.Left + X1, ARect.Bottom - Y2)); + LineTo(TPointF.Create(ARect.Left + X2, ARect.Bottom - Y1)); + LineTo(TPointF.Create(ARect.Left, ARect.Bottom - Y1)); + end; + else + CurveTo(TPointF.Create(ARect.Left + X2, ARect.Bottom), TPointF.Create(ARect.Left, ARect.Bottom - (Y2)), + TPointF.Create(ARect.Left, ARect.Bottom - Y1)); + end; + end + else + begin + LineTo(TPointF.Create(ARect.Left, ARect.Bottom)); + LineTo(TPointF.Create(ARect.Left, ARect.Bottom - Y1)); + end; + end; + ClosePath; +end; + +procedure DrawArcWithBezier(Path: TPathData; CenterX, CenterY, RadiusX, RadiusY, StartAngle, SweepRange: Single; + UseMoveTo: Boolean); +var + Coord: array of TPointF; + Pts: array of TPointF; + A, B, C, X, Y: Single; + SS, CC: Single; + I: Integer; +begin + if SweepRange = 0 then + begin + if UseMoveTo then + begin + if Path.FPathData.Count < 1 then + Path.MoveTo(TPointF.Create(CenterX + RadiusX * Cos(StartAngle), CenterY - RadiusY * Sin(StartAngle))) + else + Path.LineTo(TPointF.Create(CenterX + RadiusX * Cos(StartAngle), CenterY - RadiusY * Sin(StartAngle))); + end; + Path.LineTo(TPointF.Create(CenterX + RadiusX * Cos(StartAngle), CenterY - RadiusY * Sin(StartAngle))); + Exit; + end; + SinCos(SweepRange / 2, B, C); + A := 1 - C; + X := A * 4 / 3; + Y := B - X * C / B; + SinCos(StartAngle + SweepRange / 2, SS, CC); + SetLength(Coord, 4); + Coord[0] := TPointF.Create(C, -B); + Coord[1] := TPointF.Create(C + X, -Y); + Coord[2] := TPointF.Create(C + X, Y); + Coord[3] := TPointF.Create(C, B); + SetLength(Pts, 4); + for I := 0 to 3 do + begin + Pts[I] := TPointF.Create(CenterX + RadiusX * (Coord[I].X * CC - Coord[I].Y * SS), CenterY + RadiusY * (Coord[I].X * + SS + Coord[I].Y * CC)); + end; + if UseMoveTo then + begin + if Path.FPathData.Count < 1 then + Path.MoveTo(Pts[0]) + else + Path.LineTo(Pts[0]); + end; + Path.CurveTo(Pts[1], Pts[2], Pts[3]); +end; + +procedure TPathData.AddArc(const Center, Radius: TPointF; StartAngle, SweepAngle: Single); +const + BezierArcAngleEpsilon = 0.01; + MinSweepAngle = 1E-10; +var + UseMoveTo: Boolean; + I: Integer; + F: Single; + TotalSweep, LocalSweep, PrevSweep: Single; + Done: Boolean; +begin + StartAngle := DegToRad(StartAngle); + SweepAngle := DegToRad(SweepAngle); + I := Trunc(StartAngle / (2 * Pi)); + F := StartAngle - (I * 2 * Pi); + StartAngle := F; + if SweepAngle >= 2 * Pi then + SweepAngle := 2 * Pi; + if SweepAngle <= -2 * Pi then + SweepAngle := -2 * Pi; + if Abs(SweepAngle) < MinSweepAngle then + Exit; + TotalSweep := 0; + Done := False; + UseMoveTo := True; + repeat + if SweepAngle < 0 then + begin + PrevSweep := TotalSweep; + LocalSweep := -Pi / 2; + TotalSweep := TotalSweep - (Pi / 2); + if TotalSweep <= SweepAngle + BezierArcAngleEpsilon then + begin + LocalSweep := SweepAngle - PrevSweep; + Done := True; + end; + end + else + begin + PrevSweep := TotalSweep; + LocalSweep := Pi / 2; + TotalSweep := TotalSweep + (Pi / 2); + if TotalSweep >= SweepAngle - BezierArcAngleEpsilon then + begin + LocalSweep := SweepAngle - PrevSweep; + Done := True; + end; + end; + DrawArcWithBezier(Self, Center.X, Center.Y, Radius.X, Radius.Y, StartAngle, LocalSweep, UseMoveTo); + UseMoveTo := False; + StartAngle := StartAngle + LocalSweep; + until Done; +end; + +procedure TPathData.AddArcSvgPart(const Center, Radius: TPointF; StartAngle, SweepAngle: Single); +const + BezierArcAngleEpsilon = 0.01; + MinSweepAngle = 1E-10; +var + UseMoveTo: Boolean; + I: Integer; + F: Single; + TotalSweep, LocalSweep, PrevSweep: Single; + Done: Boolean; +begin + StartAngle := DegToRad(StartAngle); + SweepAngle := DegToRad(SweepAngle); + I := Trunc(StartAngle / (2 * Pi)); + F := StartAngle - (I * 2 * Pi); + StartAngle := F; + if SweepAngle >= 2 * Pi then + SweepAngle := 2 * Pi; + if SweepAngle <= -2 * Pi then + SweepAngle := -2 * Pi; + if Abs(SweepAngle) < MinSweepAngle then + Exit; + TotalSweep := 0; + Done := False; + UseMoveTo := False; + repeat + if SweepAngle < 0 then + begin + PrevSweep := TotalSweep; + LocalSweep := -Pi / 2; + TotalSweep := TotalSweep - (Pi / 2); + if TotalSweep <= SweepAngle + BezierArcAngleEpsilon then + begin + LocalSweep := SweepAngle - PrevSweep; + Done := True; + end; + end + else + begin + PrevSweep := TotalSweep; + LocalSweep := Pi / 2; + TotalSweep := TotalSweep + (Pi / 2); + if TotalSweep >= SweepAngle - BezierArcAngleEpsilon then + begin + LocalSweep := SweepAngle - PrevSweep; + Done := True; + end; + end; + DrawArcWithBezier(Self, Center.X, Center.Y, Radius.X, Radius.Y, StartAngle, LocalSweep, UseMoveTo); + UseMoveTo := False; + StartAngle := StartAngle + LocalSweep; + until Done; +end; + +procedure TPathData.AddArcSvg(const P1, Radius: TPointF; Angle: Single; const LargeFlag, SweepFlag: Boolean; + const P2: TPointF); +var + I: Integer; + RadOk: Boolean; + V, P, N, Sq, Rx, Ry, X0, Y0, X1, Y1, X2, Y2, CX, CY, Ux, Uy, Vx, Vy: Single; + Dx2, Dy2, Prx, Pry, Px1, Py1, Cx1, Cy1, Sx2, Sy2, Sign, Coef: Single; + RadCheck, StartAngle, SweepAngle, CosA, SinA: Single; + M: TMatrix; + Len: Integer; +begin + // Trivial case: Arc transformate to point + if P1 = P2 then + Exit; + Rx := Radius.X; + Ry := Radius.Y; + X0 := P1.X; + Y0 := P1.Y; + X2 := P2.X; + Y2 := P2.Y; + Angle := DegToRad(Angle); + RadOk := True; + if Rx < 0 then + Rx := -Rx; + if Ry < 0 then + Ry := -Rx; + // Calculate the middle point between the current and the final points + Dx2 := (X0 - X2) / 2; + Dy2 := (Y0 - Y2) / 2; + // Convert angle from degrees to radians + SinCos(Angle, SinA, CosA); + // Calculate (x1, y1) + X1 := CosA * Dx2 + SinA * Dy2; + Y1 := -SinA * Dx2 + CosA * Dy2; + // Ensure radii are large enough + Prx := Rx * Rx; + Pry := Ry * Ry; + Px1 := X1 * X1; + Py1 := Y1 * Y1; + // Check that radii are large enough + RadCheck := Px1 / Prx + Py1 / Pry; + if RadCheck > 1 then + begin + Rx := Sqrt(RadCheck) * Rx; + Ry := Sqrt(RadCheck) * Ry; + Prx := Rx * Rx; + Pry := Ry * Ry; + if RadCheck > 10 then + RadOk := False; + end; + // Calculate (Cx1, Cy1) + if LargeFlag = SweepFlag then + Sign := -1 + else + Sign := 1; + Sq := (Prx * Pry - Prx * Py1 - Pry * Px1) / (Prx * Py1 + Pry * Px1); + if Sq < 0 then + Coef := Sign * Sqrt(0) + else + Coef := Sign * Sqrt(Sq); + Cx1 := Coef * ((Rx * Y1) / Ry); + Cy1 := Coef * -((Ry * X1) / Rx); + // Calculate (CX, CY) from (Cx1, Cy1) + Sx2 := (X0 + X2) / 2; + Sy2 := (Y0 + Y2) / 2; + CX := Sx2 + (CosA * Cx1 - SinA * Cy1); + CY := Sy2 + (SinA * Cx1 + CosA * Cy1); + // Calculate the StartAngle (angle1) and the SweepAngle (dangle) + Ux := (X1 - Cx1) / Rx; + Uy := (Y1 - Cy1) / Ry; + Vx := (-X1 - Cx1) / Rx; + Vy := (-Y1 - Cy1) / Ry; + // Calculate the angle start + N := Sqrt(Ux * Ux + Uy * Uy); + P := Ux; // (1 * Ux ) + (0 * Uy ) + if Uy < 0 then + Sign := -1 + else + Sign := 1; + V := P / N; + if V < -1 then + V := -1; + if V > 1 then + V := 1; + StartAngle := Sign * ArcCos(V); + // Calculate the sweep angle + N := Sqrt((Ux * Ux + Uy * Uy) * (Vx * Vx + Vy * Vy)); + P := Ux * Vx + Uy * Vy; + if Ux * Vy - Uy * Vx < 0 then + Sign := -1 + else + Sign := 1; + V := P / N; + if V < -1 then + V := -1; + if V > 1 then + V := 1; + SweepAngle := Sign * ArcCos(V); + if (not SweepFlag) and (SweepAngle > 0) then + SweepAngle := SweepAngle - Pi * 2 + else if SweepFlag and (SweepAngle < 0) then + SweepAngle := SweepAngle + Pi * 2; + Len := Count; + AddArcSvgPart(TPointF.Zero, TPointF.Create(Rx, Ry), RadToDeg(StartAngle), RadToDeg(SweepAngle)); + M := TMatrix.Identity; + M.m31 := CX; + M.m32 := CY; + M := TMatrix.CreateRotation(Angle) * M; + I := Len; + while I < Count do + begin + FPathData[I] := TPathPoint.Create(FPathData[I].Kind, FPathData[I].Point * M); + Inc(I); + end; +end; + +function TPathData.IsEmpty: Boolean; +begin + Result := (FPathData.Count < 1) or (GetBounds.Width * GetBounds.Height = 0); +end; + +function TPathData.GetPathString: string; +var + I: Integer; + Builder: TStringBuilder; +begin + Builder := TStringBuilder.Create; + try + I := 0; + while I < Count do + begin + case FPathData[I].Kind of + TPathPointKind.MoveTo: + Builder.Append('M') + .Append(FloatToStr(FPathData[I].Point.X, USFormatSettings)) + .Append(',') + .Append(FloatToStr(FPathData[I].Point.Y, USFormatSettings)) + .Append(' '); + TPathPointKind.LineTo: + Builder.Append('L') + .Append(FloatToStr(FPathData[I].Point.X, USFormatSettings)) + .Append(',') + .Append(FloatToStr(FPathData[I].Point.Y, USFormatSettings)) + .Append(' '); + TPathPointKind.CurveTo: + begin + Builder.Append('C') + .Append(FloatToStr(FPathData[I].Point.X, USFormatSettings)) + .Append(',') + .Append(FloatToStr(FPathData[I].Point.Y, USFormatSettings)) + .Append(' '); + + Builder.Append(FloatToStr(FPathData[I + 1].Point.X, USFormatSettings)) + .Append(',') + .Append(FloatToStr(FPathData[I + 1].Point.Y, USFormatSettings)) + .Append(' '); + + Builder.Append(FloatToStr(FPathData[I + 2].Point.X, USFormatSettings)) + .Append(',') + .Append(FloatToStr(FPathData[I + 2].Point.Y, USFormatSettings)) + .Append(' '); + + Inc(I, 2); + end; + TPathPointKind.Close: + Builder.Append('Z '); + end; + Inc(I); + end; + Result := Builder.ToString(True); + finally + Builder.Free; + end; +end; + +function TPathData.GetTokensFromString(const PathString: string; var Pos: Integer): string; +var + StringBuilder: TStringBuilder; +begin + if Pos < PathString.Length then + begin + StringBuilder := TStringBuilder.Create; + try + while (Pos < PathString.Length) and (PathString.Chars[Pos] = ' ') do + Inc(Pos); + while (Pos < PathString.Length) and ('zmlchvsqtaZMLCHVSQTA'.Contains(PathString.Chars[Pos])) do + begin + StringBuilder.Append(PathString.Chars[Pos]); + Inc(Pos); + end; + Result := StringBuilder.ToString(True); + finally + StringBuilder.Free; + end; + end + else + Result := string.Empty; +end; + +function TPathData.GetNumberFromString(const PathString: string; var Pos: Integer): string; +const + ExponentChar = 'E'; +var + StringBuilder: TStringBuilder; + CurrentChar: Char; +begin + if Pos < PathString.Length then + begin + StringBuilder := TStringBuilder.Create; + try + while (Pos < PathString.Length) and (PathString.Chars[Pos] = ' ') do + Inc(Pos); + while Pos < PathString.Length do + begin + CurrentChar := PathString.Chars[Pos]; + if CurrentChar.ToUpper = ExponentChar then + begin + StringBuilder.Append(ExponentChar); + Inc(Pos); + Continue; + end; + if (CurrentChar = '-') and (StringBuilder.Length > 0) and + (StringBuilder.Chars[StringBuilder.Length - 1] = ExponentChar) then + begin + StringBuilder.Append(CurrentChar); + Inc(Pos); + Continue; + end; + if (StringBuilder.Length > 0) and (CurrentChar = '-') then + Break; + if not '0123456789.'.Contains(CurrentChar) and not (CurrentChar = '-') then + Break; + StringBuilder.Append(CurrentChar); + Inc(Pos); + end; + while PathString.Chars[Pos] = ' ' do + Inc(Pos); + Result := StringBuilder.ToString(True); + finally + StringBuilder.Free; + end; + end + else + Result := string.Empty; +end; + +function TPathData.GetPointFromString(const PathString: string; var Pos: Integer): TPointF; +var + X, Y: string; +begin + Result := TPointF.Zero; + if Pos < PathString.Length then + begin + while (Pos < PathString.Length) and PathString.Chars[Pos].IsInArray([',', ' ']) do + Inc(Pos); + X := GetNumberFromString(PathString, Pos); + while (Pos < PathString.Length) and PathString.Chars[Pos].IsInArray([',', ' ']) do + Inc(Pos); + Y := GetNumberFromString(PathString, Pos); + while (Pos < PathString.Length) and PathString.Chars[Pos].IsInArray([',', ' ']) do + Inc(Pos); + Result := TPointF.Create(StrToFloat(X, USFormatSettings), StrToFloat(Y, USFormatSettings)); + end; +end; + +function TPathData.HasRelativeOffset(const PathString: string; const Pos: Integer): Boolean; +begin + Result := PathString.Chars[Pos].IsDigit or (PathString.Chars[Pos] = '-'); +end; + +procedure TPathData.SetPathString(const Value: string); +var + Builder, TokenBuilder: TStringBuilder; + PathString, Tokens: string; + Radius, CurvePoint1, CurvePoint2, TempPoint: TPointF; + Large, Sweet: Boolean; + Pos, I, LastLength: Integer; + Angle: Single; + Token: Char; +begin + Builder := TStringBuilder.Create; + TokenBuilder := TStringBuilder.Create; + try + for I := 0 to Value.Length - 1 do + begin + if Value.Chars[I].IsInArray([#9, #10, #13]) then + Builder.Append(' ') + else + Builder.Append(Value.Chars[I]); + end; + PathString := Builder.ToString; + FPathData.Clear; + Pos := 0; + LastLength := -1; + while (Builder.Length > Pos) and (LastLength <> Pos) do + begin + LastLength := Pos; + Tokens := GetTokensFromString(PathString, Pos); + TokenBuilder.Clear; + TokenBuilder.Append(Tokens); + while TokenBuilder.Length > 0 do + begin + Token := TokenBuilder.Chars[0]; + TokenBuilder.Remove(0, 1); + case Token of + 'z', 'Z': + ClosePath; + 'M': + begin + MoveTo(GetPointFromString(PathString, Pos)); + while HasRelativeOffset(PathString, Pos) do + LineTo(GetPointFromString(PathString, Pos)); + end; + 'm': + begin + MoveToRel(GetPointFromString(PathString, Pos)); + while HasRelativeOffset(PathString, Pos) do + LineToRel(GetPointFromString(PathString, Pos)); + end; + 'L': + begin + LineTo(GetPointFromString(PathString, Pos)); + while HasRelativeOffset(PathString, Pos) do + LineTo(GetPointFromString(PathString, Pos)); + end; + 'l': + begin + LineToRel(GetPointFromString(PathString, Pos)); + while HasRelativeOffset(PathString, Pos) do + LineToRel(GetPointFromString(PathString, Pos)); + end; + 'C': + begin + CurvePoint1 := GetPointFromString(PathString, Pos); + CurvePoint2 := GetPointFromString(PathString, Pos); + CurveTo(CurvePoint1, CurvePoint2, GetPointFromString(PathString, Pos)); + while HasRelativeOffset(PathString, Pos) do + begin + CurvePoint1 := GetPointFromString(PathString, Pos); + CurvePoint2 := GetPointFromString(PathString, Pos); + CurveTo(CurvePoint1, CurvePoint2, GetPointFromString(PathString, Pos)); + end; + end; + 'c': + begin + CurvePoint1 := GetPointFromString(PathString, Pos); + CurvePoint2 := GetPointFromString(PathString, Pos); + CurveToRel(CurvePoint1, CurvePoint2, GetPointFromString(PathString, Pos)); + while HasRelativeOffset(PathString, Pos) do + begin + CurvePoint1 := GetPointFromString(PathString, Pos); + CurvePoint2 := GetPointFromString(PathString, Pos); + CurveToRel(CurvePoint1, CurvePoint2, GetPointFromString(PathString, Pos)); + end; + end; + 'S': + begin + CurvePoint2 := GetPointFromString(PathString, Pos); + SmoothCurveTo(CurvePoint2, GetPointFromString(PathString, Pos)); + while HasRelativeOffset(PathString, Pos) do + begin + CurvePoint2 := GetPointFromString(PathString, Pos); + SmoothCurveTo(CurvePoint2, GetPointFromString(PathString, Pos)); + end; + end; + 's': + begin + CurvePoint2 := GetPointFromString(PathString, Pos); + SmoothCurveToRel(CurvePoint2, GetPointFromString(PathString, Pos)); + while HasRelativeOffset(PathString, Pos) do + begin + CurvePoint2 := GetPointFromString(PathString, Pos); + SmoothCurveToRel(CurvePoint2, GetPointFromString(PathString, Pos)); + end; + end; + 'H': + HLineTo(StrToFloat(GetNumberFromString(PathString, Pos), USFormatSettings)); + 'h': + HLineToRel(StrToFloat(GetNumberFromString(PathString, Pos), USFormatSettings)); + 'V': + VLineTo(StrToFloat(GetNumberFromString(PathString, Pos), USFormatSettings)); + 'v': + VLineToRel(StrToFloat(GetNumberFromString(PathString, Pos), USFormatSettings)); + 'Q', 'q': + begin + GetPointFromString(PathString, Pos); + GetPointFromString(PathString, Pos); + end; + 'T', 't': + GetPointFromString(PathString, Pos); + 'A', 'a': + begin + if Count > 0 then + CurvePoint1 := FPathData[FPathData.Count - 1].Point + else + CurvePoint1 := TPointF.Zero; + Radius := GetPointFromString(PathString, Pos); + Angle := StrToFloat(GetNumberFromString(PathString, Pos), USFormatSettings); + TempPoint := GetPointFromString(PathString, Pos); + Large := TempPoint.X = 1; + Sweet := TempPoint.Y = 1; + CurvePoint2 := GetPointFromString(PathString, Pos); + if Token = 'a' then + CurvePoint2 := CurvePoint1 + CurvePoint2; + AddArcSvg(CurvePoint1, Radius, Angle, Large, Sweet, CurvePoint2); + end; + end; + end; + end; + DoChanged; + finally + TokenBuilder.Free; + Builder.Free; + end; +end; + +{ TCanvasManager } + +class procedure TCanvasManager.UnInitialize; +var + CanvasSrv: IFMXCanvasService; +begin + FreeAndNil(FMeasureBitmap); + FreeAndNil(FCanvasList); + if (TPlatformServices.Current <> nil) and TPlatformServices.Current.SupportsPlatformService(IFMXCanvasService, + CanvasSrv) then + CanvasSrv.UnregisterCanvasClasses; +end; + +class function TCanvasManager.CreateFromBitmap(const ABitmap: TBitmap; const AQuality: TCanvasQuality = TCanvasQuality.SystemDefault): TCanvas; +begin + Result := DefaultCanvas.CreateFromBitmap(ABitmap, AQuality); +end; + +class function TCanvasManager.CreateFromPrinter(const APrinter: TAbstractPrinter): TCanvas; +begin + Result := DefaultPrinterCanvas.CreateFromPrinter(APrinter); +end; + +class function TCanvasManager.CreateFromWindow(const AParent: TWindowHandle; const AWidth, AHeight: Integer; + const AQuality: TCanvasQuality = TCanvasQuality.SystemDefault): TCanvas; +begin + Result := DefaultCanvas.CreateFromWindow(AParent, AWidth, AHeight, AQuality); +end; + +class function TCanvasManager.GetDefaultCanvas: TCanvasClass; +var + CanvasSrv: IFMXCanvasService; + CanvasClassRec: TCanvasClassRec; +begin + if FDefaultCanvasClass = nil then + begin + Result := nil; + if (FCanvasList = nil) and TPlatformServices.Current.SupportsPlatformService(IFMXCanvasService, CanvasSrv) then + CanvasSrv.RegisterCanvasClasses; + if (FCanvasList <> nil) and (FCanvasList.Count > 0) then + begin + for CanvasClassRec in FCanvasList do + begin + if CanvasClassRec.Default and + (not FEnableSoftwareCanvas and (TCanvasStyle.NeedGPUSurface in CanvasClassRec.CanvasClass.GetCanvasStyle)) then + begin + Result := CanvasClassRec.CanvasClass; + Break; + end; + if CanvasClassRec.Default and + (FEnableSoftwareCanvas and not (TCanvasStyle.NeedGPUSurface in CanvasClassRec.CanvasClass.GetCanvasStyle)) then + begin + Result := CanvasClassRec.CanvasClass; + Break; + end; + end; + if (Result = nil) and FEnableSoftwareCanvas then + begin + for CanvasClassRec in FCanvasList do + begin + if not (TCanvasStyle.NeedGPUSurface in CanvasClassRec.CanvasClass.GetCanvasStyle) then + begin + Result := CanvasClassRec.CanvasClass; + Break; + end; + end; + end; + if Result = nil then + Result := FCanvasList[0].CanvasClass; + FDefaultCanvasClass := Result; + end + else + raise ECanvasManagerException.Create('No TCanvas implementation found'); + end + else + Result := FDefaultCanvasClass; +end; + +class function TCanvasManager.GetDefaultPrinterCanvas: TCanvasClass; +var + CanvasSrv: IFMXCanvasService; + CanvasClassRec: TCanvasClassRec; +begin + if FDefaultPrinterCanvasClass = nil then + begin + Result := nil; + if FCanvasList = nil then + if TPlatformServices.Current.SupportsPlatformService(IFMXCanvasService, CanvasSrv) then + CanvasSrv.RegisterCanvasClasses; + if (FCanvasList <> nil) and (FCanvasList.Count > 0) then + begin + for CanvasClassRec in FCanvasList do + if CanvasClassRec.PrinterCanvas then + begin + Result := CanvasClassRec.CanvasClass; + Break; + end; + FDefaultPrinterCanvasClass := Result; + end + else + raise ECanvasManagerException.Create('No TCanvas for printer implementation found'); + end + else + Result := FDefaultPrinterCanvasClass; +end; + +class function TCanvasManager.GetMeasureCanvas: TCanvas; +begin + if FMeasureBitmap = nil then + FMeasureBitmap := TBitmap.Create(1, 1); + Result := FMeasureBitmap.Canvas +end; + +class procedure TCanvasManager.RecreateFromPrinter(const Canvas: TCanvas; const APrinter: TAbstractPrinter); +begin + Canvas.UnInitialize; + Canvas.CreateFromPrinter(APrinter); +end; + +class procedure TCanvasManager.EnableSoftwareCanvas(const Enable: Boolean); +begin + FEnableSoftwareCanvas := Enable; + FDefaultCanvasClass := nil; +end; + +class procedure TCanvasManager.RegisterCanvas(const CanvasClass: TCanvasClass; const ADefault: Boolean; const APrinterCanvas: Boolean); +var + Rec: TCanvasClassRec; +begin + if FCanvasList = nil then + FCanvasList := TList.Create; + Rec.CanvasClass := CanvasClass; + Rec.Default := ADefault; + Rec.PrinterCanvas := APrinterCanvas; + FCanvasList.Add(Rec); +end; + +{ TCanvas.TMetaBrush } + +destructor TCanvas.TMetaBrush.Destroy; +begin + FGradient.Free; + inherited; +end; + +function TCanvas.TMetaBrush.GetGradient: TGradient; +begin + if FGradient = nil then + begin + FGradient := TGradient.Create; + FValid := False; + end; + + Result := FGradient; +end; + +{ TCanvas } + +constructor TCanvas.CreateFromWindow(const AParent: TWindowHandle; const AWidth, AHeight: Integer; + const AQuality: TCanvasQuality = TCanvasQuality.SystemDefault); +begin + inherited Create; + FQuality := AQuality; + FParent := AParent; + FWidth := AWidth; + FHeight := AHeight; + Initialize; +end; + +procedure TCanvas.RaiseIfBeginSceneCountZero; +begin + if BeginSceneCount = 0 then + raise ECanvasException.Create(SCannotPaintOnCanvasWithoutBeginScene); +end; + +procedure TCanvas.Clear(const AColor: TAlphaColor); +begin + RaiseIfBeginSceneCountZero; + + DoClear(AColor); +end; + +procedure TCanvas.ClearRect(const ARect: TRectF; const AColor: TAlphaColor); +begin + RaiseIfBeginSceneCountZero; + + DoClearRect(ARect, AColor); +end; + +class procedure TCanvas.CopyBitmap(const Source, Dest: TBitmap); +var + S, D: TBitmapData; +begin + if (Source.Width = Dest.Width) and (Source.Height = Dest.Height) then + begin + if not Source.IsEmpty then + begin + if Source.CanvasClass = Dest.CanvasClass then + Source.CanvasClass.DoCopyBitmap(Source, Dest) + else if Source.Map(TMapAccess.Read, S) and Dest.Map(TMapAccess.Write, D) then + try + D.Copy(S); + finally + Source.Unmap(S); + Dest.Unmap(D); + end; + end; + end + else + raise ECanvasException.Create(SBitmapSizeNotEqual); +end; + +class constructor TCanvas.Create; +begin + FLock := TObject.Create; +end; + +constructor TCanvas.CreateFromBitmap(const ABitmap: TBitmap; const AQuality: TCanvasQuality = TCanvasQuality.SystemDefault); +begin + inherited Create; + FQuality := AQuality; + FBitmap := ABitmap; + FWidth := ABitmap.Width; + FHeight := ABitmap.Height; + Initialize; +end; + +constructor TCanvas.CreateFromPrinter(const APrinter: TAbstractPrinter); +begin + inherited Create; + Initialize; + FPrinter := APrinter; +end; + +procedure TCanvas.Initialize; +begin + FScale := GetCanvasScale; + FStroke := TStrokeBrush.Create(TBrushKind.Solid, $FF000000); + FFill := TBrush.Create(TBrushKind.Solid, $FFFFFFFF); + FFont := TFont.Create; + FFont.OnChanged := FontChanged; + FCanvasSaveData := TCanvasSaveStateList.Create; + FMatrixMeaning := TMatrixMeaning.Identity; + FBlending := True; +end; + +procedure TCanvas.UnInitialize; +begin + FCanvasSaveData.DisposeOf; + FFont.DisposeOf; + FStroke.DisposeOf; + FFill.DisposeOf; +end; + +destructor TCanvas.Destroy; +begin + TMessageManager.DefaultManager.SendMessage(Self, TCanvasDestroyMessage.Create); + UnInitialize; + inherited; +end; + +class destructor TCanvas.Destroy; +begin + FLock.Free; +end; + +function TCanvas.DoBeginScene(AClipRects: PClipRects = nil; AContextHandle: THandle = 0): Boolean; +begin + FClippingChangeCount := 0; + FSavingStateCount := 0; + + Stroke.Thickness := 1; + Stroke.Cap := TStrokeCap.Flat; + Stroke.Join := TStrokeJoin.Miter; + Stroke.Dash := TStrokeDash.Solid; + Stroke.Kind := TBrushKind.Solid; + Fill.Kind := TBrushKind.Solid; + SetMatrix(TMatrix.Identity); + Result := True; +end; + +procedure TCanvas.DoBlendingChanged; +begin + +end; + +procedure TCanvas.DoClear(const Color: TAlphaColor); +begin +end; + +procedure TCanvas.DoClearRect(const ARect: TRectF; const AColor: TAlphaColor); +begin +end; + +class procedure TCanvas.DoCopyBitmap(const Source, Dest: TBitmap); +var + S, D: TBitmapData; +begin + if Source.Map(TMapAccess.Read, S) and Dest.Map(TMapAccess.Write, D) then + try + D.Copy(S); + finally + Source.Unmap(S); + Dest.Unmap(D); + end; +end; + +procedure TCanvas.DoEndScene; +begin + if FBitmap <> nil then + FBitmap.BitmapChanged; +end; + +procedure TCanvas.DoExcludeClipRect(const ARect: TRectF); +begin +end; + +function TCanvas.AlignToPixel(const Value: TPointF): TPointF; +begin + case FMatrixMeaning of + TMatrixMeaning.Identity: + Result := TPointF.Create(Round(Value.X * FScale + TEpsilon.Vector) / FScale, + Round(Value.Y * FScale + TEpsilon.Vector) / FScale); + TMatrixMeaning.Translate: + Result := TPointF.Create(Round((Matrix.m31 + Value.X) * FScale + TEpsilon.Vector) / FScale - Matrix.m31, + Round((Matrix.m32 + Value.Y) * FScale + TEpsilon.Vector) / FScale - Matrix.m32); + else + Result := Value; + end; +end; + +function TCanvas.AlignToPixel(const Rect: TRectF): TRectF; +begin + Result.Left := AlignToPixelHorizontally(Rect.Left); + Result.Top := AlignToPixelVertically(Rect.Top); + Result.Right := Result.Left + Round(Rect.Width * Scale) / Scale; // keep ratio horizontally + Result.Bottom := Result.Top + Round(Rect.Height * Scale) / Scale; // keep ratio vertically +end; + +function TCanvas.AlignToPixelHorizontally(const Value: Single): Single; +begin + case FMatrixMeaning of + TMatrixMeaning.Identity: + Result := Round(Value * FScale + TEpsilon.Vector) / FScale; + TMatrixMeaning.Translate: + Result := Round((Matrix.m31 + Value) * FScale + TEpsilon.Vector) / FScale - Matrix.m31; + else + Result := Value; + end; +end; + +function TCanvas.AlignToPixelVertically(const Value: Single): Single; +begin + case FMatrixMeaning of + TMatrixMeaning.Identity: + Result := Round(Value * FScale + TEpsilon.Vector) / FScale; + TMatrixMeaning.Translate: + Result := Round((Matrix.m32 + Value) * FScale + TEpsilon.Vector) / FScale - Matrix.m32; + else + Result := Value; + end; +end; + +class procedure TCanvas.Lock; +begin + TMonitor.Enter(FLock); +end; + +class procedure TCanvas.Unlock; +begin + TMonitor.Exit(FLock); +end; + +function TCanvas.BeginScene(AClipRects: PClipRects = nil; AContextHandle: THandle = 0): Boolean; +begin + Lock; + try + if FBeginSceneCount = 0 then + begin + Result := (Width > 0) and (Height > 0) and DoBeginScene(AClipRects, AContextHandle); + if not Result then + begin + Unlock; + Exit; + end; + end + else + Result := FBeginSceneCount > 0; + Inc(FBeginSceneCount); + except + Unlock; + raise; + end; +end; + +procedure TCanvas.EndScene; +begin + try + if FBeginSceneCount = 1 then + DoEndScene; + Dec(FBeginSceneCount); + finally + Unlock; + end; +end; + +procedure TCanvas.ExcludeClipRect(const ARect: TRectF); +begin + RaiseIfBeginSceneCountZero; + + DoExcludeClipRect(ARect); +end; + +procedure TCanvas.DoSetMatrix(const M: TMatrix); +begin +end; + +procedure TCanvas.SetMatrix(const M: TMatrix); +begin + FMatrixMeaning := TMatrixMeaning.Unknown; + if not SameValue(FOffset.X, 0, TEpsilon.Matrix) or not SameValue(FOffset.Y, 0, TEpsilon.Matrix) then + FMatrix := TMatrix.CreateTranslation(FOffset.X, FOffset.Y) * M + else + FMatrix := M; + { Check for identity matrix values. It is assumed that the matrix is composed of + three vectors of unit length, so by comparing some specific values with one, + we discard any other possibility of other vectors. } + if SameValue(FMatrix.m11, 1, TEpsilon.Matrix) and SameValue(FMatrix.m22, 1, TEpsilon.Matrix) and + SameValue(FMatrix.m33, 1, TEpsilon.Matrix) then + begin + if SameValue(FMatrix.m31, 0, TEpsilon.Matrix) and SameValue(FMatrix.m32, 0, TEpsilon.Matrix) then + begin // If no translation is present, we have an identity matrix. + FMatrixMeaning := TMatrixMeaning.Identity; + end + else + begin // Translation information is present in the matrix. + FMatrixMeaning := TMatrixMeaning.Translate; + + FMatrixTranslate.X := FMatrix.m31; + FMatrixTranslate.Y := FMatrix.m32; + end; + end; + DoSetMatrix(FMatrix); +end; + +procedure TCanvas.MultiplyMatrix(const M: TMatrix); +var + MulMatrix: TMatrix; +begin + MulMatrix := M * FMatrix; + SetMatrix(MulMatrix); +end; + +function TCanvas.CreateSaveState: TCanvasSaveState; +begin + Result := TCanvasSaveState.Create; +end; + +procedure TCanvas.RestoreState(const State: TCanvasSaveState); +begin + RaiseIfBeginSceneCountZero; + + if FCanvasSaveData.IndexOf(State) >= 0 then + Assign(State); +end; + +procedure TCanvas.FontChanged(Sender: TObject); +begin +end; + +class function TCanvas.InitializeBitmap(const Width, Height: Integer; const Scale: Single; var PixelFormat: TPixelFormat): THandle; +begin + if (Width > 0) and (Height > 0) then + Result := DoInitializeBitmap(Width, Height, Scale, PixelFormat) + else + Result := 0; +end; + +procedure TCanvas.IntersectClipRect(const ARect: TRectF); +begin + RaiseIfBeginSceneCountZero; + + DoIntersectClipRect(ARect); +end; + +function TCanvas.IsScaleInteger: Boolean; +begin + Result := SameValue(Frac(Scale), 0, TEpsilon.Scale); +end; + +class procedure TCanvas.FinalizeBitmap(var Bitmap: THandle); +begin + if Bitmap <> 0 then + DoFinalizeBitmap(Bitmap); +end; + +procedure TCanvas.Flush; +begin + RaiseIfBeginSceneCountZero; + + DoFlush; +end; + +class function TCanvas.MapBitmap(const Bitmap: THandle; const Access: TMapAccess; var Data: TBitmapData): Boolean; +begin + if Bitmap <> 0 then + Result := DoMapBitmap(Bitmap, Access, Data) + else + Result := False; +end; + +class procedure TCanvas.UnmapBitmap(const Bitmap: THandle; var Data: TBitmapData); +begin + if Bitmap <> 0 then + DoUnmapBitmap(Bitmap, Data); +end; + +function TCanvas.LoadFontFromStream(const AStream: TStream): Boolean; +begin + Result := False; + +end; + +procedure TCanvas.MeasureLines(const ALines: TLineMetricInfo; const ARect: TRectF; const AText: string; const WordWrap: Boolean; const Flags: TFillTextFlags; + const ATextAlign: TTextAlign; const AVTextAlign: TTextAlign = TTextAlign.Center); +var + WStartChar, WSaveChar, WCurChar, WCutOffChar: Integer; + LCurChar: Integer; + TmpS: string; + WWidth: Single; + LEditRectWidth: Single; + Tok, LText: string; + + function _IsSurrogate(Surrogate: WideChar): Boolean; + begin + Result := (Integer(Surrogate) >= $D800) and (Integer(Surrogate) <= $DFFF); + end; + + procedure _SkipSeparators(var Pos: Integer; const S: string); + const + // #$0020 SPACE + // #$0021 ! EXCLAMATION MARK + // #$002C , COMMA + // #$002D - HYPHEN-MINUS + // #$002E . FULL STOP + // #$003A : COLON + // #$003B ; SEMICOLON + // #$003F ? QUESTION MARK + BasicSeparatos: string = #$0020#$0021#$002C#$002D#$002E#$003A#$003B#$003F; + MaxBasicSeparators: WideChar = #$003F; + var + ch: WideChar; + begin + while Pos < S.Length do + begin + ch := S.Chars[Pos]; + if (ch > MaxBasicSeparators) or not BasicSeparatos.Contains(ch) then + Break; + if _IsSurrogate(ch) then + Inc(Pos, 2) + else + Inc(Pos); + end; + end; + + function _WideGetToken(var Pos: Integer; const S: string): string; + const + // #$0020 SPACE + // #$0021 ! EXCLAMATION MARK + // #$002C , COMMA + // #$002D - HYPHEN-MINUS + // #$002E . FULL STOP + // #$003A : COLON + // #$003B ; SEMICOLON + // #$003F ? QUESTION MARK + BasicSeparatos: string = #$0020#$0021#$002C#$002D#$002E#$003A#$003B#$003F; + MaxBasicSeparators: WideChar = #$003F; + var + ch: WideChar; + begin + Result := ''; + { skip first separators } + _SkipSeparators(Pos, S); + + { get } + while Pos < S.Length do + begin + ch := S.Chars[Pos]; + if (ch <= MaxBasicSeparators) and BasicSeparatos.Contains(ch) then + Break; + if _IsSurrogate(ch) then + begin + Result := Result + S.Substring(Pos, 2); + Inc(Pos, 2) + end + else + begin + Result := Result + S.Chars[Pos]; + Inc(Pos); + end; + end; + + { skip separators } + _SkipSeparators(Pos, S); + end; + + function RoundToPowerOf2(I: Integer): Integer; + begin + I := I or (I shr 1); + I := I or (I shr 2); + I := I or (I shr 4); + I := I or (I shr 8); + I := I or (I shr 16); + Result := I + 1; + end; + + function CutOffPoint(TmpS: string; Width: Single): Integer; + var + W: Single; + Delta: Integer; + begin + Delta := RoundToPowerOf2(TmpS.Length) div 2; + Result := Delta; + + while Delta > 0 do + begin + W := TextWidth(TmpS.Substring(0, Result)); + if W > Width then + Result := Result - Delta; + Delta := Delta div 2; + Result := Result + Delta; + end; + end; + +begin + ALines.Count := 0; + if AText = '' then + Exit; + + ALines.Count := 1; + LEditRectWidth := ARect.Width; + + // first check linecreaks + LText := AText; + TmpS := ''; + + LCurChar := 0; + + ALines.Count := 1; + ALines.Metrics[0].Index := 1; + while LCurChar < LText.Length do + begin + if (LText.Chars[LCurChar] = #13) or (LText.Chars[LCurChar] = #10) then + begin + if (LText.Chars[LCurChar] = #13) and (LCurChar + 1 < LText.Length) then + if LText.Chars[LCurChar + 1] = #10 then + Inc(LCurChar); + + if WordWrap and (TextWidth(TmpS) > LEditRectWidth) then + begin + WCurChar := 0; + WStartChar := 0; + WSaveChar := 0; + Tok := _WideGetToken(WCurChar, TmpS); + while Tok <> '' do + begin + WWidth := TextWidth(TmpS.Substring(WStartChar, WCurChar - WStartChar)); + if WWidth > LEditRectWidth then + begin + if WSaveChar = WStartChar then + begin + WCutOffChar := CutOffPoint(TmpS.Substring(WStartChar, WCurChar - WStartChar), LEditRectWidth); + ALines.Metrics[ALines.Count - 1].Len := WCutOffChar; + WCurChar := WStartChar + WCutOffChar; + WStartChar := WStartChar + WCutOffChar; + end + else + begin + ALines.Metrics[ALines.Count - 1].Len := WSaveChar - WStartChar; + WStartChar := WSaveChar; + end; + ALines.Count := ALines.Count + 1; + ALines.Metrics[ALines.Count - 1].Index := + ALines.Metrics[ALines.Count - 2].Index + ALines.Metrics[ALines.Count - 2].Len; + end; + WSaveChar := WCurChar; + Tok := _WideGetToken(WCurChar, TmpS); + if WSaveChar = WCurChar then + Break; { !!! - error } + end; + + ALines.Metrics[ALines.Count - 1].Len := WCurChar - WStartChar; + end + else + ALines.Metrics[ALines.Count - 1].Len := Length(TmpS); + + ALines.Count := ALines.Count + 1; + ALines.Metrics[ALines.Count - 1].Index := LCurChar + 2; + + TmpS := ''; + end + else + TmpS := TmpS + LText.Chars[LCurChar]; + Inc(LCurChar); + end; + + // last line + if WordWrap and (TextWidth(TmpS) > LEditRectWidth) then + begin + WCurChar := 0; + WStartChar := 0; + WSaveChar := 0; + Tok := _WideGetToken(WCurChar, TmpS); + while Tok <> '' do + begin + Tok := TmpS.Substring(WStartChar, WCurChar - WStartChar); + WWidth := TextWidth(TmpS.Substring(WStartChar, WCurChar - WStartChar)); + if WWidth > LEditRectWidth then + begin + if WSaveChar = WStartChar then + begin + WCutOffChar := CutOffPoint(TmpS.Substring(WStartChar, WCurChar - WStartChar), LEditRectWidth); + ALines.Metrics[ALines.Count - 1].Len := WCutOffChar; + WCurChar := WStartChar + WCutOffChar; + WStartChar := WStartChar + WCutOffChar; + end + else + begin + ALines.Metrics[ALines.Count - 1].Len := WSaveChar - WStartChar; + WStartChar := WSaveChar; + end; + ALines.Count := ALines.Count + 1; + ALines.Metrics[ALines.Count - 1].Index := + ALines.Metrics[ALines.Count - 2].Index + ALines.Metrics[ALines.Count - 2].Len; + end; + + WSaveChar := WCurChar; + Tok := _WideGetToken(WCurChar, TmpS); + if WSaveChar = WCurChar then + Break; { !!! - error } + end; + ALines.Metrics[ALines.Count - 1].Len := WCurChar - WStartChar; + end + else + ALines.Metrics[ALines.Count - 1].Len := Length(TmpS); +end; + +procedure TCanvas.MeasureText(var ARect: TRectF; const AText: string; const WordWrap: Boolean; + const Flags: TFillTextFlags; const ATextAlign, AVTextAlign: TTextAlign); +var + Layout: TTextLayout; +begin + if AText.IsEmpty then + begin + ARect.Right := ARect.Left; + ARect.Bottom := ARect.Top; + Exit; + end; + + Layout := TTextLayoutManager.TextLayoutByCanvas(Self.ClassType).Create(Self); + try + Layout.BeginUpdate; + try + Layout.TopLeft := ARect.TopLeft; + Layout.MaxSize := PointF(ARect.Width, ARect.Height); + Layout.Text := AText; + Layout.WordWrap := WordWrap; + Layout.HorizontalAlign := ATextAlign; + Layout.VerticalAlign := AVTextAlign; + Layout.Font := Self.Font; + Layout.Color := Self.Fill.Color; + Layout.RightToLeft := TFillTextFlag.RightToLeft in Flags; + finally + Layout.EndUpdate; + end; + ARect := Layout.TextRect; + finally + FreeAndNil(Layout); + end; +end; + +function TCanvas.TextHeight(const AText: string): Single; +var + R: TRectF; +begin + R := RectF(0, 0, 10000, 10000); + MeasureText(R, AText, False, [], TTextAlign.Leading, TTextAlign.Leading); + Result := R.Bottom; +end; + +function TCanvas.TextToPath(Path: TPathData; const ARect: TRectF; const AText: string; const WordWrap: Boolean; + const ATextAlign, AVTextAlign: TTextAlign): Boolean; +var + Layout: TTextLayout; +begin + if AText.IsEmpty then + Exit(False); + + Layout := TTextLayoutManager.TextLayoutByCanvas(Self.ClassType).Create; + try + Layout.BeginUpdate; + try + Layout.TopLeft := ARect.TopLeft; + Layout.MaxSize := PointF(ARect.Width, ARect.Height); + Layout.Text := AText; + Layout.WordWrap := WordWrap; + Layout.HorizontalAlign := ATextAlign; + Layout.VerticalAlign := AVTextAlign; + Layout.Font := Self.Font; + Layout.Color := Self.Fill.Color; + finally + Layout.EndUpdate; + end; + Layout.ConvertToPath(Path); + Result := True; + finally + FreeAndNil(Layout); + end; +end; + +function TCanvas.TextWidth(const AText: string): Single; +var + R: TRectF; +begin + R := RectF(0, 0, 10000, 20); + MeasureText(R, AText, False, [], TTextAlign.Leading, TTextAlign.Center); + Result := R.Right; +end; + +function TCanvas.TransformPoint(const P: TPointF): TPointF; +begin + case FMatrixMeaning of + TMatrixMeaning.Unknown: + Result := P * FMatrix; + TMatrixMeaning.Identity: + Result := P; + TMatrixMeaning.Translate: + begin + Result.X := P.X + FMatrixTranslate.X; + Result.Y := P.Y + FMatrixTranslate.Y; + end; + end; +end; + +function TCanvas.TransformRect(const Rect: TRectF): TRectF; +var + V: TPointF; +begin + case FMatrixMeaning of + TMatrixMeaning.Unknown: + begin + Result.TopLeft := Rect.TopLeft * FMatrix; + + V := TPointF.Create(Rect.Right, Rect.Top) * FMatrix; + Result.Right := V.X; + Result.Bottom := V.Y; + + V := Rect.BottomRight * FMatrix; + Result.Right := V.X; + Result.Bottom := V.Y; + + V := TPointF.Create(Rect.Left, Rect.Bottom) * FMatrix; + Result.Left := V.X; + Result.Bottom := V.Y; + end; + TMatrixMeaning.Identity: + Result := Rect; + TMatrixMeaning.Translate: + begin + Result := Rect; + Result.Offset(FMatrixTranslate); + end; + end; +end; + +procedure TCanvas.FillArc(const Center, Radius: TPointF; StartAngle, SweepAngle: Single; const AOpacity: Single); +begin + FillArc(Center, Radius, StartAngle, SweepAngle, AOpacity, FFill); +end; + +procedure TCanvas.FillArc(const Center, Radius: TPointF; StartAngle, SweepAngle: Single; const AOpacity: Single; + const ABrush: TBrush); +var + P: TPathData; +begin + RaiseIfBeginSceneCountZero; + + P := TPathData.Create; + try + P.AddArc(Center, Radius, StartAngle, SweepAngle); + FillPath(P, AOpacity, ABrush); + finally + P.Free; + end; +end; + +procedure TCanvas.DrawArc(const Center, Radius: TPointF; StartAngle, SweepAngle: Single; const AOpacity: Single); +begin + DrawArc(Center, Radius, StartAngle, SweepAngle, AOpacity, FStroke); +end; + +procedure TCanvas.DrawArc(const Center, Radius: TPointF; StartAngle, SweepAngle: Single; const AOpacity: Single; + const ABrush: TStrokeBrush); +var + P: TPathData; +begin + RaiseIfBeginSceneCountZero; + + P := TPathData.Create; + try + P.AddArc(Center, Radius, StartAngle, SweepAngle); + DrawPath(P, AOpacity, ABrush); + finally + P.Free; + end; +end; + +procedure TCanvas.DrawBitmap(const ABitmap: TBitmap; const SrcRect, DstRect: TRectF; const AOpacity: Single; + const HighSpeed: Boolean); +begin + RaiseIfBeginSceneCountZero; + + DoDrawBitmap(ABitmap, SrcRect, DstRect, AOpacity, HighSpeed); +end; + +procedure TCanvas.DrawEllipse(const ARect: TRectF; const AOpacity: Single); +begin + DrawEllipse(ARect, AOpacity, FStroke); +end; + +procedure TCanvas.DrawEllipse(const ARect: TRectF; const AOpacity: Single; const ABrush: TStrokeBrush); +begin + RaiseIfBeginSceneCountZero; + + if ABrush.Kind <> TBrushKind.None then + DoDrawEllipse(ARect, AOpacity, ABrush); +end; + +procedure TCanvas.DrawLine(const APt1, APt2: TPointF; const AOpacity: Single); +begin + DrawLine(APt1, APt2, AOpacity, FStroke); +end; + +procedure TCanvas.DrawLine(const APt1, APt2: TPointF; const AOpacity: Single; const ABrush: TStrokeBrush); +begin + RaiseIfBeginSceneCountZero; + + if ABrush.Kind <> TBrushKind.None then + DoDrawLine(APt1, APt2, AOpacity, ABrush); +end; + +function TCanvas.SaveState: TCanvasSaveState; +var + SaveData: TCanvasSaveState; +begin + RaiseIfBeginSceneCountZero; + + FSavingStateCount := FSavingStateCount + 1; + for SaveData in FCanvasSaveData do + begin + if not SaveData.Assigned then + begin + SaveData.Assign(Self); + Result := SaveData; + Exit; + end; + end; + Result := CreateSaveState; + try + Result.Assign(Self); + FCanvasSaveData.Add(Result); + except + Result.Free; + raise; + end; +end; + +procedure TCanvas.SetBlending(const Value: Boolean); +begin + if FBlending <> Value then + begin + FBlending := Value; + DoBlendingChanged; + end; +end; + +procedure TCanvas.SetFill(const Value: TBrush); +begin + FFill.Assign(Value); +end; + +procedure TCanvas.FillPath(const APath: TPathData; const AOpacity: Single); +begin + FillPath(APath, AOpacity, FFill); +end; + +procedure TCanvas.FillPath(const APath: TPathData; const AOpacity: Single; const ABrush: TBrush); +begin + RaiseIfBeginSceneCountZero; + + if (ABrush.Kind <> TBrushKind.None) and not APath.IsEmpty then + DoFillPath(APath, AOpacity, ABrush); +end; + +function TCanvas.DoFillPolygon(const Points: TPolygon; const AOpacity: Single; const ABrush: TBrush): Boolean; +begin + Result := False; +end; + +procedure TCanvas.FillPolygon(const Points: TPolygon; const AOpacity: Single); +var + I: Integer; + Path: TPathData; + PathBreakFound: Boolean; +begin + RaiseIfBeginSceneCountZero; + + if not DoFillPolygon(Points, AOpacity, FFill) then + begin + Path := TPathData.Create; + try + PathBreakFound := False; + for I := 0 to High(Points) do + begin + if I = 0 then + Path.MoveTo(Points[I]) + else if (Points[I].X = PolygonPointBreak.X) and (Points[I].Y = PolygonPointBreak.Y) then + begin + Path.ClosePath; + PathBreakFound := True; + end + else + Path.LineTo(Points[I]); + end; + if not PathBreakFound then + Path.ClosePath; + FillPath(Path, AOpacity); + finally + Path.Free; + end; + end; +end; + +procedure TCanvas.FillRect(const ARect: TRectF; const AOpacity: Single; const ABrush: TBrush); +begin + FillRect(ARect, 0, 0, [], AOpacity, ABrush); +end; + +procedure TCanvas.FillRect(const ARect: TRectF; const AOpacity: Single); +begin + FillRect(ARect, 0, 0, [], AOpacity); +end; + +procedure TCanvas.DoFillRoundRect(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const AOpacity: Single; const ABrush: TBrush; const ACornerType: TCornerType = TCornerType.Round); +var + Path: TPathData; + X1, X2, Y1, Y2: Single; + R: TRectF; +begin + R := ARect; + X1 := XRadius; + if RectWidth(R) - (X1 * 2) < 0 then + X1 := RectWidth(R) / 2; + X2 := XRadius * CurveKappaInv; + Y1 := YRadius; + if RectHeight(R) - (Y1 * 2) < 0 then + Y1 := RectHeight(R) / 2; + Y2 := YRadius * CurveKappaInv; + Path := TPathData.Create; + Path.MoveTo(PointF(R.Left, R.Top + Y1)); + if TCorner.TopLeft in ACorners then + begin + case ACornerType of + // TCornerType.Round - default + TCornerType.Bevel: + Path.LineTo(PointF(R.Left + X1, R.Top)); + TCornerType.InnerRound: + Path.CurveTo(PointF(R.Left + X2, R.Top + Y1), PointF(R.Left + X1, R.Top + Y2), PointF(R.Left + X1, R.Top)); + TCornerType.InnerLine: + begin + Path.LineTo(PointF(R.Left + X2, R.Top + Y1)); + Path.LineTo(PointF(R.Left + X1, R.Top + Y2)); + Path.LineTo(PointF(R.Left + X1, R.Top)); + end; + else + Path.CurveTo(PointF(R.Left, R.Top + (Y2)), PointF(R.Left + X2, R.Top), PointF(R.Left + X1, R.Top)) + end; + end + else + begin + Path.LineTo(PointF(R.Left, R.Top)); + Path.LineTo(PointF(R.Left + X1, R.Top)); + end; + Path.LineTo(PointF(R.Right - X1, R.Top)); + if TCorner.TopRight in ACorners then + begin + case ACornerType of + // TCornerType.Round - default + TCornerType.Bevel: + Path.LineTo(PointF(R.Right, R.Top + Y1)); + TCornerType.InnerRound: + Path.CurveTo(PointF(R.Right - X1, R.Top + Y2), PointF(R.Right - X2, R.Top + Y1), PointF(R.Right, R.Top + Y1)); + TCornerType.InnerLine: + begin + Path.LineTo(PointF(R.Right - X1, R.Top + Y2)); + Path.LineTo(PointF(R.Right - X2, R.Top + Y1)); + Path.LineTo(PointF(R.Right, R.Top + Y1)); + end; + else + Path.CurveTo(PointF(R.Right - X2, R.Top), PointF(R.Right, R.Top + (Y2)), PointF(R.Right, R.Top + Y1)) + end; + end + else + begin + Path.LineTo(PointF(R.Right, R.Top)); + Path.LineTo(PointF(R.Right, R.Top + Y1)); + end; + Path.LineTo(PointF(R.Right, R.Bottom - Y1)); + if TCorner.BottomRight in ACorners then + begin + case ACornerType of + // TCornerType.Round - default + TCornerType.Bevel: + Path.LineTo(PointF(R.Right - X1, R.Bottom)); + TCornerType.InnerRound: + Path.CurveTo(PointF(R.Right - X2, R.Bottom - Y1), PointF(R.Right - X1, R.Bottom - Y2), + PointF(R.Right - X1, R.Bottom)); + TCornerType.InnerLine: + begin + Path.LineTo(PointF(R.Right - X2, R.Bottom - Y1)); + Path.LineTo(PointF(R.Right - X1, R.Bottom - Y2)); + Path.LineTo(PointF(R.Right - X1, R.Bottom)); + end; + else + Path.CurveTo(PointF(R.Right, R.Bottom - (Y2)), PointF(R.Right - X2, R.Bottom), PointF(R.Right - X1, R.Bottom)) + end; + end + else + begin + Path.LineTo(PointF(R.Right, R.Bottom)); + Path.LineTo(PointF(R.Right - X1, R.Bottom)); + end; + Path.LineTo(PointF(R.Left + X1, R.Bottom)); + if TCorner.BottomLeft in ACorners then + begin + case ACornerType of + // TCornerType.Round - default + TCornerType.Bevel: + Path.LineTo(PointF(R.Left, R.Bottom - Y1)); + TCornerType.InnerRound: + Path.CurveTo(PointF(R.Left + X1, R.Bottom - Y2), PointF(R.Left + X2, R.Bottom - Y1), + PointF(R.Left, R.Bottom - Y1)); + TCornerType.InnerLine: + begin + Path.LineTo(PointF(R.Left + X1, R.Bottom - Y2)); + Path.LineTo(PointF(R.Left + X2, R.Bottom - Y1)); + Path.LineTo(PointF(R.Left, R.Bottom - Y1)); + end; + else + Path.CurveTo(PointF(R.Left + X2, R.Bottom), PointF(R.Left, R.Bottom - (Y2)), PointF(R.Left, R.Bottom - Y1)) + end; + end + else + begin + Path.LineTo(PointF(R.Left, R.Bottom)); + Path.LineTo(PointF(R.Left, R.Bottom - Y1)); + end; + Path.ClosePath; + DoFillPath(Path, AOpacity, ABrush); + Path.Free; +end; + +procedure TCanvas.DoFlush; +begin + +end; + +procedure TCanvas.DoIntersectClipRect(const ARect: TRectF); +begin +end; + +procedure TCanvas.FillRect(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const AOpacity: Single; const ACornerType: TCornerType); +begin + FillRect(ARect, XRadius, YRadius, ACorners, AOpacity, FFill, ACornerType); +end; + +procedure TCanvas.FillRect(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const AOpacity: Single; const ABrush: TBrush; const ACornerType: TCornerType); +begin + RaiseIfBeginSceneCountZero; + + if ABrush.Kind = TBrushKind.None then + Exit; + + if ((XRadius = 0) and (YRadius = 0)) or (ACorners = []) then + DoFillRect(ARect, AOpacity, ABrush) + else + DoFillRoundRect(ARect, XRadius, YRadius, ACorners, AOpacity, ABrush, ACornerType) +end; + +procedure TCanvas.FillEllipse(const ARect: TRectF; const AOpacity: Single); +begin + FillEllipse(ARect, AOpacity, FFill); +end; + +procedure TCanvas.FillEllipse(const ARect: TRectF; const AOpacity: Single; const ABrush: TBrush); +begin + RaiseIfBeginSceneCountZero; + + if ABrush.Kind <> TBrushKind.None then + DoFillEllipse(ARect, AOpacity, ABrush); +end; + +procedure TCanvas.FillText(const ARect: TRectF; const AText: string; const WordWrap: Boolean; const AOpacity: Single; + const Flags: TFillTextFlags; const ATextAlign, AVTextAlign: TTextAlign); +var + Layout: TTextLayout; +begin + Layout := TTextLayoutManager.TextLayoutByCanvas(Self.ClassType).Create(Self); + try + Layout.BeginUpdate; + Layout.TopLeft := ARect.TopLeft; + Layout.MaxSize := PointF(ARect.Width, ARect.Height); + Layout.Text := AText; + Layout.WordWrap := WordWrap; + Layout.Opacity := AOpacity; + Layout.HorizontalAlign := ATextAlign; + Layout.VerticalAlign := AVTextAlign; + Layout.Font := Self.Font; + Layout.Color := Self.Fill.Color; + Layout.RightToLeft := TFillTextFlag.RightToLeft in Flags; + Layout.EndUpdate; + Layout.RenderLayout(Self); + finally + FreeAndNil(Layout); + end; +end; + +procedure TCanvas.DrawPath(const APath: TPathData; const AOpacity: Single); +begin + DrawPath(APath, AOpacity, FStroke); +end; + +procedure TCanvas.DrawPath(const APath: TPathData; const AOpacity: Single; const ABrush: TStrokeBrush); +begin + RaiseIfBeginSceneCountZero; + + if (ABrush.Kind <> TBrushKind.None) and not APath.IsEmpty then + DoDrawPath(APath, AOpacity, ABrush); +end; + +function TCanvas.DoDrawPolygon(const Points: TPolygon; const AOpacity: Single; const ABrush: TStrokeBrush): Boolean; +begin + Result := False; +end; + +procedure TCanvas.DrawPolygon(const Points: TPolygon; const AOpacity: Single); +var + I: Integer; + Path: TPathData; + PathBreakFound: Boolean; +begin + RaiseIfBeginSceneCountZero; + + if not DoDrawPolygon(Points, AOpacity, FStroke) then + begin + Path := TPathData.Create; + try + PathBreakFound := False; + for I := 0 to High(Points) do + begin + if I = 0 then + Path.MoveTo(Points[I]) + else if (Points[I].X = PolygonPointBreak.X) and (Points[I].Y = PolygonPointBreak.Y) then + begin + Path.ClosePath; + PathBreakFound := True; + end + else + Path.LineTo(Points[I]); + end; + if not PathBreakFound then + Path.ClosePath; + DrawPath(Path, AOpacity); + finally + Path.Free; + end; + end; +end; + +procedure TCanvas.DrawRect(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const AOpacity: Single; const ACornerType: TCornerType); +begin + DrawRect(ARect, XRadius, YRadius, ACorners, AOpacity, FStroke, ACornerType); +end; + +procedure TCanvas.DrawRect(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const AOpacity: Single; const ABrush: TStrokeBrush; const ACornerType: TCornerType); +var + Path: TPathData; + X1, X2, Y1, Y2: Single; + R: TRectF; +begin + RaiseIfBeginSceneCountZero; + + if ABrush.Kind = TBrushKind.None then + Exit; + + R := ARect; + if ((XRadius = 0) and (YRadius = 0)) or (ACorners = []) then + DoDrawRect(ARect, AOpacity, ABrush) + else + begin + R := ARect; + X1 := XRadius; + if RectWidth(R) - (X1 * 2) < 0 then + X1 := RectWidth(R) / 2; + X2 := XRadius * CurveKappaInv; + Y1 := YRadius; + if RectHeight(R) - (Y1 * 2) < 0 then + Y1 := RectHeight(R) / 2; + Y2 := YRadius * CurveKappaInv; + Path := TPathData.Create; + Path.MoveTo(PointF(R.Left, R.Top + Y1)); + if TCorner.TopLeft in ACorners then + begin + case ACornerType of + // TCornerType.Round - default + TCornerType.Bevel: + Path.LineTo(PointF(R.Left + X1, R.Top)); + TCornerType.InnerRound: + Path.CurveTo(PointF(R.Left + X2, R.Top + Y1), PointF(R.Left + X1, R.Top + Y2), PointF(R.Left + X1, R.Top)); + TCornerType.InnerLine: + begin + Path.LineTo(PointF(R.Left + X2, R.Top + Y1)); + Path.LineTo(PointF(R.Left + X1, R.Top + Y2)); + Path.LineTo(PointF(R.Left + X1, R.Top)); + end; + else + Path.CurveTo(PointF(R.Left, R.Top + (Y2)), PointF(R.Left + X2, R.Top), PointF(R.Left + X1, R.Top)) + end; + end + else + begin + Path.LineTo(PointF(R.Left, R.Top)); + Path.LineTo(PointF(R.Left + X1, R.Top)); + end; + Path.LineTo(PointF(R.Right - X1, R.Top)); + if TCorner.TopRight in ACorners then + begin + case ACornerType of + // TCornerType.Round - default + TCornerType.Bevel: + Path.LineTo(PointF(R.Right, R.Top + Y1)); + TCornerType.InnerRound: + Path.CurveTo(PointF(R.Right - X1, R.Top + Y2), PointF(R.Right - X2, R.Top + Y1), PointF(R.Right, R.Top + Y1)); + TCornerType.InnerLine: + begin + Path.LineTo(PointF(R.Right - X1, R.Top + Y2)); + Path.LineTo(PointF(R.Right - X2, R.Top + Y1)); + Path.LineTo(PointF(R.Right, R.Top + Y1)); + end; + else + Path.CurveTo(PointF(R.Right - X2, R.Top), PointF(R.Right, R.Top + (Y2)), PointF(R.Right, R.Top + Y1)) + end; + end + else + begin + Path.LineTo(PointF(R.Right, R.Top)); + Path.LineTo(PointF(R.Right, R.Top + Y1)); + end; + Path.LineTo(PointF(R.Right, R.Bottom - Y1)); + if TCorner.BottomRight in ACorners then + begin + case ACornerType of + // TCornerType.Round - default + TCornerType.Bevel: + Path.LineTo(PointF(R.Right - X1, R.Bottom)); + TCornerType.InnerRound: + Path.CurveTo(PointF(R.Right - X2, R.Bottom - Y1), PointF(R.Right - X1, R.Bottom - Y2), + PointF(R.Right - X1, R.Bottom)); + TCornerType.InnerLine: + begin + Path.LineTo(PointF(R.Right - X2, R.Bottom - Y1)); + Path.LineTo(PointF(R.Right - X1, R.Bottom - Y2)); + Path.LineTo(PointF(R.Right - X1, R.Bottom)); + end; + else + Path.CurveTo(PointF(R.Right, R.Bottom - (Y2)), PointF(R.Right - X2, R.Bottom), PointF(R.Right - X1, R.Bottom)) + end; + end + else + begin + Path.LineTo(PointF(R.Right, R.Bottom)); + Path.LineTo(PointF(R.Right - X1, R.Bottom)); + end; + Path.LineTo(PointF(R.Left + X1, R.Bottom)); + if TCorner.BottomLeft in ACorners then + begin + case ACornerType of + // TCornerType.Round - default + TCornerType.Bevel: + Path.LineTo(PointF(R.Left, R.Bottom - Y1)); + TCornerType.InnerRound: + Path.CurveTo(PointF(R.Left + X1, R.Bottom - Y2), PointF(R.Left + X2, R.Bottom - Y1), + PointF(R.Left, R.Bottom - Y1)); + TCornerType.InnerLine: + begin + Path.LineTo(PointF(R.Left + X1, R.Bottom - Y2)); + Path.LineTo(PointF(R.Left + X2, R.Bottom - Y1)); + Path.LineTo(PointF(R.Left, R.Bottom - Y1)); + end; + else + Path.CurveTo(PointF(R.Left + X2, R.Bottom), PointF(R.Left, R.Bottom - (Y2)), PointF(R.Left, R.Bottom - Y1)) + end; + end + else + begin + Path.LineTo(PointF(R.Left, R.Bottom)); + Path.LineTo(PointF(R.Left, R.Bottom - Y1)); + end; + Path.ClosePath; + DoDrawPath(Path, AOpacity, ABrush); + Path.Free; + end; +end; + +procedure TCanvas.DrawDashRect(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const AOpacity: Single; const AColor: TAlphaColor); +var + Brush: TStrokeBrush; +begin + RaiseIfBeginSceneCountZero; + + Brush := TStrokeBrush.Create(TBrushKind.Solid, AColor); + try + Brush.Thickness := 1; + Brush.Dash := TStrokeDash.Dash; + Brush.Kind := TBrushKind.Solid; + DrawRect(ARect, XRadius, YRadius, ACorners, AOpacity, Brush); + finally + Brush.Free; + end; +end; + +procedure TCanvas.DrawRectSides(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const AOpacity: Single; const ASides: TSides; const ACornerType: TCornerType = TCornerType.Round); +begin + DrawRectSides(ARect, XRadius, YRadius, ACorners, AOpacity, ASides, FStroke, ACornerType); +end; + +procedure TCanvas.DrawRectSides(const ARect: TRectF; const XRadius, YRadius: Single; const ACorners: TCorners; + const AOpacity: Single; const ASides: TSides; const ABrush: TStrokeBrush; + const ACornerType: TCornerType = TCornerType.Round); +var + Path: TPathData; + X1, X2, Y1, Y2: Single; + DrawingRect: TRectF; +begin + RaiseIfBeginSceneCountZero; + + DrawingRect := ARect; + X1 := XRadius; + if DrawingRect.Width - (X1 * 2) < 0 then + if X1 <> 0 then // guard divide by zero + X1 := (XRadius * (DrawingRect.Width / (X1 * 2))); + X2 := X1 / 2; + Y1 := YRadius; + if DrawingRect.Height - (Y1 * 2) < 0 then + if Y1 <> 0 then // guard divide by zero + Y1 := (YRadius * (DrawingRect.Height / (Y1 * 2))); + Y2 := Y1 / 2; + Path := TPathData.Create; + try + Path.MoveTo(PointF(DrawingRect.Left, DrawingRect.Top + Y1)); + if TCorner.TopLeft in ACorners then + begin + if (TSide.Top in ASides) or (TSide.Left in ASides) or (XRadius > 0) or (YRadius > 0) then + begin + case ACornerType of + // TCornerType.Round - default + TCornerType.Bevel: + Path.LineTo(TPointF.Create(DrawingRect.Left + X1, DrawingRect.Top)); + TCornerType.InnerRound: + Path.CurveTo(TPointF.Create(DrawingRect.Left + X2, DrawingRect.Top + Y1), + TPointF.Create(DrawingRect.Left + X1, DrawingRect.Top + Y2), + TPointF.Create(DrawingRect.Left + X1, DrawingRect.Top)); + TCornerType.InnerLine: + begin + Path.LineTo(TPointF.Create(DrawingRect.Left + X2, DrawingRect.Top + Y1)); + Path.LineTo(TPointF.Create(DrawingRect.Left + X1, DrawingRect.Top + Y2)); + Path.LineTo(TPointF.Create(DrawingRect.Left + X1, DrawingRect.Top)); + end; + else + Path.CurveTo(TPointF.Create(DrawingRect.Left, DrawingRect.Top + (Y2)), + TPointF.Create(DrawingRect.Left + X2, DrawingRect.Top), TPointF.Create(DrawingRect.Left + X1, + DrawingRect.Top)) + end; + end + else + Path.MoveTo(TPointF.Create(DrawingRect.Left + X1, DrawingRect.Top)); + end + else + begin + if TSide.Left in ASides then + Path.LineTo(TPointF.Create(DrawingRect.Left, DrawingRect.Top)) + else + Path.MoveTo(TPointF.Create(DrawingRect.Left, DrawingRect.Top)); + if TSide.Top in ASides then + Path.LineTo(TPointF.Create(DrawingRect.Left + X1, DrawingRect.Top)) + else + Path.MoveTo(TPointF.Create(DrawingRect.Left + X1, DrawingRect.Top)); + end; + if not(TSide.Top in ASides) then + Path.MoveTo(TPointF.Create(DrawingRect.Right - X1, DrawingRect.Top)) + else + Path.LineTo(TPointF.Create(DrawingRect.Right - X1, DrawingRect.Top)); + if TCorner.TopRight in ACorners then + begin + if (TSide.Top in ASides) or (TSide.Right in ASides) or (XRadius > 0) or (YRadius > 0) then + begin + case ACornerType of + // TCornerType.Round - default + TCornerType.Bevel: + Path.LineTo(TPointF.Create(DrawingRect.Right, DrawingRect.Top + Y1)); + TCornerType.InnerRound: + Path.CurveTo(TPointF.Create(DrawingRect.Right - X1, DrawingRect.Top + Y2), + TPointF.Create(DrawingRect.Right - X2, DrawingRect.Top + Y1), + TPointF.Create(DrawingRect.Right, DrawingRect.Top + Y1)); + TCornerType.InnerLine: + begin + Path.LineTo(TPointF.Create(DrawingRect.Right - X1, DrawingRect.Top + Y2)); + Path.LineTo(TPointF.Create(DrawingRect.Right - X2, DrawingRect.Top + Y1)); + Path.LineTo(TPointF.Create(DrawingRect.Right, DrawingRect.Top + Y1)); + end; + else + Path.CurveTo(TPointF.Create(DrawingRect.Right - X2, DrawingRect.Top), + TPointF.Create(DrawingRect.Right, DrawingRect.Top + (Y2)), + TPointF.Create(DrawingRect.Right, DrawingRect.Top + Y1)) + end; + end + else + Path.MoveTo(TPointF.Create(DrawingRect.Right, DrawingRect.Top + Y1)); + end + else + begin + if TSide.Top in ASides then + Path.LineTo(TPointF.Create(DrawingRect.Right, DrawingRect.Top)) + else + Path.MoveTo(TPointF.Create(DrawingRect.Right, DrawingRect.Top)); + if TSide.Right in ASides then + Path.LineTo(TPointF.Create(DrawingRect.Right, DrawingRect.Top + Y1)) + else + Path.MoveTo(TPointF.Create(DrawingRect.Right, DrawingRect.Top + Y1)); + end; + if not(TSide.Right in ASides) then + Path.MoveTo(TPointF.Create(DrawingRect.Right, DrawingRect.Bottom - Y1)) + else + Path.LineTo(TPointF.Create(DrawingRect.Right, DrawingRect.Bottom - Y1)); + if TCorner.BottomRight in ACorners then + begin + if (TSide.Bottom in ASides) or (TSide.Right in ASides) or (XRadius > 0) or (YRadius > 0) then + begin + case ACornerType of + // TCornerType.Round - default + TCornerType.Bevel: + Path.LineTo(TPointF.Create(DrawingRect.Right - X1, DrawingRect.Bottom)); + TCornerType.InnerRound: + Path.CurveTo(TPointF.Create(DrawingRect.Right - X2, DrawingRect.Bottom - Y1), + TPointF.Create(DrawingRect.Right - X1, DrawingRect.Bottom - Y2), + TPointF.Create(DrawingRect.Right - X1, DrawingRect.Bottom)); + TCornerType.InnerLine: + begin + Path.LineTo(TPointF.Create(DrawingRect.Right - X2, DrawingRect.Bottom - Y1)); + Path.LineTo(TPointF.Create(DrawingRect.Right - X1, DrawingRect.Bottom - Y2)); + Path.LineTo(TPointF.Create(DrawingRect.Right - X1, DrawingRect.Bottom)); + end; + else + Path.CurveTo(TPointF.Create(DrawingRect.Right, DrawingRect.Bottom - (Y2)), + TPointF.Create(DrawingRect.Right - X2, DrawingRect.Bottom), TPointF.Create(DrawingRect.Right - X1, + DrawingRect.Bottom)) + end; + end + else + Path.MoveTo(TPointF.Create(DrawingRect.Right - X1, DrawingRect.Bottom)); + end + else + begin + if TSide.Right in ASides then + Path.LineTo(TPointF.Create(DrawingRect.Right, DrawingRect.Bottom)) + else + Path.MoveTo(TPointF.Create(DrawingRect.Right, DrawingRect.Bottom)); + if TSide.Bottom in ASides then + Path.LineTo(TPointF.Create(DrawingRect.Right - X1, DrawingRect.Bottom)) + else + Path.MoveTo(TPointF.Create(DrawingRect.Right - X1, DrawingRect.Bottom)); + end; + if not(TSide.Bottom in ASides) then + Path.MoveTo(TPointF.Create(DrawingRect.Left + X1, DrawingRect.Bottom)) + else + Path.LineTo(TPointF.Create(DrawingRect.Left + X1, DrawingRect.Bottom)); + if TCorner.BottomLeft in ACorners then + begin + if (TSide.Bottom in ASides) or (TSide.Left in ASides) or (XRadius > 0) or (YRadius > 0) then + begin + case ACornerType of + // TCornerType.Round - default + TCornerType.Bevel: + Path.LineTo(TPointF.Create(DrawingRect.Left, DrawingRect.Bottom - Y1)); + TCornerType.InnerRound: + Path.CurveTo(TPointF.Create(DrawingRect.Left + X1, DrawingRect.Bottom - Y2), + TPointF.Create(DrawingRect.Left + X2, DrawingRect.Bottom - Y1), + TPointF.Create(DrawingRect.Left, DrawingRect.Bottom - Y1)); + TCornerType.InnerLine: + begin + Path.LineTo(TPointF.Create(DrawingRect.Left + X1, DrawingRect.Bottom - Y2)); + Path.LineTo(TPointF.Create(DrawingRect.Left + X2, DrawingRect.Bottom - Y1)); + Path.LineTo(TPointF.Create(DrawingRect.Left, DrawingRect.Bottom - Y1)); + end; + else + Path.CurveTo(TPointF.Create(DrawingRect.Left + X2, DrawingRect.Bottom), + TPointF.Create(DrawingRect.Left, DrawingRect.Bottom - (Y2)), + TPointF.Create(DrawingRect.Left, DrawingRect.Bottom - Y1)) + end; + end + else + Path.MoveTo(TPointF.Create(DrawingRect.Left, DrawingRect.Bottom - Y1)); + end + else + begin + if TSide.Bottom in ASides then + Path.LineTo(TPointF.Create(DrawingRect.Left, DrawingRect.Bottom)) + else + Path.MoveTo(TPointF.Create(DrawingRect.Left, DrawingRect.Bottom)); + if TSide.Left in ASides then + Path.LineTo(TPointF.Create(DrawingRect.Left, DrawingRect.Bottom - Y1)) + else + Path.MoveTo(TPointF.Create(DrawingRect.Left, DrawingRect.Bottom - Y1)); + end; + if (TSide.Left in ASides) then + begin + Path.LineTo(TPointF.Create(DrawingRect.Left, DrawingRect.Top + Y1)); + end; + DrawPath(Path, AOpacity, ABrush); + finally + Path.Free; + end; +end; + +function TCanvas.GetCanvasScale: Single; +begin + if Parent <> nil then + Result := Parent.Scale + else if Bitmap <> nil then + Result := Bitmap.BitmapScale + else + Result := DefaultScale; +end; + +class function TCanvas.GetCanvasStyle: TCanvasStyles; +begin + Result := [TCanvasStyle.SupportClipRects]; +end; + +class function TCanvas.GetAttribute(const Value: TCanvasAttribute): Integer; +begin + case Value of + TCanvasAttribute.MaxBitmapSize: + Result := MaxAllowedBitmapSize; + else + raise EArgumentException.CreateRes(@SInvalidCanvasParameter); + end; +end; + +procedure TCanvas.SetSize(const AWidth, AHeight: Integer); +begin + FWidth := AWidth; + FHeight := AHeight; +end; + +procedure TCanvas.DrawRect(const ARect: TRectF; const AOpacity: Single; const ABrush: TStrokeBrush); +begin + DrawRect(ARect, 0, 0, AllCorners, AOpacity, ABrush); +end; + +procedure TCanvas.DrawRect(const ARect: TRectF; const AOpacity: Single); +begin + DrawRect(ARect, 0, 0, AllCorners, AOpacity); +end; + +{ TBrushObject } + +constructor TBrushObject.Create(AOwner: TComponent); +begin + inherited; + FBrush := TBrush.Create(TBrushKind.Solid, $FFFFFFFF); +end; + +destructor TBrushObject.Destroy; +begin + FreeAndNil(FBrush); + inherited; +end; + +function TBrushObject.GetBrush: TBrush; +begin + Result := FBrush; +end; + +procedure TBrushObject.SetName(const NewName: TComponentName); +begin + inherited; + if FStyleName = '' then + FStyleName := Name; +end; + +{ TFontObject } + +constructor TFontObject.Create(AOwner: TComponent); +begin + inherited; + FFont := TFont.Create; +end; + +destructor TFontObject.Destroy; +begin + FreeAndNil(FFont); + inherited; +end; + +function TFontObject.GetFont: TFont; +begin + Result := FFont; +end; + +procedure TFontObject.SetName(const NewName: TComponentName); +begin + inherited; + if FStyleName = '' then + FStyleName := Name; +end; + +{ TPathObject } + +constructor TPathObject.Create(AOwner: TComponent); +begin + inherited; + FPath := TPathData.Create(); +end; + +destructor TPathObject.Destroy; +begin + FreeAndNil(FPath); + inherited; +end; + +function TPathObject.GetPath: TPathData; +begin + Result := FPath; +end; + +procedure TPathObject.SetName(const NewName: TComponentName); +begin + inherited; + if FStyleName = '' then + FStyleName := Name; +end; + +{ TBitmapObject } + +constructor TBitmapObject.Create(AOwner: TComponent); +begin + inherited; + FBitmap := TBitmap.Create(1, 1); +end; + +destructor TBitmapObject.Destroy; +begin + FreeAndNil(FBitmap); + inherited; +end; + +function TBitmapObject.GetBitmap: TBitmap; +begin + Result := FBitmap; +end; + +procedure TBitmapObject.SetName(const NewName: TComponentName); +begin + inherited; + if FStyleName = '' then + FStyleName := Name; +end; + +{ TCanvasSaveState } + +procedure TCanvasSaveState.Assign(Source: TPersistent); +var + LCanvas: TCanvas; +begin + if Source is TCanvas then + begin + LCanvas := TCanvas(Source); + Self.FAssigned := True; + Self.FOffset := LCanvas.FOffset; + Self.FMatrix := LCanvas.FMatrix; + Self.FFill.Assign(LCanvas.Fill); + Self.FStroke.Assign(LCanvas.Stroke); + Self.FFont.Assign(LCanvas.Font); + end + else + inherited; +end; + +procedure TCanvasSaveState.AssignTo(Dest: TPersistent); +var + LCanvas: TCanvas; +begin + if Dest is TCanvas then + begin + LCanvas := TCanvas(Dest); + Self.FAssigned := False; + LCanvas.Offset := FOffset; + LCanvas.SetMatrix(Self.FMatrix); + LCanvas.Fill.Assign(Self.FFill); + LCanvas.Stroke.Assign(Self.FStroke); + LCanvas.Font.Assign(Self.FFont); + end + else + inherited; +end; + +constructor TCanvasSaveState.Create; +begin + inherited Create; + FFont := TFont.Create; + FFill := TBrush.Create(TBrushKind.Solid, TAlphaColors.Black); + FStroke := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColors.White); +end; + +destructor TCanvasSaveState.Destroy; +begin + FFont.Free; + FFill.Free; + FStroke.Free; + inherited; +end; + +{ TColorObject } + +procedure TColorObject.SetName(const NewName: TComponentName); +begin + inherited; + if StyleName = '' then + StyleName := Name; +end; + +{ TBitmapCodecManager.TBitmapCodecClassDescriptor } + +function TBitmapCodecManager.TCodecDescriptor.ToFilterString: string; +begin + Result := Format('%s (*%s)|*%s', [Description, Extension, Extension]); +end; + +initialization + RegisterFmxClasses([TBrushObject, TFontObject, TPathObject, TBitmapObject, TColorObject]); +finalization + TFont.FontService := nil; +end. diff --git a/src/lib/FMX/DX 11.0/FMX.TreeView.pas b/src/lib/FMX/DX 11.0/FMX.TreeView.pas new file mode 100644 index 0000000..877a63d --- /dev/null +++ b/src/lib/FMX/DX 11.0/FMX.TreeView.pas @@ -0,0 +1,2824 @@ +{*******************************************************} +{ } +{ Delphi FireMonkey Platform } +{ } +{ Copyright(c) 2011-2021 Embarcadero Technologies, Inc. } +{ All rights reserved } +{ } +{*******************************************************} + +unit FMX.TreeView; + +interface + +{$SCOPEDENUMS ON} + +uses + System.Classes, System.Types, System.UITypes, System.Generics.Collections, System.ImageList, FMX.Types, FMX.Layouts, + FMX.StdCtrls, FMX.Controls, FMX.TextLayout, FMX.Graphics, FMX.ActnList, FMX.ImgList; + +type + +{ TTreeViewItem } + + TCustomTreeView = class; + + TTreeViewItem = class(TTextControl, IItemsContainer, IGlyph) + public const + DefaultHeight = 19; + private + FIsExpanded: Boolean; + FExpander: TControl; + FButton: TCustomButton; + FCheck: TCheckBox; + FGlobalIndex: Integer; + FIsChecked: Boolean; + FIsSelected: Boolean; + FContent: TContent; + FNoItemsContent: TLayout; + FVisibleCount: Integer; + FMinItemSize: TSizeF; + FCustomHeight: Boolean; + FChildrenOffset: Single; + FOldButtonVisible: Boolean; + FOldCheckVisible: Boolean; + FOldChecked: Boolean; + FGlyph: TGlyph; + FOldGlyphVisible: Boolean; + FImageLink: TGlyphImageLink; + [Weak] FImages: TCustomImageList; + FCustomChildrenOffset: Single; + function GetLevelOffset: Single; + procedure DoButtonClick(Sender: TObject); + procedure DoCheckClick(Sender: TObject); + function GetCount: Integer; + procedure SetIsChecked(const Value: Boolean); + procedure UpdateCheckBoxVisibility; + procedure UpdateExpandedButtonVisibility; + procedure SetIsSelected(const Value: Boolean); + procedure RecountVisibleItems; + procedure RequestRecount; + function GetImages: TCustomImageList; + procedure SetImages(const Value: TCustomImageList); + { IGlyph } + function GetImageIndex: TImageIndex; + procedure SetImageIndex(const Value: TImageIndex); + function GetImageList: TBaseImageList; inline; + procedure SetImageList(const Value: TBaseImageList); + function IGlyph.GetImages = GetImageList; + procedure IGlyph.SetImages = SetImageList; + { IItemsContainer } + function IItemsContainer.GetItemsCount = GetCount; + function GetItem(const AIndex: Integer): TFmxObject; + function GetMinItemSize: TSizeF; + procedure OnExpandButtonStyleLookup(Sender: TObject); + procedure UpdateChildrenOffset; + procedure SetCustomChildrenOffset(const Value: Single); + function IsCustomChildrenOffsetStored: Boolean; + protected + procedure ChangeOrder; override; + procedure ApplyStyle; override; + procedure FreeStyle; override; + procedure DragEnd; override; + function GetTextSettingsClass: TTextSettingsInfo.TCustomTextSettingsClass; override; + function CalcMinSize: TSizeF; + procedure InvalidateTextSize; + /// Determines whether the ImageIndex property needs to be stored in the fmx-file + /// True if ImageIndex property needs to be stored in the fmx file + function ImageIndexStored: Boolean; virtual; + /// Should be called when you change an instance or reference to instance of TBaseImageList or the + /// ImageIndex property + /// See also FMX.ActnList.IGlyph + procedure ImagesChanged; virtual; + procedure DoChanged; override; + function IsSizeStored: Boolean; override; + function IsPositionStored: Boolean; override; + procedure SetText(const Value: string); override; + procedure DoAddObject(const AObject: TFmxObject); override; + procedure DoInsertObject(Index: Integer; const AObject: TFmxObject); override; + procedure DoRemoveObject(const AObject: TFmxObject); override; + function EnterChildren(AObject: IControl): Boolean; override; + function GetAbsoluteRect: TRectF; override; + function DoGetUpdateRect: TRectF; override; + procedure ContentAddObject(const AObject: TFmxObject); virtual; + procedure ContentInsertObject(const AIndex: Integer; const AObject: TFmxObject); virtual; + procedure ContentRemoveObject(const AObject: TFmxObject); virtual; + procedure DefineProperties(Filer: TFiler); override; + procedure Paint; override; + procedure SetVisible(const Value: Boolean); override; + procedure SetHeight(const Value: Single); override; + procedure SetIsExpanded(const Value: Boolean); virtual; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Sort(Compare: TFmxObjectSortCompare); override; + function ItemByPoint(const X, Y: Single): TTreeViewItem; + function ItemByIndex(const Idx: Integer): TTreeViewItem; + function TreeView: TCustomTreeView; + function Level: Integer; + function ParentItem: TTreeViewItem; + procedure Select; + procedure Deselect; + procedure ExpandAll; + procedure CollapseAll; + procedure Expand; + procedure Collapse; + procedure Inflate; override; + property Count: Integer read GetCount; + property VisibleCount: Integer read FVisibleCount; + property GlobalIndex: Integer read FGlobalIndex; + property MinItemSize: TSizeF read GetMinItemSize; + /// The actual offset in the right of children elements + property ChildrenOffset: Single read FChildrenOffset; + /// The offset of children elements which specified by user if this value is greater or equal to + /// zero otherwise the default value is used. This value affects + /// ChildrenOffset property + property CustomChildrenOffset: Single read FCustomChildrenOffset write SetCustomChildrenOffset + stored IsCustomChildrenOffsetStored nodefault; + property Items[const Index: Integer]: TTreeViewItem read ItemByIndex; default; + property Width: Single read GetWidth; + /// The list of images. Can be nil. See also FMX.ActnList.IGlyph + property Images: TCustomImageList read GetImages; + published + property Align; + property AutoTranslate default True; + property ClipChildren default False; + property ClipParent default False; + property Cursor default crDefault; + property DragMode default TDragMode.dmManual; + property EnableDragHighlight default True; + property Enabled default True; + property StyledSettings; + property TextSettings; + property Locked default False; + property Height; + property HelpContext; + property HelpKeyword; + property HelpType; + {triggers} + property IsChecked: Boolean read FIsChecked write SetIsChecked; + property IsExpanded: Boolean read FIsExpanded write SetIsExpanded; + property IsSelected: Boolean read FIsSelected write SetIsSelected; + /// Zero based index of an image. The default is -1. + /// See also FMX.ActnList.IGlyph + /// If non-existing index is specified, an image is not drawn and no exception is raised + property ImageIndex: TImageIndex read GetImageIndex write SetImageIndex stored ImageIndexStored; + property Padding; + property Opacity; + property Margins; + property PopupMenu; + property Position; + property RotationAngle; + property RotationCenter; + property Scale; + property Size; + property StyleLookup; + property TabOrder; + property TabStop; + property Text; + property Visible default True; + property ParentShowHint; + {events} + property OnApplyStyleLookup; + {Drag and Drop events} + property OnDragEnter; + property OnDragLeave; + property OnDragOver; + property OnDragDrop; + property OnDragEnd; + {Mouse events} + property OnClick; + property OnDblClick; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnMouseWheel; + property OnMouseEnter; + property OnMouseLeave; + property OnPainting; + property OnPaint; + property OnResize; + property OnResized; + end; + +{ TTreeView } + + TOnCompareTreeViewItemEvent = function(Item1, Item2: TTreeViewItem): Integer of object; + TOnTreeViewDragChange = procedure(SourceItem, DestItem: TTreeViewItem; + var Allow: Boolean) of object; + +{ TTreeView } + + TCustomTreeView = class(TScrollBox, IItemsContainer, IInflatableContent, IGlyph) + private + FMouseSelecting: Boolean; + FOnChange: TNotifyEvent; + FSelected: TTreeViewItem; + FItemHeight: Single; + FCountExpanded: Integer; + FShowCheckboxes: Boolean; + FOnChangeCheck: TNotifyEvent; + FSorted: Boolean; + FOnCompare: TOnCompareTreeViewItemEvent; + FMultiSelect: Boolean; + FFirstSelect: TTreeViewItem; + FFocusedSelection: TControl; + FSelection: TControl; + FSelections: TControlList; + FAllowDrag: Boolean; + FStartDrag: Boolean; + FDragItem: TTreeViewItem; + FOnDragChange: TOnTreeViewDragChange; + FGlobalList: TList; + FAlternatingRowBackground: Boolean; + FOddFill: TBrush; + FFirstVisibleItem, FLastVisibleItem: Integer; + FNoItemsContent: TContent; + [Weak] FHoveredItem: TTreeViewItem; + FTextLayout: TTextLayout; + FToInflate: TList; + FInflater: TContentInflater; + FSelectionChanging: Boolean; + FImageLink: TGlyphImageLink; + [Weak] FImages: TCustomImageList; + procedure SetItemHeight(const Value: Single); + procedure SetCheckboxesVisibility(const Value: Boolean); + function GetTreeItem(Index: Integer): TTreeViewItem; + procedure SetSorted(const Value: Boolean); + procedure SortItems; + procedure SelectRange(const Item1, Item2: TTreeViewItem); + procedure UpdateSelection; + procedure UpdateVisibleItems; + procedure UpdateGlobalIndexes(const Force: Boolean = False); + procedure SetAllowDrag(const Value: Boolean); + function GetCount: Integer; + procedure SetAlternatingRowBackground(const Value: Boolean); + procedure SetHoveredItem(const Value: TTreeViewItem); + function LocalPointToHoveredItemLocalPoint(const AX, AY: Single): TPointF; + function GetImages: TCustomImageList; + procedure SetImages(const Value: TCustomImageList); + { IGlyph } + function GetImageIndex: TImageIndex; + procedure SetImageIndex(const Value: TImageIndex); + function GetImageList: TBaseImageList; inline; + procedure SetImageList(const Value: TBaseImageList); + function IGlyph.GetImages = GetImageList; + procedure IGlyph.SetImages = SetImageList; + { IItemsContainer } + function IItemsContainer.GetItemsCount = GetCount; + function GetItem(const AIndex: Integer): TFmxObject; + function MouseInContentLayout(const X, Y: Single): Boolean; + function GetGlobalCount: Integer; + procedure InvalidateGlobalList; + procedure ItemSizeMightHaveChanged(const AItem: TTreeViewItem); + { Inflatable } + function GetInflatableItems: TList; + procedure NotifyInflated; + protected + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + procedure DoUpdateAniCalculations(const AAniCalculations: TScrollCalculations); override; + procedure Loaded; override; + /// Should be called when you change an instance or reference to instance of TBaseImageList or + /// ImageIndex property + /// See also FMX.ActnList.IGlyph + procedure ImagesChanged; virtual; + { Selection } + procedure ClearSelection; + procedure SelectAll; + procedure SetSelected(const Value: TTreeViewItem); virtual; + { Styles } + procedure ApplyStyle; override; + procedure FreeStyle; override; + { Tree View Events } + procedure DoChange; virtual; + procedure DoChangeCheck(const Item: TTreeViewItem); virtual; + { Focus } + procedure DoEnter; override; + procedure DoExit; override; + { Children structure } + procedure DoAddObject(const AObject: TFmxObject); override; + procedure DoInsertObject(Index: Integer; const AObject: TFmxObject); override; + procedure DoRemoveObject(const AObject: TFmxObject); override; + function IsAddToContent(const AObject: TFmxObject): Boolean; override; + procedure ContentAddObject(const AObject: TFmxObject); override; + procedure ContentInsertObject(Index: Integer; const AObject: TFmxObject); override; + procedure ContentRemoveObject(const AObject: TFmxObject); override; + procedure ContentBeforeRemoveObject(AObject: TFmxObject); override; + { Content Scrolling } + procedure ViewportPositionChange(const OldViewportPosition, NewViewportPosition: TPointF; + const ContentSizeChanged: Boolean); override; + function CreateScrollContent: TScrollContent; override; + function DoCalcContentBounds: TRectF; override; + function GetItemRect(const Item: TTreeViewItem): TRectF; + { Painting } + procedure DoContentPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); + function IsOpaque: Boolean; override; + { Mouse events } + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override; + procedure MouseMove(Shift: TShiftState; X, Y: Single); override; + procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override; + procedure MouseWheel(Shift: TShiftState; WheelDelta: Integer; var Handled: Boolean); override; + procedure MouseClick(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override; + { Keyboards events } + procedure KeyDown(var Key: Word; var KeyChar: System.WideChar; Shift: TShiftState); override; + procedure KeyUp(var Key: Word; var KeyChar: System.WideChar; Shift: TShiftState); override; + { Drag And Drop } + procedure DragOver(const Data: TDragObject; const Point: TPointF; var Operation: TDragOperation); override; + procedure DragDrop(const Data: TDragObject; const Point: TPointF); override; + procedure DragLeave; override; + function ObjectAtPoint(P: TPointF): IControl; override; + procedure ChangeOrder; override; + procedure ItemExpanded(const Item: TTreeViewItem); + property HoveredItem: TTreeViewItem read FHoveredItem write SetHoveredItem; + property FirstSelectedItem: TTreeViewItem read FFirstSelect; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Clear; + procedure ExpandAll; + procedure CollapseAll; + function ItemByText(const AText: string): TTreeViewItem; + function ItemByPoint(const X, Y: Single): TTreeViewItem; + function ItemByIndex(const Idx: Integer): TTreeViewItem; + function ItemByGlobalIndex(const Idx: Integer): TTreeViewItem; + property Count: Integer read GetCount; + property GlobalCount: Integer read GetGlobalCount; + property CountExpanded: Integer read FCountExpanded; + property Selected: TTreeViewItem read FSelected write SetSelected; + property Items[Index: Integer]: TTreeViewItem read GetTreeItem; + property AllowDrag: Boolean read FAllowDrag write SetAllowDrag; + property AlternatingRowBackground: Boolean read FAlternatingRowBackground write SetAlternatingRowBackground; + property ItemHeight: Single read FItemHeight write SetItemHeight; + /// The list of images. Can be nil. See also FMX.ActnList.IGlyph + property Images: TCustomImageList read GetImages write SetImages; + property MultiSelect: Boolean read FMultiSelect write FMultiSelect default False; + property ShowCheckboxes: Boolean read FShowCheckboxes write SetCheckboxesVisibility default False; + property Sorted: Boolean read FSorted write SetSorted default False; + property OnChange: TNotifyEvent read FOnChange write FOnChange; + property OnChangeCheck: TNotifyEvent read FOnChangeCheck write FOnChangeCheck; + property OnCompare: TOnCompareTreeViewItemEvent read FOnCompare write FOnCompare; + property OnDragChange: TOnTreeViewDragChange read FOnDragChange write FOnDragChange; + end; + + TTreeView = class(TCustomTreeView) + published + property StyleLookup; + property CanFocus default True; + property CanParentFocus; + property DisableFocusEffect default True; + property TabOrder; + property TabStop; + property AllowDrag default False; + property AlternatingRowBackground default False; + property Hint; + property ItemHeight; + property Images; + property MultiSelect default False; + property ShowCheckboxes default False; + property Sorted default False; + property ParentShowHint; + property ShowHint; + property OnCanFocus; + property OnChange; + property OnChangeCheck; + property OnCompare; + property OnDragChange; + property OnKeyDown; + property OnKeyUp; + end; + +implementation + +uses + System.Math, System.Math.Vectors, System.RTLConsts, System.SysUtils, FMX.Consts, FMX.Ani, FMX.Utils; + +type + TTreeViewItemContent = class(TContent) + private + FItem: TTreeViewItem; + protected + function GetFirstVisibleObjectIndex: Integer; override; + function GetLastVisibleObjectIndex: Integer; override; + function GetAbsoluteRect: TRectF; override; + function DoGetUpdateRect: TRectF; override; + procedure DoRealign; override; + procedure DoAddObject(const AObject: TFmxObject); override; + procedure DoInsertObject(Index: Integer; const AObject: TFmxObject); override; + procedure DoRemoveObject(const AObject: TFmxObject); override; + public + end; + +{ TTreeViewItemContent } + +procedure TTreeViewItemContent.DoAddObject(const AObject: TFmxObject); +begin + inherited DoAddObject(AObject); + if Parent is TTreeViewItem then + TTreeViewItem(Parent).ContentAddObject(AObject); +end; + +procedure TTreeViewItemContent.DoRemoveObject(const AObject: TFmxObject); +begin + inherited; + if Parent is TTreeViewItem then + TTreeViewItem(Parent).ContentRemoveObject(AObject); +end; + +procedure TTreeViewItemContent.DoInsertObject(Index: Integer; + const AObject: TFmxObject); +begin + inherited DoInsertObject(Index, AObject); + if Parent is TTreeViewItem then + TTreeViewItem(Parent).ContentInsertObject(Index, AObject); +end; + +procedure TTreeViewItemContent.DoRealign; +begin +end; + +function TTreeViewItemContent.GetAbsoluteRect: TRectF; +begin + if FItem <> nil then + Result := FItem.GetAbsoluteRect + else + Result := inherited; +end; + +function TTreeViewItemContent.DoGetUpdateRect: TRectF; +begin + if FItem <> nil then + Result := FItem.DoGetUpdateRect + else + Result := inherited; +end; + +function TTreeViewItemContent.GetFirstVisibleObjectIndex: Integer; +begin + Result := 0; +end; + +function TTreeViewItemContent.GetLastVisibleObjectIndex: Integer; +begin + if FItem.IsExpanded then + Result := ControlsCount + else + Result := 0; +end; + +{ TTreeViewItem } + +constructor TTreeViewItem.Create(AOwner: TComponent); +begin + inherited; + FImageLink := TGlyphImageLink.Create(Self); + AutoTranslate := True; + TextAlign := TTextAlign.Leading; + Size.SetSizeWithoutNotification(TSizeF.Create(Width, 0)); + FCustomHeight := False; + HitTest := False; + CanFocus := False; + FContent := TTreeViewItemContent.Create(Self); + FChildrenOffset := 0; + FCustomChildrenOffset := -1; + TTreeViewItemContent(FContent).FItem := Self; + FContent.Stored := False; + FContent.Parent := Self; + FContent.Locked := True; + FContent.HitTest := False; +end; + +procedure TTreeViewItem.ChangeOrder; +var + LTreeView : TCustomTreeView; +begin + inherited ChangeOrder; + LTreeView := TreeView; + if (LTreeView <> nil) and not LTreeView.IsUpdating then + begin + LTreeView.UpdateGlobalIndexes(True); + LTreeView.RealignContent; + end; +end; + +procedure TTreeViewItem.ContentAddObject(const AObject: TFmxObject); +var + LTreeView : TCustomTreeView; +begin + if not (AObject is TTreeViewItem) then + begin + if FNoItemsContent = nil then + begin + FNoItemsContent := TLayout.Create(nil); + FNoItemsContent.Parent := Self; + FNoItemsContent.SetBounds(0, 0, 0, 0); + FNoItemsContent.Stored := False; + FNoItemsContent.Locked := True; + FNoItemsContent.HitTest := False; + end; + FNoItemsContent.AddObject(AObject) + end + else + begin + LTreeView := TreeView; + if LTreeView <> nil then + begin + if [csLoading, csDestroying] * LTreeView.ComponentState = [] then + TTreeViewItem(AObject).SetImages(LTreeView.Images); + LTreeView.InvalidateGlobalList; + LTreeView.RealignContent; + end; + end; +end; + +type + TTreeViewItemTextSettings = class(TTextSettingsInfo.TCustomTextSettings) + public + constructor Create(const AOwner: TPersistent); override; + property WordWrap default False; + published + property Font; + property FontColor; + property HorzAlign; + end; + +{ TTreeViewItemTextSettings } + +constructor TTreeViewItemTextSettings.Create(const AOwner: TPersistent); +begin + inherited; + WordWrap := False; +end; + +function TTreeViewItem.GetTextSettingsClass: TTextSettingsInfo.TCustomTextSettingsClass; +begin + Result := TTreeViewItemTextSettings; +end; + +procedure TTreeViewItem.ContentInsertObject(const AIndex: Integer; + const AObject: TFmxObject); +begin + ContentAddObject(AObject); +end; + +procedure TTreeViewItem.ContentRemoveObject(const AObject: TFmxObject); +var + LTreeView: TCustomTreeView; +begin + if AObject is TTreeViewItem then + begin + // After removing child item, we need recalculate Visible Items Count + // and update Visible of 'Expand' button + RecountVisibleItems; + UpdateExpandedButtonVisibility; + + TTreeViewItem(AObject).Deselect; + LTreeView := TreeView; + if LTreeView <> nil then + begin + if [csLoading, csDestroying] * LTreeView.ComponentState = [] then + TTreeViewItem(AObject).SetImages(nil); + LTreeView.InvalidateGlobalList; + LTreeView.RealignContent; + end; + end; +end; + +procedure TTreeViewItem.RecountVisibleItems; +var + I: Integer; +begin + FVisibleCount := 0; + for I := 0 to Count - 1 do + if FContent.Controls[I].IsVisible then + Inc(FVisibleCount); +end; + +procedure TTreeViewItem.RequestRecount; +var + LTreeView: TCustomTreeView; +begin + LTreeView := TreeView; + if LTreeView <> nil then + begin + LTreeView.InvalidateGlobalList; + LTreeView.InvalidateContentSize; + end; +end; + +procedure TTreeViewItem.DragEnd; +var + LTreeView : TCustomTreeView; +begin + inherited; + DragLeave; + LTreeView := TreeView; + if (LTreeView <> nil) and (LTreeView.FDragItem <> nil) then + begin + LTreeView.FDragItem.RemoveFreeNotify(LTreeView); + LTreeView.FDragItem := nil; + end; +end; + +function TTreeViewItem.GetAbsoluteRect: TRectF; +var + I: Integer; +begin + Result := inherited GetAbsoluteRect; + if IsExpanded and (Count > 0) then + begin + for I := 0 to Count - 1 do + Result := UnionRect(Result, Items[I].AbsoluteRect); + end; +end; + +function TTreeViewItem.DoGetUpdateRect: TRectF; +var + I: Integer; +begin + Result := inherited DoGetUpdateRect; + if IsExpanded and (Count > 0) then + for I := 0 to Count - 1 do + Result := UnionRect(Result, Items[I].UpdateRect); +end; + +function TTreeViewItem.GetLevelOffset: Single; +var + Item: TTreeViewItem; + Offs: Single; + function NextLevel(var Item: TTreeViewItem): Boolean; + var + P: TFmxObject; + begin + Result := False; + P := Item.Parent; + if (P is TContent) then + P := P.Parent; + if P is TTreeViewItem then + begin + Result := True; + Item := TTreeViewItem(P); + end; + end; +begin + Result := 0; + Item := self; + while NextLevel(Item) do + begin + Offs := Item.ChildrenOffset; + Result := Result + Offs; + end; +end; + +function TTreeViewItem.GetCount: Integer; +begin + Result := FContent.ControlsCount; +end; + +procedure TTreeViewItem.DefineProperties(Filer: TFiler); +begin + inherited; + Filer.DefineProperty('HitTest', IgnoreBooleanValue, nil, False); // do not localize + Filer.DefineProperty('Width', IgnoreFloatValue, nil, False); // do not localize +end; + +procedure TTreeViewItem.Deselect; +begin + IsSelected := False; +end; + +destructor TTreeViewItem.Destroy; + procedure ClearRef(var Value: TTreeViewItem); + begin + if Value = Self then + Value := nil; + end; +var + LTreeView: TCustomTreeView; +begin + LTreeView := TreeView; + if LTreeView <> nil then + begin + ClearRef(LTreeView.FFirstSelect); + ClearRef(LTreeView.FDragItem); + ClearRef(LTreeView.FSelected); + if LTreeView.FGlobalList <> nil then + LTreeView.FGlobalList.Remove(Self); + end; + FImageLink.DisposeOf; + FImageLink := nil; + inherited; +end; + +procedure TTreeViewItem.DoAddObject(const AObject: TFmxObject); +begin + if AObject is TTreeViewItem then + begin + if FUpdating > TTreeViewItem(AObject).FUpdating then + TTreeViewItem(AObject).BeginUpdate; + FContent.AddObject(AObject); + RecountVisibleItems; + UpdateExpandedButtonVisibility; + if IsExpanded then + RequestRecount; + end + else + inherited; +end; + +procedure TTreeViewItem.DoInsertObject(Index: Integer; const AObject: TFmxObject); +begin + if AObject is TTreeViewItem then + begin + if FUpdating > TTreeViewItem(AObject).FUpdating then + TTreeViewItem(AObject).BeginUpdate; + FContent.InsertObject(Index, AObject); + RecountVisibleItems; + UpdateExpandedButtonVisibility; + if IsExpanded then + RequestRecount; + end + else + inherited; +end; + +procedure TTreeViewItem.DoRemoveObject(const AObject: TFmxObject); +begin + if (AObject is TTreeViewItem) and (TTreeViewItem(AObject).TreeView = TreeView) then + begin + TTreeViewItem(AObject).Parent := nil; + TTreeViewItem(AObject).Deselect; + RecountVisibleItems; + UpdateExpandedButtonVisibility; + if IsExpanded then + RequestRecount; + end + else + inherited; +end; + +function TTreeViewItem.GetItem(const AIndex: Integer): TFmxObject; +begin + Result := Items[AIndex]; +end; + +function TTreeViewItem.ItemByPoint(const X, Y: Single): TTreeViewItem; +var + I: Integer; + P, P1: TPointF; + LItem: TTreeViewItem; +begin + P := LocalToAbsolute(TPointF.Create(X, Y)); + for I := 0 to Count - 1 do + begin + LItem := ItemByIndex(I); + if not LItem.Visible then + Continue; + if LItem.PointInObject(P.X, P.Y) then + begin + Result := LItem; + Exit; + end + else if (LItem.Count > 0) and (LItem.IsExpanded) then + begin + P1 := LItem.AbsoluteToLocal(P); + Result := LItem.ItemByPoint(P1.X, P1.Y); + if Result <> nil then + Exit; + end; + end; + Result := nil; +end; + +function TTreeViewItem.IsPositionStored: Boolean; +begin + Result := False; +end; + +function TTreeViewItem.IsSizeStored: Boolean; +begin + Result := FCustomHeight; +end; + +function TTreeViewItem.ItemByIndex(const Idx: Integer): TTreeViewItem; +begin + if (Idx >= 0) and (Idx < Count) then + Result := TTreeViewItem(FContent.Controls[Idx]) + else + raise ERangeError.CreateFMT(sArgumentOutOfRange_Index, [Idx, Count]); +end; + +procedure TTreeViewItem.Paint; +var + R: TRectF; +begin + inherited Paint; + if (csDesigning in ComponentState) and not Locked and not FInPaintTo then + begin + R := LocalRect; + InflateRect(R, -0.5, -0.5); + Canvas.Stroke.Thickness := 1; + Canvas.Stroke.Dash := TStrokeDash.Dash; + Canvas.Stroke.Kind := TBrushKind.Solid; + Canvas.Stroke.Color := $A0909090; + Canvas.DrawRect(R, 0, 0, AllCorners, AbsoluteOpacity); + Canvas.Stroke.Dash := TStrokeDash.Solid; + end; +end; + +function TTreeViewItem.ParentItem: TTreeViewItem; +begin + TFMXObjectHelper.FindNearestParentOfClass(Self, Result); +end; + +function TTreeViewItem.EnterChildren(AObject: IControl): Boolean; +var + LTreeView : TCustomTreeView ; +begin + Result := inherited EnterChildren(AObject); + LTreeView := TreeView; + if LTreeView <> nil then + begin + LTreeView.Selected := Self; + Result := True; + end; +end; + +procedure TTreeViewItem.Collapse; +begin + IsExpanded := False; +end; + +procedure TTreeViewItem.CollapseAll; +var + i: Integer; + Item: TTreeViewItem; +begin + BeginUpdate; + try + Collapse; + for i := Count - 1 downto 0 do + begin + Item := ItemByIndex(i); + if Item <> nil then + Item.CollapseAll; + end; + finally + EndUpdate; + end; +end; + +procedure TTreeViewItem.Expand; +begin + IsExpanded := True; +end; + +procedure TTreeViewItem.ExpandAll; +var + i: Integer; + Item: TTreeViewItem; +begin + BeginUpdate; + try + Expand; + for i := Count - 1 downto 0 do + begin + Item := ItemByIndex(i); + if Item <> nil then + Item.ExpandAll; + end; + finally + EndUpdate; + end; +end; + +function TTreeViewItem.Level: Integer; +var + P: TFmxObject; +begin + Result := 0; + P := Parent; + while (P <> nil) and not (P is TCustomTreeView) do + begin + Result := Result + 1; + P := P.Parent; + if (P is TContent) then + P := P.Parent; + end; +end; + +procedure TTreeViewItem.OnExpandButtonStyleLookup(Sender: TObject); +begin + UpdateExpandedButtonVisibility; +end; + +function TTreeViewItem.TreeView: TCustomTreeView; +begin + TFMXObjectHelper.FindNearestParentOfClass(Self, Result); +end; + +procedure TTreeViewItem.FreeStyle; +begin + inherited; + if FButton <> nil then + begin + FButton.OnClick := nil; + FButton.OnApplyStyleLookup := nil; + FButton.Visible := FOldButtonVisible; + FButton := nil; + end; + FExpander := nil; + if FCheck <> nil then + begin + FCheck.OnClick := nil; + FCheck.OnChange := nil; + FCheck.Visible := FOldCheckVisible; + FCheck.IsChecked := FOldChecked; + FCheck := nil; + end; + if FGlyph <> nil then + begin + FGlyph.BeginUpdate; + try + FGlyph.ImageIndex := -1; + FGlyph.Images := nil; + finally + FGlyph.EndUpdate; + end; + FGlyph := nil; + end; +end; + +procedure TTreeViewItem.UpdateChildrenOffset; +begin + if FCustomChildrenOffset >= 0 then + FChildrenOffset := FCustomChildrenOffset + else if FExpander <> nil then + FChildrenOffset := FExpander.Width + else if FCheck <> nil then + FChildrenOffset := FCheck.Width + else if FButton <> nil then + FChildrenOffset := FButton.Width + else + FChildrenOffset := DefaultHeight; +end; + +procedure TTreeViewItem.ApplyStyle; +var + LTreeView: TCustomTreeView; + LHeight: Single; + LCustomHeight: Boolean; +begin + LCustomHeight := FCustomHeight and (Height > 0); + LHeight := Height; + try + inherited; + FindStyleResource('expander', FExpander); + if FindStyleResource('button', FButton) then + begin + FOldButtonVisible := FButton.Visible; + FButton.OnClick := DoButtonClick; + FButton.OnApplyStyleLookup := OnExpandButtonStyleLookup; + UpdateExpandedButtonVisibility; + end; + if FindStyleResource('check', FCheck) then + begin + FOldCheckVisible := FCheck.Visible; + FOldChecked := FCheck.IsChecked; + FCheck.IsChecked := IsChecked; + FCheck.OnChange := DoCheckClick; + LTreeView := TreeView ; + if LTreeView <> nil then + FCheck.Visible := LTreeView.ShowCheckboxes; + end; + if FindStyleResource('glyphstyle', FGlyph) then + begin + FGlyph.Images := TCustomImageList(FImageLink.Images); + FGlyph.ImageIndex := FImageLink.ImageIndex; + FOldGlyphVisible := FGlyph.Visible; + end + else + FOldGlyphVisible := False; + if IsSelected then + begin + StartTriggerAnimation(Self, 'IsSelected'); + ApplyTriggerEffect(Self, 'IsSelected'); + end; + Align := TAlignLayout.None; + UpdateChildrenOffset; + finally + if LCustomHeight then + Height := LHeight; + FCustomHeight := LCustomHeight; + end; +end; + +function TTreeViewItem.CalcMinSize: TSizeF; +const + MinText = '1'; + + procedure UpdateWidth(const Control: TControl; const VisibleOnly: Boolean); + var + R: TRectF; + begin + if (Control <> nil) and (not VisibleOnly or Control.Visible) then + begin + R := Control.BoundsRect; + R := Control.Margins.MarginRect(R); + Result.cx := Result.cx + R.Width; + end; + end; + + function FirstWord(const Text: string; const NeedEllipsis: Boolean): string; + var + I: Integer; + begin + I := Text.IndexOf(' '); + if I >= 0 then + begin + Result := Text.Substring(0, I); + if NeedEllipsis then + Result := Result + SChrHorizontalEllipsis; + end + else + Result := Text; + end; + +var + R: TRectF; + LLayout: TTextLayout; + LTree: TCustomTreeView; + TextSettings: ITextSettings; +begin + Result := TSizeF.Create(0, 0); + LTree := TreeView; + if LTree = nil then + Exit; + if Visible then + begin + if (TextObject <> nil) and TextObject.GetInterface(ITextSettings, TextSettings) then + begin + LLayout := LTree.FTextLayout; + if LLayout <> nil then + begin + LLayout.BeginUpdate; + try + LLayout.WordWrap := False; + LLayout.HorizontalAlign := TTextAlign.Leading; + LLayout.VerticalAlign := TTextAlign.Leading; + LLayout.Color := TAlphaColorRec.Black; + LLayout.Font := TextSettings.ResultingTextSettings.Font; + LLayout.Opacity := 1; + LLayout.Trimming := TTextTrimming.None; + if Text.IsEmpty then + LLayout.Text := MinText + else + case TextSettings.ResultingTextSettings.Trimming of + TTextTrimming.None: + begin + if TextSettings.ResultingTextSettings.WordWrap then + LLayout.Text := FirstWord(Text, False) + else + LLayout.Text := Text; + end; + TTextTrimming.Character: + LLayout.Text := MinText + SChrHorizontalEllipsis; + TTextTrimming.Word: + LLayout.Text := FirstWord(Text, True); + end; + finally + LLayout.EndUpdate; + end; + R := LLayout.TextRect; + Result.Width := Ceil(R.Width) + 2; + Result.Height := Ceil(R.Height) + 4; + UpdateWidth(FButton, False); + UpdateWidth(FCheck, True); + UpdateWidth(FGlyph, True); + Result.cx := Result.cx + Padding.Left + Padding.Right; + Result.cy := Result.cy + Padding.Top + Padding.Bottom; + end; + end; + end; +end; + +procedure TTreeViewItem.Inflate; +begin + InvalidateTextSize; + inherited; + DisableDisappear := True; + try + ApplyStyleLookup; + finally + DisableDisappear := False; + end; + CalcMinSize; +end; + +procedure TTreeViewItem.InvalidateTextSize; +begin + FMinItemSize := TSizeF.Create(0, 0); +end; + +function TTreeViewItem.GetMinItemSize: TSizeF; +begin + if FMinItemSize.IsZero then + FMinItemSize := CalcMinSize; + Result := FMinItemSize; +end; + +procedure TTreeViewItem.DoChanged; +begin + inherited; + if not FCustomHeight then + InvalidateTextSize; +end; + +procedure TTreeViewItem.DoCheckClick(Sender: TObject); +var + LTreeView : TCustomTreeView; +begin + if FCheck <> nil then + FIsChecked := FCheck.IsChecked; + LTreeView := TreeView; + if LTreeView <> nil then + begin + LTreeView.SetFocus; + LTreeView.DoChangeCheck(Self); + end; +end; + +procedure TTreeViewItem.UpdateCheckBoxVisibility; +var + i, j: Integer; + LTreeView: TCustomTreeView; +begin + LTreeView := TreeView; + if (LTreeView <> nil) and (FCheck <> nil) and + (FCheck.Visible <> LTreeView.ShowCheckboxes) then + begin + FCheck.Visible := LTreeView.ShowCheckboxes; + InvalidateTextSize; + end; + if ControlsCount > 0 then + for i := 0 to ControlsCount - 1 do + if Controls[i] is TTreeViewItem then + TTreeViewItem(Controls[i]).UpdateCheckBoxVisibility + else if Controls[i] is TTreeViewItemContent then + for j := 0 to Controls[i].ControlsCount - 1 do + if Controls[i].Controls[j] is TTreeViewItem then + TTreeViewItem(Controls[i].Controls[j]).UpdateCheckBoxVisibility +end; + +procedure TTreeViewItem.UpdateExpandedButtonVisibility; +begin + if (FButton <> nil) and not (csLoading in ComponentState) then + begin + FButton.Visible := VisibleCount > 0; + if FButton.Visible then + TAnimator.StartTriggerAnimation(FButton, Self, 'IsExpanded'); + end; +end; + +procedure TTreeViewItem.Select; +begin + IsSelected := True; +end; + +function TTreeViewItem.IsCustomChildrenOffsetStored: Boolean; +begin + Result := FCustomChildrenOffset >= 0; +end; + +procedure TTreeViewItem.SetCustomChildrenOffset(const Value: Single); +var + Parent: TTreeViewItem; +begin + if not SameValue(FCustomChildrenOffset, Value, TEpsilon.FontSize) then + begin + FCustomChildrenOffset := Value; + UpdateChildrenOffset; + if not IsUpdating and IsExpanded and (TreeView <> nil) then + begin + Parent := ParentItem; + while Parent <> nil do + if Parent.IsExpanded then + Parent := Parent.ParentItem + else + Exit; + TreeView.RealignContent; + TreeView.UpdateSelection; + end; + end; +end; + +procedure TTreeViewItem.SetHeight(const Value: Single); +var + ItemSize: TSizeF; +begin + if not SameValue(Value, Height) then + begin + if (not (csLoading in ComponentState)) then + begin + if Value <= 0 then + FCustomHeight := False + else + begin + ItemSize := MinItemSize; + if ItemSize.cy > 0 then + FCustomHeight := not SameValue(Value, ItemSize.cy) + else + FCustomHeight := True; + end; + end + else + begin + FCustomHeight := Value >= 1; + end; + end; + inherited; +end; + +procedure TTreeViewItem.SetIsChecked(const Value: Boolean); +var + LTreeView: TCustomTreeView; +begin + if FIsChecked <> Value then + begin + FIsChecked := Value; + if FCheck <> nil then + FCheck.IsChecked := FIsChecked; + LTreeView := TreeView; + if LTreeView <> nil then + LTreeView.DoChangeCheck(Self); + end; +end; + +procedure TTreeViewItem.SetIsSelected(const Value: Boolean); +var + LTreeView : TCustomTreeView; +begin + if FIsSelected <> Value then + begin + FIsSelected := Value; + StartTriggerAnimation(Self, 'IsSelected'); + LTreeView := TreeView; + if LTreeView <> nil then + begin + if not LTreeView.MultiSelect then + if Value then + LTreeView.Selected := Self + else + LTreeView.Selected := nil; + LTreeView.UpdateSelection; + end; + end; +end; + +procedure TTreeViewItem.SetText(const Value: string); +var + LTreeView: TCustomTreeView; +begin + if Value <> Text then + begin + inherited; + InvalidateTextSize; + LTreeView := TreeView; + if LTreeView <> nil then + LTreeView.ItemSizeMightHaveChanged(Self); + end; +end; + +procedure TTreeViewItem.SetVisible(const Value: Boolean); +var + LChanged: Boolean; + LParentItem: TTreeViewItem; + LTreeView: TCustomTreeView; +begin + LChanged := inherited Visible <> Value; + inherited; + if LChanged then + begin + LParentItem := ParentItem; + if LParentItem <> nil then + ParentItem.RecountVisibleItems; + LTreeView := TreeView; + if LTreeView <> nil then + LTreeView.RealignContent; + end; +end; + +procedure TTreeViewItem.Sort(Compare: TFmxObjectSortCompare); +begin + FContent.Sort(Compare); +end; + +procedure TTreeViewItem.DoButtonClick(Sender: TObject); +begin + IsExpanded := not IsExpanded; +end; + +procedure TTreeViewItem.SetIsExpanded(const Value: Boolean); +var + LTreeView: TCustomTreeView; +begin + if FIsExpanded <> Value then + begin + FIsExpanded := Value; + UpdateExpandedButtonVisibility; + InvalidateTextSize; + LTreeView := TreeView; + if LTreeView <> nil then + LTreeView.ItemExpanded(Self); + end; +end; + +function TTreeViewItem.GetImages: TCustomImageList; +begin + if FImageLink <> nil then + Result := TCustomImageList(FImageLink.Images) + else + Result := FImages; +end; + +procedure TTreeViewItem.SetImages(const Value: TCustomImageList); +begin + if FImageLink <> nil then + FImageLink.Images := Value + else + FImages := Value; +end; + +function TTreeViewItem.GetImageIndex: TImageIndex; +begin + if FImageLink <> nil then + Result := FImageLink.ImageIndex + else + Result := -1; +end; + +procedure TTreeViewItem.SetImageIndex(const Value: TImageIndex); +begin + if FImageLink <> nil then + FImageLink.ImageIndex := Value; +end; + +function TTreeViewItem.GetImageList: TBaseImageList; +begin + Result := GetImages; +end; + +procedure TTreeViewItem.SetImageList(const Value: TBaseImageList); +begin + // none. +end; + +function TTreeViewItem.ImageIndexStored: Boolean; +begin + Result := ActionClient or (ImageIndex <> -1); +end; + +procedure TTreeViewItem.ImagesChanged; + + procedure UpdateImages; + var + I: Integer; + begin + if FImages <> FImageLink.Images then + begin + FImages := TCustomImageList(FImageLink.Images); + if [csLoading, csDestroying] * ComponentState = [] then + for I := 0 to Count - 1 do + Items[I].SetImages(FImages); + end; + end; + + procedure UpdateTreeView; + var + LTreeView: TCustomTreeView; + begin + if [csLoading, csDestroying] * ComponentState = [] then + begin + LTreeView := TreeView; + if (LTreeView <> nil) and not LTreeView.IsUpdating then + begin + LTreeView.BeginUpdate; + try + UpdateImages; + InvalidateTextSize; + LTreeView.ItemSizeMightHaveChanged(Self); + finally + LTreeView.EndUpdate; + end; + end + else + UpdateImages; + end; + end; + +var + NewGlyphVisible: Boolean; +begin + if FGlyph <> nil then + begin + FGlyph.BeginUpdate; + try + FGlyph.Images := TCustomImageList(FImageLink.Images); + FGlyph.ImageIndex := FImageLink.ImageIndex; + finally + FGlyph.EndUpdate; + end; + if ([csLoading, csDestroying] * ComponentState = []) then + FGlyph.Repaint; + end; + + NewGlyphVisible := (FGlyph <> nil) and (FGlyph.Visible); + if FOldGlyphVisible <> NewGlyphVisible then + begin + FOldGlyphVisible := NewGlyphVisible; + UpdateTreeView; + end + else + UpdateImages; +end; + +{ TTreeViewContent } + +type + + TTreeViewContent = class(TScrollContent) + private + [Weak] FTreeView: TCustomTreeView; + protected + function GetFirstVisibleObjectIndex: Integer; override; + function GetLastVisibleObjectIndex: Integer; override; + procedure DoRealign; override; + public + end; + +function TTreeViewContent.GetFirstVisibleObjectIndex: Integer; +var + Item: TTreeViewItem; +begin + if FTreeView.FGlobalList.Count > 0 then + begin + Item := FTreeView.FGlobalList[FTreeView.FFirstVisibleItem]; + while Item.ParentItem <> nil do + Item := Item.ParentItem; + Result := Item.Index; + end + else + Result := 0; +end; + +function TTreeViewContent.GetLastVisibleObjectIndex: Integer; +var + Item: TTreeViewItem; +begin + if (FTreeView.FGlobalList.Count > 0) and (FTreeView.FLastVisibleItem < FTreeView.FGlobalList.Count) then + begin + Item := FTreeView.FGlobalList[FTreeView.FLastVisibleItem]; + while Item.ParentItem <> nil do + Item := Item.ParentItem; + Result := Item.Index + 1; + if Result > ControlsCount then + Result := ControlsCount; + end + else + Result := ControlsCount; +end; + +procedure TTreeViewContent.DoRealign; +begin +end; + +{ TTreeView } + +constructor TCustomTreeView.Create(AOwner: TComponent); +begin + inherited; + FImageLink := TGlyphImageLink.Create(Self); + FGlobalList := TList.Create; + FGlobalList.Capacity := 100; + FOddFill := TBrush.Create(TBrushKind.Solid, $20000000); + DisableFocusEffect := True; + CanFocus := True; + AutoCapture := True; + Width := 100; + Height := 100; + FItemHeight := 0; + SetAcceptsControls(False); + FToInflate := TList.Create; + FInflater := TContentInflater.Create(Self); +end; + +function TCustomTreeView.CreateScrollContent: TScrollContent; +begin + Result := TTreeViewContent.Create(Self); + TTreeViewContent(Result).FTreeView := Self; +end; + +destructor TCustomTreeView.Destroy; +begin + FreeAndNil(FSelections); + FreeAndNil(FGlobalList); + FreeAndNil(FOddFill); + FInflater.DisposeOf; + FreeAndNil(FToInflate); + FImageLink.DisposeOf; + inherited; +end; + +procedure TCustomTreeView.ApplyStyle; +var + T: TFmxObject; + ContentLayout: TControl; +begin + inherited ApplyStyle; + if FindStyleResource('content', ContentLayout) then + ContentLayout.OnPainting := DoContentPaint; + if FindStyleResource('selection', FSelection) then + FSelection.Visible := False; + if FindStyleResource('focusedselection', FFocusedSelection) then + FFocusedSelection.Visible := False; + T := FindStyleResource('AlternatingRowBackground'); + if T is TBrushObject then + FOddFill.Assign(TBrushObject(T).Brush); + if T is TControl then + TControl(T).Visible := False; + UpdateSelection; +end; + +procedure TCustomTreeView.FreeStyle; +begin + inherited FreeStyle; + FSelection := nil; + FFocusedSelection := nil; + if FSelections <> nil then + FSelections.Clear; +end; + +procedure TCustomTreeView.UpdateGlobalIndexes(const Force: Boolean); +var + GlobalIdx: Integer; + + procedure RecountItem(const AItem: TTreeViewItem); + var + I: Integer; + begin + if AItem <> nil then + begin + AItem.FGlobalIndex := GlobalIdx; + Inc(GlobalIdx); + FGlobalList.Add(AItem); + if AItem.IsExpanded then + for I := 0 to AItem.Count - 1 do + RecountItem(AItem.ItemByIndex(I)); + end; + end; + +var + I: Integer; +begin + if Force then + FGlobalList.Clear; + if (FGlobalList.Count = 0) and (Count > 0) then + begin + GlobalIdx := 0; + for I := 0 to Count - 1 do + RecountItem(ItemByIndex(I)); + end; +end; + +function CompareTreeItem(Item1, Item2: TFmxObject): Integer; +var + LItem1TV: TCustomTreeView; +begin + if (Item1 is TTreeViewItem) and (Item2 is TTreeViewItem) then + begin + LItem1TV := TTreeViewItem(Item1).TreeView; + if (LItem1TV <> nil) and Assigned(LItem1TV.OnCompare) then + Result := LItem1TV.OnCompare(TTreeViewItem(Item1), + TTreeViewItem(Item2)) + else + Result := CompareText(TTreeViewItem(Item1).Text, + TTreeViewItem(Item2).Text); + end + else + Result := 0; +end; + +procedure TCustomTreeView.SortItems; +begin + if not FSorted then + Exit; + Content.Sort(CompareTreeItem); + InvalidateGlobalList; + UpdateGlobalIndexes; + UpdateVisibleItems; +end; + +function TCustomTreeView.GetItemRect(const Item: TTreeViewItem): TRectF; +begin + if Item <> nil then + begin + Result := TRectF.Create(0, 0, Item.Width, Item.Height); + Result.Offset(Content.AbsoluteToLocal(Item.LocaltoAbsolute(TPointF.Zero))); + end + else + Result := TRectF.Empty; +end; + +function TCustomTreeView.GetInflatableItems: TList; +begin + Result := FToInflate; +end; + +function TCustomTreeView.GetItem(const AIndex: Integer): TFmxObject; +begin + Result := Items[AIndex]; +end; + +procedure TCustomTreeView.UpdateSelection; +var + I: Integer; + P: TPointF; + R: TRectF; + SelRects: array of TRectF; + Clone: TControl; + Item: TTreeViewItem; +begin + if FSelection = nil then + Exit; + // calc rects + SetLength(SelRects, 0); + if GlobalCount > 0 then + for I := FFirstVisibleItem to FLastVisibleItem do + begin + Item := ItemByGlobalIndex(I); + if Item.IsSelected and Item.Visible then + begin + P := Item.LocaltoAbsolute(TPointF.Zero); + if (FSelection.Parent <> nil) and (FSelection.Parent is TControl) then + P := FSelection.ParentControl.AbsoluteToLocal(P); + R := RectF(P.X, P.Y, P.X + Item.Width, + P.Y + Item.Height); + if (Length(SelRects) > 0) and (I > 0) and ItemByGlobalIndex(I - 1).IsSelected then + SelRects[High(SelRects)] := UnionRect(R, SelRects[High(SelRects)]) + else + begin + SetLength(SelRects, Length(SelRects) + 1); + SelRects[High(SelRects)] := R; + end; + end; + end; + // Create selection list + if FSelections = nil then + FSelections := TControlList.Create; + for I := 0 to FSelections.Count - 1 do + FSelections[I].DisposeOf; + FSelections.Clear; + // create selections + for I := 0 to Length(SelRects) - 1 do + begin + if Self.IsFocused and (FFocusedSelection <> nil) then + Clone := TControl(FFocusedSelection.Clone(Self)) + else + Clone := TControl(FSelection.Clone(Self)); + Clone.StyleName := string.Empty; + FSelections.Add(Clone); + Clone.Parent := FSelection.Parent; + end; + // hide if not needed + if Length(SelRects) < FSelections.Count then + for I := Length(SelRects) to FSelections.Count - 1 do + FSelections[I].Visible := False; + // align selections + for I := 0 to High(SelRects) do + begin + FSelections[I].Visible := True; + R := SelRects[I]; + FSelections[I].SetBounds(R.Left, R.Top, R.Right - R.Left, R.Bottom - R.Top); + end; +end; + +procedure TCustomTreeView.UpdateVisibleItems; +var + First, Last, Mid: Integer; + R: TRectF; +begin + First := 0; + Last := GlobalCount - 1; + while First < Last do + begin + Mid := First + (Last - First) div 2; + R := FGlobalList[Mid].AbsoluteRect; + R := AbsoluteToLocal(R); + if R.Bottom < 0 then + First := Mid + 1 + else if R.Top > Height then + Last := Mid + else + Break; + end; + FFirstVisibleItem := First; + FLastVisibleItem := Last; + TTreeViewContent(Content).RecalcUpdateRect; + if FNoItemsContent <> nil then + FNoItemsContent.SetBounds(Content.Position.X, Content.Position.Y, Content.Width, Content.Height); +end; + +procedure TCustomTreeView.ItemSizeMightHaveChanged(const AItem: TTreeViewItem); +begin + if (ItemHeight = 0) and not AItem.FCustomHeight then + RealignContent; +end; + +function TCustomTreeView.DoCalcContentBounds: TRectF; +var + FirstItemHeight: Single; + + function UpdateSize(const AItem: TTreeViewItem; const CurY: Single; const ContentWidth: Single; + var BottomRight: TPointF): Single; + var + I: Integer; + OffsetX: Single; + ItemSize: TSizeF; + TopLeft: TPointF; + MinWidth: Single; + begin + Result := CurY; + OffsetX := AItem.GetLevelOffset; + TopLeft := Content.ConvertLocalPointTo(AItem.ParentControl, TPointF.Create(OffsetX + AItem.Margins.Left, CurY + AItem.Margins.Top)); + + if AItem.IsVisible or AItem.ShowInDesigner then + begin + AItem.UpdateExpandedButtonVisibility; + MinWidth := ContentWidth - OffsetX - AItem.Margins.Left - AItem.Margins.Right; + + ItemSize := AItem.MinItemSize; + if FItemHeight > 0 then + ItemSize.cy := FItemHeight + else if AItem.FCustomHeight then + ItemSize.cy := AItem.Height + else if ItemSize.cy <= 0 then + begin + if SameValue(FirstItemHeight, 0, TEpsilon.Position) then + begin + AItem.Inflate; + if AItem.MinItemSize.Height > 0 then + FirstItemHeight := AItem.MinItemSize.Height + else + FirstItemHeight := TTreeViewItem.DefaultHeight; + end; + ItemSize.cy := FirstItemHeight; + end; + + if ItemSize.Width <= 0 then + ItemSize.cx := MinWidth + else + ItemSize.cx := Max(ItemSize.cx, MinWidth); + + Result := CurY + ItemSize.cy + AItem.Margins.Top + AItem.Margins.Bottom; + BottomRight.X := Max(BottomRight.X, OffsetX + ItemSize.cx + AItem.Margins.Left + AItem.Margins.Right); + BottomRight.Y := Max(BottomRight.Y, Result); + AItem.SetBounds(TopLeft.X, TopLeft.Y, AItem.Width, ItemSize.cy); + + if (AItem.Count > 0) and AItem.IsExpanded then + for I := 0 to AItem.Count - 1 do + Result := UpdateSize(AItem.ItemByIndex(I), Result, ContentWidth, BottomRight); + end + else + AItem.SetBounds(TopLeft.X, TopLeft.Y, AItem.Width, 0); + end; + + procedure AdjustWidth(const AItem: TTreeViewItem; const BottomRight: TPointF); + var + I: Integer; + P: TPointF; + begin + if AItem.IsVisible or AItem.ShowInDesigner then + begin + P := Content.LocalToAbsolute(BottomRight); + P := AItem.ParentControl.AbsoluteToLocal(Content.LocalToAbsolute(BottomRight)); + AItem.SetWidth(P.X - AItem.Position.X); + if AItem.IsExpanded then + for I := 0 to AItem.Count - 1 do + AdjustWidth(AItem.ItemByIndex(I), BottomRight); + end; + end; + +var + I: Integer; + CurY: Single; + LLocalRect: TRectF; +begin + FirstItemHeight := 0; + UpdateGlobalIndexes; + if (not IsUpdating) and (ContentLayout <> nil) then + begin + LLocalRect := ContentLayout.LocalRect; + Result := LLocalRect; + if Result.Bottom = Result.Top then + Result.Bottom := Result.Top + 1; + { content } + FCountExpanded := 0; + if Content <> nil then + begin + { Sort if need } + SortItems; + { align } + CurY := 0; + FTextLayout := TTextLayoutManager.DefaultTextLayout.Create; + try + for I := 0 to Count - 1 do + CurY := UpdateSize(ItemByIndex(I), CurY, LLocalRect.Width, Result.BottomRight); + finally + FreeAndNil(FTextLayout); + end; + for I := 0 to Count - 1 do + AdjustWidth(ItemByIndex(I), Result.BottomRight); + end; + UpdateVisibleItems; + end; +end; + +procedure TCustomTreeView.ViewportPositionChange(const OldViewportPosition, NewViewportPosition: TPointF; + const ContentSizeChanged: Boolean); +begin + inherited; + UpdateVisibleItems; + UpdateSelection; +end; + +function TCustomTreeView.ItemByIndex(const Idx: Integer): TTreeViewItem; +begin + if (Idx >= 0) and (Idx < Count) then + begin + Assert(Content.Controls[Idx] is TTreeViewItem); + Result := TTreeViewItem(Content.Controls[Idx]); + end + else + raise ERangeError.CreateFMT(sArgumentOutOfRange_Index, [Idx, Count]); +end; + +function TCustomTreeView.ItemByGlobalIndex(const Idx: Integer): TTreeViewItem; +begin + Result := FGlobalList[Idx]; +end; + +function TCustomTreeView.ObjectAtPoint(P: TPointF): IControl; +var + Local, Abs: TPointF; + Inner: IControl; + function CheckScrollBar(ScrollBar: TScrollBar): Boolean; + var + R: TRectF; + begin + Result := (ScrollBar <> nil) and + (ScrollBar.Visible) and + (ScrollBar.Enabled) and + (ScrollBar.HitTest); + if Result then + begin + R := ScrollBar.AbsoluteRect; + Result := R.Contains(Abs); + end; + end; +begin + Local := ScreenToLocal(P); + if LocalRect.Contains(Local) then + begin + Abs := LocalToAbsolute(Local); + if CheckScrollBar(VScrollBar) then + Result := IControl(VScrollBar).ObjectAtPoint(P) + else if CheckScrollBar(HScrollBar) then + Result := IControl(HScrollBar).ObjectAtPoint(P) + else + begin + if not Supports(ItemByPoint(Local.X, Local.Y), IControl, Result) then + Result := inherited ObjectAtPoint(P) + else + begin + Inner := Result.ObjectAtPoint(P); + if Inner <> nil then + Result := Inner + else + if CheckHitTest(HitTest) then + Result := Self + else + Result := inherited ObjectAtPoint(P); + end; + end; + end + else + Result := nil; +end; + +function TCustomTreeView.ItemByPoint(const X, Y: Single): TTreeViewItem; +var + I: Integer; + P: TPointF; + Item: TTreeViewItem; + + function PointInItem(const Itm: TTreeViewItem; const Pt: TPointF): Boolean; + var + ItemPt: TPointF; + begin + ItemPt := Item.AbsoluteToLocal(Pt); + Result := Content.PointInObject(Pt.X, Pt.Y) + and (ItemPt.Y >= (0 - TouchTargetExpansion.Top)) and (ItemPt.Y <= (Itm.Height + TouchTargetExpansion.Bottom)); + end; + +begin + P := LocaltoAbsolute(PointF(X, Y)); + if GlobalCount > 0 then + for I := FFirstVisibleItem to FLastVisibleItem do + begin + Item := FGlobalList[I]; + if not Item.Visible then + Continue; + if not IntersectRect(Item.UpdateRect, UpdateRect) then + Continue; + if PointInItem(Item, P) then + Exit(Item); + end; + Result := nil; +end; + +function TCustomTreeView.ItemByText(const AText: string): TTreeViewItem; +var + Item: TTreeViewItem; + I: Integer; +begin + Result := nil; + for I := 0 to GlobalCount - 1 do + begin + Item := ItemByGlobalIndex(I); + if CompareText(AText, Item.Text) = 0 then + Exit(Item); + end; +end; + +procedure TCustomTreeView.KeyDown(var Key: Word; var KeyChar: System.WideChar; Shift: TShiftState); + + procedure SelectUpperItem; + var + I: Integer; + begin + if Selected.GlobalIndex > 0 then + begin + I := Selected.GlobalIndex - 1; + while (I >= 0) and (ItemByGlobalIndex(I).GlobalIndex > 0) and (not ItemByGlobalIndex(I).IsVisible) do + Dec(I); + if (I >= 0) and ItemByGlobalIndex(I).IsVisible then + Selected := ItemByGlobalIndex(I); + end; + end; + + procedure SelectLowerItem; + var + I: Integer; + begin + if Selected.GlobalIndex < GlobalCount - 1 then + begin + I := Selected.GlobalIndex + 1; + while (I < GlobalCount) and (ItemByGlobalIndex(I).GlobalIndex < Pred(GlobalCount)) and (not ItemByGlobalIndex(I).IsVisible) do + Inc(I); + if (I < GlobalCount) and ItemByGlobalIndex(I).IsVisible then + Selected := ItemByGlobalIndex(I); + end; + end; + +var + LSelParentItem : TTreeViewItem; +begin + inherited KeyDown(Key, KeyChar, Shift); + if (Count > 0) and (Selected <> nil) then + begin + case Key of + vkAdd: + Selected.Expand; + vkSubtract: + Selected.Collapse; + vkHome: + begin + Selected := ItemByGlobalIndex(0); + if not Selected.Visible then + SelectLowerItem; + end; + vkEnd: + begin + Selected := ItemByGlobalIndex(GlobalCount - 1); + if not Selected.Visible then + SelectUpperItem; + end; + vkUp: + SelectUpperItem; + vkDown: + SelectLowerItem; + vkLeft: + if Selected.IsExpanded then + Selected.Collapse + else + begin + LSelParentItem := Selected.ParentItem; + if LSelParentItem <> nil then + begin + Selected := LSelParentItem; + if not Selected.IsVisible then + SelectUpperItem; + end; + end; + vkRight: + if not Selected.IsExpanded then + Selected.Expand + else + if Selected.FContent.ControlsCount > 0 then + SelectLowerItem; + else + Exit; + end; + Key := 0; + end; +end; + +procedure TCustomTreeView.KeyUp(var Key: Word; var KeyChar: System.WideChar; Shift: TShiftState); +begin + inherited; +end; + +function TCustomTreeView.LocalPointToHoveredItemLocalPoint(const AX, AY: Single): TPointF; +begin + if HoveredItem <> nil then + begin + Result := Self.LocalToScreen(PointF(AX, AY)); + Result := HoveredItem.ScreenToLocal(Result); + end; +end; + +procedure TCustomTreeView.DragOver(const Data: TDragObject; const Point: TPointF; + var Operation: TDragOperation); +var + Obj: TTreeViewItem; +begin + inherited ; + Obj := ItemByPoint(Point.X, Point.Y); + if Obj <> FDragItem then + begin + if FDragItem <> nil then + begin + FDragItem.DragLeave; + FDragItem.RemoveFreeNotify(Self); + end; + FDragItem := Obj; + if FDragItem <> nil then + begin + inherited DragLeave; + FDragItem.AddFreeNotify(Self); + FDragItem.DragEnter(Data, ConvertLocalPointTo(FDragItem, Point)); + + Operation := TDragOperation.Move; + end + else + begin + DragEnter(Data, Point); + Operation := TDragOperation.None; + end; + end + else + Operation := TDragOperation.Move; + + if (Data.Source is TTreeViewItem) and (TTreeViewItem(Data.Source) = FDragItem) then + Operation := TDragOperation.None; +end; + +procedure TCustomTreeView.DragDrop(const Data: TDragObject; const Point: TPointF); +var + Allow: Boolean; + WasSelected: Boolean; + SourceItem, DestItem: TTreeViewItem; +begin + if FDragItem <> nil then + begin + FDragItem.DragLeave; + FDragItem.RemoveFreeNotify(Self); + FDragItem := nil; + end; + DestItem := ItemByPoint(Point.X, Point.Y); + if (Data.Source is TTreeViewItem) and IsChild(TTreeViewItem(Data.Source)) then + begin + SourceItem := TTreeViewItem(Data.Source); + Allow := True; + if Assigned(OnDragChange) then + OnDragChange(SourceItem, DestItem, Allow); + if Allow and not SourceItem.IsChild(DestItem) then + begin + WasSelected := SourceItem.FIsSelected; + if DestItem <> nil then + begin + SourceItem.Parent := DestItem; + DestItem.Expand; + end + else + begin + SourceItem.Parent := Self; + SourceItem.Expand; + end; + SourceItem.IsSelected := WasSelected; + end; + end + else if DestItem <> nil then + DestItem.DragDrop(Data, ConvertLocalPointTo(DestItem, Point)) + else + inherited DragDrop(Data, Point); +end; + +procedure TCustomTreeView.DragLeave; +begin + inherited; + if FDragItem <> nil then + begin + FDragItem.DragLeave; + FDragItem.RemoveFreeNotify(Self); + FDragItem := nil; + end; +end; + +procedure TCustomTreeView.MouseClick(Button: TMouseButton; Shift: TShiftState; + X, Y: Single); +var + P: TPointF; +begin + inherited; + if (HoveredItem <> nil) and MouseInContentLayout(X, Y) then + begin + P := LocalPointToHoveredItemLocalPoint(X, Y); + HoveredItem.MouseClick(Button, Shift, P.X, P.Y); + end; +end; + +procedure TCustomTreeView.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Single); + + procedure TryMakeMultiSelect; + var + Item: TTreeViewItem; + begin + Item := ItemByPoint(X, Y); + if Item = nil then + Exit; + + if ([ssCtrl, ssCommand] * Shift) <> [] then + Item.IsSelected := not Item.IsSelected + else if ssShift in Shift then + begin + SelectRange(Selected, Item); + Selected := Item; + end + else + begin + SelectRange(Item, Item); + Selected := Item; + end; + FFirstSelect := Item; + end; + + procedure TryMakeSingleSelectAndStartDrag; + var + Item: TTreeViewItem; + begin + Item := ItemByPoint(X, Y); + if Item = nil then + Exit; + Selected := Item; + if AllowDrag then + FStartDrag := True; + end; + +var + P: TPointF; + IsMouseInContent: Boolean; +begin + // It's important to make selection before base mouse down processing. Because developer can remove nodes from this + // event handler. In this case, if he removes selected items, new node on old place will be repeatedly selected again. + IsMouseInContent := MouseInContentLayout(X, Y); + if IsMouseInContent then + begin + // Making selection of Items + if Button = TMouseButton.mbLeft then + begin + if MultiSelect then + TryMakeMultiSelect + else + TryMakeSingleSelectAndStartDrag; + FMouseSelecting := True; + end; + end; + + inherited MouseDown(Button, Shift, X, Y); + + // Transfer Click to Hovered Item + if IsMouseInContent and (HoveredItem <> nil) then + begin + P := LocalPointToHoveredItemLocalPoint(X, Y); + HoveredItem.MouseDown(Button, Shift, P.X, P.Y); + end; +end; + +function TCustomTreeView.MouseInContentLayout(const X, Y: Single): Boolean; +var + P: TPointF; +begin + Result := False; + if ContentLayout <> nil then + begin + P := TPointF.Create(X, Y); + P := LocalToAbsolute(P); + Result := ContentLayout.AbsoluteRect.Contains(P); + end; +end; + +procedure TCustomTreeView.MouseMove(Shift: TShiftState; X, Y: Single); +var + Item: TTreeViewItem; + P: TPointF; + LBitMap: TBitmap; +begin + inherited MouseMove(Shift, X, Y); + if MouseInContentLayout(X, Y) then + begin + Item := ItemByPoint(X, Y); + //! Launcher Fix + /// There is a case when Selected can be equal to nil + /// by doing additional check here, we are + /// saving ourselves from yet another AV error + if AllowDrag and FStartDrag and (Selected <> nil) then + begin + FStartDrag := False; + LBitMap := Selected.MakeScreenshot; + try + Root.BeginInternalDrag(Selected, LBitMap); + finally + LBitMap.Free; + end; + end; + SetHoveredItem(Item); + if HoveredItem <> nil then + begin + P := LocalPointToHoveredItemLocalPoint(X, Y); + HoveredItem.MouseMove(Shift, P.X, P.Y); + end; + end; +end; + +procedure TCustomTreeView.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Single); +var + P: TPointF; +begin + inherited MouseUp(Button, Shift, X, Y); + FFirstSelect := nil; + FMouseSelecting := False; + if (HoveredItem <> nil) and MouseInContentLayout(X, Y) then + begin + P := LocalPointToHoveredItemLocalPoint(X, Y); + HoveredItem.MouseUp(Button, Shift, P.X, P.Y); + end; + FStartDrag := False; +end; + +procedure TCustomTreeView.MouseWheel(Shift: TShiftState; WheelDelta: Integer; + var Handled: Boolean); +begin + inherited; + if HoveredItem <> nil then + HoveredItem.MouseWheel(Shift, WheelDelta, Handled); +end; + +procedure TCustomTreeView.ChangeOrder; +begin + inherited ChangeOrder; + InvalidateContentSize; + if not IsUpdating then + RealignContent; +end; + +procedure TCustomTreeView.Clear; +var + i: Integer; + TmpObj: TFmxObject; +begin + BeginUpdate; + try + FToInflate.Clear; + if (Content <> nil) and (Count > 0) then + for i := Content.ControlsCount - 1 downto 0 do + if Content.Controls[i] is TTreeViewItem then + begin + TmpObj := Content.Controls[i]; + TmpObj.DisposeOf; + end; + FSelected := nil; + FFirstVisibleItem := 0; + FLastVisibleItem := 0; + UpdateGlobalIndexes; + UpdateSelection; + finally + EndUpdate; + end; +end; + +procedure TCustomTreeView.SelectRange(const Item1, Item2: TTreeViewItem); +var + i: Integer; + FirstItemIndex: Integer; + LastItemIndex: Integer; +begin + if (Item1 = nil) or (Item2 = nil) then + Exit; + FirstItemIndex := Min(Item1.GlobalIndex, Item2.GlobalIndex); + LastItemIndex := Max(Item1.GlobalIndex, Item2.GlobalIndex); + + for i := 0 to FirstItemIndex - 1 do + ItemByGlobalIndex(i).Deselect; + for i := FirstItemIndex to LastItemIndex do + ItemByGlobalIndex(i).Select; + for i := LastItemIndex + 1 to GlobalCount - 1 do + ItemByGlobalIndex(i).Deselect; +end; + +procedure TCustomTreeView.ClearSelection; +var + Item: TTreeViewItem; +begin + for Item in FGlobalList do + Item.IsSelected := False; +end; + +procedure TCustomTreeView.SelectAll; +var + Item: TTreeViewItem; +begin + for Item in FGlobalList do + Item.IsSelected := True; +end; + +procedure TCustomTreeView.DoChange; +begin + if Assigned(FOnChange) and not (csLoading in ComponentState) then + FOnChange(Self); +end; + +procedure TCustomTreeView.DoChangeCheck(const Item: TTreeViewItem); +begin + if Assigned(FOnChangeCheck) then + FOnChangeCheck(Item); +end; + +procedure TCustomTreeView.DoContentPaint(Sender: TObject; Canvas: TCanvas; + const ARect: TRectF); +var + I: Integer; + Item: TTreeViewItem; + P: TPointF; + R: TRectF; +begin + if (Content <> nil) and (ContentLayout <> nil) then + begin + if FAlternatingRowBackground then + begin + Canvas.Fill.Assign(FOddFill); + for I := FFirstVisibleItem to FLastVisibleItem do + begin + if Odd(I) then + begin + Item := ItemByGlobalIndex(I); + P := TControl(Sender).ConvertLocalPointFrom(Item, TPointF.Zero); + R := RectF(0, P.Y, ContentLayout.Width, P.Y + Item.Height); + if not IntersectRect(R, ARect) then + Continue; + Canvas.FillRect(R, 0, 0, [], AbsoluteOpacity); + end; + end; + end; + end; +end; + +procedure TCustomTreeView.DoEnter; +begin + inherited DoEnter; + if Selected <> nil then + UpdateSelection; +end; + +procedure TCustomTreeView.DoExit; +begin + inherited DoExit; + if Selected <> nil then + UpdateSelection; +end; + +procedure TCustomTreeView.DoInsertObject(Index: Integer; const AObject: TFmxObject); +begin + if (Content <> nil) and (AObject is TTreeViewItem) then + begin + if FUpdating > TTreeViewItem(AObject).FUpdating then + TTreeViewItem(AObject).BeginUpdate; + Content.InsertObject(Index, AObject); + if [csLoading, csDestroying] * ComponentState = [] then + TTreeViewItem(AObject).SetImages(Images); + end + else + inherited DoInsertObject(Index, AObject); +end; + +procedure TCustomTreeView.DoAddObject(const AObject: TFmxObject); +begin + if (Content <> nil) and (AObject is TTreeViewItem) then + begin + if FUpdating > TTreeViewItem(AObject).FUpdating then + TTreeViewItem(AObject).BeginUpdate; + Content.AddObject(AObject); + if [csLoading, csDestroying] * ComponentState = [] then + TTreeViewItem(AObject).SetImages(Images); + end + else + inherited DoAddObject(AObject); +end; + +procedure TCustomTreeView.DoRemoveObject(const AObject: TFmxObject); +begin + if (AObject is TTreeViewItem) and (TTreeViewItem(AObject).TreeView = Self) then + begin + TTreeViewItem(AObject).Parent := nil; + if [csLoading, csDestroying] * ComponentState = [] then + TTreeViewItem(AObject).SetImages(nil); + end + else + inherited DoRemoveObject(AObject); +end; + +procedure TCustomTreeView.DoUpdateAniCalculations(const AAniCalculations: TScrollCalculations); +begin + inherited; + AAniCalculations.AutoShowing := False; + AAniCalculations.Animation := False; + AAniCalculations.BoundsAnimation := False; +end; + +function TCustomTreeView.IsAddToContent(const AObject: TFmxObject): Boolean; +begin + Result := inherited IsAddToContent(AObject) and (AObject <> FNoItemsContent); +end; + +function TCustomTreeView.IsOpaque: Boolean; +begin + Result := True; +end; + +procedure TCustomTreeView.ContentAddObject(const AObject: TFmxObject); +begin + if not (AObject is TTreeViewItem) then + begin + if FNoItemsContent = nil then + begin + FNoItemsContent := TContent.Create(Self); + FNoItemsContent.Parent := Self; + FNoItemsContent.SetBounds(0, 0, 0, 0); + FNoItemsContent.Stored := False; + FNoItemsContent.Locked := True; + FNoItemsContent.HitTest := False; + end; + FNoItemsContent.AddObject(AObject) + end + else + begin + InvalidateContentSize; + InvalidateGlobalList; + if not TTreeViewItem(AObject).IsInflated then + FToInflate.Add(TTreeViewItem(AObject)); + if not IsUpdating then + RealignContent; + end; +end; + +procedure TCustomTreeView.ContentInsertObject(Index: Integer; const AObject: TFmxObject); +begin + ContentAddObject(AObject); +end; + +procedure TCustomTreeView.ContentRemoveObject(const AObject: TFmxObject); +begin + inherited; + if AObject is TTreeViewItem and not IsUpdating then + begin + Realign; + UpdateVisibleItems; + UpdateSelection; + end; +end; + +procedure TCustomTreeView.ContentBeforeRemoveObject(AObject: TFmxObject); +begin + inherited; + if AObject is TTreeViewItem then + begin + TTreeViewItem(AObject).FIsSelected := False; + if AObject = FSelected then + FSelected := nil; + InvalidateContentSize; + InvalidateGlobalList; + FToInflate.Remove(TTreeViewItem(AObject)); + end; +end; + +procedure TCustomTreeView.SetSelected(const Value: TTreeViewItem); +var + LFmxObject: TFmxObject; + P: TPointF; +begin + if (FSelected <> Value) and not FSelectionChanging then + begin + FSelectionChanging := True; + try + if (FSelected <> nil) and not MultiSelect then + FSelected.IsSelected := False; + + FSelected := Value; + if (FSelected <> nil) and (Content <> nil) then + begin + LFmxObject := FSelected.Parent; + while ((LFmxObject <> nil) and not (LFmxObject is TCustomTreeView)) do + begin + if LFmxObject is TTreeViewItem then + TTreeViewItem(LFmxObject).Expand; + LFmxObject := LFmxObject.Parent; + end; + if (Content <> nil) and (ContentLayout <> nil) and (VScrollBar <> nil) then + begin + P := ContentLayout.ConvertLocalPointFrom(FSelected, TPointF.Zero); + if P.Y < 0 then + VScrollBar.Value := VScrollBar.Value + P.Y; + if P.Y + FSelected.Margins.Top + FSelected.Margins.Bottom + FSelected.Height > ContentLayout.Height then + VScrollBar.Value := VScrollBar.Value + (P.Y + FSelected.Margins.Top + FSelected.Margins.Bottom + + FSelected.Height - ContentLayout.Height); + end; + FSelected.IsSelected := True; + end; + finally + FSelectionChanging := False; + end; + DoChange; + end; +end; + +procedure TCustomTreeView.Notification(AComponent: TComponent; Operation: TOperation); +begin + inherited; + if Operation = opRemove then + begin + if AComponent = FSelected then + FSelected := nil; + if AComponent = FDragItem then + FDragItem := nil; + if AComponent = FHoveredItem then + FHoveredItem := nil; + if AComponent = FFirstSelect then + FFirstSelect := nil; + end; +end; + +procedure TCustomTreeView.NotifyInflated; +begin + RealignContent; +end; + +procedure TCustomTreeView.SetItemHeight(const Value: Single); +var + OldSetItemHeight, NewSetItemHeight: Boolean; + I: Integer; + procedure ClearHeight(Item: TTreeViewItem); + var + I: Integer; + begin + Item.Height := 0; + for I := 0 to Item.Count - 1 do + ClearHeight(Item.Items[I]); + end; +begin + if FItemHeight <> Value then + begin + OldSetItemHeight := FItemHeight > 0; + FItemHeight := Value; + NewSetItemHeight := FItemHeight > 0; + if (OldSetItemHeight <> NewSetItemHeight) and (not NewSetItemHeight) then + begin + BeginUpdate; + try + for I := 0 to Count - 1 do + ClearHeight(Items[I]); + finally + EndUpdate + end; + end; + RealignContent; + end; +end; + +procedure TCustomTreeView.CollapseAll; +var + i: Integer; + Item: TTreeViewItem; +begin + BeginUpdate; + try + for i := Count - 1 downto 0 do + begin + Item := Items[i]; + if Item <> nil then + Item.CollapseAll; + end; + finally + EndUpdate; + end; +end; + +procedure TCustomTreeView.ExpandAll; +var + i: Integer; + Item: TTreeViewItem; +begin + BeginUpdate; + try + for i := Count - 1 downto 0 do + begin + Item := Items[i]; + if Item <> nil then + Item.ExpandAll; + end; + finally + EndUpdate; + end; +end; + +procedure TCustomTreeView.SetCheckboxesVisibility(const Value: Boolean); +var + i: Integer; + Item : TTreeViewItem; +begin + if FShowCheckboxes <> Value then + begin + FShowCheckboxes := Value; + for i := 0 to Count - 1 do + begin + Item := Items[i]; + if Item <> nil then + Item.UpdateCheckBoxVisibility; + end; + RealignContent; + end; +end; + +function TCustomTreeView.GetTreeItem(Index: Integer): TTreeViewItem; +begin + Result := ItemByIndex(Index); +end; + +procedure TCustomTreeView.SetSorted(const Value: Boolean); +begin + if FSorted <> Value then + begin + FSorted := Value; + RealignContent; + end; +end; + +procedure TCustomTreeView.SetAllowDrag(const Value: Boolean); +begin + if FAllowDrag <> Value then + begin + FAllowDrag := Value; + if FAllowDrag then + EnableDragHighlight := True; + end; +end; + +procedure TCustomTreeView.SetAlternatingRowBackground(const Value: Boolean); +begin + if FAlternatingRowBackground <> Value then + begin + FAlternatingRowBackground := Value; + Repaint; + end; +end; + +procedure TCustomTreeView.SetHoveredItem(const Value: TTreeViewItem); +begin + if FHoveredItem <> Value then + begin + try + if FHoveredItem <> nil then + begin + TComponent(FHoveredItem).RemoveFreeNotification(Self); + FHoveredItem.DoMouseLeave; + end; + finally + FHoveredItem := Value; + if FHoveredItem <> nil then + begin + TComponent(FHoveredItem).FreeNotification(Self); + FHoveredItem.DoMouseEnter; + end; + end; + end; +end; + +function TCustomTreeView.GetCount: Integer; +begin + Result := 0; + if Content <> nil then + Result := Content.ControlsCount; +end; + +function TCustomTreeView.GetGlobalCount: Integer; +begin + UpdateGlobalIndexes(False); + Result := FGlobalList.Count; +end; + +procedure TCustomTreeView.InvalidateGlobalList; +begin + FGlobalList.Clear; +end; + +procedure TCustomTreeView.ItemExpanded(const Item: TTreeViewItem); +var + I: Integer; + Child: TTreeViewItem; +begin + InvalidateGlobalList; + if Item.IsExpanded then + for I := 0 to Item.Count - 1 do + begin + Child := Item.Items[I]; + if not Child.IsInflated then + Child.Inflate; + end; + RealignContent; +end; + +function TCustomTreeView.GetImages: TCustomImageList; +begin + Result := TCustomImageList(FImageLink.Images); +end; + +procedure TCustomTreeView.SetImages(const Value: TCustomImageList); +begin + FImageLink.Images := Value; +end; + +function TCustomTreeView.GetImageIndex: TImageIndex; +begin + Result := -1; +end; + +procedure TCustomTreeView.SetImageIndex(const Value: TImageIndex); +begin + // none +end; + +function TCustomTreeView.GetImageList: TBaseImageList; +begin + Result := GetImages; +end; + +procedure TCustomTreeView.Loaded; +begin + inherited; + ImagesChanged; +end; + +procedure TCustomTreeView.ImagesChanged; +var + I: Integer; +begin + if (FImages <> FImageLink.Images) and ([csDestroying, csLoading] * ComponentState = []) then + begin + FImages := TCustomImageList(FImageLink.Images); + BeginUpdate; + try + for I := 0 to Count - 1 do + Items[I].SetImages(FImages); + finally + EndUpdate; + end; + end; +end; + +procedure TCustomTreeView.SetImageList(const Value: TBaseImageList); +begin + ValidateInheritance(Value, TCustomImageList); + SetImages(TCustomImageList(Value)); +end; + +initialization + RegisterFmxClasses([TTreeView, TTreeViewItem]); +end. diff --git a/src/lib/FMX.Taskbar.pas b/src/lib/FMX/FMX.Taskbar.pas similarity index 100% rename from src/lib/FMX.Taskbar.pas rename to src/lib/FMX/FMX.Taskbar.pas diff --git a/src/lib/MacApi.Dialogs.pas b/src/lib/MacApi.Dialogs.pas index 019fa57..8410843 100644 --- a/src/lib/MacApi.Dialogs.pas +++ b/src/lib/MacApi.Dialogs.pas @@ -180,6 +180,7 @@ function InvokeNSOpenPanel(const Title: String; const InitialDir: String; OpenPanel.retain; try + IResult := OpenPanel.runModal; if IResult = NSOKButton then ADir := NSStrToStr(TNSUrl.Wrap(OpenPanel.URLs.objectAtIndex(0)).relativePath); diff --git a/src/lib/plugins/AEP Parser/README.md b/src/lib/plugins/AEP Parser/README.md new file mode 100644 index 0000000..b2d7503 --- /dev/null +++ b/src/lib/plugins/AEP Parser/README.md @@ -0,0 +1,16 @@ +# After Effects Project parser executable +Made specifically for **AErender Launcher** + +Based on a modified version of @boltframe/aftereffects-aep-parser. + +## Building +- Fetch required packages + ```powershell + go get -u "github.com/LilyStilson/aftereffects-aep-parser" + ``` + +- Open any CLI and type + ```powershell + go build aeparser.go + ``` +This will output an executable that is later gets embeded in **Launcher** \ No newline at end of file diff --git a/src/lib/plugins/AEP Parser/aeparser.go b/src/lib/plugins/AEP Parser/aeparser.go new file mode 100644 index 0000000..d678c34 --- /dev/null +++ b/src/lib/plugins/AEP Parser/aeparser.go @@ -0,0 +1,32 @@ +package main + +import ( + "encoding/json" + "fmt" + "os" + + aep "github.com/LilyStilson/aftereffects-aep-parser" +) + +func main() { + projectPath := os.Args[1] + project, err := aep.Open(projectPath) + + var comps []aep.Item + + for _, value := range project.Items { + if value.ItemType == aep.ItemTypeComposition { + comps = append(comps, *value) + } + } + + JSONComp, err := json.Marshal(comps) + + fmt.Println(string(JSONComp)) + + if err != nil { + panic(err) + } +} + + diff --git a/src/lib/plugins/AEP Parser/build.bat b/src/lib/plugins/AEP Parser/build.bat new file mode 100644 index 0000000..b447d4b --- /dev/null +++ b/src/lib/plugins/AEP Parser/build.bat @@ -0,0 +1,12 @@ +@ECHO off +echo "Building aeparser_win.exe..." +set GOOS=windows +set GOARCH=amd64 +go build -o "aeparser_win.exe" + +echo "Building aeparser_mac..." +set GOOS=darwin +set GOARCH=amd64 +go build -o "aeparser_mac" + + diff --git a/src/lib/plugins/AEP Parser/go.mod b/src/lib/plugins/AEP Parser/go.mod new file mode 100644 index 0000000..17dfc59 --- /dev/null +++ b/src/lib/plugins/AEP Parser/go.mod @@ -0,0 +1,8 @@ +module main + +go 1.10 + +require ( + github.com/LilyStilson/aftereffects-aep-parser v0.0.0-20210220175541-6a3310917538 + github.com/rioam2/rifx v0.0.0-20200718170510-a8114e272da2 // indirect +) diff --git a/src/lib/plugins/AEP Parser/go.sum b/src/lib/plugins/AEP Parser/go.sum new file mode 100644 index 0000000..703df74 --- /dev/null +++ b/src/lib/plugins/AEP Parser/go.sum @@ -0,0 +1,4 @@ +github.com/LilyStilson/aftereffects-aep-parser v0.0.0-20210220175541-6a3310917538 h1:fsCcozoBceer4kHtJ1sNtoqF2YAhxP0eqEpFjiIiSmM= +github.com/LilyStilson/aftereffects-aep-parser v0.0.0-20210220175541-6a3310917538/go.mod h1:vl9j+VrVsbpy7nVrLtR0MxfvdvZytzsbjHqP1cD0W10= +github.com/rioam2/rifx v0.0.0-20200718170510-a8114e272da2 h1:2IIvKNJ8JYflWullRO8H+maDSUZlVNT5z2INeqFS2r4= +github.com/rioam2/rifx v0.0.0-20200718170510-a8114e272da2/go.mod h1:TYyDvYI3ihyHtCN4kT8AFUUMOlONaCVdYXM9vKTsS/M= diff --git a/styles/AErender Modern Animated/AERFMXStyleMacOSAnimated.style b/styles/AErender Modern Animated/AERFMXStyleMacOSAnimated.style index 837e1ff..77d94fc 100644 --- a/styles/AErender Modern Animated/AERFMXStyleMacOSAnimated.style +++ b/styles/AErender Modern Animated/AERFMXStyleMacOSAnimated.style @@ -16,7 +16,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 2 + TabOrder = 3 object TRectangle StyleName = 'background' Align = Client @@ -75,7 +75,7 @@ object TStyleContainer Size.Height = 38.333343505859380000 Size.PlatformDefault = False Visible = False - TabOrder = 3 + TabOrder = 4 object TLayout Align = Left Size.Width = 18.000000000000000000 @@ -156,7 +156,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 4 + TabOrder = 5 object TBrushObject StyleName = 'foreground' end @@ -239,7 +239,7 @@ object TStyleContainer Size.Height = 131.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 5 + TabOrder = 6 object TBrushObject StyleName = 'AlternatingRowBackground' Brush.Color = x32787878 @@ -365,7 +365,7 @@ object TStyleContainer Size.Height = 50.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 6 + TabOrder = 7 object TRectangle StyleName = 'background' Align = Contents @@ -404,7 +404,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 7 + TabOrder = 8 object TRectangle StyleName = 'background' Align = Contents @@ -455,7 +455,7 @@ object TStyleContainer StyleName = 'imagecellstyle' Align = Center Visible = False - TabOrder = 8 + TabOrder = 9 object TImage StyleName = 'image' MultiResBitmap = < @@ -480,7 +480,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 9 + TabOrder = 10 object TText StyleName = 'text' Align = Contents @@ -498,7 +498,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 10 + TabOrder = 11 object TText StyleName = 'text' Align = Client @@ -521,7 +521,7 @@ object TStyleContainer Size.Height = 24.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 11 + TabOrder = 12 object TGlyph StyleName = 'glyphstyle' Margins.Left = 2.000000000000000000 @@ -568,7 +568,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 12 + TabOrder = 13 object TRectangle StyleName = 'background' Align = Contents @@ -604,7 +604,7 @@ object TStyleContainer Size.Height = 131.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 13 + TabOrder = 14 object TBrushObject StyleName = 'AlternatingRowBackground' Brush.Color = xFF2C2C2C @@ -710,7 +710,7 @@ object TStyleContainer StyleName = 'popupcellstyle' Align = Center Visible = False - TabOrder = 14 + TabOrder = 15 object TLayout Align = Right Position.X = 35.000000000000000000 @@ -766,7 +766,7 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Visible = False - TabOrder = 15 + TabOrder = 16 object TRectangle StyleName = 'htrack' Align = Contents @@ -839,7 +839,7 @@ object TStyleContainer Size.Height = 126.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 16 + TabOrder = 17 object TLayout StyleName = 'htrack' Align = Contents @@ -876,7 +876,7 @@ object TStyleContainer StyleName = 'scrollbarbottombutton' Align = Center Visible = False - TabOrder = 17 + TabOrder = 18 object TRectangle StyleName = 'background' Align = Client @@ -954,7 +954,7 @@ object TStyleContainer StyleName = 'scrollbarleftbutton' Align = Center Visible = False - TabOrder = 18 + TabOrder = 19 object TRectangle StyleName = 'background' Align = Client @@ -1014,7 +1014,7 @@ object TStyleContainer StyleName = 'scrollbarrightbutton' Align = Center Visible = False - TabOrder = 19 + TabOrder = 20 object TRectangle StyleName = 'background' Align = Client @@ -1074,7 +1074,7 @@ object TStyleContainer StyleName = 'scrollbarstyle' Align = Center Visible = False - TabOrder = 20 + TabOrder = 21 object TButton StyleName = 'leftbutton' Align = Left @@ -1139,7 +1139,7 @@ object TStyleContainer StyleName = 'scrollbartopbutton' Align = Center Visible = False - TabOrder = 21 + TabOrder = 22 object TRectangle StyleName = 'background' Align = Client @@ -1218,16 +1218,16 @@ object TStyleContainer StyleName = 'spinboxstyle' Align = Center Size.Width = 112.199996948242200000 - Size.Height = 21.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 22 + TabOrder = 23 object TRectangle StyleName = 'background' Align = Contents Fill.Color = xFF202020 Size.Width = 112.199996948242200000 - Size.Height = 21.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False Stroke.Color = xFF151515 XRadius = 3.000000000000000000 @@ -1259,13 +1259,13 @@ object TStyleContainer Margins.Top = 2.000000000000000000 Margins.Right = 2.000000000000000000 Margins.Bottom = 2.000000000000000000 - Size.Width = 66.200073242187500000 - Size.Height = 17.000000000000000000 + Size.Width = 60.200042724609380000 + Size.Height = 20.000000000000000000 Size.PlatformDefault = False end object TButton StyleName = 'minusbutton' - Align = FitLeft + Align = Left CanFocus = False Cursor = crArrow Margins.Left = 2.000000000000000000 @@ -1274,55 +1274,47 @@ object TStyleContainer Margins.Bottom = 2.000000000000000000 Position.X = 2.000000000000000000 Position.Y = 2.000000000000000000 - Size.Width = 16.999954223632810000 - Size.Height = 17.000000000000000000 + Size.Width = 20.000000000000000000 + Size.Height = 20.000000000000000000 Size.PlatformDefault = False StyleLookup = 'buttonstyle' object TPath - Align = Client + Align = Center Data.Path = { 05000000000000000000803F00000000010000000000803F0000803F01000000 000000000000003F010000000000803F00000000030000000000803F00000000} Fill.Color = claWhite HitTest = False - Margins.Left = 6.000000000000000000 - Margins.Top = 6.000000000000000000 - Margins.Right = 6.000000000000000000 - Margins.Bottom = 6.000000000000000000 - Size.Width = 4.999954223632813000 - Size.Height = 5.000000000000000000 + Size.Width = 8.000000000000000000 + Size.Height = 8.000000000000000000 Size.PlatformDefault = False Stroke.Kind = None end end object TButton StyleName = 'plusbutton' - Align = FitRight + Align = Right CanFocus = False Cursor = crArrow Margins.Left = 2.000000000000000000 Margins.Top = 2.000000000000000000 Margins.Right = 2.000000000000000000 Margins.Bottom = 2.000000000000000000 - Position.X = 93.200027465820310000 + Position.X = 90.200042724609380000 Position.Y = 2.000000000000000000 - Size.Width = 16.999969482421880000 - Size.Height = 17.000000000000000000 + Size.Width = 19.999954223632810000 + Size.Height = 20.000000000000000000 Size.PlatformDefault = False StyleLookup = 'buttonstyle' object TPath - Align = Client + Align = Center Data.Path = { 0400000000000000000000000000000001000000000000000000803F01000000 0000803F0000003F030000000000000000000000} Fill.Color = claWhite HitTest = False - Margins.Left = 6.000000000000000000 - Margins.Top = 6.000000000000000000 - Margins.Right = 6.000000000000000000 - Margins.Bottom = 6.000000000000000000 - Size.Width = 4.999969482421875000 - Size.Height = 5.000000000000000000 + Size.Width = 7.999954223632813000 + Size.Height = 8.000000000000000000 Size.PlatformDefault = False Stroke.Kind = None end @@ -1335,7 +1327,7 @@ object TStyleContainer Size.Width = 100.000000000000000000 Size.Height = 25.000000000000000000 Size.PlatformDefault = False - TabOrder = 23 + TabOrder = 24 TrackingThumbScale = 1.000000000000000000 Visible = False Fill.Color = xFF202020 @@ -1359,7 +1351,7 @@ object TStyleContainer Size.Height = 100.999992370605500000 Size.PlatformDefault = False Visible = False - TabOrder = 24 + TabOrder = 25 object TRectangle StyleName = 'background' Align = Contents @@ -1407,7 +1399,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 25 + TabOrder = 26 object TRectangle StyleName = 'top' Align = Contents @@ -1473,7 +1465,7 @@ object TStyleContainer StyleName = 'textcellstyle' Align = Center Visible = False - TabOrder = 26 + TabOrder = 27 object TLayout StyleName = 'content' Align = Contents @@ -1572,7 +1564,7 @@ object TStyleContainer Size.Height = 100.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 27 + TabOrder = 28 FixedHeight = 17 object TRectangle StyleName = 'htrack' @@ -1697,7 +1689,7 @@ object TStyleContainer Size.Height = 122.199996948242200000 Size.PlatformDefault = False Visible = False - TabOrder = 28 + TabOrder = 29 object TGlowEffect Softness = 0.200000002980232200 GlowColor = xFF4879A3 @@ -1816,7 +1808,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 29 + TabOrder = 30 object TRectangle StyleName = 'Rectangle1' Align = Center @@ -1927,7 +1919,7 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Visible = False - TabOrder = 30 + TabOrder = 31 object TRectangle StyleName = 'htrack' Align = Contents @@ -2000,7 +1992,7 @@ object TStyleContainer Size.Height = 32.400001525878910000 Size.PlatformDefault = False Visible = False - TabOrder = 31 + TabOrder = 32 object TText StyleName = 'text' Align = Contents @@ -2035,7 +2027,7 @@ object TStyleContainer StyleName = 'smallscrollbarstyle' Align = Center Visible = False - TabOrder = 32 + TabOrder = 33 object TTrack StyleName = 'htrack' Align = Client @@ -2064,7 +2056,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 33 + TabOrder = 34 object TBrushObject StyleName = 'foreground' end @@ -2163,116 +2155,6 @@ object TStyleContainer Size.PlatformDefault = False end end - object TLayout - StyleName = 'comboeditstyle' - Align = Center - Size.Width = 100.000000000000000000 - Size.Height = 25.000000000000000000 - Size.PlatformDefault = False - Visible = False - TabOrder = 34 - object TLayout - StyleName = 'background' - Align = Contents - Size.Width = 100.000000000000000000 - Size.Height = 25.000000000000000000 - Size.PlatformDefault = False - object TRectangle - StyleName = 'Rectangle1' - Align = Client - Fill.Color = xFF202020 - HitTest = False - Size.Width = 100.000000000000000000 - Size.Height = 25.000000000000000000 - Size.PlatformDefault = False - Stroke.Kind = None - XRadius = 3.000000000000000000 - YRadius = 3.000000000000000000 - object TLayout - StyleName = 'ButtonStyleObject' - Align = FitRight - Margins.Top = 1.000000000000000000 - Margins.Right = 1.000000000000000000 - Margins.Bottom = 1.000000000000000000 - Position.X = 75.924545288085940000 - Position.Y = 1.000000000000000000 - Size.Width = 23.075454711914060000 - Size.Height = 23.000000000000000000 - Size.PlatformDefault = False - object TLayout - StyleName = 'Layout1' - Align = Center - Margins.Left = 1.000000000000000000 - Size.Width = 10.000000000000000000 - Size.Height = 6.000000000000000000 - Size.PlatformDefault = False - object TPath - StyleName = 'Path1' - Align = Client - Data.Path = { - 04000000000000000000C8420000C84201000000000096430000C84201000000 - 0000484300009643030000000000C8420000C842} - Fill.Color = claWhite - HitTest = False - Size.Width = 10.000000000000000000 - Size.Height = 6.000000000000000000 - Size.PlatformDefault = False - Stroke.Kind = None - end - end - end - object TColorAnimation - StyleName = 'buttonColorAnimation1' - Duration = 0.100000001490116100 - PropertyName = 'Fill.Color' - StartValue = xFF202020 - StopValue = xFF404040 - Trigger = 'IsMouseOver=true;IsPressed=false;IsFocused=false' - TriggerInverse = 'IsMouseOver=false;IsPressed=false;IsFocused=false' - end - object TColorAnimation - StyleName = 'buttonColorAnimation2' - Duration = 0.100000001490116100 - PropertyName = 'Fill.Color' - StartValue = xFF404040 - StopValue = xFF17579C - Trigger = 'IsPressed=true;IsMouseOver=true;IsFocused=false' - end - object TColorAnimation - StyleName = 'buttonColorAnimation3' - Duration = 0.100000001490116100 - PropertyName = 'Fill.Color' - StartValue = xFF2A82E2 - StopValue = xFF17579C - Trigger = 'IsPressed=true;IsMouseOver=true;IsFocused=true' - TriggerInverse = 'IsPressed=false;IsMouseOver=true;IsFocused=true' - end - end - end - object TBrushObject - StyleName = 'foreground' - end - object TFontObject - StyleName = 'font' - Font.Size = 13.000000000000000000 - end - object TLayout - StyleName = 'content' - Align = Client - Locked = True - Margins.Left = 2.000000000000000000 - Margins.Top = 2.000000000000000000 - Margins.Right = 27.000000000000000000 - Margins.Bottom = 2.000000000000000000 - Size.Width = 71.000000000000000000 - Size.Height = 21.000000000000000000 - Size.PlatformDefault = False - end - object TBrushObject - StyleName = 'selection' - Brush.Color = x962A82E2 - end - end object TLayout StyleName = 'splitterstyle' Align = Center @@ -2417,7 +2299,7 @@ object TStyleContainer Size.Height = 40.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 38 + TabOrder = 41 object TLayout Align = Bottom Position.Y = 34.000000000000000000 @@ -2492,7 +2374,7 @@ object TStyleContainer Size.Height = 40.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 40 + TabOrder = 42 object TLayout Align = Bottom Position.Y = 34.000000000000000000 @@ -2570,7 +2452,7 @@ object TStyleContainer Size.Height = 40.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 43 + TabOrder = 45 object TLayout Align = Bottom Position.Y = 34.000000000000000000 @@ -2641,60 +2523,6 @@ object TStyleContainer TextSettings.FontColor = claWhite end end - object TLayout - StyleName = 'progressbarministyle' - Align = Center - Size.Width = 66.599998474121090000 - Size.Height = 56.399997711181640000 - Size.PlatformDefault = False - Visible = False - TabOrder = 46 - object TRectangle - StyleName = 'htrack' - Align = Contents - Fill.Color = xFF202020 - Locked = True - HitTest = False - Size.Width = 66.599998474121090000 - Size.Height = 56.399997711181640000 - Size.PlatformDefault = False - Stroke.Kind = None - object TRectangle - StyleName = 'hindicator' - Align = Left - Fill.Color = xFF2A82E2 - Locked = True - HitTest = False - Size.Width = 50.000000000000000000 - Size.Height = 56.399997711181640000 - Size.PlatformDefault = False - Stroke.Kind = None - end - end - object TRectangle - StyleName = 'vtrack' - Align = Contents - Fill.Color = xFF202020 - Locked = True - HitTest = False - Size.Width = 66.599998474121090000 - Size.Height = 56.399997711181640000 - Size.PlatformDefault = False - Stroke.Kind = None - object TRectangle - StyleName = 'vindicator' - Align = Bottom - Fill.Color = xFF2A82E2 - Locked = True - HitTest = False - Position.Y = 35.399997711181640000 - Size.Width = 66.599998474121090000 - Size.Height = 21.000000000000000000 - Size.PlatformDefault = False - Stroke.Kind = None - end - end - end object TLayout StyleName = 'aniindicatorhorzstyle' Align = Center @@ -2702,6 +2530,7 @@ object TStyleContainer Size.Height = 2.000000000000000000 Size.PlatformDefault = False Visible = False + TabOrder = 58 object TRectangle StyleName = 'Rectangle1' Align = Client @@ -2744,12 +2573,13 @@ object TStyleContainer Size.Height = 96.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 1 + TabOrder = 2 object TRectangle StyleName = 'background' Align = Client ClipChildren = True ClipParent = True + Corners = [TopRight, BottomRight] Fill.Color = xFF202020 HitTest = False Size.Width = 96.000000000000000000 @@ -2829,7 +2659,7 @@ object TStyleContainer Size.Height = 22.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 49 + TabOrder = 53 object TPath StyleName = 'Path1' Align = Center @@ -2862,7 +2692,7 @@ object TStyleContainer Size.Height = 33.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 52 + TabOrder = 54 object TLayout Align = Left Size.Width = 24.000000000000000000 @@ -2935,7 +2765,7 @@ object TStyleContainer Size.Height = 103.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 57 + TabOrder = 55 object TRectangle StyleName = 'bgrectangle' Align = Contents @@ -3034,4 +2864,1226 @@ object TStyleContainer end end end + object TLayout + StyleName = 'panelstyle' + Align = Center + Size.Width = 192.000000000000000000 + Size.Height = 164.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 56 + object TRectangle + StyleName = 'background' + Align = Contents + Fill.Color = xFF202020 + Size.Width = 192.000000000000000000 + Size.Height = 164.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + end + end + object TLayout + StyleName = 'progressbarminierrorstyle' + Align = Center + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Visible = False + TabOrder = 57 + object TRectangle + StyleName = 'htrack' + Align = Contents + Fill.Color = xFF404040 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 + object TRectangle + StyleName = 'hindicator' + Align = Left + Fill.Color = xFFE22A2A + Locked = True + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 + end + end + object TRectangle + StyleName = 'vtrack' + Align = Contents + Fill.Color = xFF404040 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 + object TRectangle + StyleName = 'vindicator' + Align = Bottom + Fill.Color = xFFE22A2A + Locked = True + HitTest = False + Position.Y = 35.399997711181640000 + Size.Width = 66.599998474121090000 + Size.Height = 21.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 + end + end + end + object TLayout + StyleName = 'progressbarministyle' + Align = Center + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Visible = False + TabOrder = 47 + object TRectangle + StyleName = 'htrack' + Align = Contents + Fill.Color = xFF404040 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 + object TRectangle + StyleName = 'hindicator' + Align = Left + Fill.Color = xFF2A82E2 + Locked = True + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 + end + end + object TRectangle + StyleName = 'vtrack' + Align = Contents + Fill.Color = xFF404040 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 + object TRectangle + StyleName = 'vindicator' + Align = Bottom + Fill.Color = xFF2A82E2 + Locked = True + HitTest = False + Position.Y = 35.399997711181640000 + Size.Width = 66.599998474121090000 + Size.Height = 21.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 + end + end + end + object TLayout + StyleName = 'comboeditstyle' + Align = Center + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 52 + object TBrushObject + StyleName = 'foreground' + end + object TFontObject + StyleName = 'font' + Font.Size = 13.000000000000000000 + end + object TLayout + StyleName = 'background' + Align = Contents + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + object TRectangle + StyleName = 'Rectangle1' + Align = Client + Fill.Color = xFF202020 + HitTest = False + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF202020 + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + object TColorAnimation + StyleName = 'ColorAnimation1Style' + Duration = 0.100000001490116100 + Inverse = True + PropertyName = 'Stroke.Color' + StartValue = xFF202020 + StopValue = xFF404040 + Trigger = 'IsMouseOver=true;IsFocused=false' + TriggerInverse = 'IsMouseOver=false;IsFocused=false' + end + object TColorAnimation + StyleName = 'ColorAnimation2Style' + Duration = 0.100000001490116100 + Inverse = True + PropertyName = 'Stroke.Color' + StartValue = xFF404040 + StopValue = xFF2A82E2 + Trigger = 'IsMouseOver=true;IsFocused=true' + TriggerInverse = 'IsMouseOver=true;IsFocused=false' + end + object TLayout + StyleName = 'arrow' + Align = FitRight + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Position.X = 75.924545288085940000 + Position.Y = 1.000000000000000000 + Size.Width = 23.075454711914060000 + Size.Height = 23.000000000000000000 + Size.PlatformDefault = False + object TRectangle + StyleName = 'Rectangle1' + Align = Contents + Corners = [TopRight, BottomRight] + Fill.Color = xFF303030 + HitTest = False + Size.Width = 23.075454711914060000 + Size.Height = 23.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + object TColorAnimation + StyleName = 'ColorAnimation1Style' + Duration = 0.100000001490116100 + Inverse = True + PropertyName = 'Fill.Color' + StartValue = xFF303030 + StopValue = xFF404040 + Trigger = 'IsMouseOver=true;IsFocused=false' + TriggerInverse = 'IsMouseOver=false;IsFocused=false' + end + object TColorAnimation + StyleName = 'ColorAnimation2Style' + Duration = 0.100000001490116100 + PropertyName = 'Fill.Color' + StartValue = xFF404040 + StopValue = xFF17579C + Trigger = 'IsFocused=true;IsMouseOver=true' + end + end + object TLayout + StyleName = 'Layout1' + Align = Center + Margins.Left = 1.000000000000000000 + Size.Width = 10.000000000000000000 + Size.Height = 6.000000000000000000 + Size.PlatformDefault = False + object TPath + StyleName = 'Path1' + Align = Client + Data.Path = { + 04000000000000000000C8420000C84201000000000096430000C84201000000 + 0000484300009643030000000000C8420000C842} + Fill.Color = claWhite + HitTest = False + Size.Width = 10.000000000000000000 + Size.Height = 6.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + end + end + end + object TBrushObject + StyleName = 'selection' + Brush.Color = x962A82E2 + end + object TLayout + StyleName = 'content' + Align = Client + Margins.Left = 2.000000000000000000 + Margins.Top = 2.000000000000000000 + Margins.Right = 30.000000000000000000 + Margins.Bottom = 2.000000000000000000 + Size.Width = 68.000000000000000000 + Size.Height = 21.000000000000000000 + Size.PlatformDefault = False + end + end + object TLayout + StyleName = 'menubaritemstyle' + Align = Center + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Size.Width = 73.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 37 + object TRectangle + Align = Contents + Fill.Color = xFF2A82E2 + HitTest = False + Opacity = 0.000099999997473788 + Size.Width = 73.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TFloatAnimation + Duration = 0.000200000009499490 + PropertyName = 'Opacity' + StartValue = 0.000000000000000000 + StopValue = 1.000000000000000000 + Trigger = 'IsSelected=true' + TriggerInverse = 'IsSelected=false' + end + end + object TRectangle + StyleName = 'background' + Align = Contents + Fill.Color = xFF2A82E2 + HitTest = False + Opacity = 0.000000000000000000 + Size.Width = 73.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TFloatAnimation + Duration = 0.000200000009499490 + Inverse = True + PropertyName = 'Opacity' + StartValue = 0.000000000000000000 + StopValue = 1.000000000000000000 + Trigger = 'IsMouseOver=true' + TriggerInverse = 'IsMouseOver=false' + end + end + object TLayout + StyleName = 'glyph' + Align = Left + Size.Width = 25.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + object TLayout + StyleName = 'checkmark' + Align = Contents + Opacity = 0.001000000047497451 + Size.Width = 25.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + object TPath + Align = Center + Data.Path = { + 070000000000000056D9524391AE2C4301000000927666436502164301000000 + 9F3983432B7C3C43010000009E9AA64382D2B442010000006F1CB04375A4D142 + 0100000026DF8243263F67430300000056D9524391AE2C43} + Fill.Color = claWhite + HitTest = False + Size.Width = 11.000000000000000000 + Size.Height = 11.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + object TFloatAnimation + Duration = 0.100000001490116100 + PropertyName = 'Opacity' + StartValue = 0.000000000000000000 + StopValue = 1.000000000000000000 + Trigger = 'IsChecked=true' + TriggerInverse = 'IsChecked=false' + end + end + object TGlyph + StyleName = 'glyphstyle' + Margins.Left = 1.000000000000000000 + Margins.Top = 2.000000000000000000 + Margins.Right = 3.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Align = Right + Position.X = 6.000000000000000000 + Position.Y = 2.000000000000000000 + Size.Width = 16.000000000000000000 + Size.Height = 23.000000000000000000 + Size.PlatformDefault = False + end + object TImage + StyleName = 'bitmap' + MultiResBitmap = < + item + end> + Align = Contents + Margins.Left = 2.000000000000000000 + Margins.Top = 2.000000000000000000 + Margins.Right = 2.000000000000000000 + Margins.Bottom = 2.000000000000000000 + Size.Width = 21.000000000000000000 + Size.Height = 22.000000000000000000 + Size.PlatformDefault = False + end + end + object TText + StyleName = 'text' + Align = Left + Locked = True + HitTest = False + Margins.Left = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Position.X = 33.000000000000000000 + Size.Width = 50.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + TextSettings.FontColor = claWhite + TextSettings.HorzAlign = Leading + end + object TText + StyleName = 'shortcut' + Align = Right + Locked = True + HitTest = False + Margins.Left = 12.000000000000000000 + Margins.Right = 6.000000000000000000 + Position.X = -3.000000000000000000 + Size.Width = 50.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + TextSettings.FontColor = claWhite + TextSettings.HorzAlign = Leading + end + object TLayout + StyleName = 'submark' + Align = Right + Position.X = 53.000000000000000000 + Size.Width = 20.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + object TPath + Align = Center + Data.Path = { + 0400000000000000000000000000000001000000000000000000803F01000000 + 0000803F0000003F030000000000000000000000} + Fill.Color = claWhite + Locked = True + HitTest = False + Size.Width = 7.000000000000000000 + Size.Height = 8.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + end + object TRectangle + StyleName = 'menubarstyle' + Align = Center + ClipChildren = True + Fill.Kind = None + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + Visible = False + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + object TRectangle + Align = Client + Fill.Color = xFF202020 + HitTest = False + Margins.Left = -1.000000000000000000 + Margins.Top = -1.000000000000000000 + Margins.Right = -1.000000000000000000 + Size.Width = 52.000000000000000000 + Size.Height = 51.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + end + object TLayout + StyleName = 'content' + Align = Client + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Size.Width = 48.000000000000000000 + Size.Height = 48.000000000000000000 + Size.PlatformDefault = False + end + end + object TLayout + StyleName = 'menuitemstyle' + Align = Center + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Size.Width = 73.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 38 + object TRectangle + Align = Contents + Fill.Color = xFF2A82E2 + HitTest = False + Opacity = 0.000099999997473788 + Size.Width = 73.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TFloatAnimation + Duration = 0.000200000009499490 + PropertyName = 'Opacity' + StartValue = 0.000000000000000000 + StopValue = 1.000000000000000000 + Trigger = 'IsSelected=true' + TriggerInverse = 'IsSelected=false' + end + end + object TRectangle + StyleName = 'background' + Align = Contents + Fill.Color = xFF2A82E2 + HitTest = False + Opacity = 0.000000000000000000 + Size.Width = 73.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TFloatAnimation + Duration = 0.000200000009499490 + Inverse = True + PropertyName = 'Opacity' + StartValue = 0.000000000000000000 + StopValue = 1.000000000000000000 + Trigger = 'IsMouseOver=true' + TriggerInverse = 'IsMouseOver=false' + end + end + object TLayout + StyleName = 'glyph' + Align = Left + Size.Width = 25.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + object TLayout + StyleName = 'checkmark' + Align = Contents + Opacity = 0.001000000047497451 + Size.Width = 25.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + object TPath + Align = Center + Data.Path = { + 070000000000000056D9524391AE2C4301000000927666436502164301000000 + 9F3983432B7C3C43010000009E9AA64382D2B442010000006F1CB04375A4D142 + 0100000026DF8243263F67430300000056D9524391AE2C43} + Fill.Color = claWhite + HitTest = False + Size.Width = 11.000000000000000000 + Size.Height = 11.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + object TFloatAnimation + Duration = 0.100000001490116100 + PropertyName = 'Opacity' + StartValue = 0.000000000000000000 + StopValue = 1.000000000000000000 + Trigger = 'IsChecked=true' + TriggerInverse = 'IsChecked=false' + end + end + object TGlyph + StyleName = 'glyphstyle' + Margins.Left = 1.000000000000000000 + Margins.Top = 2.000000000000000000 + Margins.Right = 3.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Align = Left + Position.X = 1.000000000000000000 + Position.Y = 2.000000000000000000 + Size.Width = 16.000000000000000000 + Size.Height = 23.000000000000000000 + Size.PlatformDefault = False + end + object TImage + StyleName = 'bitmap' + MultiResBitmap = < + item + end> + Align = Left + Margins.Left = 2.000000000000000000 + Margins.Top = 2.000000000000000000 + Margins.Right = 2.000000000000000000 + Margins.Bottom = 2.000000000000000000 + Position.X = 2.000000000000000000 + Position.Y = 2.000000000000000000 + Size.Width = 21.000000000000000000 + Size.Height = 22.000000000000000000 + Size.PlatformDefault = False + end + end + object TText + StyleName = 'text' + Align = Left + Locked = True + HitTest = False + Margins.Left = 8.000000000000000000 + Margins.Right = 8.000000000000000000 + Position.X = 33.000000000000000000 + Size.Width = 50.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + TextSettings.FontColor = claWhite + TextSettings.HorzAlign = Leading + end + object TText + StyleName = 'shortcut' + Align = Right + Locked = True + HitTest = False + Margins.Left = 12.000000000000000000 + Margins.Right = 6.000000000000000000 + Position.X = -3.000000000000000000 + Size.Width = 50.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + TextSettings.FontColor = claWhite + TextSettings.HorzAlign = Leading + end + object TLayout + StyleName = 'submark' + Align = Right + Position.X = 53.000000000000000000 + Size.Width = 20.000000000000000000 + Size.Height = 26.000000000000000000 + Size.PlatformDefault = False + object TPath + Align = Center + Data.Path = { + 0400000000000000000000000000000001000000000000000000803F01000000 + 0000803F0000003F030000000000000000000000} + Fill.Color = claWhite + Locked = True + HitTest = False + Size.Width = 7.000000000000000000 + Size.Height = 8.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + end + object TLayout + StyleName = 'menuseparatorstyle' + Align = Center + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 39 + object TLine + Align = Top + LineType = Top + Margins.Left = 3.000000000000000000 + Margins.Top = 2.000000000000000000 + Margins.Right = 3.000000000000000000 + Position.X = 3.000000000000000000 + Position.Y = 2.000000000000000000 + Size.Width = 44.000000000000000000 + Size.Height = 1.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + end + end + object TRectangle + StyleName = 'menuviewstyle' + Align = Center + Fill.Color = xFF202020 + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + Visible = False + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + object TRectangle + Align = Client + Fill.Color = xFF202020 + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + object TShadowEffect + Distance = 3.000000000000000000 + Direction = 90.000000000000000000 + Softness = 0.500000000000000000 + Opacity = 0.500000000000000000 + ShadowColor = claBlack + end + end + object TLayout + StyleName = 'content' + Align = Client + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Size.Width = 48.000000000000000000 + Size.Height = 48.000000000000000000 + Size.PlatformDefault = False + end + end + object TLayout + StyleName = 'treeviewexpanderbuttonstyle' + Align = Center + Margins.Top = 1.000000000000000000 + Size.Width = 22.000000000000000000 + Size.Height = 22.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 60 + object TPath + StyleName = 'Path1' + Align = Center + Data.Path = { + 04000000000000000000C8420000C84201000000000096430000C84201000000 + 0000484300009643030000000000C8420000C842} + Fill.Color = claWhite + HitTest = False + RotationAngle = -90.000000000000000000 + Size.Width = 10.000000000000000000 + Size.Height = 6.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TFloatAnimation + StyleName = 'FloatAnimation1Style' + Duration = 0.000000000000000000 + Interpolation = Circular + PropertyName = 'RotationAngle' + StartValue = -90.000000000000000000 + StopValue = 0.000000000000000000 + Trigger = 'IsExpanded=true' + TriggerInverse = 'IsExpanded=false' + end + end + end + object TRectangle + StyleName = 'treeviewitemstyle' + Align = Center + Fill.Kind = None + HitTest = False + Sides = [Bottom] + Size.Width = 87.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + Stroke.Join = Round + Visible = False + object TSpeedButton + StyleName = 'button' + Align = Left + Size.Width = 20.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'treeviewexpanderbuttonstyle' + end + object TLayout + Align = Contents + Margins.Left = 20.000000000000000000 + Size.Width = 67.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object TCheckBox + StyleName = 'check' + Align = Left + CanFocus = False + DisableFocusEffect = True + Size.Width = 20.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + end + object TGlyph + StyleName = 'glyphstyle' + Margins.Left = 2.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 2.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Align = Left + Position.X = 22.000000000000000000 + Position.Y = 1.000000000000000000 + Size.Width = 16.000000000000000000 + Size.Height = 38.000000000000000000 + Size.PlatformDefault = False + end + object TText + StyleName = 'text' + Align = Client + Locked = True + HitTest = False + Size.Width = 47.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + TextSettings.WordWrap = False + TextSettings.HorzAlign = Leading + end + end + object TRectangle + Align = Contents + Fill.Kind = None + HitTest = False + Margins.Bottom = 1.000000000000000000 + Sides = [Left] + Size.Width = 87.000000000000000000 + Size.Height = 39.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF2A82E2 + Stroke.Thickness = 2.000000000000000000 + end + end + object TLayout + StyleName = 'treeviewstyle' + Align = Center + Size.Width = 225.000000000000000000 + Size.Height = 259.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 65 + object TBrushObject + StyleName = 'AlternatingRowBackground' + Brush.Color = x0FFFFFFF + end + object TRectangle + StyleName = 'background' + Align = Contents + Fill.Color = xFF202020 + Locked = True + HitTest = False + Padding.Left = 1.000000000000000000 + Padding.Right = 1.000000000000000000 + Size.Width = 225.000000000000000000 + Size.Height = 259.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + object TLayout + StyleName = 'content' + Align = Client + ClipChildren = True + Margins.Top = 1.000000000000000000 + Size.Width = 205.000000000000000000 + Size.Height = 240.000000000000000000 + Size.PlatformDefault = False + object TRectangle + StyleName = 'selection' + Fill.Color = xFF2A82E2 + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + end + object TRectangle + StyleName = 'focusedselection' + Fill.Color = xFF2A82E2 + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + Stroke.Dash = Dot + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + end + end + object TScrollBar + StyleName = 'vscrollbar' + Align = Right + SmallChange = 0.000000000000000000 + Orientation = Vertical + Margins.Left = 2.000000000000000000 + Position.X = 208.000000000000000000 + Size.Width = 16.000000000000000000 + Size.Height = 241.000000000000000000 + Size.PlatformDefault = False + end + object TScrollBar + StyleName = 'hscrollbar' + Align = Bottom + SmallChange = 0.000000000000000000 + Orientation = Horizontal + Margins.Top = 2.000000000000000000 + Position.X = 1.000000000000000000 + Position.Y = 243.000000000000000000 + Size.Width = 223.000000000000000000 + Size.Height = 16.000000000000000000 + Size.PlatformDefault = False + end + object TSmallScrollBar + StyleName = 'vsmallscrollbar' + Align = Right + SmallChange = 0.000000000000000000 + Orientation = Vertical + Margins.Left = 2.000000000000000000 + Position.X = 99.000000000000000000 + Position.Y = 2.000000000000000000 + Size.Width = 8.000000000000000000 + Size.Height = 8.000000000000000000 + Size.PlatformDefault = False + Visible = False + end + object TSmallScrollBar + StyleName = 'hsmallscrollbar' + Align = Bottom + SmallChange = 0.000000000000000000 + Orientation = Horizontal + Margins.Top = 2.000000000000000000 + Position.X = 2.000000000000000000 + Position.Y = 113.000000000000000000 + Size.Width = 150.000000000000000000 + Size.Height = 8.000000000000000000 + Size.PlatformDefault = False + Visible = False + end + end + end + object TLayout + StyleName = 'progressbarfinishstyle' + Align = Center + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Visible = False + TabOrder = 64 + object TRectangle + StyleName = 'htrack' + Align = Contents + Fill.Color = xFF202020 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + object TRectangle + StyleName = 'hindicator' + Align = Left + Fill.Color = xFF2CE244 + Locked = True + HitTest = False + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Position.X = 1.000000000000000000 + Position.Y = 1.000000000000000000 + Size.Width = 50.000000000000000000 + Size.Height = 54.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + end + end + object TRectangle + StyleName = 'vtrack' + Align = Contents + Fill.Color = xFF202020 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + object TRectangle + StyleName = 'vindicator' + Align = Bottom + Fill.Color = xFF2CE244 + Locked = True + HitTest = False + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Position.X = 1.000000000000000000 + Position.Y = 34.399997711181640000 + Size.Width = 64.599998474121090000 + Size.Height = 21.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + end + end + end + object TLayout + StyleName = 'progressbarminifinishstyle' + Align = Center + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Visible = False + TabOrder = 75 + object TRectangle + StyleName = 'htrack' + Align = Contents + Fill.Color = xFF404040 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 + object TRectangle + StyleName = 'hindicator' + Align = Left + Fill.Color = xFF2CE244 + Locked = True + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 + end + end + object TRectangle + StyleName = 'vtrack' + Align = Contents + Fill.Color = xFF404040 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 + object TRectangle + StyleName = 'vindicator' + Align = Bottom + Fill.Color = xFF2CE244 + Locked = True + HitTest = False + Position.Y = 35.399997711181640000 + Size.Width = 66.599998474121090000 + Size.Height = 21.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 + end + end + end + object TLayout + StyleName = 'arrowdowntoolbutton' + Align = Center + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 1 + object TRectangle + StyleName = 'background' + Align = Client + ClipChildren = True + ClipParent = True + Corners = [TopLeft, BottomLeft] + Fill.Color = x00202020 + HitTest = False + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + object TColorAnimation + StyleName = 'buttonColorAnimation1' + Duration = 0.100000001490116100 + PropertyName = 'Fill.Color' + StartValue = x00202020 + StopValue = xFF404040 + Trigger = 'IsMouseOver=true;IsPressed=false;IsFocused=false' + TriggerInverse = 'IsMouseOver=false;IsPressed=false;IsFocused=false' + end + object TColorAnimation + StyleName = 'buttonColorAnimation2' + Duration = 0.100000001490116100 + PropertyName = 'Fill.Color' + StartValue = xFF404040 + StopValue = xFF17579C + Trigger = 'IsPressed=true;IsMouseOver=true;IsFocused=false' + end + object TColorAnimation + StyleName = 'buttonColorAnimation3' + Duration = 0.100000001490116100 + PropertyName = 'Fill.Color' + StartValue = xFF2A82E2 + StopValue = xFF17579C + Trigger = 'IsPressed=true;IsMouseOver=true;IsFocused=true' + TriggerInverse = 'IsPressed=false;IsMouseOver=true;IsFocused=true' + end + end + object TPath + StyleName = 'path' + Align = Center + Data.Path = { + 04000000000000000000C8420000C84201000000000096430000C84201000000 + 0000484300009643030000000000C8420000C842} + Fill.Color = claWhite + HitTest = False + Size.Width = 10.000000000000000000 + Size.Height = 6.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + object TText + StyleName = 'text' + Align = Client + HitTest = False + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + Visible = False + end + end + object TLayout + StyleName = 'popupboxstyle' + Align = Center + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + TabOrder = 49 + object TRectangle + StyleName = 'background' + Align = Contents + Fill.Color = xFF202020 + HitTest = False + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + object TColorAnimation + StyleName = 'ColorAnimation1Style' + Duration = 0.100000001490116100 + PropertyName = 'Fill.Color' + StartValue = xFF202020 + StopValue = xFF404040 + Trigger = 'IsMouseOver=true;IsPressed=false' + TriggerInverse = 'IsMouseOver=false;IsPressed=false' + end + object TColorAnimation + StyleName = 'ColorAnimation2Style' + Duration = 0.100000001490116100 + PropertyName = 'Fill.Color' + StartValue = xFF404040 + StopValue = xFF2A82E2 + Trigger = 'IsMouseOver=true;IsPressed=true;' + TriggerInverse = 'IsMouseOver=true;IsPressed=false' + end + end + object TLayout + Align = FitRight + Position.X = 75.000000000000000000 + Size.Width = 25.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + object TPath + Align = Center + Data.Path = { + 0500000000000000000000000000803F010000000000803F0000803F01000000 + 0000003F0000000001000000000000000000803F030000000000000000000000} + Fill.Color = claWhite + HitTest = False + Margins.Top = -7.000000000000000000 + Size.Width = 8.000000000000000000 + Size.Height = 4.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + object TPath + Align = Center + Data.Path = { + 04000000000000000000000000000000010000000000803F0000000001000000 + 0000003F0000803F030000000000000000000000} + Fill.Color = claWhite + HitTest = False + Margins.Top = 6.000000000000000000 + Size.Width = 8.000000000000000000 + Size.Height = 4.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + object TText + StyleName = 'text' + Align = Client + HitTest = False + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Size.Width = 73.000000000000000000 + Size.Height = 23.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + end + end end diff --git a/styles/AErender Modern Animated/AERFMXStyleWindowsAnimated.style b/styles/AErender Modern Animated/AERFMXStyleWindowsAnimated.style index 74bbe0a..420732c 100644 --- a/styles/AErender Modern Animated/AERFMXStyleWindowsAnimated.style +++ b/styles/AErender Modern Animated/AERFMXStyleWindowsAnimated.style @@ -16,7 +16,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 1 + TabOrder = 2 object TRectangle StyleName = 'background' Align = Client @@ -73,7 +73,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 2 + TabOrder = 3 object TBrushObject StyleName = 'foreground' end @@ -154,7 +154,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 3 + TabOrder = 4 object TText StyleName = 'text' Align = Contents @@ -172,7 +172,7 @@ object TStyleContainer Size.Height = 50.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 4 + TabOrder = 5 object TRectangle StyleName = 'background' Align = Contents @@ -209,7 +209,7 @@ object TStyleContainer Size.Height = 100.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 5 + TabOrder = 6 FixedHeight = 17 object TRectangle StyleName = 'htrack' @@ -324,7 +324,7 @@ object TStyleContainer Size.Height = 38.333343505859380000 Size.PlatformDefault = False Visible = False - TabOrder = 6 + TabOrder = 7 object TLayout Align = Left Size.Width = 18.000000000000000000 @@ -435,7 +435,7 @@ object TStyleContainer StyleName = 'scrollbarbottombutton' Align = Center Visible = False - TabOrder = 7 + TabOrder = 8 object TRectangle StyleName = 'background' Align = Client @@ -491,7 +491,7 @@ object TStyleContainer StyleName = 'scrollbarleftbutton' Align = Center Visible = False - TabOrder = 8 + TabOrder = 9 object TRectangle StyleName = 'background' Align = Client @@ -548,7 +548,7 @@ object TStyleContainer StyleName = 'scrollbarrightbutton' Align = Center Visible = False - TabOrder = 9 + TabOrder = 10 object TRectangle StyleName = 'background' Align = Client @@ -605,7 +605,7 @@ object TStyleContainer StyleName = 'scrollbartopbutton' Align = Center Visible = False - TabOrder = 10 + TabOrder = 11 object TRectangle StyleName = 'background' Align = Client @@ -662,7 +662,7 @@ object TStyleContainer StyleName = 'scrollbarstyle' Align = Center Visible = False - TabOrder = 11 + TabOrder = 12 object TButton StyleName = 'leftbutton' Align = Left @@ -760,7 +760,7 @@ object TStyleContainer Size.Width = 100.000000000000000000 Size.Height = 25.000000000000000000 Size.PlatformDefault = False - TabOrder = 12 + TabOrder = 13 TrackingThumbScale = 1.000000000000000000 Visible = False Fill.Color = xFF202020 @@ -779,17 +779,17 @@ object TStyleContainer object TLayout StyleName = 'spinboxstyle' Align = Center - Size.Width = 112.199996948242200000 - Size.Height = 21.000000000000000000 + Size.Width = 138.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 13 + TabOrder = 14 object TRectangle StyleName = 'background' Align = Contents Fill.Color = xFF202020 - Size.Width = 112.199996948242200000 - Size.Height = 21.000000000000000000 + Size.Width = 138.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False Stroke.Color = xFF151515 object TColorAnimation @@ -819,13 +819,13 @@ object TStyleContainer Margins.Top = 2.000000000000000000 Margins.Right = 2.000000000000000000 Margins.Bottom = 2.000000000000000000 - Size.Width = 66.200073242187500000 - Size.Height = 17.000000000000000000 + Size.Width = 86.000000000000000000 + Size.Height = 20.000000000000000000 Size.PlatformDefault = False end object TButton StyleName = 'minusbutton' - Align = FitLeft + Align = Left CanFocus = False Cursor = crArrow Margins.Left = 2.000000000000000000 @@ -834,55 +834,47 @@ object TStyleContainer Margins.Bottom = 2.000000000000000000 Position.X = 2.000000000000000000 Position.Y = 2.000000000000000000 - Size.Width = 16.999954223632810000 - Size.Height = 17.000000000000000000 + Size.Width = 20.000000000000000000 + Size.Height = 20.000000000000000000 Size.PlatformDefault = False StyleLookup = 'buttonstyle' object TPath - Align = Client + Align = Center Data.Path = { 05000000000000000000803F00000000010000000000803F0000803F01000000 000000000000003F010000000000803F00000000030000000000803F00000000} Fill.Color = claWhite HitTest = False - Margins.Left = 6.000000000000000000 - Margins.Top = 6.000000000000000000 - Margins.Right = 6.000000000000000000 - Margins.Bottom = 6.000000000000000000 - Size.Width = 4.999954223632813000 - Size.Height = 5.000000000000000000 + Size.Width = 8.000000000000000000 + Size.Height = 8.000000000000000000 Size.PlatformDefault = False Stroke.Kind = None end end object TButton StyleName = 'plusbutton' - Align = FitRight + Align = Right CanFocus = False Cursor = crArrow Margins.Left = 2.000000000000000000 Margins.Top = 2.000000000000000000 Margins.Right = 2.000000000000000000 Margins.Bottom = 2.000000000000000000 - Position.X = 93.200027465820310000 + Position.X = 116.000000000000000000 Position.Y = 2.000000000000000000 - Size.Width = 16.999969482421880000 - Size.Height = 17.000000000000000000 + Size.Width = 20.000000000000000000 + Size.Height = 20.000000000000000000 Size.PlatformDefault = False StyleLookup = 'buttonstyle' object TPath - Align = Client + Align = Center Data.Path = { 0400000000000000000000000000000001000000000000000000803F01000000 0000803F0000003F030000000000000000000000} Fill.Color = claWhite HitTest = False - Margins.Left = 6.000000000000000000 - Margins.Top = 6.000000000000000000 - Margins.Right = 6.000000000000000000 - Margins.Bottom = 6.000000000000000000 - Size.Width = 4.999969482421875000 - Size.Height = 5.000000000000000000 + Size.Width = 8.000000000000000000 + Size.Height = 8.000000000000000000 Size.PlatformDefault = False Stroke.Kind = None end @@ -895,7 +887,7 @@ object TStyleContainer Size.Height = 100.999992370605500000 Size.PlatformDefault = False Visible = False - TabOrder = 14 + TabOrder = 15 object TRectangle StyleName = 'background' Align = Contents @@ -938,7 +930,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 15 + TabOrder = 16 object TRectangle StyleName = 'top' Align = Contents @@ -1042,7 +1034,7 @@ object TStyleContainer Size.Height = 131.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 16 + TabOrder = 17 object TBrushObject StyleName = 'AlternatingRowBackground' Brush.Color = xFF2C2C2C @@ -1152,7 +1144,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 17 + TabOrder = 18 object TText StyleName = 'text' Align = Client @@ -1175,7 +1167,7 @@ object TStyleContainer Size.Height = 24.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 18 + TabOrder = 19 object TGlyph StyleName = 'glyphstyle' Margins.Left = 2.000000000000000000 @@ -1220,7 +1212,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 19 + TabOrder = 20 object TRectangle StyleName = 'background' Align = Contents @@ -1254,7 +1246,7 @@ object TStyleContainer Size.Height = 131.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 20 + TabOrder = 21 object TBrushObject StyleName = 'AlternatingRowBackground' Brush.Color = x32787878 @@ -1375,7 +1367,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 21 + TabOrder = 22 object TRectangle StyleName = 'background' Align = Contents @@ -1427,7 +1419,7 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Visible = False - TabOrder = 22 + TabOrder = 23 object TRectangle StyleName = 'htrack' Align = Contents @@ -1492,7 +1484,7 @@ object TStyleContainer Size.Height = 126.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 23 + TabOrder = 24 object TLayout StyleName = 'htrack' Align = Contents @@ -1534,7 +1526,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 24 + TabOrder = 25 object TRectangle Align = Contents Fill.Color = xFF2A82E2 @@ -1729,7 +1721,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 26 + TabOrder = 39 object TRectangle Align = Contents Fill.Color = xFF2A82E2 @@ -1892,7 +1884,7 @@ object TStyleContainer Size.Height = 50.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 28 + TabOrder = 41 object TLine Align = Top LineType = Top @@ -1948,7 +1940,7 @@ object TStyleContainer StyleName = 'imagecellstyle' Align = Center Visible = False - TabOrder = 29 + TabOrder = 42 object TImage StyleName = 'image' MultiResBitmap = < @@ -1970,7 +1962,7 @@ object TStyleContainer StyleName = 'popupcellstyle' Align = Center Visible = False - TabOrder = 30 + TabOrder = 43 object TLayout Align = Right Position.X = 35.000000000000000000 @@ -2023,7 +2015,7 @@ object TStyleContainer StyleName = 'textcellstyle' Align = Center Visible = False - TabOrder = 31 + TabOrder = 44 object TLayout StyleName = 'content' Align = Contents @@ -2054,7 +2046,7 @@ object TStyleContainer Size.Height = 122.199996948242200000 Size.PlatformDefault = False Visible = False - TabOrder = 32 + TabOrder = 45 object TBrushObject StyleName = 'foreground' end @@ -2164,7 +2156,7 @@ object TStyleContainer Size.Height = 32.400001525878910000 Size.PlatformDefault = False Visible = False - TabOrder = 33 + TabOrder = 46 object TText StyleName = 'text' Align = Contents @@ -2202,7 +2194,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 34 + TabOrder = 47 object TRectangle StyleName = 'Rectangle1' Align = Center @@ -2313,7 +2305,7 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Visible = False - TabOrder = 35 + TabOrder = 48 object TRectangle StyleName = 'htrack' Align = Contents @@ -2375,7 +2367,7 @@ object TStyleContainer StyleName = 'smallscrollbarstyle' Align = Center Visible = False - TabOrder = 36 + TabOrder = 50 object TTrack StyleName = 'htrack' Align = Client @@ -2404,7 +2396,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 37 + TabOrder = 51 object TBrushObject StyleName = 'foreground' end @@ -2508,7 +2500,7 @@ object TStyleContainer Size.Height = 96.750000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 38 + TabOrder = 52 object TRectangle StyleName = 'Rectangle1' Align = Client @@ -2564,7 +2556,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 39 + TabOrder = 53 object TRectangle StyleName = 'closebutton' Align = Client @@ -2620,7 +2612,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 40 + TabOrder = 54 object TRectangle StyleName = 'maxbutton' Align = Client @@ -2671,7 +2663,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 41 + TabOrder = 56 object TRectangle StyleName = 'minbutton' Align = Client @@ -2723,7 +2715,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 42 + TabOrder = 57 object TRectangle StyleName = 'resbutton' Align = Client @@ -2769,13 +2761,13 @@ object TStyleContainer end end object TLayout - StyleName = 'windowborderstyle' + StyleName = 'toolwindowstyle' Align = Center Size.Width = 351.666687011718800000 Size.Height = 179.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 43 + TabOrder = 62 object TRectangle StyleName = 'mask' Align = Contents @@ -2790,9 +2782,9 @@ object TStyleContainer StyleName = 'left' Align = MostLeft Locked = True - Position.Y = 30.000000000000000000 + Position.Y = 25.000000000000000000 Size.Width = 5.000000000000000000 - Size.Height = 149.000000000000000000 + Size.Height = 154.000000000000000000 Size.PlatformDefault = False object TRectangle Align = MostLeft @@ -2800,7 +2792,7 @@ object TStyleContainer HitTest = False Sides = [Left, Right] Size.Width = 5.000000000000000000 - Size.Height = 144.000000000000000000 + Size.Height = 149.000000000000000000 Size.PlatformDefault = False Stroke.Color = xFF151515 end @@ -2810,7 +2802,7 @@ object TStyleContainer EnableDragHighlight = False Fill.Color = xFF202020 HitTest = False - Position.Y = 144.000000000000000000 + Position.Y = 149.000000000000000000 Sides = [Left, Bottom] Size.Width = 5.000000000000000000 Size.Height = 5.000000000000000000 @@ -2841,9 +2833,9 @@ object TStyleContainer Align = MostRight Locked = True Position.X = 346.666687011718800000 - Position.Y = 30.000000000000000000 + Position.Y = 25.000000000000000000 Size.Width = 5.000000000000000000 - Size.Height = 149.000000000000000000 + Size.Height = 154.000000000000000000 Size.PlatformDefault = False object TRectangle Align = MostRight @@ -2851,7 +2843,7 @@ object TStyleContainer HitTest = False Sides = [Left, Right] Size.Width = 5.000000000000000000 - Size.Height = 144.000000000000000000 + Size.Height = 149.000000000000000000 Size.PlatformDefault = False Stroke.Color = xFF151515 end @@ -2861,7 +2853,7 @@ object TStyleContainer EnableDragHighlight = False Fill.Color = xFF202020 HitTest = False - Position.Y = 144.000000000000000000 + Position.Y = 149.000000000000000000 Sides = [Bottom, Right] Size.Width = 5.000000000000000000 Size.Height = 5.000000000000000000 @@ -2892,7 +2884,7 @@ object TStyleContainer Locked = True HitTest = False Size.Width = 351.666687011718800000 - Size.Height = 30.000000000000000000 + Size.Height = 25.000000000000000000 Size.PlatformDefault = False Stroke.Color = xFF151515 object TLayout @@ -2901,7 +2893,7 @@ object TStyleContainer Locked = True HitTest = True Size.Width = 351.666687011718800000 - Size.Height = 30.000000000000000000 + Size.Height = 25.000000000000000000 Size.PlatformDefault = False end object TLayout @@ -2912,22 +2904,13 @@ object TStyleContainer Margins.Right = 1.000000000000000000 Margins.Bottom = 1.000000000000000000 Size.Width = 349.666687011718800000 - Size.Height = 28.000000000000000000 + Size.Height = 23.000000000000000000 Size.PlatformDefault = False object TLayout Align = Left Locked = True Size.Width = 9.000000000000000000 - Size.Height = 28.000000000000000000 - Size.PlatformDefault = False - end - object TLayout - StyleName = 'icon' - Locked = True - Position.X = 9.000000000000000000 - Position.Y = 7.000000000000000000 - Size.Width = 25.000000000000000000 - Size.Height = 21.000000000000000000 + Size.Height = 23.000000000000000000 Size.PlatformDefault = False end object TLayout @@ -2935,55 +2918,25 @@ object TStyleContainer Align = Client Locked = True Size.Width = 340.666687011718800000 - Size.Height = 28.000000000000000000 + Size.Height = 23.000000000000000000 Size.PlatformDefault = False object TSpeedButton StyleName = 'close' Align = Right Locked = True - Position.X = 290.666687011718800000 - Size.Width = 50.000000000000000000 - Size.Height = 28.000000000000000000 + Position.X = 315.666687011718800000 + Size.Width = 25.000000000000000000 + Size.Height = 23.000000000000000000 Size.PlatformDefault = False StyleLookup = 'closebuttonstyle' end - object TSpeedButton - StyleName = 'max' - Align = Right - Locked = True - Position.X = 260.666687011718800000 - Size.Width = 30.000000000000000000 - Size.Height = 28.000000000000000000 - Size.PlatformDefault = False - StyleLookup = 'maxbuttonstyle' - end - object TSpeedButton - StyleName = 'res' - Align = Right - Locked = True - Position.X = 230.666687011718800000 - Size.Width = 30.000000000000000000 - Size.Height = 28.000000000000000000 - Size.PlatformDefault = False - StyleLookup = 'resbuttonstyle' - end - object TSpeedButton - StyleName = 'min' - Align = Right - Locked = True - Position.X = 200.666687011718800000 - Size.Width = 30.000000000000000000 - Size.Height = 28.000000000000000000 - Size.PlatformDefault = False - StyleLookup = 'minbuttonstyle' - end object TText StyleName = 'title' Align = Client Locked = True HitTest = False - Size.Width = 200.666687011718800000 - Size.Height = 28.000000000000000000 + Size.Width = 315.666687011718800000 + Size.Height = 23.000000000000000000 Size.PlatformDefault = False Text = 'Title' TextSettings.FontColor = claWhite @@ -2997,7 +2950,7 @@ object TStyleContainer Locked = True HitTest = True Size.Width = 341.666687011718800000 - Size.Height = 144.000000000000000000 + Size.Height = 149.000000000000000000 Size.PlatformDefault = False end object TLayout @@ -3013,7 +2966,6 @@ object TStyleContainer StyleName = 'rect' Align = Bottom Fill.Color = xFF202020 - HitTest = False Sides = [Top, Bottom] Size.Width = 341.666687011718800000 Size.Height = 5.000000000000000000 @@ -3023,285 +2975,71 @@ object TStyleContainer end end object TLayout - StyleName = 'toolwindowstyle' + StyleName = 'radiobuttonstyle' Align = Center - Size.Width = 351.666687011718800000 - Size.Height = 179.000000000000000000 + Size.Width = 121.000000000000000000 + Size.Height = 21.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 44 - object TRectangle - StyleName = 'mask' - Align = Contents - Fill.Color = xFF101010 - Size.Width = 351.666687011718800000 - Size.Height = 179.000000000000000000 - Size.PlatformDefault = False - Stroke.Kind = None - Visible = False - end + TabOrder = 64 object TLayout - StyleName = 'left' - Align = MostLeft - Locked = True - Position.Y = 25.000000000000000000 - Size.Width = 5.000000000000000000 - Size.Height = 154.000000000000000000 + Align = Left + Size.Width = 21.000000000000000000 + Size.Height = 21.000000000000000000 Size.PlatformDefault = False - object TRectangle - Align = MostLeft - Fill.Color = xFF202020 - HitTest = False - Sides = [Left, Right] - Size.Width = 5.000000000000000000 - Size.Height = 149.000000000000000000 - Size.PlatformDefault = False - Stroke.Color = xFF151515 - end - object TRectangle - StyleName = 'Rectangle1' - Align = MostBottom - EnableDragHighlight = False + object TEllipse + StyleName = 'background' + Align = Center Fill.Color = xFF202020 + Locked = True HitTest = False - Position.Y = 149.000000000000000000 - Sides = [Left, Bottom] - Size.Width = 5.000000000000000000 - Size.Height = 5.000000000000000000 + Size.Width = 15.000000000000000000 + Size.Height = 15.000000000000000000 Size.PlatformDefault = False Stroke.Color = xFF151515 - object TLayout - StyleName = 'Layout3' - Align = MostRight - Position.X = 4.000000000000000000 - Size.Width = 1.000000000000000000 - Size.Height = 5.000000000000000000 + object TEllipse + StyleName = 'checkmark' + Align = Client + Fill.Color = xFF2A82E2 + Locked = True + HitTest = False + Opacity = 0.000000000000000000 + Margins.Left = 2.000000000000000000 + Margins.Top = 2.000000000000000000 + Margins.Right = 2.000000000000000000 + Margins.Bottom = 2.000000000000000000 + Size.Width = 11.000000000000000000 + Size.Height = 11.000000000000000000 Size.PlatformDefault = False - object TRectangle - StyleName = 'Rectangle1' - Align = Top - Fill.Color = xFF151515 - HitTest = False - Size.Width = 1.000000000000000000 - Size.Height = 1.000000000000000000 - Size.PlatformDefault = False - Stroke.Kind = None + Stroke.Kind = None + object TFloatAnimation + StyleName = 'opacityCheckmarkAnimation1' + Duration = 0.100000001490116100 + PropertyName = 'Opacity' + StartValue = 0.000000000000000000 + StopValue = 1.000000000000000000 + Trigger = 'IsChecked=true' + TriggerInverse = 'IsChecked=false' end - end - end - end - object TLayout - StyleName = 'right' - Align = MostRight - Locked = True - Position.X = 346.666687011718800000 - Position.Y = 25.000000000000000000 - Size.Width = 5.000000000000000000 - Size.Height = 154.000000000000000000 - Size.PlatformDefault = False - object TRectangle - Align = MostRight - Fill.Color = xFF202020 - HitTest = False - Sides = [Left, Right] - Size.Width = 5.000000000000000000 - Size.Height = 149.000000000000000000 - Size.PlatformDefault = False - Stroke.Color = xFF151515 - end - object TRectangle - StyleName = 'Rectangle1' - Align = MostBottom - EnableDragHighlight = False - Fill.Color = xFF202020 - HitTest = False - Position.Y = 149.000000000000000000 - Sides = [Bottom, Right] - Size.Width = 5.000000000000000000 - Size.Height = 5.000000000000000000 - Size.PlatformDefault = False - Stroke.Color = xFF151515 - object TLayout - StyleName = 'Layout3' - Align = MostLeft - Size.Width = 1.000000000000000000 - Size.Height = 5.000000000000000000 - Size.PlatformDefault = False - object TRectangle - StyleName = 'Rectangle1' - Align = Top - Fill.Color = xFF151515 - HitTest = False - Size.Width = 1.000000000000000000 - Size.Height = 1.000000000000000000 - Size.PlatformDefault = False - Stroke.Kind = None - end - end - end - end - object TRectangle - Align = MostTop - Fill.Color = xFF202020 - Locked = True - HitTest = False - Size.Width = 351.666687011718800000 - Size.Height = 25.000000000000000000 - Size.PlatformDefault = False - Stroke.Color = xFF151515 - object TLayout - StyleName = 'caption' - Align = Contents - Locked = True - HitTest = True - Size.Width = 351.666687011718800000 - Size.Height = 25.000000000000000000 - Size.PlatformDefault = False - end - object TLayout - Align = Client - Locked = True - Margins.Left = 1.000000000000000000 - Margins.Top = 1.000000000000000000 - Margins.Right = 1.000000000000000000 - Margins.Bottom = 1.000000000000000000 - Size.Width = 349.666687011718800000 - Size.Height = 23.000000000000000000 - Size.PlatformDefault = False - object TLayout - Align = Left - Locked = True - Size.Width = 9.000000000000000000 - Size.Height = 23.000000000000000000 - Size.PlatformDefault = False - end - object TLayout - StyleName = 'sysbtns' - Align = Client - Locked = True - Size.Width = 340.666687011718800000 - Size.Height = 23.000000000000000000 - Size.PlatformDefault = False - object TSpeedButton - StyleName = 'close' - Align = Right - Locked = True - Position.X = 315.666687011718800000 - Size.Width = 25.000000000000000000 - Size.Height = 23.000000000000000000 - Size.PlatformDefault = False - StyleLookup = 'closebuttonstyle' - end - object TText - StyleName = 'title' - Align = Client - Locked = True - HitTest = False - Size.Width = 315.666687011718800000 - Size.Height = 23.000000000000000000 - Size.PlatformDefault = False - Text = 'Title' - TextSettings.FontColor = claWhite - end - end - end - end - object TLayout - StyleName = 'client' - Align = Client - Locked = True - HitTest = True - Size.Width = 341.666687011718800000 - Size.Height = 149.000000000000000000 - Size.PlatformDefault = False - end - object TLayout - StyleName = 'bottom' - Align = Bottom - Locked = True - Position.X = 5.000000000000000000 - Position.Y = 174.000000000000000000 - Size.Width = 341.666687011718800000 - Size.Height = 5.000000000000000000 - Size.PlatformDefault = False - object TRectangle - StyleName = 'rect' - Align = Bottom - Fill.Color = xFF202020 - Sides = [Top, Bottom] - Size.Width = 341.666687011718800000 - Size.Height = 5.000000000000000000 - Size.PlatformDefault = False - Stroke.Color = xFF151515 - end - end - end - object TLayout - StyleName = 'radiobuttonstyle' - Align = Center - Size.Width = 121.000000000000000000 - Size.Height = 21.000000000000000000 - Size.PlatformDefault = False - Visible = False - TabOrder = 46 - object TLayout - Align = Left - Size.Width = 21.000000000000000000 - Size.Height = 21.000000000000000000 - Size.PlatformDefault = False - object TEllipse - StyleName = 'background' - Align = Center - Fill.Color = xFF202020 - Locked = True - HitTest = False - Size.Width = 15.000000000000000000 - Size.Height = 15.000000000000000000 - Size.PlatformDefault = False - Stroke.Color = xFF151515 - object TEllipse - StyleName = 'checkmark' - Align = Client - Fill.Color = xFF2A82E2 - Locked = True - HitTest = False - Opacity = 0.000000000000000000 - Margins.Left = 2.000000000000000000 - Margins.Top = 2.000000000000000000 - Margins.Right = 2.000000000000000000 - Margins.Bottom = 2.000000000000000000 - Size.Width = 11.000000000000000000 - Size.Height = 11.000000000000000000 - Size.PlatformDefault = False - Stroke.Kind = None - object TFloatAnimation - StyleName = 'opacityCheckmarkAnimation1' - Duration = 0.100000001490116100 - PropertyName = 'Opacity' - StartValue = 0.000000000000000000 - StopValue = 1.000000000000000000 - Trigger = 'IsChecked=true' - TriggerInverse = 'IsChecked=false' - end - end - object TColorAnimation - StyleName = 'radiobuttonColorAnimation1' - Duration = 0.100000001490116100 - Inverse = True - PropertyName = 'Fill.Color' - StartValue = xFF202020 - StopValue = xFF404040 - Trigger = 'IsMouseOver=true' - TriggerInverse = 'IsMouseOver=false' - end - object TColorAnimation - StyleName = 'ColorAnimation1Style' - Duration = 0.100000001490116100 - PropertyName = 'Stroke.Color' - StartValue = xFF151515 - StopValue = xFF2A82E2 - Trigger = 'IsChecked=true' - TriggerInverse = 'IsChecked=false' + end + object TColorAnimation + StyleName = 'radiobuttonColorAnimation1' + Duration = 0.100000001490116100 + Inverse = True + PropertyName = 'Fill.Color' + StartValue = xFF202020 + StopValue = xFF404040 + Trigger = 'IsMouseOver=true' + TriggerInverse = 'IsMouseOver=false' + end + object TColorAnimation + StyleName = 'ColorAnimation1Style' + Duration = 0.100000001490116100 + PropertyName = 'Stroke.Color' + StartValue = xFF151515 + StopValue = xFF2A82E2 + Trigger = 'IsChecked=true' + TriggerInverse = 'IsChecked=false' end end end @@ -3324,7 +3062,7 @@ object TStyleContainer Size.Height = 40.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 48 + TabOrder = 66 object TLayout Align = Bottom Position.Y = 34.000000000000000000 @@ -3399,7 +3137,7 @@ object TStyleContainer Size.Height = 40.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 50 + TabOrder = 70 object TLayout Align = Bottom Position.Y = 34.000000000000000000 @@ -3473,7 +3211,7 @@ object TStyleContainer Size.Height = 40.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 52 + TabOrder = 74 object TLayout Align = Bottom Position.Y = 34.000000000000000000 @@ -3541,87 +3279,33 @@ object TStyleContainer end end object TLayout - StyleName = 'progressbarministyle' + StyleName = 'comboeditstyle' Align = Center - Size.Width = 66.599998474121090000 - Size.Height = 56.399997711181640000 + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 55 - object TRectangle - StyleName = 'htrack' + TabOrder = 77 + object TBrushObject + StyleName = 'foreground' + end + object TFontObject + StyleName = 'font' + Font.Size = 13.000000000000000000 + end + object TLayout + StyleName = 'background' Align = Contents - Fill.Color = xFF202020 - Locked = True - HitTest = False - Size.Width = 66.599998474121090000 - Size.Height = 56.399997711181640000 + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 Size.PlatformDefault = False - Stroke.Kind = None object TRectangle - StyleName = 'hindicator' - Align = Left - Fill.Color = xFF2A82E2 - Locked = True + StyleName = 'Rectangle1' + Align = Client + Fill.Color = xFF202020 HitTest = False - Size.Width = 50.000000000000000000 - Size.Height = 56.399997711181640000 - Size.PlatformDefault = False - Stroke.Kind = None - end - end - object TRectangle - StyleName = 'vtrack' - Align = Contents - Fill.Color = xFF202020 - Locked = True - HitTest = False - Size.Width = 66.599998474121090000 - Size.Height = 56.399997711181640000 - Size.PlatformDefault = False - Stroke.Kind = None - object TRectangle - StyleName = 'vindicator' - Align = Bottom - Fill.Color = xFF2A82E2 - Locked = True - HitTest = False - Position.Y = 35.399997711181640000 - Size.Width = 66.599998474121090000 - Size.Height = 21.000000000000000000 - Size.PlatformDefault = False - Stroke.Kind = None - end - end - end - object TLayout - StyleName = 'comboeditstyle' - Align = Center - Size.Width = 100.000000000000000000 - Size.Height = 25.000000000000000000 - Size.PlatformDefault = False - Visible = False - TabOrder = 58 - object TBrushObject - StyleName = 'foreground' - end - object TFontObject - StyleName = 'font' - Font.Size = 13.000000000000000000 - end - object TLayout - StyleName = 'background' - Align = Contents - Size.Width = 100.000000000000000000 - Size.Height = 25.000000000000000000 - Size.PlatformDefault = False - object TRectangle - StyleName = 'Rectangle1' - Align = Client - Fill.Color = xFF202020 - HitTest = False - Size.Width = 100.000000000000000000 - Size.Height = 25.000000000000000000 + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 Size.PlatformDefault = False Stroke.Color = xFF202020 object TColorAnimation @@ -3727,6 +3411,7 @@ object TStyleContainer StyleName = 'aniindicatorstyle' Align = Center Visible = False + TabOrder = 81 object TArc StyleName = 'Arc' Align = Contents @@ -3736,7 +3421,8 @@ object TStyleContainer Size.Height = 50.000000000000000000 Size.PlatformDefault = False Stroke.Color = claWhite - Stroke.Thickness = 2.000000000000000000 + Stroke.Thickness = 4.000000000000000000 + Stroke.Cap = Round EndAngle = -90.000000000000000000 object TFloatAnimation StyleName = 'ani' @@ -3758,7 +3444,7 @@ object TStyleContainer Size.Height = 22.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 63 + TabOrder = 84 object TPath StyleName = 'Path1' Align = Center @@ -3791,7 +3477,7 @@ object TStyleContainer Size.Height = 33.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 67 + TabOrder = 90 object TLayout Align = Left Size.Width = 24.000000000000000000 @@ -3864,6 +3550,7 @@ object TStyleContainer Size.Height = 164.000000000000000000 Size.PlatformDefault = False Visible = False + TabOrder = 96 object TRectangle StyleName = 'background' Align = Contents @@ -3881,7 +3568,7 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Visible = False - TabOrder = 27 + TabOrder = 40 object TRectangle StyleName = 'htrack' Align = Contents @@ -3935,7 +3622,7 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Visible = False - TabOrder = 25 + TabOrder = 26 object TRectangle StyleName = 'htrack' Align = Contents @@ -3989,7 +3676,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 62 + TabOrder = 63 object TRectangle StyleName = 'bgrectangle' Align = Contents @@ -4088,6 +3775,7 @@ object TStyleContainer Size.Height = 2.000000000000000000 Size.PlatformDefault = False Visible = False + TabOrder = 65 object TRectangle StyleName = 'Rectangle1' Align = Client @@ -4126,6 +3814,7 @@ object TStyleContainer Size.Height = 96.000000000000000000 Size.PlatformDefault = False Visible = False + TabOrder = 73 object TRectangle StyleName = 'background' Align = Client @@ -4200,4 +3889,745 @@ object TStyleContainer end end end + object TLayout + StyleName = 'treeviewexpanderbuttonstyle' + Align = Center + Margins.Top = 1.000000000000000000 + Size.Width = 22.000000000000000000 + Size.Height = 22.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 76 + object TPath + StyleName = 'Path1' + Align = Center + Data.Path = { + 04000000000000000000C8420000C84201000000000096430000C84201000000 + 0000484300009643030000000000C8420000C842} + Fill.Color = claWhite + HitTest = False + RotationAngle = -90.000000000000000000 + Size.Width = 10.000000000000000000 + Size.Height = 6.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TFloatAnimation + StyleName = 'FloatAnimation1Style' + Duration = 0.000000000000000000 + Interpolation = Circular + PropertyName = 'RotationAngle' + StartValue = -90.000000000000000000 + StopValue = 0.000000000000000000 + Trigger = 'IsExpanded=true' + TriggerInverse = 'IsExpanded=false' + end + end + end + object TRectangle + StyleName = 'treeviewitemstyle' + Align = Center + Fill.Kind = None + HitTest = False + Sides = [Bottom] + Size.Width = 87.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + Visible = False + object TSpeedButton + StyleName = 'button' + Align = Left + Size.Width = 20.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'treeviewexpanderbuttonstyle' + end + object TLayout + Align = Contents + Margins.Left = 20.000000000000000000 + Size.Width = 67.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object TCheckBox + StyleName = 'check' + Align = Left + CanFocus = False + DisableFocusEffect = True + Size.Width = 20.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + end + object TGlyph + StyleName = 'glyphstyle' + Margins.Left = 2.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 2.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Align = Left + Position.X = 22.000000000000000000 + Position.Y = 1.000000000000000000 + Size.Width = 16.000000000000000000 + Size.Height = 38.000000000000000000 + Size.PlatformDefault = False + end + object TText + StyleName = 'text' + Align = Client + Locked = True + HitTest = False + Size.Width = 47.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + TextSettings.WordWrap = False + TextSettings.HorzAlign = Leading + end + end + object TRectangle + Align = Contents + Fill.Kind = None + HitTest = False + Margins.Bottom = 1.000000000000000000 + Sides = [Left] + Size.Width = 87.000000000000000000 + Size.Height = 39.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF2A82E2 + Stroke.Thickness = 2.000000000000000000 + end + end + object TLayout + StyleName = 'treeviewstyle' + Align = Center + Size.Width = 225.000000000000000000 + Size.Height = 259.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 83 + object TBrushObject + StyleName = 'AlternatingRowBackground' + Brush.Color = x0FFFFFFF + end + object TRectangle + StyleName = 'background' + Align = Contents + Fill.Color = xFF202020 + Locked = True + HitTest = False + Padding.Left = 1.000000000000000000 + Padding.Right = 1.000000000000000000 + Size.Width = 225.000000000000000000 + Size.Height = 259.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + object TLayout + StyleName = 'content' + Align = Client + ClipChildren = True + Margins.Top = 1.000000000000000000 + Size.Width = 205.000000000000000000 + Size.Height = 240.000000000000000000 + Size.PlatformDefault = False + object TRectangle + StyleName = 'selection' + Fill.Color = xFF2A82E2 + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + object TRectangle + StyleName = 'focusedselection' + Fill.Color = xFF2A82E2 + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + Stroke.Dash = Dot + end + end + object TScrollBar + StyleName = 'vscrollbar' + Align = Right + SmallChange = 0.000000000000000000 + Orientation = Vertical + Margins.Left = 2.000000000000000000 + Position.X = 208.000000000000000000 + Size.Width = 16.000000000000000000 + Size.Height = 241.000000000000000000 + Size.PlatformDefault = False + end + object TScrollBar + StyleName = 'hscrollbar' + Align = Bottom + SmallChange = 0.000000000000000000 + Orientation = Horizontal + Margins.Top = 2.000000000000000000 + Position.X = 1.000000000000000000 + Position.Y = 243.000000000000000000 + Size.Width = 223.000000000000000000 + Size.Height = 16.000000000000000000 + Size.PlatformDefault = False + end + object TSmallScrollBar + StyleName = 'vsmallscrollbar' + Align = Right + SmallChange = 0.000000000000000000 + Orientation = Vertical + Margins.Left = 2.000000000000000000 + Position.X = 99.000000000000000000 + Position.Y = 2.000000000000000000 + Size.Width = 8.000000000000000000 + Size.Height = 8.000000000000000000 + Size.PlatformDefault = False + Visible = False + end + object TSmallScrollBar + StyleName = 'hsmallscrollbar' + Align = Bottom + SmallChange = 0.000000000000000000 + Orientation = Horizontal + Margins.Top = 2.000000000000000000 + Position.X = 2.000000000000000000 + Position.Y = 113.000000000000000000 + Size.Width = 150.000000000000000000 + Size.Height = 8.000000000000000000 + Size.PlatformDefault = False + Visible = False + end + end + end + object TLayout + StyleName = 'progressbarfinishstyle' + Align = Center + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Visible = False + TabOrder = 69 + object TRectangle + StyleName = 'htrack' + Align = Contents + Fill.Color = xFF202020 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + object TRectangle + StyleName = 'hindicator' + Align = Left + Fill.Color = xFF2CE244 + Locked = True + HitTest = False + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Position.X = 1.000000000000000000 + Position.Y = 1.000000000000000000 + Size.Width = 50.000000000000000000 + Size.Height = 54.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + object TRectangle + StyleName = 'vtrack' + Align = Contents + Fill.Color = xFF202020 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + object TRectangle + StyleName = 'vindicator' + Align = Bottom + Fill.Color = xFF2CE244 + Locked = True + HitTest = False + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Position.X = 1.000000000000000000 + Position.Y = 34.399997711181640000 + Size.Width = 64.599998474121090000 + Size.Height = 21.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + end + object TLayout + StyleName = 'progressbarminifinishstyle' + Align = Center + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Visible = False + TabOrder = 80 + object TRectangle + StyleName = 'htrack' + Align = Contents + Fill.Color = xFF404040 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + object TRectangle + StyleName = 'hindicator' + Align = Left + Fill.Color = xFF2CE244 + Locked = True + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + object TRectangle + StyleName = 'vtrack' + Align = Contents + Fill.Color = xFF404040 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + object TRectangle + StyleName = 'vindicator' + Align = Bottom + Fill.Color = xFF2CE244 + Locked = True + HitTest = False + Position.Y = 35.399997711181640000 + Size.Width = 66.599998474121090000 + Size.Height = 21.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + end + object TLayout + StyleName = 'windowborderstyle' + Align = Center + Size.Width = 351.666687011718800000 + Size.Height = 179.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 59 + object TRectangle + StyleName = 'mask' + Align = Contents + Fill.Color = xFF101010 + Size.Width = 351.666687011718800000 + Size.Height = 179.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + Visible = False + end + object TLayout + StyleName = 'left' + Align = MostLeft + Locked = True + Position.Y = 32.000000000000000000 + Size.Width = 4.000000000000000000 + Size.Height = 147.000000000000000000 + Size.PlatformDefault = False + object TRectangle + Align = MostLeft + Fill.Color = xFF202020 + HitTest = False + Sides = [Left, Right] + Size.Width = 4.000000000000000000 + Size.Height = 143.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + end + object TRectangle + StyleName = 'Rectangle1' + Align = MostBottom + EnableDragHighlight = False + Fill.Color = xFF202020 + HitTest = False + Position.Y = 143.000000000000000000 + Sides = [Left, Bottom] + Size.Width = 4.000000000000000000 + Size.Height = 4.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + object TLayout + StyleName = 'Layout3' + Align = MostRight + Position.X = 3.000000000000000000 + Size.Width = 1.000000000000000000 + Size.Height = 4.000000000000000000 + Size.PlatformDefault = False + object TRectangle + StyleName = 'Rectangle1' + Align = Top + Fill.Color = xFF151515 + HitTest = False + Size.Width = 1.000000000000000000 + Size.Height = 1.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + end + end + object TLayout + StyleName = 'right' + Align = MostRight + Locked = True + Position.X = 347.666687011718800000 + Position.Y = 32.000000000000000000 + Size.Width = 4.000000000000000000 + Size.Height = 147.000000000000000000 + Size.PlatformDefault = False + object TRectangle + Align = MostRight + Fill.Color = xFF202020 + HitTest = False + Sides = [Left, Right] + Size.Width = 4.000000000000000000 + Size.Height = 143.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + end + object TRectangle + StyleName = 'Rectangle1' + Align = MostBottom + EnableDragHighlight = False + Fill.Color = xFF202020 + HitTest = False + Position.Y = 143.000000000000000000 + Sides = [Bottom, Right] + Size.Width = 4.000000000000000000 + Size.Height = 4.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + object TLayout + StyleName = 'Layout3' + Align = MostLeft + Size.Width = 1.000000000000000000 + Size.Height = 4.000000000000000000 + Size.PlatformDefault = False + object TRectangle + StyleName = 'Rectangle1' + Align = Top + Fill.Color = xFF151515 + HitTest = False + Size.Width = 1.000000000000000000 + Size.Height = 1.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + end + end + object TRectangle + Align = MostTop + Fill.Color = xFF202020 + Locked = True + HitTest = False + Size.Width = 351.666687011718800000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + object TLayout + StyleName = 'caption' + Align = Contents + Locked = True + HitTest = True + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Size.Width = 343.666687011718800000 + Size.Height = 28.000000000000000000 + Size.PlatformDefault = False + end + object TLayout + Align = Client + Locked = True + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Size.Width = 349.666687011718800000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + object TLayout + Align = Left + Locked = True + Size.Width = 9.000000000000000000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + end + object TLayout + StyleName = 'icon' + Locked = True + Position.X = 9.000000000000000000 + Position.Y = 7.000000000000000000 + Size.Width = 25.000000000000000000 + Size.Height = 21.000000000000000000 + Size.PlatformDefault = False + end + object TLayout + StyleName = 'sysbtns' + Align = Client + Locked = True + Size.Width = 340.666687011718800000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + object TSpeedButton + StyleName = 'close' + Align = Right + Locked = True + Position.X = 290.666687011718800000 + Size.Width = 50.000000000000000000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'closebuttonstyle' + end + object TSpeedButton + StyleName = 'max' + Align = Right + Locked = True + Position.X = 258.666687011718800000 + Size.Width = 32.000000000000000000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'maxbuttonstyle' + end + object TSpeedButton + StyleName = 'res' + Align = Right + Locked = True + Position.X = 226.666687011718800000 + Size.Width = 32.000000000000000000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'resbuttonstyle' + end + object TSpeedButton + StyleName = 'min' + Align = Right + Locked = True + Position.X = 194.666687011718800000 + Size.Width = 32.000000000000000000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'minbuttonstyle' + end + object TText + StyleName = 'title' + Align = Client + Locked = True + HitTest = False + Size.Width = 194.666687011718800000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + Text = 'Title' + TextSettings.FontColor = claWhite + end + end + end + end + object TLayout + StyleName = 'client' + Align = Client + Locked = True + HitTest = True + Size.Width = 343.666687011718800000 + Size.Height = 143.000000000000000000 + Size.PlatformDefault = False + end + object TLayout + StyleName = 'bottom' + Align = Bottom + Locked = True + Position.X = 4.000000000000000000 + Position.Y = 175.000000000000000000 + Size.Width = 343.666687011718800000 + Size.Height = 4.000000000000000000 + Size.PlatformDefault = False + object TRectangle + StyleName = 'rect' + Align = Bottom + Fill.Color = xFF202020 + HitTest = False + Sides = [Top, Bottom] + Size.Width = 343.666687011718800000 + Size.Height = 4.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + end + end + end + object TLayout + StyleName = 'arrowdowntoolbutton' + Align = Center + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 1 + object TRectangle + StyleName = 'background' + Align = Client + ClipChildren = True + ClipParent = True + Fill.Color = x00202020 + HitTest = False + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TColorAnimation + StyleName = 'buttonColorAnimation1' + Duration = 0.100000001490116100 + PropertyName = 'Fill.Color' + StartValue = x00202020 + StopValue = xFF404040 + Trigger = 'IsMouseOver=true;IsPressed=false;IsFocused=false' + TriggerInverse = 'IsMouseOver=false;IsPressed=false;IsFocused=false' + end + object TColorAnimation + StyleName = 'buttonColorAnimation2' + Duration = 0.100000001490116100 + PropertyName = 'Fill.Color' + StartValue = xFF404040 + StopValue = xFF17579C + Trigger = 'IsPressed=true;IsMouseOver=true;IsFocused=false' + end + object TColorAnimation + StyleName = 'buttonColorAnimation3' + Duration = 0.100000001490116100 + PropertyName = 'Fill.Color' + StartValue = xFF2A82E2 + StopValue = xFF17579C + Trigger = 'IsPressed=true;IsMouseOver=true;IsFocused=true' + TriggerInverse = 'IsPressed=false;IsMouseOver=true;IsFocused=true' + end + end + object TPath + StyleName = 'path' + Align = Center + Data.Path = { + 04000000000000000000C8420000C84201000000000096430000C84201000000 + 0000484300009643030000000000C8420000C842} + Fill.Color = claWhite + HitTest = False + Size.Width = 10.000000000000000000 + Size.Height = 6.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + object TText + StyleName = 'text' + Align = Client + HitTest = False + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + Visible = False + end + end + object TLayout + StyleName = 'popupboxstyle' + Align = Center + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + TabOrder = 49 + object TRectangle + StyleName = 'background' + Align = Contents + Fill.Color = xFF202020 + HitTest = False + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TColorAnimation + StyleName = 'ColorAnimation1Style' + Duration = 0.100000001490116100 + PropertyName = 'Fill.Color' + StartValue = xFF202020 + StopValue = xFF404040 + Trigger = 'IsMouseOver=true;IsPressed=false' + TriggerInverse = 'IsMouseOver=false;IsPressed=false' + end + object TColorAnimation + StyleName = 'ColorAnimation2Style' + Duration = 0.100000001490116100 + PropertyName = 'Fill.Color' + StartValue = xFF404040 + StopValue = xFF2A82E2 + Trigger = 'IsMouseOver=true;IsPressed=true;' + TriggerInverse = 'IsMouseOver=true;IsPressed=false' + end + end + object TLayout + Align = FitRight + Position.X = 75.000000000000000000 + Size.Width = 25.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + object TPath + Align = Center + Data.Path = { + 0500000000000000000000000000803F010000000000803F0000803F01000000 + 0000003F0000000001000000000000000000803F030000000000000000000000} + Fill.Color = claWhite + HitTest = False + Margins.Top = -7.000000000000000000 + Size.Width = 8.000000000000000000 + Size.Height = 4.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + object TPath + Align = Center + Data.Path = { + 04000000000000000000000000000000010000000000803F0000000001000000 + 0000003F0000803F030000000000000000000000} + Fill.Color = claWhite + HitTest = False + Margins.Top = 6.000000000000000000 + Size.Width = 8.000000000000000000 + Size.Height = 4.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + object TText + StyleName = 'text' + Align = Client + HitTest = False + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Size.Width = 73.000000000000000000 + Size.Height = 23.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + end + end end diff --git a/styles/AErender Modern/AERFMXStyleMacOS.style b/styles/AErender Modern/AERFMXStyleMacOS.style index 69d3dd6..c33b931 100644 --- a/styles/AErender Modern/AERFMXStyleMacOS.style +++ b/styles/AErender Modern/AERFMXStyleMacOS.style @@ -16,7 +16,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 2 + TabOrder = 3 object TRectangle StyleName = 'background' Align = Client @@ -75,7 +75,7 @@ object TStyleContainer Size.Height = 38.333343505859380000 Size.PlatformDefault = False Visible = False - TabOrder = 3 + TabOrder = 4 object TLayout Align = Left Size.Width = 18.000000000000000000 @@ -155,7 +155,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 4 + TabOrder = 5 object TBrushObject StyleName = 'foreground' end @@ -238,7 +238,7 @@ object TStyleContainer Size.Height = 131.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 5 + TabOrder = 6 object TBrushObject StyleName = 'AlternatingRowBackground' Brush.Color = x32787878 @@ -364,7 +364,7 @@ object TStyleContainer Size.Height = 50.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 6 + TabOrder = 7 object TRectangle StyleName = 'background' Align = Contents @@ -403,7 +403,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 7 + TabOrder = 8 object TRectangle StyleName = 'background' Align = Contents @@ -454,7 +454,7 @@ object TStyleContainer StyleName = 'imagecellstyle' Align = Center Visible = False - TabOrder = 8 + TabOrder = 9 object TImage StyleName = 'image' MultiResBitmap = < @@ -479,7 +479,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 9 + TabOrder = 10 object TText StyleName = 'text' Align = Contents @@ -497,7 +497,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 10 + TabOrder = 11 object TText StyleName = 'text' Align = Client @@ -520,7 +520,7 @@ object TStyleContainer Size.Height = 24.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 11 + TabOrder = 12 object TGlyph StyleName = 'glyphstyle' Margins.Left = 2.000000000000000000 @@ -567,7 +567,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 12 + TabOrder = 13 object TRectangle StyleName = 'background' Align = Contents @@ -603,7 +603,7 @@ object TStyleContainer Size.Height = 131.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 13 + TabOrder = 14 object TBrushObject StyleName = 'AlternatingRowBackground' Brush.Color = xFF2C2C2C @@ -709,7 +709,7 @@ object TStyleContainer StyleName = 'popupcellstyle' Align = Center Visible = False - TabOrder = 14 + TabOrder = 15 object TLayout Align = Right Position.X = 35.000000000000000000 @@ -765,7 +765,7 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Visible = False - TabOrder = 15 + TabOrder = 16 object TRectangle StyleName = 'htrack' Align = Contents @@ -838,7 +838,7 @@ object TStyleContainer Size.Height = 126.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 16 + TabOrder = 17 object TLayout StyleName = 'htrack' Align = Contents @@ -894,7 +894,7 @@ object TStyleContainer StyleName = 'scrollbarstyle' Align = Center Visible = False - TabOrder = 17 + TabOrder = 18 object TButton StyleName = 'leftbutton' Align = Left @@ -978,16 +978,16 @@ object TStyleContainer StyleName = 'spinboxstyle' Align = Center Size.Width = 112.199996948242200000 - Size.Height = 21.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 18 + TabOrder = 19 object TRectangle StyleName = 'background' Align = Contents Fill.Color = xFF202020 Size.Width = 112.199996948242200000 - Size.Height = 21.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False Stroke.Color = xFF151515 XRadius = 3.000000000000000000 @@ -1019,13 +1019,13 @@ object TStyleContainer Margins.Top = 2.000000000000000000 Margins.Right = 2.000000000000000000 Margins.Bottom = 2.000000000000000000 - Size.Width = 66.200073242187500000 - Size.Height = 17.000000000000000000 + Size.Width = 60.200077056884770000 + Size.Height = 20.000000000000000000 Size.PlatformDefault = False end object TButton StyleName = 'minusbutton' - Align = FitLeft + Align = Left CanFocus = False Cursor = crArrow Margins.Left = 2.000000000000000000 @@ -1034,55 +1034,47 @@ object TStyleContainer Margins.Bottom = 2.000000000000000000 Position.X = 2.000000000000000000 Position.Y = 2.000000000000000000 - Size.Width = 16.999954223632810000 - Size.Height = 17.000000000000000000 + Size.Width = 19.999950408935550000 + Size.Height = 20.000000000000000000 Size.PlatformDefault = False StyleLookup = 'buttonstyle' object TPath - Align = Client + Align = Center Data.Path = { 05000000000000000000803F00000000010000000000803F0000803F01000000 000000000000003F010000000000803F00000000030000000000803F00000000} Fill.Color = claWhite HitTest = False - Margins.Left = 6.000000000000000000 - Margins.Top = 6.000000000000000000 - Margins.Right = 6.000000000000000000 - Margins.Bottom = 6.000000000000000000 - Size.Width = 4.999954223632813000 - Size.Height = 5.000000000000000000 + Size.Width = 7.999950408935547000 + Size.Height = 8.000000000000000000 Size.PlatformDefault = False Stroke.Kind = None end end object TButton StyleName = 'plusbutton' - Align = FitRight + Align = Right CanFocus = False Cursor = crArrow Margins.Left = 2.000000000000000000 Margins.Top = 2.000000000000000000 Margins.Right = 2.000000000000000000 Margins.Bottom = 2.000000000000000000 - Position.X = 93.200027465820310000 + Position.X = 90.200027465820310000 Position.Y = 2.000000000000000000 - Size.Width = 16.999969482421880000 - Size.Height = 17.000000000000000000 + Size.Width = 19.999969482421880000 + Size.Height = 20.000000000000000000 Size.PlatformDefault = False StyleLookup = 'buttonstyle' object TPath - Align = Client + Align = Center Data.Path = { 0400000000000000000000000000000001000000000000000000803F01000000 0000803F0000003F030000000000000000000000} Fill.Color = claWhite HitTest = False - Margins.Left = 6.000000000000000000 - Margins.Top = 6.000000000000000000 - Margins.Right = 6.000000000000000000 - Margins.Bottom = 6.000000000000000000 - Size.Width = 4.999969482421875000 - Size.Height = 5.000000000000000000 + Size.Width = 7.999969482421875000 + Size.Height = 8.000000000000000000 Size.PlatformDefault = False Stroke.Kind = None end @@ -1095,7 +1087,7 @@ object TStyleContainer Size.Width = 100.000000000000000000 Size.Height = 25.000000000000000000 Size.PlatformDefault = False - TabOrder = 19 + TabOrder = 20 TrackingThumbScale = 1.000000000000000000 Visible = False Fill.Color = xFF202020 @@ -1119,7 +1111,7 @@ object TStyleContainer Size.Height = 100.999992370605500000 Size.PlatformDefault = False Visible = False - TabOrder = 20 + TabOrder = 21 object TRectangle StyleName = 'background' Align = Contents @@ -1167,7 +1159,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 21 + TabOrder = 22 object TRectangle StyleName = 'top' Align = Contents @@ -1233,7 +1225,7 @@ object TStyleContainer StyleName = 'textcellstyle' Align = Center Visible = False - TabOrder = 22 + TabOrder = 23 object TLayout StyleName = 'content' Align = Contents @@ -1331,7 +1323,7 @@ object TStyleContainer Size.Height = 100.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 23 + TabOrder = 24 FixedHeight = 17 object TRectangle StyleName = 'htrack' @@ -1456,7 +1448,7 @@ object TStyleContainer Size.Height = 122.199996948242200000 Size.PlatformDefault = False Visible = False - TabOrder = 24 + TabOrder = 25 object TBrushObject StyleName = 'foreground' end @@ -1569,7 +1561,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 25 + TabOrder = 26 object TRectangle StyleName = 'Rectangle1' Align = Center @@ -1680,7 +1672,7 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Visible = False - TabOrder = 26 + TabOrder = 27 object TRectangle StyleName = 'htrack' Align = Contents @@ -1753,7 +1745,7 @@ object TStyleContainer Size.Height = 32.400001525878910000 Size.PlatformDefault = False Visible = False - TabOrder = 27 + TabOrder = 28 object TText StyleName = 'text' Align = Contents @@ -1787,7 +1779,7 @@ object TStyleContainer StyleName = 'popoverstyle' Align = Center Visible = False - TabOrder = 28 + TabOrder = 29 object TRectangle StyleName = 'bg' Align = Client @@ -1822,18 +1814,17 @@ object TStyleContainer object TLayout StyleName = 'popupboxstyle' Align = Center - Size.Width = 196.500000000000000000 - Size.Height = 53.000000000000000000 + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 Size.PlatformDefault = False - Visible = False - TabOrder = 29 + TabOrder = 30 object TRectangle StyleName = 'background' Align = Contents Fill.Color = xFF202020 HitTest = False - Size.Width = 196.500000000000000000 - Size.Height = 53.000000000000000000 + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 Size.PlatformDefault = False Stroke.Kind = None XRadius = 3.000000000000000000 @@ -1858,10 +1849,10 @@ object TStyleContainer end end object TLayout - Align = Right - Position.X = 181.500000000000000000 - Size.Width = 15.000000000000000000 - Size.Height = 53.000000000000000000 + Align = FitRight + Position.X = 75.000000000000000000 + Size.Width = 25.000000000000000000 + Size.Height = 25.000000000000000000 Size.PlatformDefault = False object TPath Align = Center @@ -1898,9 +1889,10 @@ object TStyleContainer Margins.Top = 1.000000000000000000 Margins.Right = 1.000000000000000000 Margins.Bottom = 1.000000000000000000 - Size.Width = 179.500000000000000000 - Size.Height = 51.000000000000000000 + Size.Width = 73.000000000000000000 + Size.Height = 23.000000000000000000 Size.PlatformDefault = False + Text = 'Text' TextSettings.FontColor = claWhite end end @@ -1908,7 +1900,7 @@ object TStyleContainer StyleName = 'scrollbarbottombutton' Align = Center Visible = False - TabOrder = 30 + TabOrder = 31 object TRectangle StyleName = 'background' Align = Client @@ -1967,7 +1959,7 @@ object TStyleContainer StyleName = 'scrollbarleftbutton' Align = Center Visible = False - TabOrder = 31 + TabOrder = 32 object TRectangle StyleName = 'background' Align = Client @@ -2027,7 +2019,7 @@ object TStyleContainer StyleName = 'scrollbarrightbutton' Align = Center Visible = False - TabOrder = 32 + TabOrder = 33 object TRectangle StyleName = 'background' Align = Client @@ -2087,7 +2079,7 @@ object TStyleContainer StyleName = 'scrollbartopbutton' Align = Center Visible = False - TabOrder = 33 + TabOrder = 34 object TRectangle StyleName = 'background' Align = Client @@ -2150,7 +2142,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 34 + TabOrder = 35 object TBrushObject StyleName = 'foreground' end @@ -2257,7 +2249,7 @@ object TStyleContainer StyleName = 'smallscrollbarstyle' Align = Center Visible = False - TabOrder = 35 + TabOrder = 36 object TTrack StyleName = 'htrack' Align = Client @@ -2286,7 +2278,7 @@ object TStyleContainer Size.Height = 96.750000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 36 + TabOrder = 37 object TLayout StyleName = 'grip' Align = Client @@ -2335,7 +2327,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 37 + TabOrder = 38 object TRectangle Align = Contents Fill.Color = xFF2A82E2 @@ -2536,7 +2528,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 38 + TabOrder = 39 object TRectangle Align = Contents Fill.Color = xFF2A82E2 @@ -2701,16 +2693,16 @@ object TStyleContainer Size.Height = 50.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 39 + TabOrder = 40 object TLine Align = Top LineType = Top - Margins.Left = 3.000000000000000000 + Margins.Left = -1.000000000000000000 Margins.Top = 2.000000000000000000 - Margins.Right = 3.000000000000000000 - Position.X = 3.000000000000000000 + Margins.Right = -1.000000000000000000 + Position.X = -1.000000000000000000 Position.Y = 2.000000000000000000 - Size.Width = 44.000000000000000000 + Size.Width = 52.000000000000000000 Size.Height = 1.000000000000000000 Size.PlatformDefault = False Stroke.Color = xFF151515 @@ -2727,6 +2719,17 @@ object TStyleContainer Visible = False XRadius = 3.000000000000000000 YRadius = 3.000000000000000000 + object TLayout + StyleName = 'content' + Align = Client + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Size.Width = 48.000000000000000000 + Size.Height = 48.000000000000000000 + Size.PlatformDefault = False + end object TRectangle Align = Client Fill.Color = xFF202020 @@ -2735,27 +2738,14 @@ object TStyleContainer Size.Height = 50.000000000000000000 Size.PlatformDefault = False Stroke.Color = xFF151515 - XRadius = 3.000000000000000000 - YRadius = 3.000000000000000000 object TShadowEffect - Distance = 3.000000000000000000 - Direction = 90.000000000000000000 + Distance = 4.000000000000000000 + Direction = 45.000000000000000000 Softness = 0.500000000000000000 Opacity = 0.500000000000000000 ShadowColor = claBlack end end - object TLayout - StyleName = 'content' - Align = Client - Margins.Left = 1.000000000000000000 - Margins.Top = 1.000000000000000000 - Margins.Right = 1.000000000000000000 - Margins.Bottom = 1.000000000000000000 - Size.Width = 48.000000000000000000 - Size.Height = 48.000000000000000000 - Size.PlatformDefault = False - end end object TLayout StyleName = 'radiobuttonstyle' @@ -2764,7 +2754,7 @@ object TStyleContainer Size.Height = 21.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 40 + TabOrder = 41 object TLayout Align = Left Size.Width = 21.000000000000000000 @@ -2845,7 +2835,7 @@ object TStyleContainer Size.Height = 40.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 41 + TabOrder = 42 object TLayout Align = Bottom Position.Y = 34.000000000000000000 @@ -2919,7 +2909,7 @@ object TStyleContainer Size.Height = 40.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 42 + TabOrder = 43 object TLayout Align = Bottom Position.Y = 34.000000000000000000 @@ -3087,6 +3077,8 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 object TRectangle StyleName = 'hindicator' Align = Left @@ -3097,6 +3089,8 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 end end object TRectangle @@ -3109,6 +3103,8 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 object TRectangle StyleName = 'vindicator' Align = Bottom @@ -3120,6 +3116,8 @@ object TStyleContainer Size.Height = 21.000000000000000000 Size.PlatformDefault = False Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 end end end @@ -3477,6 +3475,7 @@ object TStyleContainer Size.Height = 2.000000000000000000 Size.PlatformDefault = False Visible = False + TabOrder = 59 object TRectangle StyleName = 'Rectangle1' Align = Client @@ -3516,6 +3515,7 @@ object TStyleContainer StyleName = 'aniindicatorstyle' Align = Center Visible = False + TabOrder = 60 object TArc StyleName = 'Arc' Align = Contents @@ -3525,7 +3525,8 @@ object TStyleContainer Size.Height = 50.000000000000000000 Size.PlatformDefault = False Stroke.Color = claWhite - Stroke.Thickness = 2.000000000000000000 + Stroke.Thickness = 4.000000000000000000 + Stroke.Cap = Round EndAngle = -90.000000000000000000 object TFloatAnimation StyleName = 'ani' @@ -3546,6 +3547,7 @@ object TStyleContainer Size.Height = 164.000000000000000000 Size.PlatformDefault = False Visible = False + TabOrder = 61 object TRectangle StyleName = 'background' Align = Contents @@ -3565,6 +3567,7 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Visible = False + TabOrder = 62 object TRectangle StyleName = 'htrack' Align = Contents @@ -3575,6 +3578,8 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 object TRectangle StyleName = 'hindicator' Align = Left @@ -3585,6 +3590,8 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 end end object TRectangle @@ -3597,6 +3604,8 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 object TRectangle StyleName = 'vindicator' Align = Bottom @@ -3608,6 +3617,8 @@ object TStyleContainer Size.Height = 21.000000000000000000 Size.PlatformDefault = False Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 end end end @@ -3618,7 +3629,7 @@ object TStyleContainer Size.Height = 96.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 1 + TabOrder = 2 object TRectangle StyleName = 'background' Align = Client @@ -3696,4 +3707,429 @@ object TStyleContainer end end end + object TLayout + StyleName = 'treeviewexpanderbuttonstyle' + Align = Center + Margins.Top = 1.000000000000000000 + Size.Width = 22.000000000000000000 + Size.Height = 22.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 65 + object TPath + StyleName = 'Path1' + Align = Center + Data.Path = { + 04000000000000000000C8420000C84201000000000096430000C84201000000 + 0000484300009643030000000000C8420000C842} + Fill.Color = claWhite + HitTest = False + RotationAngle = -90.000000000000000000 + Size.Width = 10.000000000000000000 + Size.Height = 6.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TFloatAnimation + StyleName = 'FloatAnimation1Style' + Duration = 0.000000000000000000 + Interpolation = Circular + PropertyName = 'RotationAngle' + StartValue = -90.000000000000000000 + StopValue = 0.000000000000000000 + Trigger = 'IsExpanded=true' + TriggerInverse = 'IsExpanded=false' + end + end + end + object TLayout + StyleName = 'treeviewstyle' + Align = Center + Size.Width = 225.000000000000000000 + Size.Height = 259.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 66 + object TBrushObject + StyleName = 'AlternatingRowBackground' + Brush.Color = x0FFFFFFF + end + object TRectangle + StyleName = 'background' + Align = Contents + Fill.Color = xFF202020 + Locked = True + HitTest = False + Padding.Left = 1.000000000000000000 + Padding.Right = 1.000000000000000000 + Size.Width = 225.000000000000000000 + Size.Height = 259.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + object TLayout + StyleName = 'content' + Align = Client + ClipChildren = True + Margins.Top = 1.000000000000000000 + Size.Width = 205.000000000000000000 + Size.Height = 240.000000000000000000 + Size.PlatformDefault = False + object TRectangle + StyleName = 'selection' + Fill.Color = xFF2A82E2 + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + end + object TRectangle + StyleName = 'focusedselection' + Fill.Color = xFF2A82E2 + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + Stroke.Dash = Dot + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + end + end + object TScrollBar + StyleName = 'vscrollbar' + Align = Right + SmallChange = 0.000000000000000000 + Orientation = Vertical + Margins.Left = 2.000000000000000000 + Position.X = 208.000000000000000000 + Size.Width = 16.000000000000000000 + Size.Height = 241.000000000000000000 + Size.PlatformDefault = False + end + object TScrollBar + StyleName = 'hscrollbar' + Align = Bottom + SmallChange = 0.000000000000000000 + Orientation = Horizontal + Margins.Top = 2.000000000000000000 + Position.X = 1.000000000000000000 + Position.Y = 243.000000000000000000 + Size.Width = 223.000000000000000000 + Size.Height = 16.000000000000000000 + Size.PlatformDefault = False + end + object TSmallScrollBar + StyleName = 'vsmallscrollbar' + Align = Right + SmallChange = 0.000000000000000000 + Orientation = Vertical + Margins.Left = 2.000000000000000000 + Position.X = 99.000000000000000000 + Position.Y = 2.000000000000000000 + Size.Width = 8.000000000000000000 + Size.Height = 8.000000000000000000 + Size.PlatformDefault = False + Visible = False + end + object TSmallScrollBar + StyleName = 'hsmallscrollbar' + Align = Bottom + SmallChange = 0.000000000000000000 + Orientation = Horizontal + Margins.Top = 2.000000000000000000 + Position.X = 2.000000000000000000 + Position.Y = 113.000000000000000000 + Size.Width = 150.000000000000000000 + Size.Height = 8.000000000000000000 + Size.PlatformDefault = False + Visible = False + end + end + end + object TRectangle + StyleName = 'treeviewitemstyle' + Align = Center + Fill.Kind = None + HitTest = False + Sides = [Bottom] + Size.Width = 87.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + Stroke.Join = Round + Visible = False + object TSpeedButton + StyleName = 'button' + Align = Left + Size.Width = 20.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'treeviewexpanderbuttonstyle' + end + object TLayout + Align = Contents + Margins.Left = 20.000000000000000000 + Size.Width = 67.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object TCheckBox + StyleName = 'check' + Align = Left + CanFocus = False + DisableFocusEffect = True + Size.Width = 20.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + end + object TGlyph + StyleName = 'glyphstyle' + Margins.Left = 2.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 2.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Align = Left + Position.X = 22.000000000000000000 + Position.Y = 1.000000000000000000 + Size.Width = 16.000000000000000000 + Size.Height = 38.000000000000000000 + Size.PlatformDefault = False + end + object TText + StyleName = 'text' + Align = Client + Locked = True + HitTest = False + Size.Width = 47.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + TextSettings.WordWrap = False + TextSettings.HorzAlign = Leading + end + end + object TRectangle + Align = Contents + Fill.Kind = None + HitTest = False + Margins.Bottom = 1.000000000000000000 + Sides = [Left] + Size.Width = 87.000000000000000000 + Size.Height = 39.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF2A82E2 + Stroke.Thickness = 2.000000000000000000 + end + end + object TLayout + StyleName = 'progressbarfinishstyle' + Align = Center + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Visible = False + TabOrder = 63 + object TRectangle + StyleName = 'htrack' + Align = Contents + Fill.Color = xFF202020 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + object TRectangle + StyleName = 'hindicator' + Align = Left + Fill.Color = xFF2CE244 + Locked = True + HitTest = False + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Position.X = 1.000000000000000000 + Position.Y = 1.000000000000000000 + Size.Width = 50.000000000000000000 + Size.Height = 54.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + end + end + object TRectangle + StyleName = 'vtrack' + Align = Contents + Fill.Color = xFF202020 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + object TRectangle + StyleName = 'vindicator' + Align = Bottom + Fill.Color = xFF2CE244 + Locked = True + HitTest = False + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Position.X = 1.000000000000000000 + Position.Y = 34.399997711181640000 + Size.Width = 64.599998474121090000 + Size.Height = 21.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + end + end + end + object TLayout + StyleName = 'progressbarminifinishstyle' + Align = Center + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Visible = False + TabOrder = 74 + object TRectangle + StyleName = 'htrack' + Align = Contents + Fill.Color = xFF404040 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 + object TRectangle + StyleName = 'hindicator' + Align = Left + Fill.Color = xFF2CE244 + Locked = True + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 + end + end + object TRectangle + StyleName = 'vtrack' + Align = Contents + Fill.Color = xFF404040 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 + object TRectangle + StyleName = 'vindicator' + Align = Bottom + Fill.Color = xFF2CE244 + Locked = True + HitTest = False + Position.Y = 35.399997711181640000 + Size.Width = 66.599998474121090000 + Size.Height = 21.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 2.000000000000000000 + YRadius = 2.000000000000000000 + end + end + end + object TLayout + StyleName = 'arrowdowntoolbutton' + Align = Center + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 1 + object TRectangle + StyleName = 'background' + Align = Client + ClipChildren = True + ClipParent = True + Corners = [TopLeft, BottomLeft] + Fill.Color = x00202020 + HitTest = False + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + XRadius = 3.000000000000000000 + YRadius = 3.000000000000000000 + object TColorAnimation + StyleName = 'buttonColorAnimation1' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = x00202020 + StopValue = xFF404040 + Trigger = 'IsMouseOver=true;IsPressed=false;IsFocused=false' + TriggerInverse = 'IsMouseOver=false;IsPressed=false;IsFocused=false' + end + object TColorAnimation + StyleName = 'buttonColorAnimation2' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = xFF404040 + StopValue = xFF17579C + Trigger = 'IsPressed=true;IsMouseOver=true;IsFocused=false' + end + object TColorAnimation + StyleName = 'buttonColorAnimation3' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = xFF2A82E2 + StopValue = xFF17579C + Trigger = 'IsPressed=true;IsMouseOver=true;IsFocused=true' + TriggerInverse = 'IsPressed=false;IsMouseOver=true;IsFocused=true' + end + end + object TPath + StyleName = 'path' + Align = Center + Data.Path = { + 04000000000000000000C8420000C84201000000000096430000C84201000000 + 0000484300009643030000000000C8420000C842} + Fill.Color = claWhite + HitTest = False + Size.Width = 10.000000000000000000 + Size.Height = 6.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + object TText + StyleName = 'text' + Align = Client + HitTest = False + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + Visible = False + end + end end diff --git a/styles/AErender Modern/AERFMXStyleWindows.style b/styles/AErender Modern/AERFMXStyleWindows.style index 8f14f6d..e4172b2 100644 --- a/styles/AErender Modern/AERFMXStyleWindows.style +++ b/styles/AErender Modern/AERFMXStyleWindows.style @@ -63,6 +63,7 @@ object TStyleContainer Size.Width = 100.000000000000000000 Size.Height = 25.000000000000000000 Size.PlatformDefault = False + Text = 'Text' TextSettings.FontColor = claWhite end end @@ -434,7 +435,7 @@ object TStyleContainer StyleName = 'scrollbarbottombutton' Align = Center Visible = False - TabOrder = 8 + TabOrder = 10 object TRectangle StyleName = 'background' Align = Client @@ -490,7 +491,7 @@ object TStyleContainer StyleName = 'scrollbarleftbutton' Align = Center Visible = False - TabOrder = 9 + TabOrder = 11 object TRectangle StyleName = 'background' Align = Client @@ -547,7 +548,7 @@ object TStyleContainer StyleName = 'scrollbarrightbutton' Align = Center Visible = False - TabOrder = 10 + TabOrder = 12 object TRectangle StyleName = 'background' Align = Client @@ -604,7 +605,7 @@ object TStyleContainer StyleName = 'scrollbartopbutton' Align = Center Visible = False - TabOrder = 11 + TabOrder = 13 object TRectangle StyleName = 'background' Align = Client @@ -661,7 +662,7 @@ object TStyleContainer StyleName = 'scrollbarstyle' Align = Center Visible = False - TabOrder = 12 + TabOrder = 14 object TButton StyleName = 'leftbutton' Align = Left @@ -758,7 +759,7 @@ object TStyleContainer Size.Width = 100.000000000000000000 Size.Height = 25.000000000000000000 Size.PlatformDefault = False - TabOrder = 13 + TabOrder = 16 TrackingThumbScale = 1.000000000000000000 Visible = False Fill.Color = xFF202020 @@ -781,7 +782,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 14 + TabOrder = 17 object TBrushObject StyleName = 'foreground' end @@ -885,7 +886,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 16 + TabOrder = 18 object TBrushObject StyleName = 'foreground' end @@ -1014,7 +1015,7 @@ object TStyleContainer Size.Height = 100.999992370605500000 Size.PlatformDefault = False Visible = False - TabOrder = 17 + TabOrder = 19 object TRectangle StyleName = 'background' Align = Contents @@ -1036,8 +1037,8 @@ object TStyleContainer Align = Center Fill.Color = xFF151515 HitTest = False - Size.Width = 50.000000000000000000 - Size.Height = 50.000000000000000000 + Size.Width = 64.000000000000000000 + Size.Height = 4.000000000000000000 Size.PlatformDefault = False Stroke.Kind = None Visible = False @@ -1057,7 +1058,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 18 + TabOrder = 21 object TRectangle StyleName = 'top' Align = Contents @@ -1161,7 +1162,7 @@ object TStyleContainer Size.Height = 131.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 19 + TabOrder = 23 object TBrushObject StyleName = 'AlternatingRowBackground' Brush.Color = xFF2C2C2C @@ -1271,7 +1272,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 20 + TabOrder = 24 object TText StyleName = 'text' Align = Client @@ -1294,7 +1295,7 @@ object TStyleContainer Size.Height = 24.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 21 + TabOrder = 25 object TGlyph StyleName = 'glyphstyle' Margins.Left = 2.000000000000000000 @@ -1339,7 +1340,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 22 + TabOrder = 26 object TRectangle StyleName = 'background' Align = Contents @@ -1373,7 +1374,7 @@ object TStyleContainer Size.Height = 131.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 23 + TabOrder = 27 object TBrushObject StyleName = 'AlternatingRowBackground' Brush.Color = x32787878 @@ -1418,6 +1419,7 @@ object TStyleContainer StyleName = 'selection' Fill.Color = xFF2A82E2 HitTest = False + Opacity = 0.250000000000000000 Size.Width = 50.000000000000000000 Size.Height = 50.000000000000000000 Size.PlatformDefault = False @@ -1495,7 +1497,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 24 + TabOrder = 28 object TRectangle StyleName = 'background' Align = Contents @@ -1547,7 +1549,7 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Visible = False - TabOrder = 26 + TabOrder = 29 object TRectangle StyleName = 'htrack' Align = Contents @@ -1601,7 +1603,7 @@ object TStyleContainer Size.Height = 126.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 27 + TabOrder = 30 object TLayout StyleName = 'htrack' Align = Contents @@ -1643,7 +1645,7 @@ object TStyleContainer Size.Height = 26.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 28 + TabOrder = 31 object TRectangle Align = Contents Fill.Color = xFF2A82E2 @@ -1834,18 +1836,18 @@ object TStyleContainer Margins.Top = 1.000000000000000000 Margins.Right = 1.000000000000000000 Margins.Bottom = 1.000000000000000000 - Size.Width = 73.000000000000000000 - Size.Height = 26.000000000000000000 + Size.Width = 123.444442749023400000 + Size.Height = 30.111110687255860000 Size.PlatformDefault = False Visible = False - TabOrder = 29 + TabOrder = 33 object TRectangle Align = Contents Fill.Color = xFF2A82E2 HitTest = False Opacity = 0.000099999997473788 - Size.Width = 73.000000000000000000 - Size.Height = 26.000000000000000000 + Size.Width = 123.444442749023400000 + Size.Height = 30.111110687255860000 Size.PlatformDefault = False Stroke.Kind = None object TFloatAnimation @@ -1862,13 +1864,14 @@ object TStyleContainer Align = Contents Fill.Color = xFF2A82E2 HitTest = False - Opacity = 0.000099999997473788 - Size.Width = 73.000000000000000000 - Size.Height = 26.000000000000000000 + Opacity = 0.000000000000000000 + Size.Width = 123.444442749023400000 + Size.Height = 30.111110687255860000 Size.PlatformDefault = False Stroke.Kind = None object TFloatAnimation Duration = 0.000200000009499490 + Inverse = True PropertyName = 'Opacity' StartValue = 0.000000000000000000 StopValue = 1.000000000000000000 @@ -1880,14 +1883,14 @@ object TStyleContainer StyleName = 'glyph' Align = Left Size.Width = 25.000000000000000000 - Size.Height = 26.000000000000000000 + Size.Height = 30.111110687255860000 Size.PlatformDefault = False object TLayout StyleName = 'checkmark' Align = Contents Opacity = 0.001000000047497451 Size.Width = 25.000000000000000000 - Size.Height = 26.000000000000000000 + Size.Height = 30.111110687255860000 Size.PlatformDefault = False object TPath Align = Center @@ -1935,7 +1938,7 @@ object TStyleContainer Position.X = 2.000000000000000000 Position.Y = 2.000000000000000000 Size.Width = 21.000000000000000000 - Size.Height = 22.000000000000000000 + Size.Height = 26.111110687255860000 Size.PlatformDefault = False end end @@ -1948,7 +1951,7 @@ object TStyleContainer Margins.Right = 8.000000000000000000 Position.X = 33.000000000000000000 Size.Width = 50.000000000000000000 - Size.Height = 26.000000000000000000 + Size.Height = 30.111110687255860000 Size.PlatformDefault = False TextSettings.FontColor = claWhite TextSettings.HorzAlign = Leading @@ -1960,9 +1963,9 @@ object TStyleContainer HitTest = False Margins.Left = 12.000000000000000000 Margins.Right = 6.000000000000000000 - Position.X = -3.000000000000000000 + Position.X = 47.444442749023440000 Size.Width = 50.000000000000000000 - Size.Height = 26.000000000000000000 + Size.Height = 30.111110687255860000 Size.PlatformDefault = False TextSettings.FontColor = claWhite TextSettings.HorzAlign = Leading @@ -1970,9 +1973,9 @@ object TStyleContainer object TLayout StyleName = 'submark' Align = Right - Position.X = 53.000000000000000000 + Position.X = 103.444442749023400000 Size.Width = 20.000000000000000000 - Size.Height = 26.000000000000000000 + Size.Height = 30.111110687255860000 Size.PlatformDefault = False object TPath Align = Center @@ -1982,8 +1985,8 @@ object TStyleContainer Fill.Color = claWhite Locked = True HitTest = False - Size.Width = 7.000000000000000000 - Size.Height = 8.000000000000000000 + Size.Width = 6.000000000000000000 + Size.Height = 10.000000000000000000 Size.PlatformDefault = False Stroke.Kind = None end @@ -1992,24 +1995,20 @@ object TStyleContainer object TLayout StyleName = 'menuseparatorstyle' Align = Center - Margins.Left = 1.000000000000000000 - Margins.Top = 1.000000000000000000 - Margins.Right = 1.000000000000000000 - Margins.Bottom = 1.000000000000000000 Size.Width = 50.000000000000000000 Size.Height = 50.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 30 + TabOrder = 34 object TLine Align = Top LineType = Top - Margins.Left = 3.000000000000000000 + Margins.Left = -1.000000000000000000 Margins.Top = 2.000000000000000000 - Margins.Right = 3.000000000000000000 - Position.X = 3.000000000000000000 + Margins.Right = -1.000000000000000000 + Position.X = -1.000000000000000000 Position.Y = 2.000000000000000000 - Size.Width = 44.000000000000000000 + Size.Width = 52.000000000000000000 Size.Height = 1.000000000000000000 Size.PlatformDefault = False Stroke.Color = xFF151515 @@ -2033,8 +2032,8 @@ object TStyleContainer Size.PlatformDefault = False Stroke.Color = xFF151515 object TShadowEffect - Distance = 3.000000000000000000 - Direction = 90.000000000000000000 + Distance = 4.000000000000000000 + Direction = 45.000000000000000000 Softness = 0.500000000000000000 Opacity = 0.500000000000000000 ShadowColor = claBlack @@ -2056,7 +2055,7 @@ object TStyleContainer StyleName = 'imagecellstyle' Align = Center Visible = False - TabOrder = 31 + TabOrder = 36 object TImage StyleName = 'image' MultiResBitmap = < @@ -2081,7 +2080,7 @@ object TStyleContainer Size.Height = 43.500000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 32 + TabOrder = 37 object TLayout Align = Right Position.X = 172.000000000000000000 @@ -2134,7 +2133,7 @@ object TStyleContainer StyleName = 'textcellstyle' Align = Center Visible = False - TabOrder = 33 + TabOrder = 38 object TLayout StyleName = 'content' Align = Contents @@ -2165,7 +2164,7 @@ object TStyleContainer Size.Height = 122.199996948242200000 Size.PlatformDefault = False Visible = False - TabOrder = 34 + TabOrder = 39 object TBrushObject StyleName = 'foreground' end @@ -2276,7 +2275,7 @@ object TStyleContainer Size.Height = 32.400001525878910000 Size.PlatformDefault = False Visible = False - TabOrder = 35 + TabOrder = 40 object TText StyleName = 'text' Align = Contents @@ -2339,16 +2338,16 @@ object TStyleContainer StyleName = 'spinboxstyle' Align = Center Size.Width = 112.199996948242200000 - Size.Height = 21.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 36 + TabOrder = 42 object TRectangle StyleName = 'background' Align = Contents Fill.Color = xFF202020 Size.Width = 112.199996948242200000 - Size.Height = 21.000000000000000000 + Size.Height = 24.000000000000000000 Size.PlatformDefault = False Stroke.Color = xFF151515 object TColorAnimation @@ -2378,13 +2377,13 @@ object TStyleContainer Margins.Top = 2.000000000000000000 Margins.Right = 2.000000000000000000 Margins.Bottom = 2.000000000000000000 - Size.Width = 66.200073242187500000 - Size.Height = 17.000000000000000000 + Size.Width = 60.199996948242190000 + Size.Height = 20.000000000000000000 Size.PlatformDefault = False end object TButton StyleName = 'minusbutton' - Align = FitLeft + Align = Left CanFocus = False Cursor = crArrow Margins.Left = 2.000000000000000000 @@ -2393,55 +2392,47 @@ object TStyleContainer Margins.Bottom = 2.000000000000000000 Position.X = 2.000000000000000000 Position.Y = 2.000000000000000000 - Size.Width = 16.999954223632810000 - Size.Height = 17.000000000000000000 + Size.Width = 20.000000000000000000 + Size.Height = 20.000000000000000000 Size.PlatformDefault = False StyleLookup = 'buttonstyle' object TPath - Align = Client + Align = Center Data.Path = { 05000000000000000000803F00000000010000000000803F0000803F01000000 000000000000003F010000000000803F00000000030000000000803F00000000} Fill.Color = claWhite HitTest = False - Margins.Left = 6.000000000000000000 - Margins.Top = 6.000000000000000000 - Margins.Right = 6.000000000000000000 - Margins.Bottom = 6.000000000000000000 - Size.Width = 4.999954223632813000 - Size.Height = 5.000000000000000000 + Size.Width = 8.000000000000000000 + Size.Height = 8.000000000000000000 Size.PlatformDefault = False Stroke.Kind = None end end object TButton StyleName = 'plusbutton' - Align = FitRight + Align = Right CanFocus = False Cursor = crArrow Margins.Left = 2.000000000000000000 Margins.Top = 2.000000000000000000 Margins.Right = 2.000000000000000000 Margins.Bottom = 2.000000000000000000 - Position.X = 93.200027465820310000 + Position.X = 90.199996948242190000 Position.Y = 2.000000000000000000 - Size.Width = 16.999969482421880000 - Size.Height = 17.000000000000000000 + Size.Width = 20.000000000000000000 + Size.Height = 20.000000000000000000 Size.PlatformDefault = False StyleLookup = 'buttonstyle' object TPath - Align = Client + Align = Center Data.Path = { 0400000000000000000000000000000001000000000000000000803F01000000 0000803F0000003F030000000000000000000000} Fill.Color = claWhite HitTest = False - Margins.Left = 6.000000000000000000 - Margins.Top = 6.000000000000000000 - Margins.Right = 6.000000000000000000 - Margins.Bottom = 6.000000000000000000 - Size.Width = 4.999969482421875000 - Size.Height = 5.000000000000000000 + Size.Width = 8.000000000000000000 + Size.Height = 8.000000000000000000 Size.PlatformDefault = False Stroke.Kind = None end @@ -2454,7 +2445,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 37 + TabOrder = 43 object TRectangle StyleName = 'Rectangle1' Align = Center @@ -2537,7 +2528,7 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Visible = False - TabOrder = 38 + TabOrder = 45 object TRectangle StyleName = 'htrack' Align = Contents @@ -2602,7 +2593,7 @@ object TStyleContainer Size.Height = 103.500000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 39 + TabOrder = 46 object TRectangle Align = Contents Fill.Kind = None @@ -2671,7 +2662,7 @@ object TStyleContainer Size.Height = 44.500000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 40 + TabOrder = 47 object TRectangle StyleName = 'Rectangle1' Align = Client @@ -2850,7 +2841,7 @@ object TStyleContainer StyleName = 'popoverstyle' Align = Center Visible = False - TabOrder = 41 + TabOrder = 48 object TRectangle StyleName = 'bg' Align = Client @@ -2883,18 +2874,18 @@ object TStyleContainer object TLayout StyleName = 'popupboxstyle' Align = Center - Size.Width = 196.500000000000000000 - Size.Height = 53.000000000000000000 + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 42 + TabOrder = 49 object TRectangle StyleName = 'background' Align = Contents Fill.Color = xFF202020 HitTest = False - Size.Width = 196.500000000000000000 - Size.Height = 53.000000000000000000 + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 Size.PlatformDefault = False Stroke.Kind = None object TColorAnimation @@ -2917,10 +2908,10 @@ object TStyleContainer end end object TLayout - Align = Right - Position.X = 181.500000000000000000 - Size.Width = 15.000000000000000000 - Size.Height = 53.000000000000000000 + Align = FitRight + Position.X = 75.000000000000000000 + Size.Width = 25.000000000000000000 + Size.Height = 25.000000000000000000 Size.PlatformDefault = False object TPath Align = Center @@ -2957,9 +2948,10 @@ object TStyleContainer Margins.Top = 1.000000000000000000 Margins.Right = 1.000000000000000000 Margins.Bottom = 1.000000000000000000 - Size.Width = 179.500000000000000000 - Size.Height = 51.000000000000000000 + Size.Width = 73.000000000000000000 + Size.Height = 23.000000000000000000 Size.PlatformDefault = False + Text = 'Text' TextSettings.FontColor = claWhite end end @@ -2979,7 +2971,7 @@ object TStyleContainer StyleName = 'smallscrollbarstyle' Align = Center Visible = False - TabOrder = 43 + TabOrder = 51 object TTrack StyleName = 'htrack' Align = Client @@ -3008,7 +3000,7 @@ object TStyleContainer Size.Height = 96.750000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 44 + TabOrder = 52 object TRectangle StyleName = 'Rectangle1' Align = Client @@ -3076,7 +3068,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 45 + TabOrder = 53 object TRectangle StyleName = 'closebutton' Align = Client @@ -3131,7 +3123,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 46 + TabOrder = 54 object TRectangle StyleName = 'maxbutton' Align = Client @@ -3182,7 +3174,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 47 + TabOrder = 55 object TRectangle StyleName = 'resbutton' Align = Client @@ -3234,7 +3226,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 48 + TabOrder = 56 object TRectangle StyleName = 'minbutton' Align = Client @@ -3286,7 +3278,7 @@ object TStyleContainer Size.Height = 179.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 49 + TabOrder = 57 object TRectangle StyleName = 'mask' Align = Contents @@ -3494,335 +3486,81 @@ object TStyleContainer end end object TLayout - StyleName = 'windowborderstyle' + StyleName = 'radiobuttonstyle' Align = Center - Size.Width = 351.666687011718800000 - Size.Height = 179.000000000000000000 + Size.Width = 121.000000000000000000 + Size.Height = 21.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 50 - object TRectangle - StyleName = 'mask' - Align = Contents - Fill.Color = xFF101010 - Size.Width = 351.666687011718800000 - Size.Height = 179.000000000000000000 - Size.PlatformDefault = False - Stroke.Kind = None - Visible = False - end + TabOrder = 59 object TLayout - StyleName = 'left' - Align = MostLeft - Locked = True - Position.Y = 30.000000000000000000 - Size.Width = 5.000000000000000000 - Size.Height = 149.000000000000000000 + Align = Left + Size.Width = 21.000000000000000000 + Size.Height = 21.000000000000000000 Size.PlatformDefault = False - object TRectangle - Align = MostLeft - Fill.Color = xFF202020 - HitTest = False - Sides = [Left, Right] - Size.Width = 5.000000000000000000 - Size.Height = 144.000000000000000000 - Size.PlatformDefault = False - Stroke.Color = xFF151515 - end - object TRectangle - StyleName = 'Rectangle1' - Align = MostBottom - EnableDragHighlight = False + object TEllipse + StyleName = 'background' + Align = Center Fill.Color = xFF202020 + Locked = True HitTest = False - Position.Y = 144.000000000000000000 - Sides = [Left, Bottom] - Size.Width = 5.000000000000000000 - Size.Height = 5.000000000000000000 + Size.Width = 15.000000000000000000 + Size.Height = 15.000000000000000000 Size.PlatformDefault = False Stroke.Color = xFF151515 - object TLayout - StyleName = 'Layout3' - Align = MostRight - Position.X = 4.000000000000000000 - Size.Width = 1.000000000000000000 - Size.Height = 5.000000000000000000 + object TEllipse + StyleName = 'checkmark' + Align = Client + Fill.Color = xFF2A82E2 + Locked = True + HitTest = False + Opacity = 0.000000000000000000 + Margins.Left = 2.000000000000000000 + Margins.Top = 2.000000000000000000 + Margins.Right = 2.000000000000000000 + Margins.Bottom = 2.000000000000000000 + Size.Width = 11.000000000000000000 + Size.Height = 11.000000000000000000 Size.PlatformDefault = False - object TRectangle - StyleName = 'Rectangle1' - Align = Top - Fill.Color = xFF151515 - HitTest = False - Size.Width = 1.000000000000000000 - Size.Height = 1.000000000000000000 - Size.PlatformDefault = False - Stroke.Kind = None + Stroke.Kind = None + object TFloatAnimation + StyleName = 'opacityCheckmarkAnimation1' + Duration = 0.000000000000000000 + PropertyName = 'Opacity' + StartValue = 0.000000000000000000 + StopValue = 1.000000000000000000 + Trigger = 'IsChecked=true' + TriggerInverse = 'IsChecked=false' end end + object TColorAnimation + StyleName = 'radiobuttonColorAnimation1' + Duration = 0.000000000000000000 + Inverse = True + PropertyName = 'Fill.Color' + StartValue = xFF202020 + StopValue = xFF404040 + Trigger = 'IsMouseOver=true' + TriggerInverse = 'IsMouseOver=false' + end + object TColorAnimation + StyleName = 'ColorAnimation1Style' + Duration = 0.000000000000000000 + PropertyName = 'Stroke.Color' + StartValue = xFF151515 + StopValue = xFF2A82E2 + Trigger = 'IsChecked=true' + TriggerInverse = 'IsChecked=false' + end end end - object TLayout - StyleName = 'right' - Align = MostRight + object TText + StyleName = 'text' + Align = Client Locked = True - Position.X = 346.666687011718800000 - Position.Y = 30.000000000000000000 - Size.Width = 5.000000000000000000 - Size.Height = 149.000000000000000000 - Size.PlatformDefault = False - object TRectangle - Align = MostRight - Fill.Color = xFF202020 - HitTest = False - Sides = [Left, Right] - Size.Width = 5.000000000000000000 - Size.Height = 144.000000000000000000 - Size.PlatformDefault = False - Stroke.Color = xFF151515 - end - object TRectangle - StyleName = 'Rectangle1' - Align = MostBottom - EnableDragHighlight = False - Fill.Color = xFF202020 - HitTest = False - Position.Y = 144.000000000000000000 - Sides = [Bottom, Right] - Size.Width = 5.000000000000000000 - Size.Height = 5.000000000000000000 - Size.PlatformDefault = False - Stroke.Color = xFF151515 - object TLayout - StyleName = 'Layout3' - Align = MostLeft - Size.Width = 1.000000000000000000 - Size.Height = 5.000000000000000000 - Size.PlatformDefault = False - object TRectangle - StyleName = 'Rectangle1' - Align = Top - Fill.Color = xFF151515 - HitTest = False - Size.Width = 1.000000000000000000 - Size.Height = 1.000000000000000000 - Size.PlatformDefault = False - Stroke.Kind = None - end - end - end - end - object TRectangle - Align = MostTop - Fill.Color = xFF202020 - Locked = True - HitTest = False - Size.Width = 351.666687011718800000 - Size.Height = 30.000000000000000000 - Size.PlatformDefault = False - Stroke.Color = xFF151515 - object TLayout - StyleName = 'caption' - Align = Contents - Locked = True - HitTest = True - Size.Width = 351.666687011718800000 - Size.Height = 30.000000000000000000 - Size.PlatformDefault = False - end - object TLayout - Align = Client - Locked = True - Margins.Left = 1.000000000000000000 - Margins.Top = 1.000000000000000000 - Margins.Right = 1.000000000000000000 - Margins.Bottom = 1.000000000000000000 - Size.Width = 349.666687011718800000 - Size.Height = 28.000000000000000000 - Size.PlatformDefault = False - object TLayout - Align = Left - Locked = True - Size.Width = 9.000000000000000000 - Size.Height = 28.000000000000000000 - Size.PlatformDefault = False - end - object TLayout - StyleName = 'icon' - Locked = True - Position.X = 9.000000000000000000 - Position.Y = 7.000000000000000000 - Size.Width = 25.000000000000000000 - Size.Height = 21.000000000000000000 - Size.PlatformDefault = False - end - object TLayout - StyleName = 'sysbtns' - Align = Client - Locked = True - Size.Width = 340.666687011718800000 - Size.Height = 28.000000000000000000 - Size.PlatformDefault = False - object TSpeedButton - StyleName = 'close' - Align = Right - Locked = True - Position.X = 290.666687011718800000 - Size.Width = 50.000000000000000000 - Size.Height = 28.000000000000000000 - Size.PlatformDefault = False - StyleLookup = 'closebuttonstyle' - end - object TSpeedButton - StyleName = 'max' - Align = Right - Locked = True - Position.X = 260.666687011718800000 - Size.Width = 30.000000000000000000 - Size.Height = 28.000000000000000000 - Size.PlatformDefault = False - StyleLookup = 'maxbuttonstyle' - end - object TSpeedButton - StyleName = 'res' - Align = Right - Locked = True - Position.X = 230.666687011718800000 - Size.Width = 30.000000000000000000 - Size.Height = 28.000000000000000000 - Size.PlatformDefault = False - StyleLookup = 'resbuttonstyle' - end - object TSpeedButton - StyleName = 'min' - Align = Right - Locked = True - Position.X = 200.666687011718800000 - Size.Width = 30.000000000000000000 - Size.Height = 28.000000000000000000 - Size.PlatformDefault = False - StyleLookup = 'minbuttonstyle' - end - object TText - StyleName = 'title' - Align = Client - Locked = True - HitTest = False - Size.Width = 200.666687011718800000 - Size.Height = 28.000000000000000000 - Size.PlatformDefault = False - Text = 'Title' - TextSettings.FontColor = claWhite - end - end - end - end - object TLayout - StyleName = 'client' - Align = Client - Locked = True - HitTest = True - Size.Width = 341.666687011718800000 - Size.Height = 144.000000000000000000 - Size.PlatformDefault = False - end - object TLayout - StyleName = 'bottom' - Align = Bottom - Locked = True - Position.X = 5.000000000000000000 - Position.Y = 174.000000000000000000 - Size.Width = 341.666687011718800000 - Size.Height = 5.000000000000000000 - Size.PlatformDefault = False - object TRectangle - StyleName = 'rect' - Align = Bottom - Fill.Color = xFF202020 - HitTest = False - Sides = [Top, Bottom] - Size.Width = 341.666687011718800000 - Size.Height = 5.000000000000000000 - Size.PlatformDefault = False - Stroke.Color = xFF151515 - end - end - end - object TLayout - StyleName = 'radiobuttonstyle' - Align = Center - Size.Width = 121.000000000000000000 - Size.Height = 21.000000000000000000 - Size.PlatformDefault = False - Visible = False - TabOrder = 52 - object TLayout - Align = Left - Size.Width = 21.000000000000000000 - Size.Height = 21.000000000000000000 - Size.PlatformDefault = False - object TEllipse - StyleName = 'background' - Align = Center - Fill.Color = xFF202020 - Locked = True - HitTest = False - Size.Width = 15.000000000000000000 - Size.Height = 15.000000000000000000 - Size.PlatformDefault = False - Stroke.Color = xFF151515 - object TEllipse - StyleName = 'checkmark' - Align = Client - Fill.Color = xFF2A82E2 - Locked = True - HitTest = False - Opacity = 0.000000000000000000 - Margins.Left = 2.000000000000000000 - Margins.Top = 2.000000000000000000 - Margins.Right = 2.000000000000000000 - Margins.Bottom = 2.000000000000000000 - Size.Width = 11.000000000000000000 - Size.Height = 11.000000000000000000 - Size.PlatformDefault = False - Stroke.Kind = None - object TFloatAnimation - StyleName = 'opacityCheckmarkAnimation1' - Duration = 0.000000000000000000 - PropertyName = 'Opacity' - StartValue = 0.000000000000000000 - StopValue = 1.000000000000000000 - Trigger = 'IsChecked=true' - TriggerInverse = 'IsChecked=false' - end - end - object TColorAnimation - StyleName = 'radiobuttonColorAnimation1' - Duration = 0.000000000000000000 - Inverse = True - PropertyName = 'Fill.Color' - StartValue = xFF202020 - StopValue = xFF404040 - Trigger = 'IsMouseOver=true' - TriggerInverse = 'IsMouseOver=false' - end - object TColorAnimation - StyleName = 'ColorAnimation1Style' - Duration = 0.000000000000000000 - PropertyName = 'Stroke.Color' - StartValue = xFF151515 - StopValue = xFF2A82E2 - Trigger = 'IsChecked=true' - TriggerInverse = 'IsChecked=false' - end - end - end - object TText - StyleName = 'text' - Align = Client - Locked = True - HitTest = False - Size.Width = 100.000000000000000000 - Size.Height = 21.000000000000000000 + HitTest = False + Size.Width = 100.000000000000000000 + Size.Height = 21.000000000000000000 Size.PlatformDefault = False TextSettings.FontColor = claWhite end @@ -3834,7 +3572,7 @@ object TStyleContainer Size.Height = 40.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 54 + TabOrder = 60 object TLayout Align = Bottom Position.Y = 34.000000000000000000 @@ -3908,7 +3646,7 @@ object TStyleContainer Size.Height = 40.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 56 + TabOrder = 61 object TLayout Align = Bottom Position.Y = 34.000000000000000000 @@ -3982,7 +3720,7 @@ object TStyleContainer Size.Height = 40.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 58 + TabOrder = 62 object TLayout Align = Bottom Position.Y = 34.000000000000000000 @@ -4050,13 +3788,13 @@ object TStyleContainer end end object TLayout - StyleName = 'progressbarstyle' + StyleName = 'progressbarfinishstyle' Align = Center Size.Width = 66.599998474121090000 Size.Height = 56.399997711181640000 Size.PlatformDefault = False Visible = False - TabOrder = 61 + TabOrder = 64 object TRectangle StyleName = 'htrack' Align = Contents @@ -4070,7 +3808,7 @@ object TStyleContainer object TRectangle StyleName = 'hindicator' Align = Left - Fill.Color = xFF2A82E2 + Fill.Color = xFF2CE244 Locked = True HitTest = False Margins.Left = 1.000000000000000000 @@ -4098,7 +3836,7 @@ object TStyleContainer object TRectangle StyleName = 'vindicator' Align = Bottom - Fill.Color = xFF2A82E2 + Fill.Color = xFF2CE244 Locked = True HitTest = False Margins.Left = 1.000000000000000000 @@ -4121,7 +3859,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 63 + TabOrder = 65 object TRectangle StyleName = 'bgrectangle' Align = Contents @@ -4220,7 +3958,7 @@ object TStyleContainer Size.Height = 22.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 65 + TabOrder = 66 object TPath StyleName = 'Path1' Align = Center @@ -4326,7 +4064,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 70 + TabOrder = 68 object TRectangle StyleName = 'Rectangle1' Align = Contents @@ -4353,7 +4091,7 @@ object TStyleContainer Size.Height = 25.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 15 + TabOrder = 69 object TBrushObject StyleName = 'foreground' end @@ -4482,7 +4220,7 @@ object TStyleContainer Size.Height = 24.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 60 + TabOrder = 70 object TRectangle StyleName = 'vtrack' Align = Contents @@ -4547,6 +4285,7 @@ object TStyleContainer StyleName = 'aniindicatorstyle' Align = Center Visible = False + TabOrder = 71 object TArc StyleName = 'Arc' Align = Contents @@ -4556,7 +4295,9 @@ object TStyleContainer Size.Height = 50.000000000000000000 Size.PlatformDefault = False Stroke.Color = claWhite - Stroke.Thickness = 2.000000000000000000 + Stroke.Thickness = 4.000000000000000000 + Stroke.Cap = Round + Stroke.Join = Bevel EndAngle = -90.000000000000000000 object TFloatAnimation StyleName = 'ani' @@ -4577,6 +4318,7 @@ object TStyleContainer Size.Height = 2.000000000000000000 Size.PlatformDefault = False Visible = False + TabOrder = 72 object TRectangle StyleName = 'Rectangle1' Align = Client @@ -4615,6 +4357,7 @@ object TStyleContainer Size.Height = 164.000000000000000000 Size.PlatformDefault = False Visible = False + TabOrder = 73 object TRectangle StyleName = 'background' Align = Contents @@ -4632,7 +4375,7 @@ object TStyleContainer Size.Height = 96.000000000000000000 Size.PlatformDefault = False Visible = False - TabOrder = 1 + TabOrder = 74 object TRectangle StyleName = 'background' Align = Client @@ -4714,7 +4457,7 @@ object TStyleContainer Size.Height = 56.399997711181640000 Size.PlatformDefault = False Visible = False - TabOrder = 25 + TabOrder = 76 object TRectangle StyleName = 'htrack' Align = Contents @@ -4761,4 +4504,1362 @@ object TStyleContainer end end end + object TLayout + StyleName = 'treeviewexpanderbuttonstyle' + Align = Center + Margins.Top = 1.000000000000000000 + Size.Width = 22.000000000000000000 + Size.Height = 22.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 77 + object TPath + StyleName = 'Path1' + Align = Center + Data.Path = { + 04000000000000000000C8420000C84201000000000096430000C84201000000 + 0000484300009643030000000000C8420000C842} + Fill.Color = claWhite + HitTest = False + RotationAngle = -90.000000000000000000 + Size.Width = 10.000000000000000000 + Size.Height = 6.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TFloatAnimation + StyleName = 'FloatAnimation1Style' + Duration = 0.000000000000000000 + Interpolation = Circular + PropertyName = 'RotationAngle' + StartValue = -90.000000000000000000 + StopValue = 0.000000000000000000 + Trigger = 'IsExpanded=true' + TriggerInverse = 'IsExpanded=false' + end + end + end + object TRectangle + StyleName = 'treeviewitemstyle' + Align = Center + Fill.Kind = None + HitTest = False + Sides = [Bottom] + Size.Width = 87.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + Visible = False + object TSpeedButton + StyleName = 'button' + Align = Left + Size.Width = 20.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'treeviewexpanderbuttonstyle' + end + object TLayout + Align = Contents + Margins.Left = 20.000000000000000000 + Size.Width = 67.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + object TCheckBox + StyleName = 'check' + Align = Left + CanFocus = False + DisableFocusEffect = True + Size.Width = 20.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + end + object TGlyph + StyleName = 'glyphstyle' + Margins.Left = 2.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 2.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Align = Left + Position.X = 22.000000000000000000 + Position.Y = 1.000000000000000000 + Size.Width = 16.000000000000000000 + Size.Height = 38.000000000000000000 + Size.PlatformDefault = False + end + object TText + StyleName = 'text' + Align = Client + Locked = True + HitTest = False + Size.Width = 47.000000000000000000 + Size.Height = 40.000000000000000000 + Size.PlatformDefault = False + TextSettings.FontColor = claWhite + TextSettings.WordWrap = False + TextSettings.HorzAlign = Leading + end + end + object TRectangle + Align = Contents + Fill.Kind = None + HitTest = False + Margins.Bottom = 1.000000000000000000 + Sides = [Left] + Size.Width = 87.000000000000000000 + Size.Height = 39.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF2A82E2 + Stroke.Thickness = 2.000000000000000000 + end + end + object TLayout + StyleName = 'treeviewstyle' + Align = Center + Size.Width = 225.000000000000000000 + Size.Height = 259.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 78 + object TBrushObject + StyleName = 'AlternatingRowBackground' + Brush.Color = x0FFFFFFF + end + object TRectangle + StyleName = 'background' + Align = Contents + Fill.Color = xFF202020 + Locked = True + HitTest = False + Padding.Left = 1.000000000000000000 + Padding.Right = 1.000000000000000000 + Size.Width = 225.000000000000000000 + Size.Height = 259.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + object TLayout + StyleName = 'content' + Align = Client + ClipChildren = True + Margins.Top = 1.000000000000000000 + Size.Width = 205.000000000000000000 + Size.Height = 240.000000000000000000 + Size.PlatformDefault = False + object TRectangle + StyleName = 'selection' + Fill.Color = xFF2A82E2 + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + object TRectangle + StyleName = 'focusedselection' + Fill.Color = xFF2A82E2 + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + Stroke.Dash = Dot + end + end + object TScrollBar + StyleName = 'vscrollbar' + Align = Right + SmallChange = 0.000000000000000000 + Orientation = Vertical + Margins.Left = 2.000000000000000000 + Position.X = 208.000000000000000000 + Size.Width = 16.000000000000000000 + Size.Height = 241.000000000000000000 + Size.PlatformDefault = False + end + object TScrollBar + StyleName = 'hscrollbar' + Align = Bottom + SmallChange = 0.000000000000000000 + Orientation = Horizontal + Margins.Top = 2.000000000000000000 + Position.X = 1.000000000000000000 + Position.Y = 243.000000000000000000 + Size.Width = 223.000000000000000000 + Size.Height = 16.000000000000000000 + Size.PlatformDefault = False + end + object TSmallScrollBar + StyleName = 'vsmallscrollbar' + Align = Right + SmallChange = 0.000000000000000000 + Orientation = Vertical + Margins.Left = 2.000000000000000000 + Position.X = 99.000000000000000000 + Position.Y = 2.000000000000000000 + Size.Width = 8.000000000000000000 + Size.Height = 8.000000000000000000 + Size.PlatformDefault = False + Visible = False + end + object TSmallScrollBar + StyleName = 'hsmallscrollbar' + Align = Bottom + SmallChange = 0.000000000000000000 + Orientation = Horizontal + Margins.Top = 2.000000000000000000 + Position.X = 2.000000000000000000 + Position.Y = 113.000000000000000000 + Size.Width = 150.000000000000000000 + Size.Height = 8.000000000000000000 + Size.PlatformDefault = False + Visible = False + end + end + end + object TLayout + StyleName = 'actiontoolbuttonmultiview' + Align = Center + Size.Width = 100.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 120 + FixedHeight = 50 + object TGlyph + StyleName = 'glyphstyle' + Margins.Left = 9.000000000000000000 + Margins.Top = 9.000000000000000000 + Margins.Bottom = 9.000000000000000000 + Align = Left + Position.X = 9.000000000000000000 + Position.Y = 9.000000000000000000 + Size.Width = 32.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + end + object TRectangle + StyleName = 'background' + Align = Client + ClipChildren = True + ClipParent = True + Fill.Color = xFF202020 + HitTest = False + Margins.Left = -50.000000000000000000 + Size.Width = 100.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TColorAnimation + StyleName = 'buttonColorAnimation1' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = xFF202020 + StopValue = xFF404040 + Trigger = 'IsMouseOver=true;IsPressed=false;IsFocused=false' + TriggerInverse = 'IsMouseOver=false;IsPressed=false;IsFocused=false' + end + object TColorAnimation + StyleName = 'buttonColorAnimation3' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = xFF2A82E2 + StopValue = xFF17579C + Trigger = 'IsPressed=true;IsMouseOver=true;IsFocused=true' + TriggerInverse = 'IsPressed=false;IsMouseOver=true;IsFocused=true' + end + end + object TText + StyleName = 'text' + Align = Client + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + end + object TLayout + StyleName = 'Layout2' + Align = Left + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object TPath + StyleName = 'icon' + Align = Center + Data.Path = { + 17000000000000000000C03F0000C03F01000000000000000000000001000000 + 0000404000000000010000000000C03F0000C03F030000000000C03F0000C03F + 0000000000009040000000000100000000004041000000000100000000004041 + CDCC4C3F0100000000009040CDCC4C3F01000000000090400000000003000000 + 0000904000000000000000000000904033337340010000000000904000004040 + 0100000000004041000040400100000000004041333373400100000000009040 + 3333734003000000000090403333734000000000000090409A99D94001000000 + 000090400000C04001000000000040410000C04001000000000040419A99D940 + 01000000000090409A99D94003000000000090409A99D940} + Fill.Color = claWhite + HitTest = False + Size.Width = 26.000000000000000000 + Size.Height = 28.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + WrapMode = Fit + end + end + end + object TLayout + StyleName = 'addbuttonstyle' + Align = Center + Size.Width = 100.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 124 + FixedHeight = 24 + object TGlyph + StyleName = 'glyphstyle' + Margins.Left = 9.000000000000000000 + Margins.Top = 9.000000000000000000 + Margins.Bottom = 9.000000000000000000 + Align = Left + Position.X = 9.000000000000000000 + Position.Y = 9.000000000000000000 + Size.Width = 32.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + end + object TRectangle + StyleName = 'background' + Align = Client + ClipChildren = True + ClipParent = True + Fill.Color = xFF202020 + HitTest = False + Margins.Left = -24.000000000000000000 + Size.Width = 100.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TColorAnimation + StyleName = 'buttonColorAnimation1' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = xFF202020 + StopValue = xFF404040 + Trigger = 'IsMouseOver=true;IsPressed=false;IsFocused=false' + TriggerInverse = 'IsMouseOver=false;IsPressed=false;IsFocused=false' + end + object TColorAnimation + StyleName = 'buttonColorAnimation3' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = xFF2A82E2 + StopValue = xFF17579C + Trigger = 'IsPressed=true;IsMouseOver=true;IsFocused=true' + TriggerInverse = 'IsPressed=false;IsMouseOver=true;IsFocused=true' + end + end + object TText + StyleName = 'text' + Align = Client + HitTest = False + Size.Width = 76.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + TextSettings.FontColor = claWhite + end + object TLayout + StyleName = 'Layout2' + Align = Left + Size.Width = 24.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + object TPath + StyleName = 'icon' + Align = Contents + Data.Path = { + 0E00000000000000CDCC34410000C040010000000000C0400000C04001000000 + 0000C040CDCC3441010000009A99A940CDCC3441010000009A99A9400000C040 + 01000000000000000000C04001000000000000009A99A940010000009A99A940 + 9A99A940010000009A99A94000000000010000000000C0400000000001000000 + 0000C0409A99A94001000000CDCC34419A99A94001000000CDCC34410000C040 + 03000000CDCC34410000C040} + Fill.Color = claWhite + HitTest = False + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 16.000000000000000000 + Size.Height = 16.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + WrapMode = Fit + end + end + end + object TLayout + StyleName = 'infotoolbuttonmultiview' + Align = Center + Size.Width = 100.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 123 + FixedHeight = 50 + object TGlyph + StyleName = 'glyphstyle' + Margins.Left = 9.000000000000000000 + Margins.Top = 9.000000000000000000 + Margins.Bottom = 9.000000000000000000 + Align = Left + Position.X = 9.000000000000000000 + Position.Y = 9.000000000000000000 + Size.Width = 32.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + end + object TRectangle + StyleName = 'background' + Align = Client + ClipChildren = True + ClipParent = True + Fill.Color = xFF202020 + HitTest = False + Margins.Left = -50.000000000000000000 + Size.Width = 100.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TColorAnimation + StyleName = 'buttonColorAnimation1' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = xFF202020 + StopValue = xFF404040 + Trigger = 'IsMouseOver=true;IsPressed=false;IsFocused=false' + TriggerInverse = 'IsMouseOver=false;IsPressed=false;IsFocused=false' + end + object TColorAnimation + StyleName = 'buttonColorAnimation3' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = xFF2A82E2 + StopValue = xFF17579C + Trigger = 'IsPressed=true;IsMouseOver=true;IsFocused=true' + TriggerInverse = 'IsPressed=false;IsMouseOver=true;IsFocused=true' + end + end + object TText + StyleName = 'text' + Align = Client + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + end + object TLayout + StyleName = 'Layout2' + Align = Left + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object TPath + StyleName = 'icon' + Align = Center + Data.Path = { + A0000000000000009A9987429A99074302000000010076429A99074302000000 + 01005E42CDCC064302000000343347423433054302000000010030429A990343 + 0200000067661A42CE4C01430200000067660642CECCFC4202000000CECCE441 + 0100F742020000000100C041CECCEF420200000034339F419B99E74202000000 + CECC7C416866DF4202000000353343413533D64202000000CECC14413533CC42 + 020000009A99C9400000C24202000000000080403333B742020000009A991940 + CDCCAB4202000000CDCC4C3F3333A04202000000000000003333944202000000 + 000000009A99874202000000000000000100764202000000CDCC4C3F01005E42 + 020000009A991940CECC4642020000000000804000003042020000009A99C940 + 66661A42020000003333134166660642020000009A994141CCCCE44102000000 + 33337B41FFFFBF410200000066669E4132339F41020000003333BF41CACC7C41 + 020000000000E441313343410200000000000642CACC14410200000066661A42 + 9A99C94002000000000030420000804002000000333347429A99194002000000 + 00005E42CDCC4C3F020000006666764200000000020000009A99874200000000 + 020000003433944200000000020000003433A042CDCC4C3F02000000CDCCAB42 + 9A991940020000003333B74200008040020000000000C2429A99C94002000000 + 3333CC4233331341020000003333D6429A994141020000006666DF4233337B41 + 020000009999E74266669E4102000000CCCCEF423333BF4102000000FFFFF642 + 0000E44102000000CCCCFC420000064202000000CC4C014300001A4202000000 + 999903439A992F420200000033330543CDCC464202000000CDCC064300005E42 + 02000000999907430000764202000000999907439A9987420200000099990743 + 3433944202000000CCCC06433433A0420200000033330543CDCCAB4202000000 + 999903436766B74202000000CD4C01433333C24202000000CCCCFC423433CC42 + 02000000FFFFF6423433D64202000000CCCCEF426766DF42020000009999E742 + 9A99E742020000006666DF42CDCCEF42020000003333D6420000F74202000000 + 3333CC42CDCCFC42020000003333C242CD4C0143020000006666B7429A990343 + 02000000CCCCAB4233330543020000003333A042CDCC06430200000033339442 + 9A990743020000009A9987429A990743030000009A9987429A99074300000000 + 9A99874200001041020000009A9979420000104102000000CECC644233331B41 + 02000000CECC50429A99314102000000CECC3C42000048410200000001002A42 + 0000684102000000CECC184200008841020000003433074200009C4102000000 + 3633EF41CDCCB441020000006966D2419A99D141020000009C99B5416766EE41 + 020000009C999D41CDCC064202000000D0CC88416666184202000000A0996941 + 00002A4202000000A099494166663C42020000003A333341CCCC504202000000 + 33331B4133336542020000000000104100007A4202000000000010419A998742 + 0200000000001041343392420200000033331B41CDCC9C42020000009A993141 + CDCCA6420200000000004841CDCCB04202000000000068413333BA4202000000 + 000088410000C3420200000000009C41CDCCCB4202000000CDCCB4419A99D342 + 020000009A99D141CDCCDA42020000006766EE410000E24202000000CDCC0642 + 0000E84202000000666618423333ED420200000000002A423333F24202000000 + 66663C423333F64202000000666650420000F9420200000066666442CDCCFB42 + 02000000333379423333FD4202000000666687423333FD420200000033339242 + 3333FD420200000099999C42CDCCFB42020000009999A6420000F94202000000 + 9999B0423333F64202000000FFFFB9423333F24202000000CCCCC2423333ED42 + 020000009999CB423333E842020000006666D3420000E242020000009999DA42 + CDCCDA4202000000CCCCE1429A99D34202000000CCCCE742CDCCCB4202000000 + FFFFEC420000C34202000000FFFFF1423333BA4202000000FFFFF5420000B142 + 02000000CCCCF8420000A742020000009999FB4200009D4202000000FFFFFC42 + 9A99924202000000FFFFFC42CDCC874202000000FFFFFC4200007A4202000000 + 9999FB423433654202000000CCCCF8423433514202000000FFFFF54234333D42 + 02000000FFFFF14267662A4202000000FFFFEC42CECC184202000000FFFFE742 + 3433074202000000CCCCE1423633EF41020000009999DA426966D24102000000 + 6666D3429C99B541020000009999CB429C999D4102000000CCCCC242D0CC8841 + 02000000FFFFB942A099694102000000CCCCB042A0994941020000009999A642 + 3A33334102000000CDCC9C4233331B4102000000666692420000104102000000 + 9A99874200001041030000009A998742000010410000000033337D42CDCC1042 + 010000009A999042CDCC1042010000009A999042CDCC34420100000034337D42 + CDCC34420100000034337D42CDCC10420300000033337D42CDCC104200000000 + 33337D4233335942010000009A99904233335942010000009A9990420000C742 + 0100000034337D420000C7420100000034337D42333359420300000033337D42 + 33335942} + Fill.Color = claWhite + HitTest = False + Size.Width = 26.000000000000000000 + Size.Height = 28.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + WrapMode = Fit + end + end + end + object TLayout + StyleName = 'organizetoolbuttonmultiview' + Align = Center + Size.Width = 100.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 119 + FixedHeight = 50 + object TGlyph + StyleName = 'glyphstyle' + Margins.Left = 9.000000000000000000 + Margins.Top = 9.000000000000000000 + Margins.Bottom = 9.000000000000000000 + Align = Left + Position.X = 9.000000000000000000 + Position.Y = 9.000000000000000000 + Size.Width = 32.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + end + object TRectangle + StyleName = 'background' + Align = Client + ClipChildren = True + ClipParent = True + Fill.Color = xFF202020 + HitTest = False + Margins.Left = -50.000000000000000000 + Size.Width = 100.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TColorAnimation + StyleName = 'buttonColorAnimation1' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = xFF202020 + StopValue = xFF404040 + Trigger = 'IsMouseOver=true;IsPressed=false;IsFocused=false' + TriggerInverse = 'IsMouseOver=false;IsPressed=false;IsFocused=false' + end + object TColorAnimation + StyleName = 'buttonColorAnimation3' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = xFF2A82E2 + StopValue = xFF17579C + Trigger = 'IsPressed=true;IsMouseOver=true;IsFocused=true' + TriggerInverse = 'IsPressed=false;IsMouseOver=true;IsFocused=true' + end + end + object TText + StyleName = 'text' + Align = Client + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + TextSettings.FontColor = claWhite + end + object TLayout + StyleName = 'Layout2' + Align = Left + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object TPath + StyleName = 'icon' + Align = Center + Data.Path = { + 11000000000000009A99E9409A99C940010000006666664066661E4101000000 + 000000009A99C940010000000000003F9A99B94001000000CDCC4C409A990941 + 01000000CDCC4C40000000000100000000008040000000000100000000008040 + 00000841010000006666D6406666B640010000009A99E9409A99C94003000000 + 9A99E9409A99C940000000009A99993E00004041010000009A99993E33333341 + 010000000000E04033333341010000000000E04000004041010000009A99993E + 00004041030000009A99993E00004041} + Fill.Color = claWhite + HitTest = False + Size.Width = 26.000000000000000000 + Size.Height = 28.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + WrapMode = Fit + end + end + end + object TLayout + StyleName = 'settingstoolbuttonmultiview' + Align = Center + Size.Width = 100.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 122 + FixedHeight = 50 + object TGlyph + StyleName = 'glyphstyle' + Margins.Left = 9.000000000000000000 + Margins.Top = 9.000000000000000000 + Margins.Bottom = 9.000000000000000000 + Align = Left + Position.X = 9.000000000000000000 + Position.Y = 9.000000000000000000 + Size.Width = 32.000000000000000000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + end + object TRectangle + StyleName = 'background' + Align = Client + ClipChildren = True + ClipParent = True + Fill.Color = xFF202020 + HitTest = False + Margins.Left = -50.000000000000000000 + Size.Width = 100.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TColorAnimation + StyleName = 'buttonColorAnimation1' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = xFF202020 + StopValue = xFF404040 + Trigger = 'IsMouseOver=true;IsPressed=false;IsFocused=false' + TriggerInverse = 'IsMouseOver=false;IsPressed=false;IsFocused=false' + end + object TColorAnimation + StyleName = 'buttonColorAnimation3' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = xFF2A82E2 + StopValue = xFF17579C + Trigger = 'IsPressed=true;IsMouseOver=true;IsFocused=true' + TriggerInverse = 'IsPressed=false;IsMouseOver=true;IsFocused=true' + end + end + object TText + StyleName = 'text' + Align = Client + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + end + object TLayout + StyleName = 'Layout2' + Align = Left + Size.Width = 50.000000000000000000 + Size.Height = 50.000000000000000000 + Size.PlatformDefault = False + object TPath + StyleName = 'icon' + Align = Center + Data.Path = { + 1C01000000000000333351423333E7410200000033335142CDCCE84102000000 + 333351426666EA4102000000333351423333EB410200000033335142CDCCEC41 + 02000000333351426666EE4102000000333351423333EF410200000033335142 + CDCCF04102000000333351426666F24102000000333351423333F34102000000 + 33335142CDCCF44102000000333351426666F64102000000333351423333F741 + 0100000099996F4266660E4201000000CDCC5C4200003C420100000000003A42 + 0000344202000000000038420000364202000000000036420000384202000000 + 0000344200003A420100000000003C42CDCC5C4201000000CDCC0E429A996F42 + 010000000000F84133335142020000006666F6413333514202000000CDCCF441 + 33335142020000000000F44133335142020000006666F2413333514202000000 + CDCCF04133335142020000000000F04133335142020000006666EE4133335142 + 02000000CDCCEC4133335142020000000000EC4133335142020000006666EA41 + 3333514202000000CDCCE84133335142020000000000E8413333514201000000 + 6666C24199996F4201000000FFFF4F41CCCC5C4201000000FFFF6F41FFFF3942 + 02000000FFFF6741FFFF374202000000FFFF5F41FFFF354202000000FFFF5741 + FFFF33420100000098999940FFFF3B420100000000000000CDCC0E4201000000 + 3333F3400000F841020000003333F3406666F641020000003333F340CDCCF441 + 020000003333F3400000F441020000003333F3406666F241020000003333F340 + CDCCF041020000003333F3400000F041020000003333F3406666EE4102000000 + 3333F340CDCCEC41020000003333F3400000EC41020000003333F3406666EA41 + 020000003333F340CDCCE841020000003333F3400000E8410100000000000000 + CDCCC0410100000066669640CDCC4C410100000066665641CDCC6C4102000000 + 66665E41CDCC64410200000066666641CDCC5C410200000066666E41CDCC5441 + 0100000066664E413433934001000000CDCCC04100000000010000006666E641 + 3333F340020000000000E8413333F340020000009999E9413333F34002000000 + 6666EA413333F340020000000000EC413333F340020000009999ED413333F340 + 020000006666EE413333F340020000000000F0413333F340020000009999F141 + 3333F340020000006666F2413333F340020000000000F4413333F34002000000 + 9999F5413333F340020000006666F6413333F34001000000CDCC0E4200000000 + 0100000000003C42666696400100000000003442666656410200000000003642 + 66665E410200000000003842666666410200000000003A4266666E4101000000 + CDCC5C4266664E41010000009A996F429A99C14101000000333351423333E741 + 03000000333351423333E7410000000033334342CDCC02420200000033334342 + CDCC004202000000999943426766FE4102000000999943426766FA4102000000 + 999943426766F64102000000FFFF43423433F34102000000FFFF43423433EF41 + 02000000FFFF43423433EB4102000000FFFF43420100E8410200000099994342 + 0100E44102000000999943420100E0410200000033334342CECCDC4102000000 + 33334342CECCD84101000000CDCC5E426866B64101000000CDCC54429B998541 + 01000000CDCC3442CECC9441020000006766324234338F410200000000003042 + 9B9989410200000033332D42010084410200000066662A42CECC7C4102000000 + 000028423533734102000000CDCC24429C9969410100000067662C423833D340 + 0100000001001442383383400100000067660242020030410200000067660042 + 02003041020000009B99FD4168662E41020000009B99F94168662E4102000000 + 9B99F54168662E41020000006866F241CECC2C41020000006866EE41CECC2C41 + 020000006866EA41CECC2C41020000003533E741CECC2C41020000003533E341 + 68662E41020000003533DF4168662E41020000000200DC410200304102000000 + 0200D84102003041010000009C99B5413733834001000000CFCC84413733D340 + 01000000020094419C9969410200000068668E413633734102000000CFCC8841 + CFCC7C410200000035338341010084410200000036337B419A99894102000000 + 9D99714167668E410200000004006841CECC9441010000000800D0409B998541 + 01000000080080406866B641010000006A662E419B99D941020000006A662E41 + 9B99DD4102000000D0CC2C41CECCE04102000000D0CC2C41CECCE44102000000 + D0CC2C41CECCE8410200000036332B410100EC410200000036332B410100F041 + 0200000036332B410100F4410200000036332B413433F74102000000D0CC2C41 + 3433FB4102000000D0CC2C413433FF41020000006A662E413433014202000000 + 6A662E4134330342010000000700804067661442010000000700D040CDCC2C42 + 010000000400684133332542020000009E997141000028420200000037337B41 + CDCC2A42020000003533834199992D4202000000CECC88416566304202000000 + 9B998D41CCCC324202000000020094413333354201000000CFCC844133335542 + 010000009C99B54133335F4201000000CFCCD8419999434202000000CFCCDC41 + 99994342020000000200E041FFFF4342020000000200E441FFFF434202000000 + 0200E841FFFF4342020000003533EB4165664442020000003533EF4165664442 + 020000003533F34165664442020000006866F64165664442020000006866FA41 + FFFF4342020000006866FE41FFFF434202000000CECC00429999434202000000 + CECC024299994342010000000100144233335F420100000067662C4233335542 + 01000000CDCC244233333542020000009A992742CDCC32420200000067662A42 + 666630420200000033332D4299992D4202000000FFFF2F42CCCC2A4202000000 + 666632426666284202000000CDCC34423333254201000000CDCC5442CDCC2C42 + 01000000CDCC5E42676614420100000033334342CDCC02420300000033334342 + CDCC0242000000003333EF4133339741020000003333FB413333974102000000 + 9A9903429999994102000000CDCC084266669E410200000000000E423333A341 + 02000000CDCC12429999A94102000000CDCC16429999B14102000000CDCC1A42 + 9999B9410200000000001E423333C34102000000676620429999CD4102000000 + CDCC2242FFFFD7410200000001002442FFFFE34102000000010024420000F041 + 02000000010024420100FC4102000000CECC2242000004420200000067662042 + 333309420200000001001E4266660E4202000000CDCC1A423333134202000000 + CDCC16423333174202000000CDCC124233331B420200000000000E4266661E42 + 02000000CDCC0842CDCC2042020000009A99034233332342020000003433FB41 + 67662442020000003433EF4167662442020000003433E3416766244202000000 + 3433D7413433234202000000CECCCC41CDCC2042020000006866C24167661E42 + 02000000CECCB84133331B4202000000CECCB0413333174202000000CECCA841 + 33331342020000006866A24166660E42020000009B999D413333094202000000 + CECC98410000044202000000686696410000FC4102000000686696410000F041 + 02000000686696410000E44102000000CECC98410000D841020000009B999D41 + 9A99CD41020000006866A2413433C34102000000CECCA8419A99B94102000000 + CECCB0419A99B14102000000CECCB8419A99A941020000006866C2413433A341 + 02000000CECCCC4167669E41020000000000D8419A999941020000003333E341 + 33339741020000003333EF4133339741030000003333EF413333974100000000 + 3333EF41CDCC1642020000000000F841CDCC1642020000000000004200001642 + 020000009A990342676614420200000034330742CDCC124202000000CDCC0A42 + 67661042020000009A990D429A990D420200000067661042CDCC0A4202000000 + CDCC12429A99074202000000676614429A990342020000000100164200000042 + 02000000CDCC16423433F74102000000CDCC16423433EF4102000000CDCC1642 + 6766E64102000000000016426766DE4102000000676614423433D74102000000 + CDCC12420100D0410200000067661042CECCC841020000009A990D423433C341 + 02000000CDCC0A429A99BD41020000009A990742CECCB841020000009A990342 + 9A99B54102000000000000426766B241020000003433F741CDCCB04102000000 + 3433EF41CDCCB041020000006766E641CDCCB041020000006766DE416766B241 + 020000003433D7419A99B541020000000100D041CDCCB84102000000CECCC841 + 9A99BD41020000003433C3413433C341020000009A99BD41CECCC84102000000 + CECCB8413433CF41020000009A99B5413433D741020000006766B2416766DE41 + 02000000CDCCB0413433E74102000000CDCCB0413433EF4102000000CDCCB041 + 0100F841020000006766B24100000042020000009A99B5419A99034202000000 + CDCCB84134330742020000009A99BD41CDCC0A42020000003433C3419A990D42 + 02000000CECCC84167661042020000003433CF41CDCC1242020000003433D741 + 67661442020000003333DF4100001642020000003333E741CDCC164202000000 + 3333EF41CDCC1642030000003333EF41CDCC1642} + Fill.Color = claWhite + HitTest = False + Size.Width = 26.000000000000000000 + Size.Height = 28.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + WrapMode = Fit + end + end + end + object TLayout + StyleName = 'removebuttonstyle' + Align = Center + Size.Width = 100.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 126 + FixedHeight = 24 + object TGlyph + StyleName = 'glyphstyle' + Margins.Left = 9.000000000000000000 + Margins.Top = 9.000000000000000000 + Margins.Bottom = 9.000000000000000000 + Align = Left + Position.X = 33.000000000000000000 + Position.Y = 9.000000000000000000 + Size.Width = 32.000000000000000000 + Size.Height = 6.000000000000000000 + Size.PlatformDefault = False + end + object TRectangle + StyleName = 'background' + Align = Client + ClipChildren = True + ClipParent = True + Fill.Color = xFF202020 + HitTest = False + Margins.Left = -24.000000000000000000 + Size.Width = 100.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TColorAnimation + StyleName = 'buttonColorAnimation1' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = xFF202020 + StopValue = xFF404040 + Trigger = 'IsMouseOver=true;IsPressed=false;IsFocused=false' + TriggerInverse = 'IsMouseOver=false;IsPressed=false;IsFocused=false' + end + object TColorAnimation + StyleName = 'buttonColorAnimation3' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = xFF2A82E2 + StopValue = xFF17579C + Trigger = 'IsPressed=true;IsMouseOver=true;IsFocused=true' + TriggerInverse = 'IsPressed=false;IsMouseOver=true;IsFocused=true' + end + end + object TText + StyleName = 'text' + Align = Client + HitTest = False + Size.Width = 76.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + end + object TLayout + StyleName = 'Layout2' + Align = Left + Size.Width = 24.000000000000000000 + Size.Height = 24.000000000000000000 + Size.PlatformDefault = False + object TPath + StyleName = 'icon' + Align = Contents + Data.Path = { + 060000000000000000004041CDCC4C3F0100000000000000CDCC4C3F01000000 + 00000000000000000100000000004041000000000100000000004041CDCC4C3F + 0300000000004041CDCC4C3F} + Fill.Color = claWhite + HitTest = False + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Margins.Bottom = 4.000000000000000000 + Size.Width = 16.000000000000000000 + Size.Height = 16.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + WrapMode = Fit + end + end + end + object TRectangle + StyleName = 'popupbackgroundstyle' + Align = Center + Fill.Color = xFF2D2D2D + Size.Width = 296.000000000000000000 + Size.Height = 210.500000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + Visible = False + end + object TLayout + StyleName = 'progressbarminifinishstyle' + Align = Center + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Visible = False + TabOrder = 75 + object TRectangle + StyleName = 'htrack' + Align = Contents + Fill.Color = xFF404040 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + object TRectangle + StyleName = 'hindicator' + Align = Left + Fill.Color = xFF2CE244 + Locked = True + HitTest = False + Size.Width = 50.000000000000000000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + object TRectangle + StyleName = 'vtrack' + Align = Contents + Fill.Color = xFF404040 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + object TRectangle + StyleName = 'vindicator' + Align = Bottom + Fill.Color = xFF2CE244 + Locked = True + HitTest = False + Position.Y = 35.399997711181640000 + Size.Width = 66.599998474121090000 + Size.Height = 21.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + end + object TLayout + StyleName = 'progressbarstyle' + Align = Center + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Visible = False + TabOrder = 63 + object TRectangle + StyleName = 'htrack' + Align = Contents + Fill.Color = xFF202020 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + object TRectangle + StyleName = 'hindicator' + Align = Left + Fill.Color = xFF2A82E2 + Locked = True + HitTest = False + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Position.X = 1.000000000000000000 + Position.Y = 1.000000000000000000 + Size.Width = 50.000000000000000000 + Size.Height = 54.399997711181640000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + object TRectangle + StyleName = 'vtrack' + Align = Contents + Fill.Color = xFF202020 + Locked = True + HitTest = False + Size.Width = 66.599998474121090000 + Size.Height = 56.399997711181640000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + object TRectangle + StyleName = 'vindicator' + Align = Bottom + Fill.Color = xFF2A82E2 + Locked = True + HitTest = False + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Position.X = 1.000000000000000000 + Position.Y = 34.399997711181640000 + Size.Width = 64.599998474121090000 + Size.Height = 21.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + end + object TLayout + StyleName = 'windowborderstyle' + Align = Center + Size.Width = 351.666687011718800000 + Size.Height = 179.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 58 + object TRectangle + StyleName = 'mask' + Align = Contents + Fill.Color = xFF101010 + Size.Width = 351.666687011718800000 + Size.Height = 179.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + Visible = False + end + object TLayout + StyleName = 'left' + Align = MostLeft + Locked = True + Position.Y = 32.000000000000000000 + Size.Width = 4.000000000000000000 + Size.Height = 147.000000000000000000 + Size.PlatformDefault = False + object TRectangle + Align = MostLeft + Fill.Color = xFF202020 + HitTest = False + Sides = [Left, Right] + Size.Width = 4.000000000000000000 + Size.Height = 143.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + end + object TRectangle + StyleName = 'Rectangle1' + Align = MostBottom + EnableDragHighlight = False + Fill.Color = xFF202020 + HitTest = False + Position.Y = 143.000000000000000000 + Sides = [Left, Bottom] + Size.Width = 4.000000000000000000 + Size.Height = 4.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + object TLayout + StyleName = 'Layout3' + Align = MostRight + Position.X = 3.000000000000000000 + Size.Width = 1.000000000000000000 + Size.Height = 4.000000000000000000 + Size.PlatformDefault = False + object TRectangle + StyleName = 'Rectangle1' + Align = Top + Fill.Color = xFF151515 + HitTest = False + Size.Width = 1.000000000000000000 + Size.Height = 1.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + end + end + object TLayout + StyleName = 'right' + Align = MostRight + Locked = True + Position.X = 347.666687011718800000 + Position.Y = 32.000000000000000000 + Size.Width = 4.000000000000000000 + Size.Height = 147.000000000000000000 + Size.PlatformDefault = False + object TRectangle + Align = MostRight + Fill.Color = xFF202020 + HitTest = False + Sides = [Left, Right] + Size.Width = 4.000000000000000000 + Size.Height = 143.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + end + object TRectangle + StyleName = 'Rectangle1' + Align = MostBottom + EnableDragHighlight = False + Fill.Color = xFF202020 + HitTest = False + Position.Y = 143.000000000000000000 + Sides = [Bottom, Right] + Size.Width = 4.000000000000000000 + Size.Height = 4.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + object TLayout + StyleName = 'Layout3' + Align = MostLeft + Size.Width = 1.000000000000000000 + Size.Height = 4.000000000000000000 + Size.PlatformDefault = False + object TRectangle + StyleName = 'Rectangle1' + Align = Top + Fill.Color = xFF151515 + HitTest = False + Size.Width = 1.000000000000000000 + Size.Height = 1.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + end + end + end + object TRectangle + Align = MostTop + Fill.Color = xFF202020 + Locked = True + HitTest = False + Size.Width = 351.666687011718800000 + Size.Height = 32.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + object TLayout + StyleName = 'caption' + Align = Contents + Locked = True + HitTest = True + Margins.Left = 4.000000000000000000 + Margins.Top = 4.000000000000000000 + Margins.Right = 4.000000000000000000 + Size.Width = 343.666687011718800000 + Size.Height = 28.000000000000000000 + Size.PlatformDefault = False + end + object TLayout + Align = Client + Locked = True + Margins.Left = 1.000000000000000000 + Margins.Top = 1.000000000000000000 + Margins.Right = 1.000000000000000000 + Margins.Bottom = 1.000000000000000000 + Size.Width = 349.666687011718800000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + object TLayout + Align = Left + Locked = True + Size.Width = 9.000000000000000000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + end + object TLayout + StyleName = 'icon' + Locked = True + Position.X = 9.000000000000000000 + Position.Y = 7.000000000000000000 + Size.Width = 25.000000000000000000 + Size.Height = 21.000000000000000000 + Size.PlatformDefault = False + end + object TLayout + StyleName = 'sysbtns' + Align = Client + Locked = True + Size.Width = 340.666687011718800000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + object TSpeedButton + StyleName = 'close' + Align = Right + Locked = True + Position.X = 290.666687011718800000 + Size.Width = 50.000000000000000000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'closebuttonstyle' + end + object TSpeedButton + StyleName = 'max' + Align = Right + Locked = True + Position.X = 258.666687011718800000 + Size.Width = 32.000000000000000000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'maxbuttonstyle' + end + object TSpeedButton + StyleName = 'res' + Align = Right + Locked = True + Position.X = 226.666687011718800000 + Size.Width = 32.000000000000000000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'resbuttonstyle' + end + object TSpeedButton + StyleName = 'min' + Align = Right + Locked = True + Position.X = 194.666687011718800000 + Size.Width = 32.000000000000000000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + StyleLookup = 'minbuttonstyle' + end + object TText + StyleName = 'title' + Align = Client + Locked = True + HitTest = False + Size.Width = 194.666687011718800000 + Size.Height = 30.000000000000000000 + Size.PlatformDefault = False + Text = 'Title' + TextSettings.FontColor = claWhite + end + end + end + end + object TLayout + StyleName = 'client' + Align = Client + Locked = True + HitTest = True + Size.Width = 343.666687011718800000 + Size.Height = 143.000000000000000000 + Size.PlatformDefault = False + end + object TLayout + StyleName = 'bottom' + Align = Bottom + Locked = True + Position.X = 4.000000000000000000 + Position.Y = 175.000000000000000000 + Size.Width = 343.666687011718800000 + Size.Height = 4.000000000000000000 + Size.PlatformDefault = False + object TRectangle + StyleName = 'rect' + Align = Bottom + Fill.Color = xFF202020 + HitTest = False + Sides = [Top, Bottom] + Size.Width = 343.666687011718800000 + Size.Height = 4.000000000000000000 + Size.PlatformDefault = False + Stroke.Color = xFF151515 + end + end + end + object TLayout + StyleName = 'arrowdowntoolbutton' + Align = Center + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + Visible = False + TabOrder = 1 + object TRectangle + StyleName = 'background' + Align = Client + ClipChildren = True + ClipParent = True + Fill.Color = x00202020 + HitTest = False + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + object TColorAnimation + StyleName = 'buttonColorAnimation1' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = x00202020 + StopValue = xFF404040 + Trigger = 'IsMouseOver=true;IsPressed=false;IsFocused=false' + TriggerInverse = 'IsMouseOver=false;IsPressed=false;IsFocused=false' + end + object TColorAnimation + StyleName = 'buttonColorAnimation2' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = xFF404040 + StopValue = xFF17579C + Trigger = 'IsPressed=true;IsMouseOver=true;IsFocused=false' + end + object TColorAnimation + StyleName = 'buttonColorAnimation3' + Duration = 0.000000000000000000 + PropertyName = 'Fill.Color' + StartValue = xFF2A82E2 + StopValue = xFF17579C + Trigger = 'IsPressed=true;IsMouseOver=true;IsFocused=true' + TriggerInverse = 'IsPressed=false;IsMouseOver=true;IsFocused=true' + end + end + object TPath + StyleName = 'path' + Align = Center + Data.Path = { + 04000000000000000000C8420000C84201000000000096430000C84201000000 + 0000484300009643030000000000C8420000C842} + Fill.Color = claWhite + HitTest = False + Size.Width = 10.000000000000000000 + Size.Height = 6.000000000000000000 + Size.PlatformDefault = False + Stroke.Kind = None + end + object TText + StyleName = 'text' + Align = Client + HitTest = False + Size.Width = 100.000000000000000000 + Size.Height = 25.000000000000000000 + Size.PlatformDefault = False + Text = 'Text' + TextSettings.FontColor = claWhite + Visible = False + end + end end