├── SDToolkit
├── ico.ico
├── Resources
│ ├── help.png
│ └── cross.png
├── Properties
│ ├── Settings.settings
│ ├── Settings.Designer.cs
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ └── Resources.resx
├── App.config
├── Program.cs
├── packages.config
├── Tools
│ ├── Upscaler.cs
│ ├── FaceRestoration.cs
│ └── Generator.cs
├── SDToolkit.csproj
├── Window.cs
├── Window.Designer.cs
└── Window.resx
├── SDToolkitUpdater
├── ico.ico
├── Properties
│ ├── Settings.settings
│ ├── Settings.Designer.cs
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ └── Resources.resx
├── App.config
├── Program.cs
├── packages.config
├── Downloader
│ └── Downloader.cs
├── Window.cs
├── Window.Designer.cs
├── SDToolkitUpdater.csproj
└── Window.resx
├── SDToolkit.sln
├── .gitattributes
├── README.md
└── .gitignore
/SDToolkit/ico.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SocketByte/SDToolkit/HEAD/SDToolkit/ico.ico
--------------------------------------------------------------------------------
/SDToolkitUpdater/ico.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SocketByte/SDToolkit/HEAD/SDToolkitUpdater/ico.ico
--------------------------------------------------------------------------------
/SDToolkit/Resources/help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SocketByte/SDToolkit/HEAD/SDToolkit/Resources/help.png
--------------------------------------------------------------------------------
/SDToolkit/Resources/cross.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SocketByte/SDToolkit/HEAD/SDToolkit/Resources/cross.png
--------------------------------------------------------------------------------
/SDToolkit/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/SDToolkitUpdater/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/SDToolkit/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/SDToolkit/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using System.Windows.Forms;
6 |
7 | namespace SDToolkit
8 | {
9 | static class Program
10 | {
11 | ///
12 | /// The main entry point for the application.
13 | ///
14 | [STAThread]
15 | static void Main()
16 | {
17 | Application.EnableVisualStyles();
18 | Application.SetCompatibleTextRenderingDefault(false);
19 | Application.Run(new Window());
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/SDToolkitUpdater/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/SDToolkitUpdater/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using System.Windows.Forms;
6 |
7 | namespace SDToolkitUpdater
8 | {
9 | internal static class Program
10 | {
11 | ///
12 | /// The main entry point for the application.
13 | ///
14 | [STAThread]
15 | static void Main()
16 | {
17 | Application.EnableVisualStyles();
18 | Application.SetCompatibleTextRenderingDefault(false);
19 | Application.Run(new Window());
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/SDToolkitUpdater/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/SDToolkit/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/SDToolkit/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 |
12 | namespace SDToolkit.Properties
13 | {
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
17 | {
18 |
19 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
20 |
21 | public static Settings Default
22 | {
23 | get
24 | {
25 | return defaultInstance;
26 | }
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/SDToolkitUpdater/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace SDToolkitUpdater.Properties
12 | {
13 |
14 |
15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
18 | {
19 |
20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
21 |
22 | public static Settings Default
23 | {
24 | get
25 | {
26 | return defaultInstance;
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/SDToolkit/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("SDToolkit")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("SDToolkit")]
13 | [assembly: AssemblyCopyright("Copyright © 2022")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("8a9e9de0-c4b2-4dcf-8198-cb2ccbd58514")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/SDToolkitUpdater/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("SDToolkitUpdater")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("SDToolkitUpdater")]
13 | [assembly: AssemblyCopyright("Copyright © 2022")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("4de1e61d-ee11-488b-a3c2-770711e3b8c7")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/SDToolkit.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.3.32929.385
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SDToolkit", "SDToolkit\SDToolkit.csproj", "{8A9E9DE0-C4B2-4DCF-8198-CB2CCBD58514}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SDToolkitUpdater", "SDToolkitUpdater\SDToolkitUpdater.csproj", "{4DE1E61D-EE11-488B-A3C2-770711E3B8C7}"
9 | EndProject
10 | Global
11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
12 | Debug|Any CPU = Debug|Any CPU
13 | Release|Any CPU = Release|Any CPU
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {8A9E9DE0-C4B2-4DCF-8198-CB2CCBD58514}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17 | {8A9E9DE0-C4B2-4DCF-8198-CB2CCBD58514}.Debug|Any CPU.Build.0 = Debug|Any CPU
18 | {8A9E9DE0-C4B2-4DCF-8198-CB2CCBD58514}.Release|Any CPU.ActiveCfg = Release|Any CPU
19 | {8A9E9DE0-C4B2-4DCF-8198-CB2CCBD58514}.Release|Any CPU.Build.0 = Release|Any CPU
20 | {4DE1E61D-EE11-488B-A3C2-770711E3B8C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21 | {4DE1E61D-EE11-488B-A3C2-770711E3B8C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
22 | {4DE1E61D-EE11-488B-A3C2-770711E3B8C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
23 | {4DE1E61D-EE11-488B-A3C2-770711E3B8C7}.Release|Any CPU.Build.0 = Release|Any CPU
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | GlobalSection(ExtensibilityGlobals) = postSolution
29 | SolutionGuid = {BF8F32F4-9FE7-4921-9050-AAA25636B2E5}
30 | EndGlobalSection
31 | EndGlobal
32 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/SDToolkitUpdater/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace SDToolkitUpdater.Properties
12 | {
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources
26 | {
27 |
28 | private static global::System.Resources.ResourceManager resourceMan;
29 |
30 | private static global::System.Globalization.CultureInfo resourceCulture;
31 |
32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
33 | internal Resources()
34 | {
35 | }
36 |
37 | ///
38 | /// Returns the cached ResourceManager instance used by this class.
39 | ///
40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
41 | internal static global::System.Resources.ResourceManager ResourceManager
42 | {
43 | get
44 | {
45 | if ((resourceMan == null))
46 | {
47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SDToolkitUpdater.Properties.Resources", typeof(Resources).Assembly);
48 | resourceMan = temp;
49 | }
50 | return resourceMan;
51 | }
52 | }
53 |
54 | ///
55 | /// Overrides the current thread's CurrentUICulture property for all
56 | /// resource lookups using this strongly typed resource class.
57 | ///
58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
59 | internal static global::System.Globalization.CultureInfo Culture
60 | {
61 | get
62 | {
63 | return resourceCulture;
64 | }
65 | set
66 | {
67 | resourceCulture = value;
68 | }
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/SDToolkitUpdater/Downloader/Downloader.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Diagnostics;
5 | using System.IO;
6 | using System.Linq;
7 | using System.Net.Http;
8 | using System.Text;
9 | using System.Threading.Tasks;
10 | using System.Windows.Forms;
11 |
12 | namespace SDToolkitUpdater.Downloader
13 | {
14 | internal class Downloader
15 | {
16 | public static async Task DownloadAsync(ProgressBar progressBar, Label progressLabel, Label updateLabel, string address, int fileSize)
17 | {
18 | HttpClientHandler handler = new HttpClientHandler();
19 | handler.ClientCertificateOptions = ClientCertificateOption.Automatic;
20 |
21 | HttpClient client = new HttpClient(handler);
22 | client.DefaultRequestHeaders.ExpectContinue = false;
23 |
24 | HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Get, address);
25 | HttpResponseMessage response = await client.SendAsync(message,
26 | HttpCompletionOption.ResponseHeadersRead);
27 |
28 | var stream = await response.Content.ReadAsStreamAsync();
29 | var memStream = new MemoryStream();
30 |
31 | var res = stream.CopyToAsync(memStream);
32 | var timer = new Stopwatch();
33 | timer.Start();
34 |
35 | while (true)
36 | {
37 |
38 | var streamInKb = memStream.Length / 1024.0;
39 | var progress = 100.0 * ((double)streamInKb / (double)fileSize);
40 | Console.WriteLine(progress + " : " + streamInKb / 1024 + " : " + fileSize / 1024);
41 |
42 | progressBar.Invoke(new MethodInvoker(delegate ()
43 | {
44 | if (progress < 100)
45 | {
46 | progressBar.Value = (int)progress;
47 | progressLabel.Text = (int)progress + "%";
48 |
49 | if (timer.ElapsedMilliseconds >= 1000)
50 | {
51 | timer.Restart();
52 | updateLabel.Text = "Downloading... " + Math.Round(streamInKb / 1024.0) + " / " + Math.Round(fileSize / 1024.0) + " MB";
53 | }
54 | }
55 | else
56 | {
57 | progressBar.Value = 100;
58 | progressLabel.Text = "100%";
59 |
60 | }
61 | }));
62 |
63 | if (res.IsCompleted)
64 | {
65 | break;
66 | }
67 | }
68 |
69 | byte[] responseContent = new byte[memStream.Length];
70 | memStream.Position = 0;
71 | memStream.Read(responseContent, 0, responseContent.Length);
72 |
73 | using (FileStream fileStream = new FileStream("patch.zip", FileMode.Create, FileAccess.Write))
74 | {
75 | fileStream.Write(responseContent, 0, responseContent.Length);
76 | }
77 | }
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SDToolkit
2 |
3 | All in one, batteries-included software to easily generate and upscale AI art using [Stable Diffusion](https://github.com/CompVis/stable-diffusion)
4 |
5 |
6 |
Disclaimer: This software is still in beta, bugs can and will occur at some point. Please use the Issues tab to report a bug. Thank you for using SDToolkit!
7 |
8 |
9 |
10 | 
11 | 
12 |
13 | ## Features
14 |
15 | - No setup required, just install and run
16 | - Video2x upscaler
17 | - GFPGAN face restoration
18 | - Ability to choose a context image for AI to try to match
19 | - Result image viewer with zoom
20 | - Optimized for low VRAM GPUs
21 | - Many helpful tooltips that make it very easy to use
22 | - Decent amount of configuration options
23 |
24 | ## GFPGAN Integration
25 |
26 | SDToolkit offers a built-in GFPGAN for face restoration. This is quite a powerful tool to remove face artifacts and beautify the result. It's definitely recommended to use GFPGAN for every prompt that might have faces in it.
27 |
28 | 
29 |
30 | ## Video2x Upscaler
31 |
32 | SDToolkit offers a built-in Video2x upscaler. Please remember that it isn't perfect, and upscaling by a very large factor can cause artifacts.
33 |
34 | 
35 |
36 | ## Requirements / Info
37 |
38 | - OS: Windows 64-bit
39 | - At least 35GB of disk space
40 | - At least 8GB of GPU VRAM is recommended
41 | - At least 16GB of RAM is recommended
42 | - CUDA-enabled GPU is recommended (Nvidia)
43 |
44 | Since SDToolkit is all-in-one software, the model, upscaling software (video2x/GFPGAN) and execution environment (Conda/Python) is included in the setup.
45 |
46 | Tested with i7-12700KF and GTX 1080 with full precision. (around 6.7GB of VRAM usage)
47 |
48 | Half precision is recommended for RTX cards.
49 |
50 | ## Installation
51 |
52 | Just download and run the setup from the Releases tab. Be reminded that it's a huge file, you should have at least 35GB of free disk space. Users running the v0.2-beta release, please refer to this hotfix for a comprehensive installation.
53 |
54 | ## License
55 |
56 | The software is licensed under GNU Affero Public License and the SD model is licensed under CreativeML Open RAIL-M. You're required to accept both to use this software. You're free to use the generated art files for commercial purposes as long as they conform to the license terms and conditions.
57 |
58 | ## Used software/models
59 |
60 | This software uses Stable Diffusion v1-4 model licensed under CreativeML Open RAIL-M.
61 | You're free to download it yourself at [CompVis's huggingface repository](https://huggingface.co/CompVis/stable-diffusion-v-1-4-original).
62 |
63 | Scripts and model execution software provided by [basujindal's fork of stable diffusion](https://github.com/basujindal/stable-diffusion/).
64 |
65 | Upscaling model and algorithm is provided by [video2x](https://github.com/k4yt3x/video2x).
66 |
67 | GFPGAN 1.3 model and algorithm provided by [Tencent's GFPGAN](https://github.com/TencentARC/GFPGAN).
68 |
--------------------------------------------------------------------------------
/SDToolkit/Tools/Upscaler.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Diagnostics;
4 | using System.Drawing;
5 | using System.IO;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 | using System.Windows.Forms;
10 |
11 | namespace SDToolkit
12 | {
13 | class Upscaler
14 | {
15 | public static void Upscale(Generator.GeneratorConfig config, string[] images)
16 | {
17 | var outputNames = new string[images.Length];
18 | for (var i = 0; i < images.Length; i++)
19 | {
20 | outputNames[i] = DateTimeOffset.Now.ToUnixTimeSeconds().ToString() + "_" + i + ".png";
21 | }
22 | var process = new Process
23 | {
24 | StartInfo = new ProcessStartInfo
25 | {
26 | FileName = "cmd.exe",
27 | RedirectStandardInput = true,
28 | UseShellExecute = false,
29 | CreateNoWindow = true,
30 | RedirectStandardOutput = true,
31 | RedirectStandardError = true,
32 | WorkingDirectory = Generator.WorkingDirectory,
33 | },
34 | EnableRaisingEvents = true,
35 | };
36 |
37 | process.Exited += (s, e) =>
38 | {
39 | if (config.GenerateButton.InvokeRequired)
40 | {
41 | config.GenerateButton.Invoke(new MethodInvoker(delegate ()
42 | {
43 | for (var i = 0; i < images.Length; i++)
44 | {
45 | var pictureBox = config.PictureBoxes[i];
46 | pictureBox.Image = Image.FromFile("video2x\\outputs\\" + outputNames[i]);
47 | }
48 | config.GenerateButton.Text = "Generate";
49 |
50 | config.GenerateButton.Enabled = true;
51 |
52 | config.DebugTextBox.Clear();
53 | config.ProgressBar.Value = 0;
54 | }));
55 | }
56 | };
57 |
58 | process.OutputDataReceived += (s, e) =>
59 | {
60 | Generator.PrintToDebug(config.DebugTextBox, e.Data);
61 | };
62 | process.ErrorDataReceived += (s, e) =>
63 | {
64 | Generator.PrintToDebug(config.DebugTextBox, e.Data);
65 | };
66 | process.Start();
67 | process.BeginErrorReadLine();
68 | process.BeginOutputReadLine();
69 |
70 | using (var sw = process.StandardInput)
71 | {
72 | if (sw.BaseStream.CanWrite)
73 | {
74 | sw.WriteLine("cd video2x");
75 | for (var i = 0; i < images.Length; i++)
76 | {
77 | var scale = config.UseGFPGANandVideo2x ? config.Upscale / 2 : config.Upscale;
78 | var res = config.ResHeight * scale;
79 |
80 | var image = images[i];
81 | sw.WriteLine(".\\video2x.exe -i \"" + image + "\""
82 | + " -o outputs\\" + outputNames[i]
83 | + " -h " + res
84 | + " -w " + res
85 | + " -d realsr_ncnn_vulkan"
86 | + " -p 3");
87 | }
88 | }
89 | }
90 | }
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/SDToolkit/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace SDToolkit.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Returns the cached ResourceManager instance used by this class.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SDToolkit.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Overrides the current thread's CurrentUICulture property for all
51 | /// resource lookups using this strongly typed resource class.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// Looks up a localized resource of type System.Drawing.Bitmap.
65 | ///
66 | internal static System.Drawing.Bitmap cross {
67 | get {
68 | object obj = ResourceManager.GetObject("cross", resourceCulture);
69 | return ((System.Drawing.Bitmap)(obj));
70 | }
71 | }
72 |
73 | ///
74 | /// Looks up a localized resource of type System.Drawing.Bitmap.
75 | ///
76 | internal static System.Drawing.Bitmap help {
77 | get {
78 | object obj = ResourceManager.GetObject("help", resourceCulture);
79 | return ((System.Drawing.Bitmap)(obj));
80 | }
81 | }
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/SDToolkitUpdater/Window.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json.Linq;
2 | using RestSharp;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.ComponentModel;
6 | using System.Data;
7 | using System.Diagnostics;
8 | using System.Drawing;
9 | using System.IO;
10 | using System.IO.Compression;
11 | using System.Linq;
12 | using System.Text;
13 | using System.Threading.Tasks;
14 | using System.Windows.Forms;
15 |
16 | namespace SDToolkitUpdater
17 | {
18 | public partial class Window : Form
19 | {
20 | private string _patchUrl;
21 | private int _patchSize;
22 |
23 | public Window()
24 | {
25 | InitializeComponent();
26 | }
27 |
28 | private void Window_Load(object sender, EventArgs e)
29 | {
30 | var client = new RestClient("https://api.github.com/repos/SocketByte/SDToolkit/releases");
31 | var request = new RestRequest();
32 | request.AddHeader("Accept", "application/vnd.github+json");
33 | RestResponse response = client.Execute(request);
34 |
35 | var releases = JArray.Parse(response.Content);
36 | var asset = releases[0]["assets"][0];
37 | _patchUrl = asset["browser_download_url"].ToString();
38 | _patchSize = int.Parse(asset["size"].ToString());
39 | }
40 |
41 | private void Window_Shown(object sender, EventArgs e)
42 | {
43 | var thread = new System.Threading.Thread(async () =>
44 | {
45 | if (File.Exists("patch.zip"))
46 | {
47 | File.Delete("patch.zip");
48 | }
49 |
50 | await Downloader.Downloader.DownloadAsync(
51 | downloadBar, downloadLabel, updateLabel,
52 | _patchUrl, _patchSize / 1024);
53 |
54 | if (Directory.Exists("patch"))
55 | {
56 | Directory.Delete("patch", true);
57 | }
58 |
59 | ZipFile.ExtractToDirectory("patch.zip", "patch");
60 |
61 | var files = Directory.GetFiles("patch", "*.*", SearchOption.AllDirectories);
62 | var total = files.Length;
63 | var current = 1;
64 | foreach (var file in files)
65 | {
66 | var dest = file.Replace("patch\\", "");
67 | if (Path.GetDirectoryName(dest) == String.Empty || Directory.Exists(Path.GetDirectoryName(dest)))
68 | {
69 | File.Copy(file, dest, true);
70 | }
71 | else
72 | {
73 | Directory.CreateDirectory(Path.GetDirectoryName(dest));
74 | File.Copy(file, dest, true);
75 | }
76 |
77 | Console.WriteLine(dest);
78 | var progress = (int)Math.Round(100.0 * ((double)total / (double)current));
79 | installBar.Invoke(new MethodInvoker(delegate ()
80 | {
81 | if (progress < 100)
82 | {
83 | installBar.Value = progress;
84 | installLabel.Text = progress.ToString() + "%";
85 | }
86 | else
87 | {
88 | installBar.Value = 100;
89 | installLabel.Text = "100%";
90 | }
91 | updateLabel.Text = "Installing... " + current + " / " + total;
92 | }));
93 | current++;
94 | }
95 |
96 | Directory.Delete("patch", true);
97 | File.Delete("patch.zip");
98 |
99 | var process = new Process();
100 | process.StartInfo.FileName = "SDToolkit.exe";
101 | process.Start();
102 |
103 | Environment.Exit(0);
104 | });
105 |
106 | thread.Start();
107 | }
108 | }
109 | }
110 |
--------------------------------------------------------------------------------
/SDToolkit/Tools/FaceRestoration.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Diagnostics;
4 | using System.Drawing;
5 | using System.IO;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 | using System.Windows.Forms;
10 |
11 | namespace SDToolkit
12 | {
13 | class FaceRestoration
14 | {
15 | public static void RestoreWithGFPGAN(Generator.GeneratorConfig config, string[] images)
16 | {
17 | var outputNames = new string[images.Length];
18 | for (var i = 0; i < images.Length; i++)
19 | {
20 | outputNames[i] = DateTimeOffset.Now.ToUnixTimeSeconds().ToString() + "_" + i + ".png";
21 | }
22 |
23 | var inputs = "GFPGAN\\inputs\\temp";
24 | if (Directory.Exists(inputs))
25 | {
26 | Directory.Delete(inputs, true);
27 | }
28 | Directory.CreateDirectory(inputs);
29 | for (var i = 0; i < images.Length; i++)
30 | {
31 | var image = images[i];
32 | File.Copy(image, inputs + "\\" + outputNames[i]);
33 | }
34 |
35 | var process = new Process
36 | {
37 | StartInfo = new ProcessStartInfo
38 | {
39 | FileName = "cmd.exe",
40 | RedirectStandardInput = true,
41 | UseShellExecute = false,
42 | CreateNoWindow = true,
43 | RedirectStandardOutput = true,
44 | RedirectStandardError = true,
45 | WorkingDirectory = Generator.WorkingDirectory,
46 | },
47 | EnableRaisingEvents = true,
48 | };
49 |
50 | process.Exited += (s, e) =>
51 | {
52 | if (config.GenerateButton.InvokeRequired)
53 | {
54 | config.GenerateButton.Invoke(new MethodInvoker(delegate ()
55 | {
56 | if (config.UseGFPGANandVideo2x)
57 | {
58 | config.GenerateButton.Invoke(new MethodInvoker(delegate ()
59 | {
60 | config.GenerateButton.Text = "Upscaling with Video2x...";
61 | config.DebugTextBox.Clear();
62 | }));
63 |
64 | Upscaler.Upscale(config, images);
65 | return;
66 | }
67 |
68 | for (var i = 0; i < images.Length; i++)
69 | {
70 | var image = images[i];
71 | var pictureBox = config.PictureBoxes[i];
72 | pictureBox.Image = Image.FromFile("GFPGAN\\results\\restored_imgs\\" + outputNames[i]);
73 | }
74 | config.GenerateButton.Text = "Generate";
75 |
76 | config.GenerateButton.Enabled = true;
77 |
78 | config.DebugTextBox.Clear();
79 | config.ProgressBar.Value = 0;
80 | }));
81 | }
82 | };
83 |
84 | process.OutputDataReceived += (s, e) =>
85 | {
86 | Console.WriteLine(e.Data);
87 | Generator.PrintToDebug(config.DebugTextBox, e.Data);
88 | };
89 | process.ErrorDataReceived += (s, e) =>
90 | {
91 | Console.WriteLine(e.Data);
92 | Generator.PrintToDebug(config.DebugTextBox, e.Data);
93 | };
94 | process.Start();
95 | process.BeginErrorReadLine();
96 | process.BeginOutputReadLine();
97 |
98 | using (var sw = process.StandardInput)
99 | {
100 | if (sw.BaseStream.CanWrite)
101 | {
102 | var scale = config.Upscale;
103 | if (config.UseGFPGANandVideo2x)
104 | {
105 | scale = 2;
106 | }
107 | sw.WriteLine("conda\\Scripts\\activate.bat");
108 | sw.WriteLine("activate");
109 | sw.WriteLine("cd GFPGAN");
110 | sw.WriteLine("python inference_gfpgan.py -i inputs/temp -o results -v 1.3 -s " + scale);
111 | }
112 | }
113 | }
114 | }
115 | }
116 |
--------------------------------------------------------------------------------
/SDToolkitUpdater/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/SDToolkitUpdater/Window.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace SDToolkitUpdater
2 | {
3 | partial class Window
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Window));
32 | this.installBar = new System.Windows.Forms.ProgressBar();
33 | this.downloadBar = new System.Windows.Forms.ProgressBar();
34 | this.updateLabel = new System.Windows.Forms.Label();
35 | this.downloadLabel = new System.Windows.Forms.Label();
36 | this.installLabel = new System.Windows.Forms.Label();
37 | this.SuspendLayout();
38 | //
39 | // installBar
40 | //
41 | this.installBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
42 | | System.Windows.Forms.AnchorStyles.Right)));
43 | this.installBar.Location = new System.Drawing.Point(12, 60);
44 | this.installBar.Name = "installBar";
45 | this.installBar.Size = new System.Drawing.Size(434, 23);
46 | this.installBar.TabIndex = 0;
47 | //
48 | // downloadBar
49 | //
50 | this.downloadBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
51 | | System.Windows.Forms.AnchorStyles.Right)));
52 | this.downloadBar.Location = new System.Drawing.Point(12, 31);
53 | this.downloadBar.Name = "downloadBar";
54 | this.downloadBar.Size = new System.Drawing.Size(434, 23);
55 | this.downloadBar.TabIndex = 1;
56 | //
57 | // updateLabel
58 | //
59 | this.updateLabel.AutoSize = true;
60 | this.updateLabel.Location = new System.Drawing.Point(9, 9);
61 | this.updateLabel.Name = "updateLabel";
62 | this.updateLabel.Size = new System.Drawing.Size(59, 13);
63 | this.updateLabel.TabIndex = 2;
64 | this.updateLabel.Text = "Updating...";
65 | //
66 | // downloadLabel
67 | //
68 | this.downloadLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
69 | this.downloadLabel.AutoSize = true;
70 | this.downloadLabel.Location = new System.Drawing.Point(453, 36);
71 | this.downloadLabel.Name = "downloadLabel";
72 | this.downloadLabel.Size = new System.Drawing.Size(21, 13);
73 | this.downloadLabel.TabIndex = 3;
74 | this.downloadLabel.Text = "0%";
75 | //
76 | // installLabel
77 | //
78 | this.installLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
79 | this.installLabel.AutoSize = true;
80 | this.installLabel.Location = new System.Drawing.Point(453, 65);
81 | this.installLabel.Name = "installLabel";
82 | this.installLabel.Size = new System.Drawing.Size(21, 13);
83 | this.installLabel.TabIndex = 4;
84 | this.installLabel.Text = "0%";
85 | //
86 | // Window
87 | //
88 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
89 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
90 | this.ClientSize = new System.Drawing.Size(489, 95);
91 | this.Controls.Add(this.installLabel);
92 | this.Controls.Add(this.downloadLabel);
93 | this.Controls.Add(this.updateLabel);
94 | this.Controls.Add(this.downloadBar);
95 | this.Controls.Add(this.installBar);
96 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
97 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
98 | this.MaximizeBox = false;
99 | this.MaximumSize = new System.Drawing.Size(505, 134);
100 | this.MinimumSize = new System.Drawing.Size(505, 134);
101 | this.Name = "Window";
102 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
103 | this.Text = "SDToolkit Updater";
104 | this.Load += new System.EventHandler(this.Window_Load);
105 | this.Shown += new System.EventHandler(this.Window_Shown);
106 | this.ResumeLayout(false);
107 | this.PerformLayout();
108 |
109 | }
110 |
111 | #endregion
112 |
113 | private System.Windows.Forms.ProgressBar installBar;
114 | private System.Windows.Forms.ProgressBar downloadBar;
115 | private System.Windows.Forms.Label updateLabel;
116 | private System.Windows.Forms.Label downloadLabel;
117 | private System.Windows.Forms.Label installLabel;
118 | }
119 | }
120 |
121 |
--------------------------------------------------------------------------------
/SDToolkit/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 | ..\resources\cross.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
123 |
124 |
125 | ..\Resources\help.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
126 |
127 |
--------------------------------------------------------------------------------
/SDToolkitUpdater/SDToolkitUpdater.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {4DE1E61D-EE11-488B-A3C2-770711E3B8C7}
8 | WinExe
9 | SDToolkitUpdater
10 | SDToolkitUpdater
11 | v4.7.2
12 | 512
13 | true
14 | true
15 |
16 |
17 | AnyCPU
18 | true
19 | full
20 | false
21 | bin\Debug\
22 | DEBUG;TRACE
23 | prompt
24 | 4
25 |
26 |
27 | AnyCPU
28 | pdbonly
29 | true
30 | bin\Release\
31 | TRACE
32 | prompt
33 | 4
34 |
35 |
36 | ico.ico
37 |
38 |
39 |
40 | ..\packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll
41 |
42 |
43 | ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll
44 |
45 |
46 | ..\packages\RestSharp.108.0.2\lib\netstandard2.0\RestSharp.dll
47 |
48 |
49 |
50 | ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll
51 |
52 |
53 |
54 |
55 | ..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll
56 | True
57 | True
58 |
59 |
60 | ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll
61 |
62 |
63 |
64 | ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll
65 |
66 |
67 | ..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll
68 |
69 |
70 | ..\packages\System.Text.Encodings.Web.5.0.0\lib\net461\System.Text.Encodings.Web.dll
71 |
72 |
73 | ..\packages\System.Text.Json.5.0.0\lib\net461\System.Text.Json.dll
74 |
75 |
76 | ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll
77 |
78 |
79 | ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 | Form
95 |
96 |
97 | Window.cs
98 |
99 |
100 |
101 |
102 | Window.cs
103 |
104 |
105 | ResXFileCodeGenerator
106 | Resources.Designer.cs
107 | Designer
108 |
109 |
110 | True
111 | Resources.resx
112 |
113 |
114 |
115 | SettingsSingleFileGenerator
116 | Settings.Designer.cs
117 |
118 |
119 | True
120 | Settings.settings
121 | True
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Mono auto generated files
17 | mono_crash.*
18 |
19 | # Build results
20 | [Dd]ebug/
21 | [Dd]ebugPublic/
22 | [Rr]elease/
23 | [Rr]eleases/
24 | x64/
25 | x86/
26 | [Ww][Ii][Nn]32/
27 | [Aa][Rr][Mm]/
28 | [Aa][Rr][Mm]64/
29 | bld/
30 | [Bb]in/
31 | [Oo]bj/
32 | [Oo]ut/
33 | [Ll]og/
34 | [Ll]ogs/
35 |
36 | # Visual Studio 2015/2017 cache/options directory
37 | .vs/
38 | # Uncomment if you have tasks that create the project's static files in wwwroot
39 | #wwwroot/
40 |
41 | # Visual Studio 2017 auto generated files
42 | Generated\ Files/
43 |
44 | # MSTest test Results
45 | [Tt]est[Rr]esult*/
46 | [Bb]uild[Ll]og.*
47 |
48 | # NUnit
49 | *.VisualState.xml
50 | TestResult.xml
51 | nunit-*.xml
52 |
53 | # Build Results of an ATL Project
54 | [Dd]ebugPS/
55 | [Rr]eleasePS/
56 | dlldata.c
57 |
58 | # Benchmark Results
59 | BenchmarkDotNet.Artifacts/
60 |
61 | # .NET Core
62 | project.lock.json
63 | project.fragment.lock.json
64 | artifacts/
65 |
66 | # ASP.NET Scaffolding
67 | ScaffoldingReadMe.txt
68 |
69 | # StyleCop
70 | StyleCopReport.xml
71 |
72 | # Files built by Visual Studio
73 | *_i.c
74 | *_p.c
75 | *_h.h
76 | *.ilk
77 | *.meta
78 | *.obj
79 | *.iobj
80 | *.pch
81 | *.pdb
82 | *.ipdb
83 | *.pgc
84 | *.pgd
85 | *.rsp
86 | *.sbr
87 | *.tlb
88 | *.tli
89 | *.tlh
90 | *.tmp
91 | *.tmp_proj
92 | *_wpftmp.csproj
93 | *.log
94 | *.vspscc
95 | *.vssscc
96 | .builds
97 | *.pidb
98 | *.svclog
99 | *.scc
100 |
101 | # Chutzpah Test files
102 | _Chutzpah*
103 |
104 | # Visual C++ cache files
105 | ipch/
106 | *.aps
107 | *.ncb
108 | *.opendb
109 | *.opensdf
110 | *.sdf
111 | *.cachefile
112 | *.VC.db
113 | *.VC.VC.opendb
114 |
115 | # Visual Studio profiler
116 | *.psess
117 | *.vsp
118 | *.vspx
119 | *.sap
120 |
121 | # Visual Studio Trace Files
122 | *.e2e
123 |
124 | # TFS 2012 Local Workspace
125 | $tf/
126 |
127 | # Guidance Automation Toolkit
128 | *.gpState
129 |
130 | # ReSharper is a .NET coding add-in
131 | _ReSharper*/
132 | *.[Rr]e[Ss]harper
133 | *.DotSettings.user
134 |
135 | # TeamCity is a build add-in
136 | _TeamCity*
137 |
138 | # DotCover is a Code Coverage Tool
139 | *.dotCover
140 |
141 | # AxoCover is a Code Coverage Tool
142 | .axoCover/*
143 | !.axoCover/settings.json
144 |
145 | # Coverlet is a free, cross platform Code Coverage Tool
146 | coverage*.json
147 | coverage*.xml
148 | coverage*.info
149 |
150 | # Visual Studio code coverage results
151 | *.coverage
152 | *.coveragexml
153 |
154 | # NCrunch
155 | _NCrunch_*
156 | .*crunch*.local.xml
157 | nCrunchTemp_*
158 |
159 | # MightyMoose
160 | *.mm.*
161 | AutoTest.Net/
162 |
163 | # Web workbench (sass)
164 | .sass-cache/
165 |
166 | # Installshield output folder
167 | [Ee]xpress/
168 |
169 | # DocProject is a documentation generator add-in
170 | DocProject/buildhelp/
171 | DocProject/Help/*.HxT
172 | DocProject/Help/*.HxC
173 | DocProject/Help/*.hhc
174 | DocProject/Help/*.hhk
175 | DocProject/Help/*.hhp
176 | DocProject/Help/Html2
177 | DocProject/Help/html
178 |
179 | # Click-Once directory
180 | publish/
181 |
182 | # Publish Web Output
183 | *.[Pp]ublish.xml
184 | *.azurePubxml
185 | # Note: Comment the next line if you want to checkin your web deploy settings,
186 | # but database connection strings (with potential passwords) will be unencrypted
187 | *.pubxml
188 | *.publishproj
189 |
190 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
191 | # checkin your Azure Web App publish settings, but sensitive information contained
192 | # in these scripts will be unencrypted
193 | PublishScripts/
194 |
195 | # NuGet Packages
196 | *.nupkg
197 | # NuGet Symbol Packages
198 | *.snupkg
199 | # The packages folder can be ignored because of Package Restore
200 | **/[Pp]ackages/*
201 | # except build/, which is used as an MSBuild target.
202 | !**/[Pp]ackages/build/
203 | # Uncomment if necessary however generally it will be regenerated when needed
204 | #!**/[Pp]ackages/repositories.config
205 | # NuGet v3's project.json files produces more ignorable files
206 | *.nuget.props
207 | *.nuget.targets
208 |
209 | # Microsoft Azure Build Output
210 | csx/
211 | *.build.csdef
212 |
213 | # Microsoft Azure Emulator
214 | ecf/
215 | rcf/
216 |
217 | # Windows Store app package directories and files
218 | AppPackages/
219 | BundleArtifacts/
220 | Package.StoreAssociation.xml
221 | _pkginfo.txt
222 | *.appx
223 | *.appxbundle
224 | *.appxupload
225 |
226 | # Visual Studio cache files
227 | # files ending in .cache can be ignored
228 | *.[Cc]ache
229 | # but keep track of directories ending in .cache
230 | !?*.[Cc]ache/
231 |
232 | # Others
233 | ClientBin/
234 | ~$*
235 | *~
236 | *.dbmdl
237 | *.dbproj.schemaview
238 | *.jfm
239 | *.pfx
240 | *.publishsettings
241 | orleans.codegen.cs
242 |
243 | # Including strong name files can present a security risk
244 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
245 | #*.snk
246 |
247 | # Since there are multiple workflows, uncomment next line to ignore bower_components
248 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
249 | #bower_components/
250 |
251 | # RIA/Silverlight projects
252 | Generated_Code/
253 |
254 | # Backup & report files from converting an old project file
255 | # to a newer Visual Studio version. Backup files are not needed,
256 | # because we have git ;-)
257 | _UpgradeReport_Files/
258 | Backup*/
259 | UpgradeLog*.XML
260 | UpgradeLog*.htm
261 | ServiceFabricBackup/
262 | *.rptproj.bak
263 |
264 | # SQL Server files
265 | *.mdf
266 | *.ldf
267 | *.ndf
268 |
269 | # Business Intelligence projects
270 | *.rdl.data
271 | *.bim.layout
272 | *.bim_*.settings
273 | *.rptproj.rsuser
274 | *- [Bb]ackup.rdl
275 | *- [Bb]ackup ([0-9]).rdl
276 | *- [Bb]ackup ([0-9][0-9]).rdl
277 |
278 | # Microsoft Fakes
279 | FakesAssemblies/
280 |
281 | # GhostDoc plugin setting file
282 | *.GhostDoc.xml
283 |
284 | # Node.js Tools for Visual Studio
285 | .ntvs_analysis.dat
286 | node_modules/
287 |
288 | # Visual Studio 6 build log
289 | *.plg
290 |
291 | # Visual Studio 6 workspace options file
292 | *.opt
293 |
294 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
295 | *.vbw
296 |
297 | # Visual Studio LightSwitch build output
298 | **/*.HTMLClient/GeneratedArtifacts
299 | **/*.DesktopClient/GeneratedArtifacts
300 | **/*.DesktopClient/ModelManifest.xml
301 | **/*.Server/GeneratedArtifacts
302 | **/*.Server/ModelManifest.xml
303 | _Pvt_Extensions
304 |
305 | # Paket dependency manager
306 | .paket/paket.exe
307 | paket-files/
308 |
309 | # FAKE - F# Make
310 | .fake/
311 |
312 | # CodeRush personal settings
313 | .cr/personal
314 |
315 | # Python Tools for Visual Studio (PTVS)
316 | __pycache__/
317 | *.pyc
318 |
319 | # Cake - Uncomment if you are using it
320 | # tools/**
321 | # !tools/packages.config
322 |
323 | # Tabs Studio
324 | *.tss
325 |
326 | # Telerik's JustMock configuration file
327 | *.jmconfig
328 |
329 | # BizTalk build output
330 | *.btp.cs
331 | *.btm.cs
332 | *.odx.cs
333 | *.xsd.cs
334 |
335 | # OpenCover UI analysis results
336 | OpenCover/
337 |
338 | # Azure Stream Analytics local run output
339 | ASALocalRun/
340 |
341 | # MSBuild Binary and Structured Log
342 | *.binlog
343 |
344 | # NVidia Nsight GPU debugger configuration file
345 | *.nvuser
346 |
347 | # MFractors (Xamarin productivity tool) working folder
348 | .mfractor/
349 |
350 | # Local History for Visual Studio
351 | .localhistory/
352 |
353 | # BeatPulse healthcheck temp database
354 | healthchecksdb
355 |
356 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
357 | MigrationBackup/
358 |
359 | # Ionide (cross platform F# VS Code tools) working folder
360 | .ionide/
361 |
362 | # Fody - auto-generated XML schema
363 | FodyWeavers.xsd
--------------------------------------------------------------------------------
/SDToolkit/Tools/Generator.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Diagnostics;
4 | using System.IO;
5 | using System.Linq;
6 | using System.Reflection;
7 | using System.Text;
8 | using System.Threading;
9 | using System.Threading.Tasks;
10 | using System.Windows.Forms;
11 |
12 | namespace SDToolkit
13 | {
14 | class Generator
15 | {
16 | public static readonly string WorkingDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
17 |
18 | public delegate void OnEnd();
19 |
20 | public class GeneratorConfig
21 | {
22 | public string Prompt { get; set; }
23 | public int ResHeight { get; set; }
24 | public int ResWidth { get; set; }
25 | public int Seed { get; set; }
26 | public int Steps { get; set; }
27 | public string Precision { get; set; }
28 | public int Upscale { get; set; }
29 | public bool UseContextImage { get; set; }
30 |
31 | public string ContextImage { get; set; }
32 |
33 | public bool UseTurbo { get; set; }
34 |
35 | public bool UseGFPGAN { get; set; }
36 |
37 | public bool UseGFPGANandVideo2x { get; set; }
38 |
39 | public string Sampler { get; set; }
40 |
41 | public OnEnd OnEnd { get; set; }
42 |
43 | public TextBox DebugTextBox { get; set; }
44 | public ProgressBar ProgressBar { get; set; }
45 | public Button GenerateButton { get; set; }
46 | public PictureBox[] PictureBoxes { get; set; }
47 | }
48 |
49 | public static void PrintToDebug(TextBox debugBox, string message)
50 | {
51 | if (message == null)
52 | {
53 | return;
54 | }
55 | debugBox.Invoke(new MethodInvoker(delegate ()
56 | {
57 | if (message.Length <= 0)
58 | {
59 | return;
60 | }
61 | debugBox.AppendText(message + "\r\n");
62 | debugBox.ScrollToCaret();
63 | }));
64 | }
65 |
66 | public static void GenerateFromPrompt(GeneratorConfig config)
67 | {
68 | new Thread(() =>
69 | {
70 | Thread.CurrentThread.IsBackground = true;
71 |
72 | Run(config);
73 | }).Start();
74 | }
75 |
76 | private static void Run(GeneratorConfig config)
77 | {
78 | var samples = config.UseContextImage ? "img2img-samples" : "txt2img-samples";
79 | var samplesDir = WorkingDirectory + "\\stable-diffusion\\outputs\\" + samples;
80 | if (Directory.Exists(samplesDir))
81 | {
82 | Directory.Delete(samplesDir, true);
83 | }
84 |
85 | var path = DateTimeOffset.Now.ToUnixTimeSeconds().ToString();
86 |
87 | config.GenerateButton.Invoke(new MethodInvoker(delegate ()
88 | {
89 | config.GenerateButton.Text = "Generating...";
90 | }));
91 |
92 | var process = new Process
93 | {
94 | StartInfo = new ProcessStartInfo
95 | {
96 | FileName = "cmd.exe",
97 | RedirectStandardInput = true,
98 | UseShellExecute = false,
99 | CreateNoWindow = true,
100 | RedirectStandardOutput = true,
101 | RedirectStandardError = true,
102 | WorkingDirectory = WorkingDirectory,
103 | },
104 | EnableRaisingEvents = true,
105 | };
106 |
107 | process.Exited += (s, e) =>
108 | {
109 | try
110 | {
111 | var prompt = config.Prompt;
112 | var converted = string.Join("_", prompt.Split(' '));
113 |
114 | var dir = Directory.GetDirectories(WorkingDirectory + @"\stable-diffusion\outputs\" + samples)[0];
115 | var images = Directory.GetFiles(dir, "*.png");
116 |
117 | if (config.UseGFPGAN)
118 | {
119 | config.GenerateButton.Invoke(new MethodInvoker(delegate ()
120 | {
121 | config.GenerateButton.Text = "Restoring faces and upscaling with GFPGAN...";
122 | config.DebugTextBox.Clear();
123 | }));
124 | FaceRestoration.RestoreWithGFPGAN(config, images);
125 | return;
126 | }
127 |
128 | config.GenerateButton.Invoke(new MethodInvoker(delegate ()
129 | {
130 | config.GenerateButton.Text = "Upscaling with Video2x...";
131 | config.DebugTextBox.Clear();
132 | }));
133 |
134 | Upscaler.Upscale(config, images);
135 | }
136 | catch (Exception ex)
137 | {
138 | MessageBox.Show(ex.Message, "An error occurred", MessageBoxButtons.OK, MessageBoxIcon.Error);
139 |
140 | }
141 | };
142 |
143 | process.ErrorDataReceived += (s, e) =>
144 | {
145 | Console.WriteLine(e.Data);
146 | PrintToDebug(config.DebugTextBox, e.Data);
147 |
148 | if (e.Data == null)
149 | {
150 | return;
151 | }
152 | if (e.Data.Contains("Sampler:") || e.Data.Contains("Decoding image:"))
153 | {
154 | var percentage = e.Data.Split(':')[1].Split('%')[0].Trim();
155 | if (percentage.Length == 0)
156 | {
157 | return;
158 | }
159 | config.ProgressBar.Invoke(new MethodInvoker(delegate ()
160 | {
161 | config.ProgressBar.Value = int.Parse(percentage);
162 | }));
163 |
164 | config.GenerateButton.Invoke(new MethodInvoker(delegate ()
165 | {
166 | config.GenerateButton.Text = "Generating... (" + percentage + "%)";
167 | }));
168 | }
169 | };
170 |
171 | process.OutputDataReceived += (s, e) =>
172 | {
173 | Console.WriteLine(e.Data);
174 | PrintToDebug(config.DebugTextBox, e.Data);
175 | };
176 |
177 | process.Start();
178 | process.BeginErrorReadLine();
179 | process.BeginOutputReadLine();
180 |
181 | using (var sw = process.StandardInput)
182 | {
183 | if (sw.BaseStream.CanWrite)
184 | {
185 | sw.WriteLine("conda\\Scripts\\activate.bat");
186 | sw.WriteLine("activate ldm");
187 | sw.WriteLine("cd stable-diffusion");
188 | sw.WriteLine("pip install -e .");
189 | sw.WriteLine("pip install taming-transformers-rom1504");
190 | sw.WriteLine("pip install clip");
191 | if (!config.UseContextImage)
192 | {
193 | sw.WriteLine("python optimizedSD/optimized_txt2img.py --prompt \"" + config.Prompt + "\""
194 | + " --sampler " + config.Sampler.ToLower()
195 | + " --H " + config.ResHeight
196 | + " --W " + config.ResWidth
197 | + " --seed " + config.Seed
198 | + (config.UseTurbo ? " --turbo" : "")
199 | + " --precision " + config.Precision
200 | + " --n_iter 1 --n_samples 8 --ddim_steps " + config.Steps);
201 | }
202 | else
203 | {
204 | sw.WriteLine("python optimizedSD/optimized_img2img.py --strength 0.8 --prompt \"" + config.Prompt + "\""
205 | + " --init-img \"" + config.ContextImage + "\""
206 | + " --H " + config.ResHeight
207 | + " --W " + config.ResWidth
208 | + " --seed " + config.Seed
209 | + (config.UseTurbo ? " --turbo" : "")
210 | + " --precision " + config.Precision
211 | + " --n_iter 1 --n_samples 8 --ddim_steps " + config.Steps);
212 |
213 | }
214 | }
215 | }
216 | }
217 | }
218 | }
219 |
--------------------------------------------------------------------------------
/SDToolkit/SDToolkit.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {8A9E9DE0-C4B2-4DCF-8198-CB2CCBD58514}
8 | WinExe
9 | SDToolkit
10 | SDToolkit
11 | v4.7.2
12 | 512
13 | true
14 | true
15 | publish\
16 | true
17 | Disk
18 | false
19 | Foreground
20 | 7
21 | Days
22 | false
23 | false
24 | true
25 | 0
26 | 1.0.0.%2a
27 | false
28 | false
29 | true
30 |
31 |
32 | x64
33 | true
34 | full
35 | false
36 | bin\Debug\
37 | DEBUG;TRACE
38 | prompt
39 | 4
40 |
41 |
42 | AnyCPU
43 | pdbonly
44 | true
45 | bin\Release\
46 | TRACE
47 | prompt
48 | 4
49 |
50 |
51 | SDToolkit.Program
52 |
53 |
54 | ico.ico
55 |
56 |
57 |
58 | ..\packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll
59 |
60 |
61 | ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll
62 |
63 |
64 | ..\packages\NvAPIWrapper.Net.0.8.1.101\lib\net45\NvAPIWrapper.dll
65 |
66 |
67 | ..\packages\RestSharp.108.0.2\lib\netstandard2.0\RestSharp.dll
68 |
69 |
70 |
71 | ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll
72 |
73 |
74 | ..\packages\System.CodeDom.6.0.0\lib\net461\System.CodeDom.dll
75 |
76 |
77 |
78 |
79 | ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll
80 |
81 |
82 |
83 | ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll
84 |
85 |
86 | ..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll
87 |
88 |
89 | ..\packages\System.Text.Encodings.Web.5.0.0\lib\net461\System.Text.Encodings.Web.dll
90 |
91 |
92 | ..\packages\System.Text.Json.5.0.0\lib\net461\System.Text.Json.dll
93 |
94 |
95 | ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll
96 |
97 |
98 | ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 | Form
116 |
117 |
118 | Window.cs
119 |
120 |
121 |
122 |
123 | Window.cs
124 |
125 |
126 | ResXFileCodeGenerator
127 | Resources.Designer.cs
128 | Designer
129 |
130 |
131 | True
132 | Resources.resx
133 | True
134 |
135 |
136 |
137 | SettingsSingleFileGenerator
138 | Settings.Designer.cs
139 |
140 |
141 | True
142 | Settings.settings
143 | True
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 | False
161 | Microsoft .NET Framework 4.7.2 %28x86 and x64%29
162 | true
163 |
164 |
165 | False
166 | .NET Framework 3.5 SP1
167 | false
168 |
169 |
170 |
171 |
--------------------------------------------------------------------------------
/SDToolkit/Window.cs:
--------------------------------------------------------------------------------
1 |
2 | using Newtonsoft.Json.Linq;
3 | using NvAPIWrapper.Display;
4 | using RestSharp;
5 | using System;
6 | using System.Collections.Generic;
7 | using System.ComponentModel;
8 | using System.Data;
9 | using System.Diagnostics;
10 | using System.Drawing;
11 | using System.IO;
12 | using System.Linq;
13 | using System.Management;
14 | using System.Text;
15 | using System.Threading;
16 | using System.Threading.Tasks;
17 | using System.Windows.Forms;
18 | using System.Xml.Serialization;
19 | using static SDToolkit.Window;
20 |
21 | namespace SDToolkit
22 | {
23 | public partial class Window : Form
24 | {
25 | private uint _vram = 0;
26 | private DateTime _start;
27 | private string _latestVersion;
28 |
29 | public Window()
30 | {
31 | InitializeComponent();
32 |
33 | var gpus = NvAPIWrapper.GPU.PhysicalGPU.GetPhysicalGPUs();
34 | var gpu = gpus[0];
35 |
36 | var vramInGb = gpu.MemoryInformation.DedicatedVideoMemoryInkB / 1024 / 1024;
37 |
38 | gpuInfoLabel.Text = gpu.FullName + " / " + gpu.MemoryInformation.RAMType + " / " + vramInGb + " GB VRAM";
39 |
40 | _vram = vramInGb;
41 |
42 | if (gpu.FullName.Contains("RTX"))
43 | {
44 | precisionCheck.Checked = false;
45 | } else
46 | {
47 | precisionCheck.Checked = true;
48 | }
49 |
50 | }
51 |
52 | private void GenerateButton_Click(object sender, EventArgs e)
53 | {
54 | try
55 | {
56 | _start = DateTime.Now;
57 |
58 | new Thread(() =>
59 | {
60 | while (!GenerateButton.Enabled)
61 | {
62 | timerLabel.Invoke(new MethodInvoker(delegate ()
63 | {
64 | var now = DateTime.Now - _start;
65 | var minutes = now.Minutes < 10 ? "0" + now.Minutes : now.Minutes.ToString();
66 | var seconds = now.Seconds < 10 ? "0" + now.Seconds : now.Seconds.ToString();
67 | timerLabel.Text = minutes + ":" + seconds;
68 | }));
69 | Thread.Sleep(1000);
70 | }
71 | }).Start();
72 |
73 | GenerateButton.Enabled = false;
74 | Generator.GenerateFromPrompt(new Generator.GeneratorConfig
75 | {
76 | Prompt = promptBox.Text,
77 | ResHeight = int.Parse(resHBox.Text),
78 | ResWidth = int.Parse(resWBox.Text),
79 | Seed = int.Parse(seedBox.Text),
80 | Steps = int.Parse(stepsBox.Text),
81 | Precision = precisionCheck.Checked ? "full" : "autocast",
82 |
83 | Sampler = samplerCombo.Text,
84 |
85 | UseContextImage = contextImage.Image != null,
86 | ContextImage = contextImage.ImageLocation,
87 |
88 | UseTurbo = _vram >= 32,
89 |
90 | Upscale = int.Parse(upscaleCombo.Text.Replace("x", "")),
91 |
92 | DebugTextBox = debugBox,
93 | ProgressBar = progressBar,
94 | GenerateButton = GenerateButton,
95 | PictureBoxes = new PictureBox[]
96 | {
97 | pictureBox0,
98 | pictureBox1,
99 | pictureBox2,
100 | pictureBox3,
101 | pictureBox4,
102 | pictureBox5,
103 | pictureBox6,
104 | pictureBox7
105 | },
106 |
107 | UseGFPGAN = useGFPGAN.Checked,
108 | UseGFPGANandVideo2x = false,
109 | });
110 | }
111 | catch (Exception ex)
112 | {
113 | MessageBox.Show(ex.Message, "An error occurred", MessageBoxButtons.OK, MessageBoxIcon.Error);
114 | }
115 | }
116 |
117 | private void Maximize(int id)
118 | {
119 | var pictureBoxes = new PictureBox[]
120 | {
121 | pictureBox0,
122 | pictureBox1,
123 | pictureBox2,
124 | pictureBox3,
125 | pictureBox4,
126 | pictureBox5,
127 | pictureBox6,
128 | pictureBox7,
129 | };
130 |
131 | if (pictureBoxes[id].Dock == DockStyle.None)
132 | {
133 | for (var i = 0; i < pictureBoxes.Length; i++)
134 | {
135 | if (i == id)
136 | {
137 | pictureBoxes[i].Dock = DockStyle.Fill;
138 | continue;
139 | }
140 | pictureBoxes[i].Dock = DockStyle.None;
141 | pictureBoxes[i].Hide();
142 | }
143 | }
144 | else
145 | {
146 | for (var i = 0; i < pictureBoxes.Length; i++)
147 | {
148 | if (i == id)
149 | {
150 | pictureBoxes[i].Dock = DockStyle.None;
151 | continue;
152 | }
153 | pictureBoxes[i].Dock = DockStyle.None;
154 | pictureBoxes[i].Show();
155 | }
156 | }
157 | }
158 |
159 | private void pictureBox0_Click(object sender, EventArgs e)
160 | {
161 | Maximize(0);
162 | }
163 |
164 | private void pictureBox1_Click(object sender, EventArgs e)
165 | {
166 | Maximize(1);
167 | }
168 |
169 | private void pictureBox2_Click(object sender, EventArgs e)
170 | {
171 | Maximize(2);
172 | }
173 |
174 | private void pictureBox3_Click(object sender, EventArgs e)
175 | {
176 | Maximize(3);
177 | }
178 |
179 | private void pictureBox4_Click(object sender, EventArgs e)
180 | {
181 | Maximize(4);
182 | }
183 |
184 | private void pictureBox5_Click(object sender, EventArgs e)
185 | {
186 | Maximize(5);
187 | }
188 |
189 | private void pictureBox6_Click(object sender, EventArgs e)
190 | {
191 | Maximize(6);
192 | }
193 |
194 | private void pictureBox7_Click(object sender, EventArgs e)
195 | {
196 | Maximize(7);
197 | }
198 |
199 | private void contextButton_Click(object sender, EventArgs e)
200 | {
201 | // Open file selectors
202 | var openFileDialog = new OpenFileDialog();
203 | openFileDialog.Filter = "Image Files (*.png;*.jpg;*.jpeg;*.bmp)|*.png;*.jpg;*.jpeg;*.bmp";
204 | openFileDialog.Multiselect = false;
205 | openFileDialog.Title = "Select a context image";
206 |
207 | if (openFileDialog.ShowDialog() == DialogResult.OK)
208 | {
209 | var path = openFileDialog.FileName;
210 | contextImage.Image = Image.FromFile(path);
211 | contextImage.ImageLocation = path;
212 |
213 | contextButton.Enabled = false;
214 |
215 | samplerCombo.Enabled = false;
216 | samplerCombo.SelectedIndex = 0;
217 |
218 | contextRemoveButton.Enabled = true;
219 | }
220 | }
221 |
222 | private void contextRemoveButton_Click(object sender, EventArgs e)
223 | {
224 | contextImage.Image = null;
225 | contextImage.ImageLocation = null;
226 |
227 | contextButton.Enabled = true;
228 |
229 | samplerCombo.Enabled = true;
230 | samplerCombo.SelectedIndex = 1;
231 |
232 | contextRemoveButton.Enabled = false;
233 | }
234 |
235 | private void toolTip1_Popup(object sender, PopupEventArgs e)
236 | {
237 |
238 | }
239 |
240 | private void SetUpscaleInfo()
241 | {
242 | var upscaleValue = int.Parse(upscaleCombo.Text.Replace("x", ""));
243 | var x = upscaleValue * int.Parse(resWBox.Text);
244 | var y = upscaleValue * int.Parse(resHBox.Text);
245 | var upscaler = useGFPGAN.Checked ? "GFPGAN" : "Video2x (RealSR)";
246 | upscaleLabel.Text = "Final image resolution after upscaling: " + x + " x " + y + ", upscaler: " + upscaler;
247 | }
248 |
249 | public class App
250 | {
251 | public string AppVersion { get; set; }
252 | }
253 |
254 | private void Window_Load(object sender, EventArgs e)
255 | {
256 | SetUpscaleInfo();
257 |
258 | var app = new App();
259 | var serializer = new XmlSerializer(typeof(App));
260 | using (var reader = new StreamReader("App.xml"))
261 | {
262 | app = (App)serializer.Deserialize(reader);
263 | }
264 | Text = "SDToolkit " + app.AppVersion;
265 |
266 | var client = new RestClient("https://api.github.com/repos/SocketByte/SDToolkit/releases");
267 | var request = new RestRequest();
268 | request.AddHeader("Accept", "application/vnd.github+json");
269 | RestResponse response = client.Execute(request);
270 |
271 | var releases = JArray.Parse(response.Content);
272 |
273 | _latestVersion = releases[0]["tag_name"].ToString().Replace("v", "");
274 |
275 | }
276 |
277 | private void upscaleCombo_SelectedIndexChanged(object sender, EventArgs e)
278 | {
279 | SetUpscaleInfo();
280 | }
281 |
282 | private void resHBox_TextChanged(object sender, EventArgs e)
283 | {
284 | SetUpscaleInfo();
285 | }
286 |
287 | private void resWBox_TextChanged(object sender, EventArgs e)
288 | {
289 | SetUpscaleInfo();
290 | }
291 |
292 | private void useGFPGAN_CheckedChanged(object sender, EventArgs e)
293 | {
294 | SetUpscaleInfo();
295 | }
296 |
297 | private void Window_Shown(object sender, EventArgs e)
298 | {
299 | var app = new App();
300 | var serializer = new XmlSerializer(typeof(App));
301 | using (var reader = new StreamReader("App.xml"))
302 | {
303 | app = (App)serializer.Deserialize(reader);
304 | }
305 | if (_latestVersion != app.AppVersion)
306 | {
307 | var result = MessageBox.Show("A new version of SDToolkit is available: " + _latestVersion + ". \nDo you want to download the update now?", "New version available",
308 | MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
309 |
310 | if (result.Equals(DialogResult.OK))
311 | {
312 | var process = new Process();
313 | process.StartInfo.FileName = "SDToolkitUpdater.exe";
314 | process.Start();
315 |
316 | Environment.Exit(0);
317 | }
318 | }
319 | }
320 | }
321 |
322 |
323 | }
324 |
--------------------------------------------------------------------------------
/SDToolkitUpdater/Window.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 |
123 | AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAMMOAADDDgAAAAAAAAAA
124 | AACJmrECi5qzBI6dtECWpr8ffYinBZWXrAaamqgBfoKrCoiLqxSUjZ7/lZCa/5mTnP+clp7/h4u//5WT
125 | tf+PhpT/jouX/5mQnP9AQXz/QkeD/0JKhP9ETYb/R1OL/0ZOhf9PVYX/GzMq/xk1Kf9dXnP/VVNr/z48
126 | SP8vS0r/NVVP/ypIQP8vRj//JTwz/ytBOP8xL2z/KyFJ/0JCd/8/M1P/UFl2/1dge/9cYnz/Zmt9/3Fw
127 | eP9feob/WXmF/116iP9ieoj/Y3mI/2Bygf9QY23/IGR6/zJQVf9EXWLKTGZqPktscBQxYWgUAAAAAKKh
128 | owXY08tWyczQFLvJ1hW63/MEkJ6xApOgsgqZpLgBAAAAAJ2csQKVl6lYl5Wp85ucqPucmaX5nJyn/5iW
129 | pv+Yk6f/lpGo/5OOo/+NiZr/kI+f/39/lP+Sjpf/QUJ8/0JEgv9GTIj/TFWL/1Zhkf9QV4j/UleC/xkr
130 | Jv8ZMSX/WFlp/0NDUv83LVH/JSI5/zlYV/85UUz/NE5I/yc4N/8oJUH/KSpf/y8eOf85NWD/NCJL/0o/
131 | Yv9XX3r/YmqD/2Vsgf9jZnP/bHmF/2F7if9feoj/YnqI/2B0g/8cPDz/IDpA/xw6Q/9FXGL/UWpv/09r
132 | a/87Y2P/SnVz+0h1cyFyk7cErdv1BanK5gPT19kC0c3PBAAAAAClrbwOAAAAAKOyywJ/pMw0gZ7L/46Y
133 | rf+Tm6v/kJWn/4uRpP+LkKH/d4Cb/1toj/97gJ3/lZKk/5ybo/+KiZT/UVOO/3+Akf9DSYX/S1CK/1Jc
134 | jv9caZT/V1+O/zlAW/8bOSz/XVtr/09NXf89NkX/LitE/yAZNf8wPlX/MUtL/zcvev8xIW3/NTBq/zFE
135 | dP8vMGX/Qi1Y/0VHdP9JTGj/WFBy/19nff9ob4L/Z3OF/2dvfP9sgI3/ZX+N/2Z/jf8oPUT/L0xV/yle
136 | bf8eTUT/R2Fi/1FrbP8/aW7/On16/zp/d/9GsKD/T6uacoeRsgGJk7ADk5y1AZ6ftiIAAAAAAAAAAAAA
137 | AAC9tbOuxbiy+MW7rP+8s5z/wr2l/8zIrP/KyLb/y8q8/77Buf+ztrT/q62//3+Ltf9CTIv/QkyM/0RP
138 | iv9CSon/REqH/0tRif9YYpL/XGiU/1hgj/9KTl//Wlhk/15baP9FQVD/JCRP/15eav8mGUL/LSJi/xgW
139 | Kf83M2X/TkOA/zkpcf8sI1D/IhJM/yseVP9LQmP/HQw3/1NYbv9jaXv/XmB3/25ygf9YaYL/WW+F/2N8
140 | jP9rhJP/Zn6O/zVWYf9Ja3L/F1BB/z9bWv9TcnL/TYmT/zqIfv9AmYr/PpaJ/0uzpv+EkrFbAAAAAAAA
141 | AACPmbMdAAAAAAAAAACgyugYmsbg/9r4+v9AaHL/MWZd/zBlYP9Qcnz/W3t2/1eEcv9ci3j/S5ie/1Rx
142 | fv9MWYr/SVCM/0VQi/9DUIr/QEiG/0ZNif9JUoj/VmKR/1tolf9ZYJD/UVhm/2Vlc/9UVGb/Gi5d/2Zl
143 | bv9kYW//LjNU/ywmbf8sIkD/Sj9J/0ZHXv81QV3/PS1k/zQeZf8wNnL/ZVpm/1Znkv9hV2//ZmV4/2Zw
144 | gf9pgJD/WW+G/1lwi/9ieI//YXiL/2Z9jv86ZXT/XnmB/zBfWP9FY2H/Smdk/zJ4dP83in7/Q5uN/0Gh
145 | kv9Blon/j5+7/5Cbt5WSnrsBk5y3EwAAAACQj5wBnpuo3X+Ek/9jfIT/NmxZ/zVrVv8xbFL/PGVR/1eC
146 | cv9chXP/caNu/3KqZ/91qnT/U3CU/0hQiv9IUoz/RE+J/0RMh/9FTIb/UFqL/1tpk/9hbpn/VV6P/1pZ
147 | c/9eYHL/VVBr/3Ryfv9tb3r/Z2Fy/1Yqav9bOlL/MSla/zsjlP8+PYT/OB2O/zYdUf9FSI3/Njl4/3Rq
148 | c/9DP3D/OyQ9/3BkdP9xdYT/aXiK/1xwjP9ldpP/YnmR/2N6jf9ddIn/SnF4/2J9h/8/Xlv/VWhq/1tx
149 | c/84fXb/Not8/0SUiP9Dn5H/Q56S/2KUn/+Sm7b/mJ66B5ObtwcAAAAAkpCYJpaVof+Kjpr/goCP/zVr
150 | Vv81YlH/UGpd/1qDc/9agnH/WWWS/2JpnP9ka5r/XGKU/1BYj/9IU4v/RE6H/0VMhf9PWY//TFCJ/1pk
151 | kv9lcp3/YWya/1BTg/9XWnL/YGN6/zQ6Uv9ycn3/b26B/3RzgP9MEnf/MDmN/z1Yev83G4j/UDuO/ztB
152 | bP9qU3T/YlFh/z8ViP95cHb/dm52/zQ4bv9xaXf/dHeC/25xiP90f5H/ZHaR/2Z6jv9jd5L/S1KI/0Bd
153 | Yf89VlH/R19u/0pjY/9OZmf/OYJ0/zyLgf9GiX//QJeM/zyTh/9Pe4X/kpi2/4+ausaJlbYFp6OlAZ6b
154 | nuSTkpn/mZSe/4OIlv+Gg5L/gIGT/6mqu/9/e57/dnea/1Zgkf9ha5r/XmWV/2JomP9KUYr/SFGK/0ZL
155 | hP9RW5D/YXCc/1lllf9ga5f/b3ii/2Zwnv82NHn/WVx1/0dRhv9bXW3/YGB+/3Z3gP95eYP/eXZ7/1cR
156 | Yv9BV3r/PSx2/0ZGkP9CUI//VVOd/4R5lf97dXr/hHp//4B1ef9WT2j/Z2V3/3x6hv95d4r/f4GN/1pj
157 | iv9XWpX/P1Rf/zdPT/8yUE//Gzc1/1Niiv9Vbm//UGhq/zJ7bP8+g33/QYF7/0iViv9Nm5L/b4ik/46X
158 | uP+Sm7v/mJ67BqulphCloKH/lJee/5SRm/+Ni5b/gYSV/2pulf99e5v/fnyf/3R0mf9cYpX/YWia/2hu
159 | mv9nbZv/WWCT/1BXif9XYY//Y26c/3F3of9cZZX/YGmY/3B5pP9weKP/YGOT/1NXbf9fXnb/ZmiC/25w
160 | e/9nan//bm54/3Z0fP9ydHf/ZB+S/2prff9iZ3j/XUeW/3pVhv94c3//gXuD/4R7gv+AeYP/dG11/1NP
161 | jf96eIj/eXuL/3J1l/9XXZj/NDd1/0FaXP9Rbmn/OVVT/zhCcf9NXIj/TWhp/1Bpbf85fnL/Uo+N/0eL
162 | g/9Ih3//Zo2G/4OTu/+Umrr/lJu995uivgOrp6isr66w/6ijpP+jnqH/m5me/4CBj/9tbJj/fnyc/4B/
163 | of94eKD/YGaX/2Npmv96fqX/eHei/2tzn/9faJb/anab/3mApP9+gqb/ZmiW/zs3bv9hZpX/dHqk/2Rp
164 | lv9JRnv/VVZx/2xsgP9hZ3n/Ymd7/2Bld/92cnr/e3V//3JyfP9xc3//b3F//25vfP9xcnz/enWE/4V7
165 | h/+Ee4L/gniC/3x6iP8vKlb/REaG/0xTkf9KUZH/PUKD/zpCf/9MY2P/UW5l/zxYV/8/SYH/V2OR/0xl
166 | df9Sb3D/PYF0/0l+dv89dmn/V3Vy/4+byv+Rnsn/mJ27/6CkvvaUnr1VpKOu/6SjpP+npqr/ko2T/6Gf
167 | ov+AgJD/XmCR/4F7n/+Cf6X/eHum/3J6tf9vdaL/hYao/4mHqP97faX/XmWW/1hgjf9xd6H/fH6n/3l6
168 | ov9gYZD/NjZv/2Nnlv9iZZT/UFCE/2dpeP9vbIH/Y2SD/1Vaef9/eoH/dnR//396gv93dH7/eHaC/3Fv
169 | ev90doP/bnCB/312gf9+dH//hH2H/3Zxg/9xb4n/TFCT/1VgoP9WX5v/RkqP/0JIjP9DS47/UWxo/1l3
170 | bv9GUof/RE2M/15qm/9WYpP/TWpq/0t5cv/08vT/YnWD/2x7sv9sfLj/bXm3/6Ssyf+nqML/l6C+/8a6
171 | sP+/ta7/qa2z/6CirP+Ok6X/Vl2R/3Fxof+HhKX/hIOr/4qPv/+rwfD/jYyw/3d5pP+Dg6b/fn6m/2xv
172 | nv9QVIz/Ozhv/2Rpmf92eaP/am2b/1RVjP8mHmf/R0eB/1FTgf9QT4H/bmx7/3x8gP95dn7/d3R//2Vs
173 | fP+Gg4X/gH2C/3t4gf99eoP/aWR0/3FvgP92c3//aGV3/01TmP9QWZ3/VFue/1tjov9gYpr/TVKY/0pO
174 | lv9MT5f/T1Wb/1Jdo/9QX6H/SFmh/0NLj/9ibZ//ZXGg/1Rgjv9pdZr/Z3Sk/2p3rP9te7L/dYK+/8TP
175 | 4//DyNj/ur3Q/7y6x/+jpaj/u7Ov/6iqsP+ip6//iY+k/1laoP9xdKH/dXmp/4OKt/+hv/H/kIWq/5ud
176 | rv95dJn/aGub/4J/pv94d6T/VluT/zQubf83Lmb/Xl6R/2dmmf9oZ5v/XWCR/1BLh/9YVYr/R0d4/0lK
177 | ff+Df4b/f3qC/4B6gf+EgIX/hn2D/4aChP95d37/dnaE/3t5gf+JhI//bGd6/05UnP9UZbT/XXfM/15y
178 | vP9WVIv/VFib/1teoP9aX6P/Xmen/2Nqrf9ZZav/RVWh/0JQnf89SI//ZXCk/3F8rf9qdKX/VmGY/2h2
179 | pf9pdqr/bXuz/3J/vP+DmeT/ssXa/7e/1P+jpbr/1c7D/7a7vP+ys7b/pqmw/3+Hov9zcJ7/cXGi/3t6
180 | q/+cv/b/qsDb/5qXrf+GgJz/enmT/35+mP9wbpn/e3ej/2Vlmv9OUYv/JRla/zAkZP9eW4z/Y2SV/3J1
181 | nf9sb5f/XlyN/1BMjf9PSYD/bHGC/3Jzgv9UYnj/e3uI/4WBif+Phov/hn+G/3Fwgf9tbX//cWx4/1dl
182 | r/9icbL/PEB+/295tv9SYJf/VFeX/1Zanv9fY6j/aW+w/3yEvP96hL3/anKy/1Rdp/9JUp7/R1Ca/2Bq
183 | pf9tdav/cHqp/3B6qv9qcaX/bXmt/216tP9terr/fJzw/3+W9v+dzvb/wb7I/9DJwP/Z08n/0NHO/4qZ
184 | x/+dosD/eXOf/316p/94k9X/hJG5/4qPpv+DjbH/jY+g/4qJmv+Sjpf/eXeV/3Rxnv90cKH/Xl+X/0I7
185 | f/8vJGr/KBxp/yEYaf9gW5D/a2+Y/2lqk/9lY47/gX2B/2R1j/9ibob/gX+M/3t8hf+Nhov/ioOH/4mC
186 | if92c37/a2p8/29vgP92dYT/e3uM/3aBmf9urur/ZWWe/0xWn/9eYab/bnS6/3N6wP90e9L/Yo7p/2hv
187 | rv9pcbD/aG6s/2Vtqv9PWaD/SVic/3N9qv9+hrf/fIW2/4CMv/93hL3/bXq5/26B2/93ovr/kKTh/97g
188 | 4v96ibP/fI28/6a+6P+Bj8P/gH+n/395o/+HgKz/ipe+/36QuP9+jLT/doSs/3SAqP+RkZr/ko+V/4F+
189 | j/9hY5X/a2ea/2Jgm/9iYJv/YV2Z/0xHjf9HP4f/OzCE/ywiff8wMn//i4aL/2lkeP9fdJD/bHmP/2Vv
190 | hv9ycYH/d3iD/3R4iP+FgIn/gX2K/29wff9fZn7/a26E/09XgP+Kho3/doCv/1xfl/9gY6D/a220/5XF
191 | /v9ue9r/ZHbG/2Nnqf9iZqj/XWao/3mBtP+HjLr/f4W2/2x2rf9hbKn/foq3/4yYxf+Nmsf/fIfA/3J8
192 | uP9we7r/eZv5/4ei7/+OqeX/e4m0/3aDsv90grH/d4az/35+of+Df6v/tdHz/4uZv/+Dkrn/eomw/3yJ
193 | rv9zgan/hIOW/3l6jf9qbIT/eXqU/1tcmf9maJr/dXaj/3t7pv91cqD/fXym/21qnP92b6D/hoie/0lb
194 | hf8tR3b/U2eH/1Nmiv91eoz/aHCI/2Vpfv96fpP/a3Sg/1xqm/9ZZJb/Z3CI/2Nnhf+LiY7/g4KJ/2Bh
195 | k/9mY5j/XGSo/3GN2f+Bo/D/d8f8/1tdn/9XXKD/U1qg/1Jaov9QXKT/V3GM/5my3v+Nl8T/eoK1/3N+
196 | tv91gbj/bHa0/4ms5/9+jMX/cHq3/258uv+Jo+z/i5vL/3CErP+LmML/h5rE/4Kawf+Ef6D/i5K//5Sg
197 | w/+XocT/jZi9/4KPs/+CjrH/d4Sr/2dzm/9WXYv/V1d3/29yif9FL2T/kYB6/2lXZf9zb4f/d2+J/3Fu
198 | lf9wbZv/hH+T/4uDlv9vbof/UF6B/21yiP9wcoj/YGaF/25yjP9yeZ3/X26g/1ppnf9baZ3/XWqf/1Rg
199 | oP9fapD/enqD/4eGj/+Jip3/VFuW/1dlpP9ck9D/WV+u/0lPo/9QU5r/TFGb/z1KmP9kisr/VWy4/4aT
200 | 1v9qgNP/aYLY/3yu9/+Rns//f4vA/252tf+XnMf/iaXg/3yLx/91gLn/e5TV/6a92/9wiK7/l7DZ/4Wg
201 | xP+Oqc7/iIWj/6On0v+cqMX/nqbF/5igvv+Wn7n/jJa0/3OAp/9ZZpn/S1qS/0BGhf9nXHf/m4+A/1hX
202 | h/9ZXYr/bGmK/2trjf92do3/eHSO/2h6mv9yg6D/bXiX/2dvkv9raY3/bGqI/2Fpiv9zdpL/YWue/1pq
203 | nP9Zapz/WWqc/1homv9baJr/ZXid/2l9of9fcpv/Xm+Z/0Ril/8+QYD/Tmup/1Vgqv9rfrL/cInC/36O
204 | yf94isf/gY/H/4WRyf+Fk87/hpTR/4ud3P+Co/H/j5/X/4GLw/9uc7T/n6fP/5mk0f+DmND/c4K+/3N+
205 | uP+Zud3/cYy1/3mWvP9tkbb/ZYSw/42Mq/+Gi7//haTM/5ijwv+boL3/lp+5/3yGqP9cZp3/SliT/0tW
206 | kv9maXr/jYR9/yIldP87Qo3/R1KU/3Bzlf9maI3/amqP/253mf9oeZ//a3ac/0Rhkf9SXpT/XWGQ/2Zn
207 | jP9tcI3/Y22Q/1RlmP9XaZr/VmmY/1Vnl/9WZpj/UGCU/2h0lv9weJj/SWOX/z5dlv9KbJj/VG2d/zs9
208 | Yf+hoaj/qKqy/6est/+op7T/gICp/5KNq/97daH/doG9/2l2wP9ncsL/ZXPL/4KV0f99h8L/kZ7Q/56n
209 | 0f+SodD/kKDP/32Sx/99ksz/eo3F/2uSu/90mcD/c5S3/3SWuv+Slrn/iqLX/3aZvv9znb//d6bF/4Cr
210 | xv9fc6v/VGSg/298m/+PkZP/X15w/1ZfoP9FTZn/RE6X/0BHkP9IWZL/TVmO/0ZWlP9PYJ7/ZXSb/0ld
211 | kf8yQ4H/PlKN/0tbk/9UYZT/WGmU/1Jolf9PZJb/T2OU/1Rnl/9TZZX/T2GU/21+nv9ve5v/cn2c/2Rt
212 | kP9beKP/P1iT/2ZdfP/Sy8D/qqSo/5SKkf9ASnb/P0uR/0RMmv8+TKL/ZHzA/2d4uv9qe7//anbE/4OT
213 | 2v9/ktT/cHW7/46h3v+OntL/jZ7Q/46ez/+Nmcj/kbPn/3iJv/9rmsD/bpi9/3OWtv9rlrX/cZq4/3yj
214 | wv92m8D/cqC9/3alv/97qsH/aHuf/1Rai/+boJz/NDFf/0xYn/9SXab/Tlyk/0JKl/81Nor/P1CP/ztH
215 | i/9EUZT/Y3Sh/09fmP9HXJf/SVyO/0VPgf9DVZD/SFmT/0xilf9LYJX/TGGY/01kmP9PZZn/VGeb/05j
216 | mP9OYpX/XnCb/2JvlP9ocZD/S2eX/zhdl/+zrrf/sKqk/2FYb/9UWHb/mI+N/yUgP/9ae7//i5TC/5OY
217 | v/+NlMP/jpLG/4aPwP+po7D/l6TL/5Gr2v9/kNT/fYzS/4SV0f+fvu7/kbPo/5W32/+Mp8r/Y5O3/2iS
218 | tf9pl7j/dZ26/3GWsP9xm7r/dKLE/26fwf9+pML/iK/H/0pGev+hq7X/Znml/1dtqv9Yaa//Slmr/0ZU
219 | p/9LXKn/QU2d/zpAkv9LW5f/XHCi/0pXk/9BSYD/QEt//1Rcf/9aaYv/PEuI/0FSjv9HXZT/SWCW/0df
220 | lv9JYJj/TWKc/1Fln/9QZZ7/UWad/1Vpnf9baZr/d3mQ/25viv9ZXof/TGek/zEemP87Nav/c293/31m
221 | hf+IhoP/eHym/01uzf9biOH/eKXr/4Wg5P/C1O3/l36V/3Jxuf9of9f/aIDW/4a9/P+Nwfz/nc/9/5W3
222 | 5v+Tstf/javO/2iOrf9rkbD/aZW1/2yVsv9plbD/b5m2/2qYuf94n7//fZq8/4Gauf82LWX/ZazX/2d/
223 | uv9OZLP/Slqw/0ZXrf9FVav/RVar/z5In/9KW5z/UGOb/zxFif89RX//P0Zx/zxDdP9DSXX/Q0l4/1Rj
224 | if9BUY3/R12V/0lfl/9EW5P/Q1iT/0ZbmP9HXJr/S2Cb/1Bmnv9RZJ7/VGWb/1VgmP9WYZn/SFKU/zpA
225 | iv84TYv/Lkh2/3Rtcf9+bnr/iIWh/2ljYv9JYLr/UXPR/3Nknf96Y3//nI2j/7i+uP+mkq3/aYTc/2eC
226 | 2/9zqfT/lc/9/5TB+P+g1/z/ndb7/5W43/9rkKv/cpCq/2mSsP9ok7D/bpGw/2aXt/9smLn/fZy8/3qX
227 | uf+Am7v/o7zb/3GJxP9Rabf/RFix/0Zbs/8/Ua3/OUeo/zY/oP85QZv/RVGY/ztCj/87Qob/Nzh1/0dO
228 | ev86PnP/Q0hy/01Uf/8+Sof/QlOP/0Zbkv9HWpH/QFKL/0BRjf9AU4//RFeT/0hcl/9MZJ7/UGmi/01j
229 | nv9OX5r/R1SW/zg+i/8yN4L/MTN5/ztTiv85PGP/kYSC/7Snnv9bbqD/VGyw/0pfuP9ScMr/e6Hq/150
230 | zv9tiNv/a43g/2mJ3/9qh+D/dqv3/5HJ/f+Yxvf/krfn/6jc+/+f0fn/Yoij/2qOqP9qj6v/ZJGs/2yU
231 | sv9xlLb/cpK0/42rzf+BncD/iabH/4mozf93mNT/T2S3/0dcsv9DV6//T2as/05nqf9Ra6r/SmGl/0ha
232 | nv8/TJL/OkSG/yUkYf82OW7/ODxx/zY8dP8zNn7/OkOH/z9Ujv9CVY3/QVCI/z1Mhf9BUIr/PUyJ/0JU
233 | k/9DWJb/R2Cd/09ppf9OZ6L/R1mc/z5Kkf85PIj/MTF8/zU1fP9MWZ//W2ay/1pmt/9ea7L/YW+2/2Bw
234 | uf9keMD/YnfE/2iAzf9lh9r/bZHm/22K3v9ym+v/eZ7r/4Sz9v+c0/3/mcf3/4+04f+Ns93/iqzV/2eK
235 | ov9qjqn/a46o/2qSrf9ykrD/d5K2/4ifvf99m8D/fZ/E/4Ghzv+Ds+f/h7Xv/1Bouv9IX6r/SGGm/1Rr
236 | rf9Va6z/WXOx/153tP9Ybqv/UWSn/0RPlf9BSo7/RE+L/zU4e/8pK3b/LjJ//zpGiv8+UY3/PUuG/zxF
237 | gv9ASYn/RE+P/0VPj/9FUZL/RFKR/0Namv9IYKH/SmSi/0FUmv87R5H/ODeC/1pho/9QUqf/V1+u/15t
238 | t/9lc7r/YnW7/19stP9rcrj/aXfB/2t8yf9vhdT/cZbl/3OW7P96q/j/fqv0/5nI/P+Wz/v/msf0/5O0
239 | 4P+Mr93/ibDg/5vT+/9lh6D/aY6p/2SNqv9ymLP/dJGz/3uSt/98m8T/gaHM/4Kl1P+Ht+j/j8L1/4rA
240 | 8/9Na7//Rlir/0hWqv9MWqr/UGCq/1dprv9ecrP/X3W0/2Fztv9VZav/SlSc/yolcv8oIXL/KCd1/y4z
241 | gv86R4v/PEuJ/ztEhP9OW5r/VGOj/1hop/9ZaKj/Vman/1Fcnf9HU5T/Rlue/0ddoP8/UJj/OECM/zEv
242 | fP9TU6j/WViw/19quP9icL3/YG2//19pv/9qdb//bHa6/2Zvuf9nesr/c5Tn/3qq+P9/uvv/gqbx/4ml
243 | 6v+QvP3/jLX1/4Sm1f+LqdH/g6PI/46x2v+JqdD/aIuk/2mNqf9kjK3/bJCy/67S8P+axOn/kb3o/5TB
244 | 7/+LvO//m9H7/4nI+P+Gvu//WH3R/1yD0v9wkc7/aHq7/1Nmsv9bcLb/WGqy/1Vpr/9fcrT/UmOn/01Z
245 | n/8sJnn/JBxr/yIdav8tMoL/NkKI/zlChf9PX5z/YHGp/217sf9wf7f/cIC3/2l8tv9gc6//U2Gh/0hU
246 | mf9FWJ3/QE+Y/zY2iP9FRJz/SUOj/1VbtP9jbr//ZXTB/3SIxv9ygMn/anHB/2p1xP9qc8D/YXvM/3GS
247 | 5v97u/z/gqb2/4ux9v+FtPz/hqzv/3+izf95pdr/gaHH/4Ciyv+JqtT/haPK/2GBnP9pjar/ZIyw/2mO
248 | s/9mjrT/a5K4/3Kbwv9mnL//dazS/4Gr0P+Yu9//gKfW/1x9x/9QZbr/TmO8/2l/2f9/p+f/dZHO/2R4
249 | uv9bcLT/VGiw/1FgpP9QXaL/QkmW/yIZZ/8eGGX/Ky2A/zU8hf9MW5r/WWuj/11vpf9aaqX/T12c/05g
250 | of9Ya6v/XHCt/1drqv9UYaP/RE6Z/z9KmP85Moz/Qzqg/1FPrP9ZX7f/ZXbC/3KHzP+Cnt3/eI7Y/3yT
251 | 3f9xfcv/cHnH/219z/9jj+b/fLH4/5LD//+Btfn/fJ/m/4Cj0v+HqdT/gand/32ex/94ncr/eZfC/3mV
252 | wf9niqb/Zoys/26dwP9mkbb/cJW5/4+31v9vmsL/ZqXT/3Oew/9+ocf/hq/X/4Sn1P9sktH/VGi7/1Jm
253 | u/9XacD/XG3C/19sxf91lN//gaLc/1pvtP9KXKD/Sled/0FFkf8dFWD/Hxpl/ywrgP9HVZj/U2Sf/1xt
254 | ov9YZp3/QTCZ/0Eonf9CLaP/Pzya/1Zqqv9abKz/Wmyv/1lxwv89QZj/OjWU/z83nv9PTq7/VmG6/2uB
255 | yf94ltf/c5Xg/3+t8f+Lr/X/f5jp/3OJ2/9rgtn/WZv2/2iN6P+Ht/n/grX6/4es7/+FpdT/g6bb/4ar
256 | 4P93oN3/epnF/3aSwf93k77/W5a3/1+Psf9kk7//ZpK8/12Eqv9mjLH/bJS6/2mWwP92msD/dZ3E/4Wy
257 | 3f+FsN3/fK/p/2Z7wP9Wa8D/VGfA/1hpv/9caL//gpvf/2Nwwv9whcf/VWeu/0JMk/88QY3/Hxhk/x8Z
258 | aP9GUJn/UWCe/1hroP9hb6L/RC+Z/2dNtP9qVbz/cVy8/2pVuv9OS6b/Wm6t/1Zprf9dc8L/W3bQ/zgx
259 | lP89OJz/Skqw/1dmvf9ngMv/aIvc/3ie6P+UvvP/eo3h/2x30f9ugNn/XH7e/2Oh9v9ukub/gKLw/4Cv
260 | 9f+Gquv/i67r/36cx/9+ncP/dZbB/3iWvv93jrT/cY23/1uIp/9dia7/YZO4/2GKrf92m7//aIyx/3if
261 | xP91nsf/dZi9/3Oawf9wpMr/iLfs/5K57/+Ev/f/gJvb/3mN0/9WZb//WmS//2Jmw/9YX77/W2W1/2N1
262 | tf9TYaj/P0eS/yYfbf9ITZf/VWCh/1xrpP9ca6H/NDZ6/y8jhv82LJL/OCya/zUonv81KJf/NTKY/0hY
263 | nv9fcbH/Y3a8/2uN3P8tJ5L/NzSa/z9Dqv9SYrz/W3PJ/1eC4f9mluv/cYDY/2t0z/9qedT/Y3jX/2uV
264 | 7P9ph97/frL5/32k9P9+nev/hqHS/4yz2P+Cn8L/e5m+/36ZvP+Jo8n/eZO7/3mVv/9eh6b/X4io/2OI
265 | qv9jiKn/aI+0/2iMuP9nirP/cZa//3GZwv9znMX/dqfO/3e48/+NrOH/g7bz/4nG/v+Etvj/e57k/4Kd
266 | 3f9faL7/e4bg/0tOqP9JU6n/XGqw/zo8iv8dGWP/U12j/15qp/9odKv/b3uv/3uItP+IlLr/gYm6/4OL
267 | u/+LkcD/h5S//4CQvP94h7r/dIK7/218u/9oesT/aIjW/zAtlv85Paj/P0Ws/05hx/9Lb9f/XGnK/2Bp
268 | yf9jcc3/YXLO/22F2P9uh9r/c5bp/36g8/94l+n/i7f5/4Shxf9/mrz/gJq6/4Gcvf+Cn8T/dJS8/3aR
269 | uv9yj7f/Xoej/2WKp/9qjrH/a4ys/3OTsf92lrz/f6LF/2+Zwf9xmsP/bKPQ/3eo1v97w/r/g8n7/47T
270 | /v+EufX/iL77/4rF+f9qiNv/ZnvO/1BZvP9KUaj/SU+n/0BKm/8/RZb/TFCc/1pkp/9nca3/c320/4GL
271 | u/+Nlr//hY+7/297rv9VYqH/YXGs/3SDuP+KlcH/j5jE/4OMwP91gL3/a3m9/2Z4xf83QKf/NTam/zg8
272 | pP9ASLj/RU+8/05Uuv9bZMT/W2fG/2d6yP9zitj/fary/3ah8v9/p/P/fqj1/4Go7/+EnsD/fZe5/3eU
273 | tf9wjbD/bY21/3ORuf9zkLb/c5C3/16Gn/9ni6b/aYup/2ONr/9ukLL/bZK4/3CUtP9xlbr/fqLH/3ed
274 | yP93ncr/f6bZ/4S98P+Kx/v/mtX+/5XW/v+Xzvv/aInc/1tpyP9IT63/TVOo/0JJn/85QZf/Li+E/1Vb
275 | pf9jaq3/cXiz/36Fuv+Kkb7/kZjA/1xmo/8jKXn/UFuj/0hSnf8hKX//hpC//5Oaw/+Mk8L/fIW+/3F8
276 | vP9odbz/YG+//y0un/8tLpv/Pj+t/z0+qv9KTLX/UFS6/2BsyP9nfND/bJPn/3ae8P9xkuj/h634/4Sq
277 | 6/95m9L/iqTH/36bvP94lLT/c5Cw/3aSt/9xhqv/boiu/3GKr/9mg5r/ZYKa/3eMpv9xiqf/b4mi/2iL
278 | sf9qiKn/cJrA/3Sew/9/ocX/i6vN/4Gjzf+AqNv/ir3z/6LZ/v+g2P7/jMn5/22W4/9eacj/T1Sx/0xR
279 | q/9AQ5z/NDWR/0hLnP9dYqz/bHOy/3qAuv+Jj8D/jZTB/4uTv/9rcav/Zm+r/4ONu/9/iLz/YWus/32H
280 | uf+Rl8P/jZXC/4KJv/95gb3/cHi8/2Vwuf8jIpf/KCeR/zIzn/85OaL/SUyy/1RZvP9casf/YoDV/26R
281 | 5P9vlen/fqT0/4Sz+P+Rs9n/k8X0/5i73P96lrj/fpi4/3WStf94kbP/dYyu/3SIq/9yia3/aIec/2eF
282 | nv9yi6f/c46o/26Mqv9tjKz/bYyu/2yGq/9virL/eZK5/3Wcxv+JoMf/hq/j/4at5P+MwP7/jL/+/47I
283 | +v9oit7/WWDE/0lLrf9JS6f/OjuU/yglgP9RVaf/ZWmx/3d8uv+Dib//jpPD/5GXxP+JkcD/a3Go/4eP
284 | uf+qr8j/lJvD/3F6tP97hbr/k5vF/5Saxv+LksP/gonA/3d+vf9rc7r/U1u2/zMvlv81OJ//Nzeb/0hM
285 | rv9WXbz/YXTK/2mC1P9ri9//eqXy/3Wd7/+ArPH/gK3s/4az8v+Dnr3/iKHC/3mTtP92lLn/fpi6/3iV
286 | uv92iq3/doms/2uGnv9uiaD/co2m/2uKpP9li6r/bYyr/3WVtf9zj7P/ZZTQ/4e16/99reP/g67j/4Wp
287 | 4v9/ouX/jMD7/4/D/f98r/X/YXDT/1VYvf9FRqn/QkKj/zo4lv8iH3X/Wl6s/3J2uf+BhsD/i5DE/5GW
288 | xv+Umsf/jJfD/3R/s/97hbX/p6nH/5OZxP9wfLT/go7B/5igyv+aoMr/lJvI/4yRxf+AhsH/c3y9/1xl
289 | t/8nIor/KiWO/1JXtP9KTa3/VF24/2F0yf9ridb/eKPw/4av+v+DtPb/f630/42/9/9ykrX/hZ6//4yh
290 | vf93k7T/c5S//4Gcvv91ia//cIOq/3SKsf9rjqX/Xoik/2WLpf9jiaX/Yomq/26Qrv9vkq//cJGu/3md
291 | vP+AocX/e5bC/4Sr5/+Zyvz/i7r7/5bN/f+Juvz/Z4vk/1Vdx/9SU7v/QT6h/zc1lP88OZX/REOb/2Vq
292 | tP99hL7/iI3D/4+Vxf+Smcf/lp7K/5KcyP+HksL/foe5/6KlyP+MlcT/e4i8/42Xxv+aosv/nKPM/5qh
293 | y/+SmMj/ipHF/32EwP9mcLn/KiSL/zErlf8vKpD/SU6q/1dhuP9shNH/e6Tt/3+2+f+Dtvn/h6vj/4Ws
294 | z/95osP/dJO4/3SQtP94lLT/kaW8/4Obt/+Ala7/gZGo/3CDqP9tgKb/YIea/2mJnf9jh6D/bIyn/2iP
295 | qP9tiaP/cI2l/3SSt/9ujLr/dJLD/3iVu/99msL/fZm7/4Sk1P+RvPj/gav2/3Wg7v9PVL//RUWu/zMt
296 | j/80MI3/OjaT/05Mo/9xeLj/g4u//4uSwf+PlcT/kJbE/5ObyP+WoMr/j5rI/4OOv/+jpsn/jJfE/4KP
297 | wf+RnMj/mqHL/5qgyf+Ynsj/lJrH/46Wxv+EjML/bHS5/ygnh/8zLZT/Mi6P/0JBnf9mdcb/cpPe/3uv
298 | 9/95sfb/fqrv/4msz/+AosP/cI+3/3WRt/9zjrT/dI+w/3GMrP9xi67/cIWr/3KHqv98kLD/dYep/2SH
299 | mv9ohpn/Youc/2qMoP9qi6P/d5Gs/2yOsf9tkbb/aoe1/2+Mtf9zj7X/epa7/32cwv98nrz/h7D4/4u3
300 | +v9+q/D/QECv/zcxmv8uKY3/KCJ5/zg3jv9TWKX/cny1/3yFt/93f7P/dn6z/4CGuP+Mj77/kJnE/5Gc
301 | xv+Gk8P/n6XJ/4yYxv+Hk8H/lJ7G/5OZxf+QlcH/hoy9/3+Iuf+Aibr/f4m8/294tv81NZD/OzSU/zMq
302 | gf9XXq//U122/2qO3v9xqvP/eqHp/32p7f9+ocT/epvA/3GPtf9xja3/c4yu/3SNrv91jq7/co6s/3CJ
303 | p/9xjK7/eJCv/3SPuv9qjJ3/a4mb/2iNnP9jiqb/aI6s/2qNrP9xlrf/bo6x/26Nsf9wkLX/dJa7/3eb
304 | v/9+oMT/hajv/4649/+Jtfj/cpbm/zs6qf8qJYf/JiB+/yAcav80MYj/VWCl/255sP9kbqT/SkuB/0I4
305 | bv9AOWj/T02C/251qf+Gkr7/e4q+/5mjyP+CkcL/eIa3/4OPvf9+grT/enen/z84cf9SUo3/UV2X/3B6
306 | r/9odLL/PT6W/zIugv85NYj/VFeq/1dluv9xqPD/dqbv/4Cq8P+Fsen/gaLF/3uYvP93k7T/dI+y/3ON
307 | rv9wjK3/c4yt/2yKrv9qg6T/d5Cy/3eKp/9wirX/aYqa/2WFlf9qjJz/bI6r/2mLpv9si63/aIin/2mI
308 | rP9vjrj/cZCx/3aUu/96mL3/d5q8/3qg5f+Pse3/g6/0/3+q7P8yLZr/LiiJ/yUge/8eGmj/Kyp8/1Je
309 | ov9ja6b/OjZv/2tphP8TESH/EBc2/4N6hv8QE13/XGup/2Z4tP+ElMP/eYvB/1JjpP9baqn/UliA/xsW
310 | Kf8ZIUb/fnaE/yonYf9bYp7/Y26r/zs8lP8xLYH/MS6E/z5AoP9LWK//YY3g/26Q4v9/qPH/iavX/3+c
311 | wP97l7z/eJG6/3aPtf9xia7/fZO2/3GKrP9siKr/coqo/4GVsv92iKn/eI20/2eFlf9qiZf/b5Cd/26K
312 | pf9qian/aoWk/2mGqf9riKz/co+3/3aVtv96l7r/gaPH/4Gew/9zpuv/erv4/3mm7f9HW8b/KieJ/ycl
313 | ff8mIHv/Ihxr/y0sd/9HU5r/Rk2O/xcPH/8aEiD/DQoX/xELEf8ODBv/Qk6O/0lYnf9qe7X/fI3A/3OG
314 | vP9RYqX/R1aa/zNBf/8PCxn/DwoV/0w9SP8NCBP/Mzh2/1llpf80N4r/NCyE/yUgeP8sJ4n/PkSz/05z
315 | 0P91qPP/fKrv/4iozf+Anb7/fJi8/3iXrv9zirb/cYex/22IrP9uiKn/bomq/2yHqP+AlK3/laOy/3yP
316 | q/9ohZT/aIWR/2WOlv9riqH/b4ef/2uHqP9siKr/a4mx/3GOtf9yj7b/epS6/4Gbvf9+oeL/irHt/2+c
317 | 6/80OcD/Kian/yginv8kHn7/LCd9/ygld/8nI27/RUyU/0lQkf8zNnj/EAw7/xYQG/8bETP/QkiH/0JN
318 | j/9RW5v/eoq9/4WUw/9/j8D/aHi0/0tXm/9CUZL/Eg9L/w8JEP8NBhP/KSVq/0lSlf9SW6D/OTqN/ykf
319 | df8lHnr/KR+H/yommP8+Rsj/a5vx/3mr8f+Pq87/iJ++/3iWuP92kbn/b4a0/26Frv9rh6//dIyp/3GL
320 | p/9viaT/boar/3+Vrf9of5z/aYac/2WFlP9ohJz/bYWc/3CJn/9qhqb/a4eo/22Lsv9wjbb/b5G+/3yV
321 | vP+Amr3/f6Pi/3Kb6f84PMP/KSWr/yYgn/8lH5P/Jh2N/yEYdf85NIT/KSRt/0JIk/9lb6T/ZW6i/15j
322 | mf9ISYf/JyFL/yMfRf85PXL/gY+9/4+dxf+Wosj/kp7G/4OQvf8wNXT/HB5J/ywrY/9OVZb/Y2mj/294
323 | qv9ncqf/REyP/zIsf/8hGWf/Hxtz/ycgiv8xLZ//MzKr/zo6xf9bguj/gaHS/6Cz0P+AnML/dI+9/3OK
324 | uP9thK7/a4ar/3CJpP9wiKL/a36i/2h5of9se6L/bn6f/2eEnf9og57/aISc/2aCov9rhJz/aoak/2uF
325 | pP9riLD/cY66/3CRv/94lr3/f5rA/3mi5P87PsH/Liuq/zUxq/8pIp//JB2S/y8sj/8rI4T/GxZd/ywr
326 | cP8+QIz/Nz59/ztBdP8uLVf/Mi9Z/19nlf+Nm8H/lKLJ/5iny/+frM7/oKzN/56qzP+XpMn/j5zD/4eT
327 | uf9LRXT/MSZM/zItW/9dZJT/TVOJ/0FIiP8jHGD/Ix1r/yYdgv8oIYv/MCia/y4lof8vJqj/PjrG/26Y
328 | 0v+Kocr/f5jA/3SMvP90irj/bIWv/2p8ov9tf6X/boSn/2h8o/9peKH/a3if/2x6oP9ohJ//Z4Kf/2yE
329 | nv9siKv/boWd/2uFp/9thaX/aoev/2+Jtf9xkcL/c5TG/4Ggy/9LWMr/NTGr/zk5qv88Par/Miyg/ygf
330 | jf8gGHb/IRpz/yMcb/8ZFFL/MjSA/15trP92h7j/gZK9/4qZwv+Rocn/mKfO/52t0v+gsNP/o7HT/6Wy
331 | 0/+jsdL/oK7P/52rzv+Zpsr/k6DF/42Zvf9/iK7/aXKd/1xqn/8uMXP/Ihlb/yIcZv8yMIT/NCmK/y8j
332 | jv8mHZH/KR+Z/zYvs/8+Usf/fpzI/3+UxP90irf/boa1/3CGtP9tg6r/bH+k/2p9qf9oe6X/a3qi/3uK
333 | p/9tfKD/aYSe/2eAnP9lgp7/aYWl/2iCof9pgqH/a4Cb/2eCqv9thaz/bpbG/2+c0v94o9j/PUK7/zUx
334 | nf81Mpv/KiKG/2J/pf9fgaj/U3Wj/1VypP9Xda//RVeU/yEgZP9MWaH/eYy+/4WYxv+Lncr/j6HN/5an
335 | 0P+drtP/orHV/6Sy1v+jstb/obDU/5+u0v+cq9D/l6bM/5Oiyf+OnMX/hZO9/3CAsf9ET4//R1SW/1Rn
336 | pf9Xf7H/QW6c/0Jvnf9airb/XY+z/ysjg/8uIp//NC6s/3uby/94k8f/dIq+/2+Etv9vg7L/anui/2Z5
337 | oP9mdZ3/aXun/21/ov9vgqD/bn6f/2V9lv9ngZr/aIOg/2iCo/9mg6f/ZoKg/2x+mv9lf6n/aYKr/3Sg
338 | zf91nMv/c53I/zQumf8wKIf/XnWX/16Ckv9ZeZz/Z4mz/2uOuP9hgbH/S2GY/01jn/9JVZr/NTyD/15x
339 | rv+Ak8P/ip7L/4yfzf+Wp9H/nK3V/6Kz1/+ltdj/pbPX/6Oy1/+fr9T/m6vR/5anzv+Rosn/hZfE/3OE
340 | uf9AT5b/S1ym/0VUm/9RZ6b/RF+g/0BYl/9Sbqr/SWGY/0xkif9Gb3r/UmaJ/ysik/9iZK3/fpXI/2+I
341 | vf9ugrT/aoGx/2l5oP9nfqn/anul/2t9pf9vgKL/dImg/32Oof9mgJn/ZoGa/2aEof9mgJ//ZoGj/2iB
342 | pv9qfZj/Zn6q/2+Dqf9zncb/c5vB/2+KtP9ofrb/W353/1d3fv9Tdov/UnKZ/1JtoP9GXJL/QVGN/z5L
343 | iP9LWJf/Oj5//z5Ahv9DS5L/YnOx/4aZyP+Qos//lqfS/5yt1v+jsdj/p7TZ/6e12f+mtdj/o7HW/5+u
344 | 1P+ZqdH/j6HL/3+Swv9EVJ3/Tl2l/z9Mkv86RI3/MTmB/yMhW/85PI3/SVqg/0pekf9AWZL/Qmdk/0Jg
345 | WP9DWHH/MjGQ/3iFs/93lMr/aoG1/2h/rv9mdZv/aHul/25/qP9ugKf/boCi/21+p/9sfaX/Z4Se/2V+
346 | lf9lg5//ZX+d/2d/ov9lgKn/aX6b/26Bpv9ug6j/dZK2/3egwf9wl9f/k7KT/1qBd/9cfoT/UXKN/1Nv
347 | mv9MaaD/QVmU/zs9d/8mJV//KiRn/x8aWv8uK3H/PT2A/ztDj/9rern/jZ7M/5an0f+aqtT/nazU/6Ox
348 | 1/+ksdb/pLHX/6Cs1P+dqtP/lqbP/4aayf9kdbX/Wmuv/0lSmf81OIP/Lit7/0RBj/9GTpv/QEWi/yMg
349 | Yf8mJFn/ZEVj/2dhX/9Pdm//QmVi/0xgjP8jMHn/aYzB/2aCuf9keKn/anqk/2R4n/9sfab/aXqh/2x+
350 | o/9peZ//aXqk/2KBnpBnfJX6ZYKf/2J9nv9mgab/ZoGt/2l+mf9sf5//d4er/0lxv//by6L/9/Cy/8Hk
351 | 3P+Eu6v/l8XA/0BRef80Q3j/QVOM/52aw/89Omr/KB1P/xsXRv8fH2D/Sleg/0hTnP9FTZr/Rkya/32N
352 | wf+OnMv/lKHO/5Shz/+ToM//jZvK/5ek0P+aptH/lqTP/42dy/96jMH/Znm2/1Fgo/84PYL/TlCQ/zIz
353 | ef9NTHv/Pzxq/zAseP85PJn/T0p9/1tJY/9gmNX/Z5as/4a92/9/wN3/W7je/1damv9ikM7/X3iw/2V6
354 | qP9kdp3/aXul/2Z7qf9oeJ//Z3if/2h4ov9ihKFGXoGg7mGDov9egKD/ZX+g/3GYy/8pRmX/l5mc/7qy
355 | sf/Zz8z/zs3F/6HK5v+Yz/7/kNL9/8Xt+v/I3+7/t8vU/zg4Y/8mFzD/SlCP/0lanf9KYaL/N0iO/0ZU
356 | mf9FU5b/MzqD/0BBif8+QpH/ZG+x/3yJvv9verf/R0qZ/z5Hk/9VX7H/gZDE/4uYx/+BksT/aXi2/1Jh
357 | nv9XYp7/Q0KG/0A6hf88MHL/OiZC/2BThP8zL2b/Oyxs/1lHeP9RQGX/nN3z/3C+9v+c1fX/WXOs/12N
358 | w/9qq97/RHGt/06Evf9FN2T/ZHih/2V6pP9nfq7/Znih/2V3oP9ecJj/YH+hOluDpe1ffp//X36f/1x5
359 | lf9khbD/ZYCh/3mOuP9reLL/UWaR/3TWzv+H7ef/QL25/1bLzP+A6/D/odPw/z89X/9BSWD/QUZ5/1ls
360 | rP9cc7D/S16g/z5Tmf8wPYj/Iyt0/y83ff8xMXn/LSlv/yIfa/8pKXn/JiZ4/0JGkP9GTZj/MD2D/0tS
361 | pP9KV6L/Tluh/0dQj/9GS4r/Iho9/yIWMv8mHUf/Jxs5/zoqWP9BOGD/OjFn/zQsaf9VQmz/aHOa/0aW
362 | wP9Qsc3/RrfO/z6uzP9xm+X/aIXD/2aIuP9je6b/ZXuh/2R6pP9kd5//Y3yq/2V8qv9hc5//XnCdTgAA
363 | AABbgaXTXn6f/119nv9efp3/Y4Oq/1x4nf95o9X/e6re/3+x5P+ZzPb/l8/8/6vh+/+Qx/b/ibby/1Zr
364 | mv9MRnz/PzhW/3qX0/9hfLv/X3y5/0xmqv9BWqP/Q1qg/zNCkP81Por/OD2E/z1Bjf87P4j/Tluh/zM8
365 | hv9RZaX/U2Sp/zU+g/9MV6b/TFel/zU7hf8pLE7/JiFK/355lf81FzX/SStE/3Vvn/8sK2T/cXm3/0I+
366 | gv9eWpv/cmqT/1ldnv99qdv/l837/4aw8/+GsfL/h7nz/2mIu/9gfbj/Y3qj/2J3oP9geKP/X3ai/15y
367 | oP9geaj/XnGg/11xoQ0AAAAAVXqhXluBpPVafJv/W3ua/158mv9hgqv/aYat/32o2/98sef/f6rb/4vE
368 | +f+Mv/X/j77z/5vM+/+lz/b/Rjlg/1Vdlv+Go9T/eprV/22Nx/9ggsL/VXa4/0ttsf9FZKj/Tmiq/09l
369 | pP9KWqH/co/E/0pdov9kgLv/T2mm/1pusP9TZKv/S1ul/1Zlr/9DSJb/Ihoz/yculv8/JUb/h2uB/2tO
370 | Zf96Z3n/Li9u/zkzbP8zLWz/OTBl/1BCeP9RRWz/n9D9/5zM/f+Hq+v/g67y/4mw7/9jgbX/X3iw/193
371 | p/9heKP/YXml/155q/9ddKH/XXal/193qOUAAAAAAAAAAFV9pBdZf6PFXH+f/1p+nv9bfJz/X4Ck/2GA
372 | pf99r+T/fbfr/4a/8v+Guu//fKvj/43I+f9yndj/ksj2/1JWe/8yN3L/YXPA/4Om2f+buOX/Z4vH/2GH
373 | xf9uls3/bpXK/3qh0f98o8//cZbH/2OFv/91ns3/Zoe9/116s/9GW5r/Vm21/1Vnsf9bbLP/TVGk/y0f
374 | Pf8pN6L/b1pu/1c+U/+OeIb/XEVh/15Ubv9APIz/Pj6A/zxWkf9iVYH/pLnQ/5jN/f+GqOf/lMb8/4Om
375 | 7P9yjsz/YoPB/151q/9ieKf/WXOi/1lunv9ed6n/X3Wj/1tzpO9jfq0QWW6bFVJ+pQFUfaICV3yjSVmB
376 | o+lbfZr/Wnuc/1t5l/9fhKz/Y4Ww/3Kk2/+At+z/grjt/3il3f+HuvD/ir3x/46+8/90k8P/U1af/yks
377 | X/9DTqH/P0md/2aGy/9XesH/T3fA/1OBxP9cjcr/Z5XM/26cz/92odD/ZI/E/2qRxf9nhb7/cY7G/15z
378 | uf9ierv/V2ax/1ZQp/80Kmz/RD+N/3RYa/93ZoL/qpqj/6aVrf+Xkaz/aW6s/4CRvf/G4e7/foCk/5Kh
379 | 0P+czPz/i6/s/4629v99n+b/YXy9/1twrP9bd7H/XHOn/1Zun/9Zdar/W2+e/1drmP9deKaPYHuoBFlw
380 | mhxRfaMDAAAAAFh7pAJZgaVDWnmU4ll5mP9afZv/XoGm/1+Bq/9kjMH/cajg/4O37f+Lw/f/i77y/4q9
381 | 8v+SyPr/ptf9/46bvP++y9H/VVmR/zwzc/9SU4//m7Tf/2OEyf9PecD/Un/D/09/wP9ZhsX/apXL/2iO
382 | xv9pjcT/fJrN/3KNx/9qgsH/ZXy8/2NzuP9NO3P/bXCv/0lKhf97YXP/j3CA/6aNmv95Xn//W1d6/4qs
383 | tf9eXX7/eJjp/6nL8f+94v3/irLv/6zd/f+LtPT/aofL/1x5vf9YdK3/WW+p/1Rzq/9Uapz/Vmye/1Vt
384 | nv9UaJX/W3imIwAAAABadZ8CUHmfBFCHrQEAAAAAVHigAlZ2mVVdfZi3WHuezVl8ofdcfaj/X3+u/2CL
385 | xP99te7/jsT5/3ii3P+Ryfz/mM39/3GMpv8+TJb/f4KW/4uMpf92YZf/RkCk/yMQPf9FT5L/O0SK/2OJ
386 | zv9hicv/XYjK/2eOx/92m87/e5zN/4Ofz/91j8T/Z325/214sf/Ry9P/UkiG/ygjQP9XV5H/fIO7/11O
387 | Zv9pVXP/fYGl/8PE2P+QoeD/c3/o/3+Q8P+bxfj/pdD8/57N/P+gz/3/e5/h/1p4u/9ac7j/VXGy/1Bv
388 | rv9SaZ//VG+k/1hxo/9VcaTDU2eWDll4pAFaeaIBXnylAk54nwJLia4FVXqiAVZ6ogFVe6IPWHWVKll6
389 | m0pYe6LDW3qn+1p5p/9efq//bJXM/4vD+P+HufL/eKLZ/5TK+v+o2Pj/Jz5n/zcwXv9OQIz/eHS1/y8H
390 | e/9sVYT/WkWA/xoRU/8wJor/Vn/M/ysxmP8sLYf/Kyd2/zM1fv8wMHP/gIK4/3NpiP9EPVz/SUVw/4WF
391 | mP9OTpj/S2S4/1denP9LT4n/SU92/8HN4/96jfD/fYrw/4GL9P+Rr/7/kLby/3+k4P+Yyvz/Z4fM/2KC
392 | yP9dhcT/WHK6/1Rytv9QaaH/T2mf/09qnP9Vdao+UWmaA1BqmAVYeqQYVHOdBVl+qBNNeZ8HR4SoBll7
393 | oxJYfaQLV32kEld7pBFWeJ8MVnSbG1VslzZadKjJWXWm/1p4q/9jfbL/ernv/4S98f9wmcr/fLTh/6jo
394 | /f9hoL7/d2C5/0lPnf9pQqn/Ok+L/zhIgf94lKz/UIi//zo9lP9CVpP/GS5g/yIXWv8xLXH/R1eA/0Q9
395 | dv83OWv/VVeb/42Vvf9KTpT/SmWj/0tyqP9IYJv/T2eh/1Rpmf+Lo/X/hJr2/5S0//+ey/7/q9T+/6PH
396 | +P+Txfr/ZYbL/1t9xP9Qa7P/ZI3J/1RyvP9QaqPfTmujNEtml0pMdqZYT3KlQlFpmi9SbJktWH2nKFFx
397 | mx9Tf6kUAAAAAAAAACAQAAAAAAAAAKAAAAAAAAAA4AAAAAAAAAbAAAAAAAAAAIAAAAAAAAAAgAAAAAAA
398 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
399 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
400 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
401 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
402 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
403 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
404 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAGAAAAAAAAAAAAA
405 | AAAAAAAAQAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
406 |
407 |
408 |
--------------------------------------------------------------------------------
/SDToolkit/Window.Designer.cs:
--------------------------------------------------------------------------------
1 |
2 | namespace SDToolkit
3 | {
4 | partial class Window
5 | {
6 | ///
7 | /// Required designer variable.
8 | ///
9 | private System.ComponentModel.IContainer components = null;
10 |
11 | ///
12 | /// Clean up any resources being used.
13 | ///
14 | /// true if managed resources should be disposed; otherwise, false.
15 | protected override void Dispose(bool disposing)
16 | {
17 | if (disposing && (components != null))
18 | {
19 | components.Dispose();
20 | }
21 | base.Dispose(disposing);
22 | }
23 |
24 | #region Windows Form Designer generated code
25 |
26 | ///
27 | /// Required method for Designer support - do not modify
28 | /// the contents of this method with the code editor.
29 | ///
30 | private void InitializeComponent()
31 | {
32 | this.components = new System.ComponentModel.Container();
33 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Window));
34 | this.progressBar = new System.Windows.Forms.ProgressBar();
35 | this.GenerateButton = new System.Windows.Forms.Button();
36 | this.panel1 = new System.Windows.Forms.Panel();
37 | this.pictureBox7 = new System.Windows.Forms.PictureBox();
38 | this.pictureBox6 = new System.Windows.Forms.PictureBox();
39 | this.pictureBox5 = new System.Windows.Forms.PictureBox();
40 | this.pictureBox4 = new System.Windows.Forms.PictureBox();
41 | this.pictureBox3 = new System.Windows.Forms.PictureBox();
42 | this.pictureBox2 = new System.Windows.Forms.PictureBox();
43 | this.pictureBox1 = new System.Windows.Forms.PictureBox();
44 | this.pictureBox0 = new System.Windows.Forms.PictureBox();
45 | this.useGFPGAN = new System.Windows.Forms.CheckBox();
46 | this.debugBox = new System.Windows.Forms.TextBox();
47 | this.samplerCombo = new System.Windows.Forms.ComboBox();
48 | this.label8 = new System.Windows.Forms.Label();
49 | this.resWBox = new System.Windows.Forms.TextBox();
50 | this.label5 = new System.Windows.Forms.Label();
51 | this.resHBox = new System.Windows.Forms.TextBox();
52 | this.label4 = new System.Windows.Forms.Label();
53 | this.stepsBox = new System.Windows.Forms.TextBox();
54 | this.label3 = new System.Windows.Forms.Label();
55 | this.seedBox = new System.Windows.Forms.TextBox();
56 | this.label2 = new System.Windows.Forms.Label();
57 | this.promptBox = new System.Windows.Forms.TextBox();
58 | this.label1 = new System.Windows.Forms.Label();
59 | this.contextButton = new System.Windows.Forms.Button();
60 | this.contextImage = new System.Windows.Forms.PictureBox();
61 | this.contextRemoveButton = new System.Windows.Forms.Button();
62 | this.upscaleCombo = new System.Windows.Forms.ComboBox();
63 | this.label6 = new System.Windows.Forms.Label();
64 | this.upscaleLabel = new System.Windows.Forms.Label();
65 | this.precisionCheck = new System.Windows.Forms.CheckBox();
66 | this.gpuInfoLabel = new System.Windows.Forms.Label();
67 | this.timerLabel = new System.Windows.Forms.Label();
68 | this.toolTip = new System.Windows.Forms.ToolTip(this.components);
69 | this.panel1.SuspendLayout();
70 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).BeginInit();
71 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).BeginInit();
72 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit();
73 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();
74 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
75 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
76 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
77 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox0)).BeginInit();
78 | ((System.ComponentModel.ISupportInitialize)(this.contextImage)).BeginInit();
79 | this.SuspendLayout();
80 | //
81 | // progressBar
82 | //
83 | this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
84 | | System.Windows.Forms.AnchorStyles.Right)));
85 | this.progressBar.Location = new System.Drawing.Point(12, 728);
86 | this.progressBar.Name = "progressBar";
87 | this.progressBar.Size = new System.Drawing.Size(906, 23);
88 | this.progressBar.TabIndex = 0;
89 | //
90 | // GenerateButton
91 | //
92 | this.GenerateButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
93 | | System.Windows.Forms.AnchorStyles.Right)));
94 | this.GenerateButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
95 | this.GenerateButton.Location = new System.Drawing.Point(12, 690);
96 | this.GenerateButton.Name = "GenerateButton";
97 | this.GenerateButton.Size = new System.Drawing.Size(906, 32);
98 | this.GenerateButton.TabIndex = 1;
99 | this.GenerateButton.Text = "Generate";
100 | this.GenerateButton.UseVisualStyleBackColor = true;
101 | this.GenerateButton.Click += new System.EventHandler(this.GenerateButton_Click);
102 | //
103 | // panel1
104 | //
105 | this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
106 | | System.Windows.Forms.AnchorStyles.Left)
107 | | System.Windows.Forms.AnchorStyles.Right)));
108 | this.panel1.Controls.Add(this.pictureBox7);
109 | this.panel1.Controls.Add(this.pictureBox6);
110 | this.panel1.Controls.Add(this.pictureBox5);
111 | this.panel1.Controls.Add(this.pictureBox4);
112 | this.panel1.Controls.Add(this.pictureBox3);
113 | this.panel1.Controls.Add(this.pictureBox2);
114 | this.panel1.Controls.Add(this.pictureBox1);
115 | this.panel1.Controls.Add(this.pictureBox0);
116 | this.panel1.Controls.Add(this.useGFPGAN);
117 | this.panel1.Controls.Add(this.debugBox);
118 | this.panel1.Controls.Add(this.samplerCombo);
119 | this.panel1.Controls.Add(this.label8);
120 | this.panel1.Controls.Add(this.resWBox);
121 | this.panel1.Controls.Add(this.label5);
122 | this.panel1.Controls.Add(this.resHBox);
123 | this.panel1.Controls.Add(this.label4);
124 | this.panel1.Controls.Add(this.stepsBox);
125 | this.panel1.Controls.Add(this.label3);
126 | this.panel1.Controls.Add(this.seedBox);
127 | this.panel1.Controls.Add(this.label2);
128 | this.panel1.Controls.Add(this.promptBox);
129 | this.panel1.Controls.Add(this.label1);
130 | this.panel1.Controls.Add(this.contextButton);
131 | this.panel1.Controls.Add(this.contextImage);
132 | this.panel1.Controls.Add(this.contextRemoveButton);
133 | this.panel1.Controls.Add(this.upscaleCombo);
134 | this.panel1.Controls.Add(this.label6);
135 | this.panel1.Controls.Add(this.upscaleLabel);
136 | this.panel1.Controls.Add(this.precisionCheck);
137 | this.panel1.Location = new System.Drawing.Point(12, 12);
138 | this.panel1.Name = "panel1";
139 | this.panel1.Size = new System.Drawing.Size(906, 657);
140 | this.panel1.TabIndex = 2;
141 | //
142 | // pictureBox7
143 | //
144 | this.pictureBox7.BackColor = System.Drawing.SystemColors.ControlLight;
145 | this.pictureBox7.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
146 | this.pictureBox7.Cursor = System.Windows.Forms.Cursors.Hand;
147 | this.pictureBox7.Location = new System.Drawing.Point(683, 434);
148 | this.pictureBox7.Name = "pictureBox7";
149 | this.pictureBox7.Size = new System.Drawing.Size(220, 220);
150 | this.pictureBox7.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
151 | this.pictureBox7.TabIndex = 28;
152 | this.pictureBox7.TabStop = false;
153 | this.pictureBox7.Click += new System.EventHandler(this.pictureBox7_Click);
154 | //
155 | // pictureBox6
156 | //
157 | this.pictureBox6.BackColor = System.Drawing.SystemColors.ControlLight;
158 | this.pictureBox6.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
159 | this.pictureBox6.Cursor = System.Windows.Forms.Cursors.Hand;
160 | this.pictureBox6.Location = new System.Drawing.Point(457, 434);
161 | this.pictureBox6.Name = "pictureBox6";
162 | this.pictureBox6.Size = new System.Drawing.Size(220, 220);
163 | this.pictureBox6.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
164 | this.pictureBox6.TabIndex = 27;
165 | this.pictureBox6.TabStop = false;
166 | this.pictureBox6.Click += new System.EventHandler(this.pictureBox6_Click);
167 | //
168 | // pictureBox5
169 | //
170 | this.pictureBox5.BackColor = System.Drawing.SystemColors.ControlLight;
171 | this.pictureBox5.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
172 | this.pictureBox5.Cursor = System.Windows.Forms.Cursors.Hand;
173 | this.pictureBox5.Location = new System.Drawing.Point(231, 434);
174 | this.pictureBox5.Name = "pictureBox5";
175 | this.pictureBox5.Size = new System.Drawing.Size(220, 220);
176 | this.pictureBox5.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
177 | this.pictureBox5.TabIndex = 26;
178 | this.pictureBox5.TabStop = false;
179 | this.pictureBox5.Click += new System.EventHandler(this.pictureBox5_Click);
180 | //
181 | // pictureBox4
182 | //
183 | this.pictureBox4.BackColor = System.Drawing.SystemColors.ControlLight;
184 | this.pictureBox4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
185 | this.pictureBox4.Cursor = System.Windows.Forms.Cursors.Hand;
186 | this.pictureBox4.Location = new System.Drawing.Point(3, 434);
187 | this.pictureBox4.Name = "pictureBox4";
188 | this.pictureBox4.Size = new System.Drawing.Size(220, 220);
189 | this.pictureBox4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
190 | this.pictureBox4.TabIndex = 25;
191 | this.pictureBox4.TabStop = false;
192 | this.pictureBox4.Click += new System.EventHandler(this.pictureBox4_Click);
193 | //
194 | // pictureBox3
195 | //
196 | this.pictureBox3.BackColor = System.Drawing.SystemColors.ControlLight;
197 | this.pictureBox3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
198 | this.pictureBox3.Cursor = System.Windows.Forms.Cursors.Hand;
199 | this.pictureBox3.Location = new System.Drawing.Point(683, 208);
200 | this.pictureBox3.Name = "pictureBox3";
201 | this.pictureBox3.Size = new System.Drawing.Size(220, 220);
202 | this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
203 | this.pictureBox3.TabIndex = 24;
204 | this.pictureBox3.TabStop = false;
205 | this.pictureBox3.Click += new System.EventHandler(this.pictureBox3_Click);
206 | //
207 | // pictureBox2
208 | //
209 | this.pictureBox2.BackColor = System.Drawing.SystemColors.ControlLight;
210 | this.pictureBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
211 | this.pictureBox2.Cursor = System.Windows.Forms.Cursors.Hand;
212 | this.pictureBox2.Location = new System.Drawing.Point(457, 208);
213 | this.pictureBox2.Name = "pictureBox2";
214 | this.pictureBox2.Size = new System.Drawing.Size(220, 220);
215 | this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
216 | this.pictureBox2.TabIndex = 23;
217 | this.pictureBox2.TabStop = false;
218 | this.pictureBox2.Click += new System.EventHandler(this.pictureBox2_Click);
219 | //
220 | // pictureBox1
221 | //
222 | this.pictureBox1.BackColor = System.Drawing.SystemColors.ControlLight;
223 | this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
224 | this.pictureBox1.Cursor = System.Windows.Forms.Cursors.Hand;
225 | this.pictureBox1.Location = new System.Drawing.Point(231, 208);
226 | this.pictureBox1.Name = "pictureBox1";
227 | this.pictureBox1.Size = new System.Drawing.Size(220, 220);
228 | this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
229 | this.pictureBox1.TabIndex = 22;
230 | this.pictureBox1.TabStop = false;
231 | this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);
232 | //
233 | // pictureBox0
234 | //
235 | this.pictureBox0.BackColor = System.Drawing.SystemColors.ControlLight;
236 | this.pictureBox0.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
237 | this.pictureBox0.Cursor = System.Windows.Forms.Cursors.Hand;
238 | this.pictureBox0.Location = new System.Drawing.Point(3, 208);
239 | this.pictureBox0.Name = "pictureBox0";
240 | this.pictureBox0.Size = new System.Drawing.Size(220, 220);
241 | this.pictureBox0.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
242 | this.pictureBox0.TabIndex = 19;
243 | this.pictureBox0.TabStop = false;
244 | this.pictureBox0.Click += new System.EventHandler(this.pictureBox0_Click);
245 | //
246 | // useGFPGAN
247 | //
248 | this.useGFPGAN.AutoSize = true;
249 | this.useGFPGAN.Location = new System.Drawing.Point(3, 137);
250 | this.useGFPGAN.Name = "useGFPGAN";
251 | this.useGFPGAN.Size = new System.Drawing.Size(252, 17);
252 | this.useGFPGAN.TabIndex = 29;
253 | this.useGFPGAN.Text = "Use GFPGAN for face restoration and upscaling";
254 | this.toolTip.SetToolTip(this.useGFPGAN, "Helpful for generating much better looking faces using GFPGAN 1.3 AI model.\r\n");
255 | this.useGFPGAN.UseVisualStyleBackColor = true;
256 | this.useGFPGAN.CheckedChanged += new System.EventHandler(this.useGFPGAN_CheckedChanged);
257 | //
258 | // debugBox
259 | //
260 | this.debugBox.BackColor = System.Drawing.SystemColors.ControlLightLight;
261 | this.debugBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
262 | this.debugBox.Cursor = System.Windows.Forms.Cursors.Arrow;
263 | this.debugBox.Enabled = false;
264 | this.debugBox.Location = new System.Drawing.Point(457, 46);
265 | this.debugBox.Multiline = true;
266 | this.debugBox.Name = "debugBox";
267 | this.debugBox.ReadOnly = true;
268 | this.debugBox.Size = new System.Drawing.Size(446, 151);
269 | this.debugBox.TabIndex = 21;
270 | //
271 | // samplerCombo
272 | //
273 | this.samplerCombo.FormattingEnabled = true;
274 | this.samplerCombo.Items.AddRange(new object[] {
275 | "DDIM",
276 | "PLMS",
277 | "HEUN",
278 | "EULER",
279 | "EULER_A",
280 | "DPM2",
281 | "DPM2_A",
282 | "LMS"});
283 | this.samplerCombo.Location = new System.Drawing.Point(215, 110);
284 | this.samplerCombo.Name = "samplerCombo";
285 | this.samplerCombo.Size = new System.Drawing.Size(236, 21);
286 | this.samplerCombo.TabIndex = 16;
287 | this.samplerCombo.Text = "PLMS";
288 | this.toolTip.SetToolTip(this.samplerCombo, "Sampler that the AI will use. PLMS is recommended.");
289 | //
290 | // label8
291 | //
292 | this.label8.AutoSize = true;
293 | this.label8.Location = new System.Drawing.Point(215, 94);
294 | this.label8.Name = "label8";
295 | this.label8.Size = new System.Drawing.Size(45, 13);
296 | this.label8.TabIndex = 15;
297 | this.label8.Text = "Sampler";
298 | this.toolTip.SetToolTip(this.label8, "Sampler that the AI will use. PLMS is recommended.");
299 | //
300 | // resWBox
301 | //
302 | this.resWBox.Location = new System.Drawing.Point(344, 70);
303 | this.resWBox.Name = "resWBox";
304 | this.resWBox.Size = new System.Drawing.Size(107, 20);
305 | this.resWBox.TabIndex = 14;
306 | this.resWBox.Text = "512";
307 | this.resWBox.TextChanged += new System.EventHandler(this.resWBox_TextChanged);
308 | //
309 | // label5
310 | //
311 | this.label5.AutoSize = true;
312 | this.label5.Location = new System.Drawing.Point(328, 73);
313 | this.label5.Name = "label5";
314 | this.label5.Size = new System.Drawing.Size(12, 13);
315 | this.label5.TabIndex = 9;
316 | this.label5.Text = "x";
317 | //
318 | // resHBox
319 | //
320 | this.resHBox.Location = new System.Drawing.Point(215, 70);
321 | this.resHBox.Name = "resHBox";
322 | this.resHBox.Size = new System.Drawing.Size(107, 20);
323 | this.resHBox.TabIndex = 7;
324 | this.resHBox.Text = "512";
325 | this.resHBox.TextChanged += new System.EventHandler(this.resHBox_TextChanged);
326 | //
327 | // label4
328 | //
329 | this.label4.AutoSize = true;
330 | this.label4.Location = new System.Drawing.Point(215, 53);
331 | this.label4.Name = "label4";
332 | this.label4.Size = new System.Drawing.Size(57, 13);
333 | this.label4.TabIndex = 6;
334 | this.label4.Text = "Resolution";
335 | //
336 | // stepsBox
337 | //
338 | this.stepsBox.Location = new System.Drawing.Point(109, 70);
339 | this.stepsBox.Name = "stepsBox";
340 | this.stepsBox.Size = new System.Drawing.Size(100, 20);
341 | this.stepsBox.TabIndex = 5;
342 | this.stepsBox.Text = "50";
343 | //
344 | // label3
345 | //
346 | this.label3.AutoSize = true;
347 | this.label3.Location = new System.Drawing.Point(109, 53);
348 | this.label3.Name = "label3";
349 | this.label3.Size = new System.Drawing.Size(34, 13);
350 | this.label3.TabIndex = 4;
351 | this.label3.Text = "Steps";
352 | this.toolTip.SetToolTip(this.label3, "Generation steps. Higher number means better quality, \r\nbut also more processing " +
353 | "time.\r\n");
354 | //
355 | // seedBox
356 | //
357 | this.seedBox.Location = new System.Drawing.Point(3, 70);
358 | this.seedBox.Name = "seedBox";
359 | this.seedBox.Size = new System.Drawing.Size(100, 20);
360 | this.seedBox.TabIndex = 3;
361 | this.seedBox.Text = "0";
362 | //
363 | // label2
364 | //
365 | this.label2.AutoSize = true;
366 | this.label2.Location = new System.Drawing.Point(3, 53);
367 | this.label2.Name = "label2";
368 | this.label2.Size = new System.Drawing.Size(32, 13);
369 | this.label2.TabIndex = 2;
370 | this.label2.Text = "Seed";
371 | //
372 | // promptBox
373 | //
374 | this.promptBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
375 | | System.Windows.Forms.AnchorStyles.Right)));
376 | this.promptBox.Location = new System.Drawing.Point(3, 20);
377 | this.promptBox.Name = "promptBox";
378 | this.promptBox.Size = new System.Drawing.Size(681, 20);
379 | this.promptBox.TabIndex = 1;
380 | this.promptBox.Text = "a teddy bear with a yellow hat";
381 | //
382 | // label1
383 | //
384 | this.label1.AutoSize = true;
385 | this.label1.Location = new System.Drawing.Point(3, 4);
386 | this.label1.Name = "label1";
387 | this.label1.Size = new System.Drawing.Size(40, 13);
388 | this.label1.TabIndex = 0;
389 | this.label1.Text = "Prompt";
390 | //
391 | // contextButton
392 | //
393 | this.contextButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
394 | this.contextButton.Location = new System.Drawing.Point(690, 5);
395 | this.contextButton.Name = "contextButton";
396 | this.contextButton.Size = new System.Drawing.Size(129, 35);
397 | this.contextButton.TabIndex = 30;
398 | this.contextButton.Text = "Add context image";
399 | this.toolTip.SetToolTip(this.contextButton, "When you add a context image, then the AI will try to match it as closely as poss" +
400 | "ible \r\nwhen generating your prompt. Uses img2img algorithm.");
401 | this.contextButton.UseVisualStyleBackColor = true;
402 | this.contextButton.Click += new System.EventHandler(this.contextButton_Click);
403 | //
404 | // contextImage
405 | //
406 | this.contextImage.BackColor = System.Drawing.SystemColors.ControlLight;
407 | this.contextImage.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
408 | this.contextImage.Location = new System.Drawing.Point(866, 5);
409 | this.contextImage.Name = "contextImage";
410 | this.contextImage.Size = new System.Drawing.Size(35, 35);
411 | this.contextImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
412 | this.contextImage.TabIndex = 31;
413 | this.contextImage.TabStop = false;
414 | //
415 | // contextRemoveButton
416 | //
417 | this.contextRemoveButton.Enabled = false;
418 | this.contextRemoveButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
419 | this.contextRemoveButton.Image = global::SDToolkit.Properties.Resources.cross;
420 | this.contextRemoveButton.Location = new System.Drawing.Point(825, 5);
421 | this.contextRemoveButton.Name = "contextRemoveButton";
422 | this.contextRemoveButton.Size = new System.Drawing.Size(35, 35);
423 | this.contextRemoveButton.TabIndex = 32;
424 | this.contextRemoveButton.UseVisualStyleBackColor = true;
425 | this.contextRemoveButton.Click += new System.EventHandler(this.contextRemoveButton_Click);
426 | //
427 | // upscaleCombo
428 | //
429 | this.upscaleCombo.FormattingEnabled = true;
430 | this.upscaleCombo.Items.AddRange(new object[] {
431 | "2x",
432 | "4x",
433 | "8x"});
434 | this.upscaleCombo.Location = new System.Drawing.Point(3, 110);
435 | this.upscaleCombo.Name = "upscaleCombo";
436 | this.upscaleCombo.Size = new System.Drawing.Size(206, 21);
437 | this.upscaleCombo.TabIndex = 34;
438 | this.upscaleCombo.Text = "4x";
439 | this.toolTip.SetToolTip(this.upscaleCombo, "Upscale the image by an order of magnitude. \r\nFor example: 2x means resolution ti" +
440 | "mes two.");
441 | this.upscaleCombo.SelectedIndexChanged += new System.EventHandler(this.upscaleCombo_SelectedIndexChanged);
442 | //
443 | // label6
444 | //
445 | this.label6.AutoSize = true;
446 | this.label6.Location = new System.Drawing.Point(3, 94);
447 | this.label6.Name = "label6";
448 | this.label6.Size = new System.Drawing.Size(46, 13);
449 | this.label6.TabIndex = 33;
450 | this.label6.Text = "Upscale";
451 | this.toolTip.SetToolTip(this.label6, "Upscale the image by an order of magnitude. \r\nFor example: 2x means resolution ti" +
452 | "mes two.\r\n");
453 | //
454 | // upscaleLabel
455 | //
456 | this.upscaleLabel.AutoSize = true;
457 | this.upscaleLabel.Location = new System.Drawing.Point(0, 192);
458 | this.upscaleLabel.Name = "upscaleLabel";
459 | this.upscaleLabel.Size = new System.Drawing.Size(41, 13);
460 | this.upscaleLabel.TabIndex = 35;
461 | this.upscaleLabel.Text = "";
462 | //
463 | // precisionCheck
464 | //
465 | this.precisionCheck.AutoSize = true;
466 | this.precisionCheck.Location = new System.Drawing.Point(3, 160);
467 | this.precisionCheck.Name = "precisionCheck";
468 | this.precisionCheck.Size = new System.Drawing.Size(114, 17);
469 | this.precisionCheck.TabIndex = 36;
470 | this.precisionCheck.Text = "Force full precision";
471 | this.toolTip.SetToolTip(this.precisionCheck, "Helpful for generating much better looking faces using GFPGAN 1.3 AI model.\r\n");
472 | this.precisionCheck.UseVisualStyleBackColor = true;
473 | //
474 | // gpuInfoLabel
475 | //
476 | this.gpuInfoLabel.AutoSize = true;
477 | this.gpuInfoLabel.Location = new System.Drawing.Point(9, 674);
478 | this.gpuInfoLabel.Name = "gpuInfoLabel";
479 | this.gpuInfoLabel.Size = new System.Drawing.Size(92, 13);
480 | this.gpuInfoLabel.TabIndex = 20;
481 | this.gpuInfoLabel.Text = "No GPU detected";
482 | //
483 | // timerLabel
484 | //
485 | this.timerLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
486 | this.timerLabel.Location = new System.Drawing.Point(818, 672);
487 | this.timerLabel.Name = "timerLabel";
488 | this.timerLabel.Size = new System.Drawing.Size(100, 15);
489 | this.timerLabel.TabIndex = 21;
490 | this.timerLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
491 | //
492 | // toolTip
493 | //
494 | this.toolTip.ShowAlways = true;
495 | this.toolTip.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info;
496 | this.toolTip.ToolTipTitle = "Help";
497 | this.toolTip.Popup += new System.Windows.Forms.PopupEventHandler(this.toolTip1_Popup);
498 | //
499 | // Window
500 | //
501 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
502 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
503 | this.AutoSize = true;
504 | this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
505 | this.ClientSize = new System.Drawing.Size(930, 761);
506 | this.Controls.Add(this.timerLabel);
507 | this.Controls.Add(this.gpuInfoLabel);
508 | this.Controls.Add(this.panel1);
509 | this.Controls.Add(this.GenerateButton);
510 | this.Controls.Add(this.progressBar);
511 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
512 | this.MaximizeBox = false;
513 | this.MaximumSize = new System.Drawing.Size(946, 800);
514 | this.MinimumSize = new System.Drawing.Size(946, 800);
515 | this.Name = "Window";
516 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
517 | this.Text = "SDToolkit";
518 | this.Load += new System.EventHandler(this.Window_Load);
519 | this.Shown += new System.EventHandler(this.Window_Shown);
520 | this.panel1.ResumeLayout(false);
521 | this.panel1.PerformLayout();
522 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox7)).EndInit();
523 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).EndInit();
524 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit();
525 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();
526 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
527 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
528 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
529 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox0)).EndInit();
530 | ((System.ComponentModel.ISupportInitialize)(this.contextImage)).EndInit();
531 | this.ResumeLayout(false);
532 | this.PerformLayout();
533 |
534 | }
535 |
536 | #endregion
537 |
538 | private System.Windows.Forms.ProgressBar progressBar;
539 | private System.Windows.Forms.Button GenerateButton;
540 | private System.Windows.Forms.Panel panel1;
541 | private System.Windows.Forms.TextBox promptBox;
542 | private System.Windows.Forms.Label label1;
543 | private System.Windows.Forms.Label label2;
544 | private System.Windows.Forms.TextBox seedBox;
545 | private System.Windows.Forms.TextBox stepsBox;
546 | private System.Windows.Forms.Label label3;
547 | private System.Windows.Forms.TextBox resHBox;
548 | private System.Windows.Forms.Label label4;
549 | private System.Windows.Forms.Label label5;
550 | private System.Windows.Forms.TextBox resWBox;
551 | private System.Windows.Forms.ComboBox samplerCombo;
552 | private System.Windows.Forms.Label label8;
553 | private System.Windows.Forms.Label gpuInfoLabel;
554 | private System.Windows.Forms.PictureBox pictureBox3;
555 | private System.Windows.Forms.PictureBox pictureBox2;
556 | private System.Windows.Forms.PictureBox pictureBox1;
557 | private System.Windows.Forms.TextBox debugBox;
558 | private System.Windows.Forms.PictureBox pictureBox0;
559 | private System.Windows.Forms.PictureBox pictureBox7;
560 | private System.Windows.Forms.PictureBox pictureBox6;
561 | private System.Windows.Forms.PictureBox pictureBox5;
562 | private System.Windows.Forms.PictureBox pictureBox4;
563 | private System.Windows.Forms.CheckBox useGFPGAN;
564 | private System.Windows.Forms.Label timerLabel;
565 | private System.Windows.Forms.Button contextButton;
566 | private System.Windows.Forms.PictureBox contextImage;
567 | private System.Windows.Forms.Button contextRemoveButton;
568 | private System.Windows.Forms.ToolTip toolTip;
569 | private System.Windows.Forms.ComboBox upscaleCombo;
570 | private System.Windows.Forms.Label label6;
571 | private System.Windows.Forms.Label upscaleLabel;
572 | private System.Windows.Forms.CheckBox precisionCheck;
573 | }
574 | }
575 |
576 |
--------------------------------------------------------------------------------
/SDToolkit/Window.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 36, 15
122 |
123 |
124 |
125 |
126 | AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAMMOAADDDgAAAAAAAAAA
127 | AACJmrECi5qzBI6dtECWpr8ffYinBZWXrAaamqgBfoKrCoiLqxSUjZ7/lZCa/5mTnP+clp7/h4u//5WT
128 | tf+PhpT/jouX/5mQnP9AQXz/QkeD/0JKhP9ETYb/R1OL/0ZOhf9PVYX/GzMq/xk1Kf9dXnP/VVNr/z48
129 | SP8vS0r/NVVP/ypIQP8vRj//JTwz/ytBOP8xL2z/KyFJ/0JCd/8/M1P/UFl2/1dge/9cYnz/Zmt9/3Fw
130 | eP9feob/WXmF/116iP9ieoj/Y3mI/2Bygf9QY23/IGR6/zJQVf9EXWLKTGZqPktscBQxYWgUAAAAAKKh
131 | owXY08tWyczQFLvJ1hW63/MEkJ6xApOgsgqZpLgBAAAAAJ2csQKVl6lYl5Wp85ucqPucmaX5nJyn/5iW
132 | pv+Yk6f/lpGo/5OOo/+NiZr/kI+f/39/lP+Sjpf/QUJ8/0JEgv9GTIj/TFWL/1Zhkf9QV4j/UleC/xkr
133 | Jv8ZMSX/WFlp/0NDUv83LVH/JSI5/zlYV/85UUz/NE5I/yc4N/8oJUH/KSpf/y8eOf85NWD/NCJL/0o/
134 | Yv9XX3r/YmqD/2Vsgf9jZnP/bHmF/2F7if9feoj/YnqI/2B0g/8cPDz/IDpA/xw6Q/9FXGL/UWpv/09r
135 | a/87Y2P/SnVz+0h1cyFyk7cErdv1BanK5gPT19kC0c3PBAAAAAClrbwOAAAAAKOyywJ/pMw0gZ7L/46Y
136 | rf+Tm6v/kJWn/4uRpP+LkKH/d4Cb/1toj/97gJ3/lZKk/5ybo/+KiZT/UVOO/3+Akf9DSYX/S1CK/1Jc
137 | jv9caZT/V1+O/zlAW/8bOSz/XVtr/09NXf89NkX/LitE/yAZNf8wPlX/MUtL/zcvev8xIW3/NTBq/zFE
138 | dP8vMGX/Qi1Y/0VHdP9JTGj/WFBy/19nff9ob4L/Z3OF/2dvfP9sgI3/ZX+N/2Z/jf8oPUT/L0xV/yle
139 | bf8eTUT/R2Fi/1FrbP8/aW7/On16/zp/d/9GsKD/T6uacoeRsgGJk7ADk5y1AZ6ftiIAAAAAAAAAAAAA
140 | AAC9tbOuxbiy+MW7rP+8s5z/wr2l/8zIrP/KyLb/y8q8/77Buf+ztrT/q62//3+Ltf9CTIv/QkyM/0RP
141 | iv9CSon/REqH/0tRif9YYpL/XGiU/1hgj/9KTl//Wlhk/15baP9FQVD/JCRP/15eav8mGUL/LSJi/xgW
142 | Kf83M2X/TkOA/zkpcf8sI1D/IhJM/yseVP9LQmP/HQw3/1NYbv9jaXv/XmB3/25ygf9YaYL/WW+F/2N8
143 | jP9rhJP/Zn6O/zVWYf9Ja3L/F1BB/z9bWv9TcnL/TYmT/zqIfv9AmYr/PpaJ/0uzpv+EkrFbAAAAAAAA
144 | AACPmbMdAAAAAAAAAACgyugYmsbg/9r4+v9AaHL/MWZd/zBlYP9Qcnz/W3t2/1eEcv9ci3j/S5ie/1Rx
145 | fv9MWYr/SVCM/0VQi/9DUIr/QEiG/0ZNif9JUoj/VmKR/1tolf9ZYJD/UVhm/2Vlc/9UVGb/Gi5d/2Zl
146 | bv9kYW//LjNU/ywmbf8sIkD/Sj9J/0ZHXv81QV3/PS1k/zQeZf8wNnL/ZVpm/1Znkv9hV2//ZmV4/2Zw
147 | gf9pgJD/WW+G/1lwi/9ieI//YXiL/2Z9jv86ZXT/XnmB/zBfWP9FY2H/Smdk/zJ4dP83in7/Q5uN/0Gh
148 | kv9Blon/j5+7/5Cbt5WSnrsBk5y3EwAAAACQj5wBnpuo3X+Ek/9jfIT/NmxZ/zVrVv8xbFL/PGVR/1eC
149 | cv9chXP/caNu/3KqZ/91qnT/U3CU/0hQiv9IUoz/RE+J/0RMh/9FTIb/UFqL/1tpk/9hbpn/VV6P/1pZ
150 | c/9eYHL/VVBr/3Ryfv9tb3r/Z2Fy/1Yqav9bOlL/MSla/zsjlP8+PYT/OB2O/zYdUf9FSI3/Njl4/3Rq
151 | c/9DP3D/OyQ9/3BkdP9xdYT/aXiK/1xwjP9ldpP/YnmR/2N6jf9ddIn/SnF4/2J9h/8/Xlv/VWhq/1tx
152 | c/84fXb/Not8/0SUiP9Dn5H/Q56S/2KUn/+Sm7b/mJ66B5ObtwcAAAAAkpCYJpaVof+Kjpr/goCP/zVr
153 | Vv81YlH/UGpd/1qDc/9agnH/WWWS/2JpnP9ka5r/XGKU/1BYj/9IU4v/RE6H/0VMhf9PWY//TFCJ/1pk
154 | kv9lcp3/YWya/1BTg/9XWnL/YGN6/zQ6Uv9ycn3/b26B/3RzgP9MEnf/MDmN/z1Yev83G4j/UDuO/ztB
155 | bP9qU3T/YlFh/z8ViP95cHb/dm52/zQ4bv9xaXf/dHeC/25xiP90f5H/ZHaR/2Z6jv9jd5L/S1KI/0Bd
156 | Yf89VlH/R19u/0pjY/9OZmf/OYJ0/zyLgf9GiX//QJeM/zyTh/9Pe4X/kpi2/4+ausaJlbYFp6OlAZ6b
157 | nuSTkpn/mZSe/4OIlv+Gg5L/gIGT/6mqu/9/e57/dnea/1Zgkf9ha5r/XmWV/2JomP9KUYr/SFGK/0ZL
158 | hP9RW5D/YXCc/1lllf9ga5f/b3ii/2Zwnv82NHn/WVx1/0dRhv9bXW3/YGB+/3Z3gP95eYP/eXZ7/1cR
159 | Yv9BV3r/PSx2/0ZGkP9CUI//VVOd/4R5lf97dXr/hHp//4B1ef9WT2j/Z2V3/3x6hv95d4r/f4GN/1pj
160 | iv9XWpX/P1Rf/zdPT/8yUE//Gzc1/1Niiv9Vbm//UGhq/zJ7bP8+g33/QYF7/0iViv9Nm5L/b4ik/46X
161 | uP+Sm7v/mJ67BqulphCloKH/lJee/5SRm/+Ni5b/gYSV/2pulf99e5v/fnyf/3R0mf9cYpX/YWia/2hu
162 | mv9nbZv/WWCT/1BXif9XYY//Y26c/3F3of9cZZX/YGmY/3B5pP9weKP/YGOT/1NXbf9fXnb/ZmiC/25w
163 | e/9nan//bm54/3Z0fP9ydHf/ZB+S/2prff9iZ3j/XUeW/3pVhv94c3//gXuD/4R7gv+AeYP/dG11/1NP
164 | jf96eIj/eXuL/3J1l/9XXZj/NDd1/0FaXP9Rbmn/OVVT/zhCcf9NXIj/TWhp/1Bpbf85fnL/Uo+N/0eL
165 | g/9Ih3//Zo2G/4OTu/+Umrr/lJu995uivgOrp6isr66w/6ijpP+jnqH/m5me/4CBj/9tbJj/fnyc/4B/
166 | of94eKD/YGaX/2Npmv96fqX/eHei/2tzn/9faJb/anab/3mApP9+gqb/ZmiW/zs3bv9hZpX/dHqk/2Rp
167 | lv9JRnv/VVZx/2xsgP9hZ3n/Ymd7/2Bld/92cnr/e3V//3JyfP9xc3//b3F//25vfP9xcnz/enWE/4V7
168 | h/+Ee4L/gniC/3x6iP8vKlb/REaG/0xTkf9KUZH/PUKD/zpCf/9MY2P/UW5l/zxYV/8/SYH/V2OR/0xl
169 | df9Sb3D/PYF0/0l+dv89dmn/V3Vy/4+byv+Rnsn/mJ27/6CkvvaUnr1VpKOu/6SjpP+npqr/ko2T/6Gf
170 | ov+AgJD/XmCR/4F7n/+Cf6X/eHum/3J6tf9vdaL/hYao/4mHqP97faX/XmWW/1hgjf9xd6H/fH6n/3l6
171 | ov9gYZD/NjZv/2Nnlv9iZZT/UFCE/2dpeP9vbIH/Y2SD/1Vaef9/eoH/dnR//396gv93dH7/eHaC/3Fv
172 | ev90doP/bnCB/312gf9+dH//hH2H/3Zxg/9xb4n/TFCT/1VgoP9WX5v/RkqP/0JIjP9DS47/UWxo/1l3
173 | bv9GUof/RE2M/15qm/9WYpP/TWpq/0t5cv/08vT/YnWD/2x7sv9sfLj/bXm3/6Ssyf+nqML/l6C+/8a6
174 | sP+/ta7/qa2z/6CirP+Ok6X/Vl2R/3Fxof+HhKX/hIOr/4qPv/+rwfD/jYyw/3d5pP+Dg6b/fn6m/2xv
175 | nv9QVIz/Ozhv/2Rpmf92eaP/am2b/1RVjP8mHmf/R0eB/1FTgf9QT4H/bmx7/3x8gP95dn7/d3R//2Vs
176 | fP+Gg4X/gH2C/3t4gf99eoP/aWR0/3FvgP92c3//aGV3/01TmP9QWZ3/VFue/1tjov9gYpr/TVKY/0pO
177 | lv9MT5f/T1Wb/1Jdo/9QX6H/SFmh/0NLj/9ibZ//ZXGg/1Rgjv9pdZr/Z3Sk/2p3rP9te7L/dYK+/8TP
178 | 4//DyNj/ur3Q/7y6x/+jpaj/u7Ov/6iqsP+ip6//iY+k/1laoP9xdKH/dXmp/4OKt/+hv/H/kIWq/5ud
179 | rv95dJn/aGub/4J/pv94d6T/VluT/zQubf83Lmb/Xl6R/2dmmf9oZ5v/XWCR/1BLh/9YVYr/R0d4/0lK
180 | ff+Df4b/f3qC/4B6gf+EgIX/hn2D/4aChP95d37/dnaE/3t5gf+JhI//bGd6/05UnP9UZbT/XXfM/15y
181 | vP9WVIv/VFib/1teoP9aX6P/Xmen/2Nqrf9ZZav/RVWh/0JQnf89SI//ZXCk/3F8rf9qdKX/VmGY/2h2
182 | pf9pdqr/bXuz/3J/vP+DmeT/ssXa/7e/1P+jpbr/1c7D/7a7vP+ys7b/pqmw/3+Hov9zcJ7/cXGi/3t6
183 | q/+cv/b/qsDb/5qXrf+GgJz/enmT/35+mP9wbpn/e3ej/2Vlmv9OUYv/JRla/zAkZP9eW4z/Y2SV/3J1
184 | nf9sb5f/XlyN/1BMjf9PSYD/bHGC/3Jzgv9UYnj/e3uI/4WBif+Phov/hn+G/3Fwgf9tbX//cWx4/1dl
185 | r/9icbL/PEB+/295tv9SYJf/VFeX/1Zanv9fY6j/aW+w/3yEvP96hL3/anKy/1Rdp/9JUp7/R1Ca/2Bq
186 | pf9tdav/cHqp/3B6qv9qcaX/bXmt/216tP9terr/fJzw/3+W9v+dzvb/wb7I/9DJwP/Z08n/0NHO/4qZ
187 | x/+dosD/eXOf/316p/94k9X/hJG5/4qPpv+DjbH/jY+g/4qJmv+Sjpf/eXeV/3Rxnv90cKH/Xl+X/0I7
188 | f/8vJGr/KBxp/yEYaf9gW5D/a2+Y/2lqk/9lY47/gX2B/2R1j/9ibob/gX+M/3t8hf+Nhov/ioOH/4mC
189 | if92c37/a2p8/29vgP92dYT/e3uM/3aBmf9urur/ZWWe/0xWn/9eYab/bnS6/3N6wP90e9L/Yo7p/2hv
190 | rv9pcbD/aG6s/2Vtqv9PWaD/SVic/3N9qv9+hrf/fIW2/4CMv/93hL3/bXq5/26B2/93ovr/kKTh/97g
191 | 4v96ibP/fI28/6a+6P+Bj8P/gH+n/395o/+HgKz/ipe+/36QuP9+jLT/doSs/3SAqP+RkZr/ko+V/4F+
192 | j/9hY5X/a2ea/2Jgm/9iYJv/YV2Z/0xHjf9HP4f/OzCE/ywiff8wMn//i4aL/2lkeP9fdJD/bHmP/2Vv
193 | hv9ycYH/d3iD/3R4iP+FgIn/gX2K/29wff9fZn7/a26E/09XgP+Kho3/doCv/1xfl/9gY6D/a220/5XF
194 | /v9ue9r/ZHbG/2Nnqf9iZqj/XWao/3mBtP+HjLr/f4W2/2x2rf9hbKn/foq3/4yYxf+Nmsf/fIfA/3J8
195 | uP9we7r/eZv5/4ei7/+OqeX/e4m0/3aDsv90grH/d4az/35+of+Df6v/tdHz/4uZv/+Dkrn/eomw/3yJ
196 | rv9zgan/hIOW/3l6jf9qbIT/eXqU/1tcmf9maJr/dXaj/3t7pv91cqD/fXym/21qnP92b6D/hoie/0lb
197 | hf8tR3b/U2eH/1Nmiv91eoz/aHCI/2Vpfv96fpP/a3Sg/1xqm/9ZZJb/Z3CI/2Nnhf+LiY7/g4KJ/2Bh
198 | k/9mY5j/XGSo/3GN2f+Bo/D/d8f8/1tdn/9XXKD/U1qg/1Jaov9QXKT/V3GM/5my3v+Nl8T/eoK1/3N+
199 | tv91gbj/bHa0/4ms5/9+jMX/cHq3/258uv+Jo+z/i5vL/3CErP+LmML/h5rE/4Kawf+Ef6D/i5K//5Sg
200 | w/+XocT/jZi9/4KPs/+CjrH/d4Sr/2dzm/9WXYv/V1d3/29yif9FL2T/kYB6/2lXZf9zb4f/d2+J/3Fu
201 | lf9wbZv/hH+T/4uDlv9vbof/UF6B/21yiP9wcoj/YGaF/25yjP9yeZ3/X26g/1ppnf9baZ3/XWqf/1Rg
202 | oP9fapD/enqD/4eGj/+Jip3/VFuW/1dlpP9ck9D/WV+u/0lPo/9QU5r/TFGb/z1KmP9kisr/VWy4/4aT
203 | 1v9qgNP/aYLY/3yu9/+Rns//f4vA/252tf+XnMf/iaXg/3yLx/91gLn/e5TV/6a92/9wiK7/l7DZ/4Wg
204 | xP+Oqc7/iIWj/6On0v+cqMX/nqbF/5igvv+Wn7n/jJa0/3OAp/9ZZpn/S1qS/0BGhf9nXHf/m4+A/1hX
205 | h/9ZXYr/bGmK/2trjf92do3/eHSO/2h6mv9yg6D/bXiX/2dvkv9raY3/bGqI/2Fpiv9zdpL/YWue/1pq
206 | nP9Zapz/WWqc/1homv9baJr/ZXid/2l9of9fcpv/Xm+Z/0Ril/8+QYD/Tmup/1Vgqv9rfrL/cInC/36O
207 | yf94isf/gY/H/4WRyf+Fk87/hpTR/4ud3P+Co/H/j5/X/4GLw/9uc7T/n6fP/5mk0f+DmND/c4K+/3N+
208 | uP+Zud3/cYy1/3mWvP9tkbb/ZYSw/42Mq/+Gi7//haTM/5ijwv+boL3/lp+5/3yGqP9cZp3/SliT/0tW
209 | kv9maXr/jYR9/yIldP87Qo3/R1KU/3Bzlf9maI3/amqP/253mf9oeZ//a3ac/0Rhkf9SXpT/XWGQ/2Zn
210 | jP9tcI3/Y22Q/1RlmP9XaZr/VmmY/1Vnl/9WZpj/UGCU/2h0lv9weJj/SWOX/z5dlv9KbJj/VG2d/zs9
211 | Yf+hoaj/qKqy/6est/+op7T/gICp/5KNq/97daH/doG9/2l2wP9ncsL/ZXPL/4KV0f99h8L/kZ7Q/56n
212 | 0f+SodD/kKDP/32Sx/99ksz/eo3F/2uSu/90mcD/c5S3/3SWuv+Slrn/iqLX/3aZvv9znb//d6bF/4Cr
213 | xv9fc6v/VGSg/298m/+PkZP/X15w/1ZfoP9FTZn/RE6X/0BHkP9IWZL/TVmO/0ZWlP9PYJ7/ZXSb/0ld
214 | kf8yQ4H/PlKN/0tbk/9UYZT/WGmU/1Jolf9PZJb/T2OU/1Rnl/9TZZX/T2GU/21+nv9ve5v/cn2c/2Rt
215 | kP9beKP/P1iT/2ZdfP/Sy8D/qqSo/5SKkf9ASnb/P0uR/0RMmv8+TKL/ZHzA/2d4uv9qe7//anbE/4OT
216 | 2v9/ktT/cHW7/46h3v+OntL/jZ7Q/46ez/+Nmcj/kbPn/3iJv/9rmsD/bpi9/3OWtv9rlrX/cZq4/3yj
217 | wv92m8D/cqC9/3alv/97qsH/aHuf/1Rai/+boJz/NDFf/0xYn/9SXab/Tlyk/0JKl/81Nor/P1CP/ztH
218 | i/9EUZT/Y3Sh/09fmP9HXJf/SVyO/0VPgf9DVZD/SFmT/0xilf9LYJX/TGGY/01kmP9PZZn/VGeb/05j
219 | mP9OYpX/XnCb/2JvlP9ocZD/S2eX/zhdl/+zrrf/sKqk/2FYb/9UWHb/mI+N/yUgP/9ae7//i5TC/5OY
220 | v/+NlMP/jpLG/4aPwP+po7D/l6TL/5Gr2v9/kNT/fYzS/4SV0f+fvu7/kbPo/5W32/+Mp8r/Y5O3/2iS
221 | tf9pl7j/dZ26/3GWsP9xm7r/dKLE/26fwf9+pML/iK/H/0pGev+hq7X/Znml/1dtqv9Yaa//Slmr/0ZU
222 | p/9LXKn/QU2d/zpAkv9LW5f/XHCi/0pXk/9BSYD/QEt//1Rcf/9aaYv/PEuI/0FSjv9HXZT/SWCW/0df
223 | lv9JYJj/TWKc/1Fln/9QZZ7/UWad/1Vpnf9baZr/d3mQ/25viv9ZXof/TGek/zEemP87Nav/c293/31m
224 | hf+IhoP/eHym/01uzf9biOH/eKXr/4Wg5P/C1O3/l36V/3Jxuf9of9f/aIDW/4a9/P+Nwfz/nc/9/5W3
225 | 5v+Tstf/javO/2iOrf9rkbD/aZW1/2yVsv9plbD/b5m2/2qYuf94n7//fZq8/4Gauf82LWX/ZazX/2d/
226 | uv9OZLP/Slqw/0ZXrf9FVav/RVar/z5In/9KW5z/UGOb/zxFif89RX//P0Zx/zxDdP9DSXX/Q0l4/1Rj
227 | if9BUY3/R12V/0lfl/9EW5P/Q1iT/0ZbmP9HXJr/S2Cb/1Bmnv9RZJ7/VGWb/1VgmP9WYZn/SFKU/zpA
228 | iv84TYv/Lkh2/3Rtcf9+bnr/iIWh/2ljYv9JYLr/UXPR/3Nknf96Y3//nI2j/7i+uP+mkq3/aYTc/2eC
229 | 2/9zqfT/lc/9/5TB+P+g1/z/ndb7/5W43/9rkKv/cpCq/2mSsP9ok7D/bpGw/2aXt/9smLn/fZy8/3qX
230 | uf+Am7v/o7zb/3GJxP9Rabf/RFix/0Zbs/8/Ua3/OUeo/zY/oP85QZv/RVGY/ztCj/87Qob/Nzh1/0dO
231 | ev86PnP/Q0hy/01Uf/8+Sof/QlOP/0Zbkv9HWpH/QFKL/0BRjf9AU4//RFeT/0hcl/9MZJ7/UGmi/01j
232 | nv9OX5r/R1SW/zg+i/8yN4L/MTN5/ztTiv85PGP/kYSC/7Snnv9bbqD/VGyw/0pfuP9ScMr/e6Hq/150
233 | zv9tiNv/a43g/2mJ3/9qh+D/dqv3/5HJ/f+Yxvf/krfn/6jc+/+f0fn/Yoij/2qOqP9qj6v/ZJGs/2yU
234 | sv9xlLb/cpK0/42rzf+BncD/iabH/4mozf93mNT/T2S3/0dcsv9DV6//T2as/05nqf9Ra6r/SmGl/0ha
235 | nv8/TJL/OkSG/yUkYf82OW7/ODxx/zY8dP8zNn7/OkOH/z9Ujv9CVY3/QVCI/z1Mhf9BUIr/PUyJ/0JU
236 | k/9DWJb/R2Cd/09ppf9OZ6L/R1mc/z5Kkf85PIj/MTF8/zU1fP9MWZ//W2ay/1pmt/9ea7L/YW+2/2Bw
237 | uf9keMD/YnfE/2iAzf9lh9r/bZHm/22K3v9ym+v/eZ7r/4Sz9v+c0/3/mcf3/4+04f+Ns93/iqzV/2eK
238 | ov9qjqn/a46o/2qSrf9ykrD/d5K2/4ifvf99m8D/fZ/E/4Ghzv+Ds+f/h7Xv/1Bouv9IX6r/SGGm/1Rr
239 | rf9Va6z/WXOx/153tP9Ybqv/UWSn/0RPlf9BSo7/RE+L/zU4e/8pK3b/LjJ//zpGiv8+UY3/PUuG/zxF
240 | gv9ASYn/RE+P/0VPj/9FUZL/RFKR/0Namv9IYKH/SmSi/0FUmv87R5H/ODeC/1pho/9QUqf/V1+u/15t
241 | t/9lc7r/YnW7/19stP9rcrj/aXfB/2t8yf9vhdT/cZbl/3OW7P96q/j/fqv0/5nI/P+Wz/v/msf0/5O0
242 | 4P+Mr93/ibDg/5vT+/9lh6D/aY6p/2SNqv9ymLP/dJGz/3uSt/98m8T/gaHM/4Kl1P+Ht+j/j8L1/4rA
243 | 8/9Na7//Rlir/0hWqv9MWqr/UGCq/1dprv9ecrP/X3W0/2Fztv9VZav/SlSc/yolcv8oIXL/KCd1/y4z
244 | gv86R4v/PEuJ/ztEhP9OW5r/VGOj/1hop/9ZaKj/Vman/1Fcnf9HU5T/Rlue/0ddoP8/UJj/OECM/zEv
245 | fP9TU6j/WViw/19quP9icL3/YG2//19pv/9qdb//bHa6/2Zvuf9nesr/c5Tn/3qq+P9/uvv/gqbx/4ml
246 | 6v+QvP3/jLX1/4Sm1f+LqdH/g6PI/46x2v+JqdD/aIuk/2mNqf9kjK3/bJCy/67S8P+axOn/kb3o/5TB
247 | 7/+LvO//m9H7/4nI+P+Gvu//WH3R/1yD0v9wkc7/aHq7/1Nmsv9bcLb/WGqy/1Vpr/9fcrT/UmOn/01Z
248 | n/8sJnn/JBxr/yIdav8tMoL/NkKI/zlChf9PX5z/YHGp/217sf9wf7f/cIC3/2l8tv9gc6//U2Gh/0hU
249 | mf9FWJ3/QE+Y/zY2iP9FRJz/SUOj/1VbtP9jbr//ZXTB/3SIxv9ygMn/anHB/2p1xP9qc8D/YXvM/3GS
250 | 5v97u/z/gqb2/4ux9v+FtPz/hqzv/3+izf95pdr/gaHH/4Ciyv+JqtT/haPK/2GBnP9pjar/ZIyw/2mO
251 | s/9mjrT/a5K4/3Kbwv9mnL//dazS/4Gr0P+Yu9//gKfW/1x9x/9QZbr/TmO8/2l/2f9/p+f/dZHO/2R4
252 | uv9bcLT/VGiw/1FgpP9QXaL/QkmW/yIZZ/8eGGX/Ky2A/zU8hf9MW5r/WWuj/11vpf9aaqX/T12c/05g
253 | of9Ya6v/XHCt/1drqv9UYaP/RE6Z/z9KmP85Moz/Qzqg/1FPrP9ZX7f/ZXbC/3KHzP+Cnt3/eI7Y/3yT
254 | 3f9xfcv/cHnH/219z/9jj+b/fLH4/5LD//+Btfn/fJ/m/4Cj0v+HqdT/gand/32ex/94ncr/eZfC/3mV
255 | wf9niqb/Zoys/26dwP9mkbb/cJW5/4+31v9vmsL/ZqXT/3Oew/9+ocf/hq/X/4Sn1P9sktH/VGi7/1Jm
256 | u/9XacD/XG3C/19sxf91lN//gaLc/1pvtP9KXKD/Sled/0FFkf8dFWD/Hxpl/ywrgP9HVZj/U2Sf/1xt
257 | ov9YZp3/QTCZ/0Eonf9CLaP/Pzya/1Zqqv9abKz/Wmyv/1lxwv89QZj/OjWU/z83nv9PTq7/VmG6/2uB
258 | yf94ltf/c5Xg/3+t8f+Lr/X/f5jp/3OJ2/9rgtn/WZv2/2iN6P+Ht/n/grX6/4es7/+FpdT/g6bb/4ar
259 | 4P93oN3/epnF/3aSwf93k77/W5a3/1+Psf9kk7//ZpK8/12Eqv9mjLH/bJS6/2mWwP92msD/dZ3E/4Wy
260 | 3f+FsN3/fK/p/2Z7wP9Wa8D/VGfA/1hpv/9caL//gpvf/2Nwwv9whcf/VWeu/0JMk/88QY3/Hxhk/x8Z
261 | aP9GUJn/UWCe/1hroP9hb6L/RC+Z/2dNtP9qVbz/cVy8/2pVuv9OS6b/Wm6t/1Zprf9dc8L/W3bQ/zgx
262 | lP89OJz/Skqw/1dmvf9ngMv/aIvc/3ie6P+UvvP/eo3h/2x30f9ugNn/XH7e/2Oh9v9ukub/gKLw/4Cv
263 | 9f+Gquv/i67r/36cx/9+ncP/dZbB/3iWvv93jrT/cY23/1uIp/9dia7/YZO4/2GKrf92m7//aIyx/3if
264 | xP91nsf/dZi9/3Oawf9wpMr/iLfs/5K57/+Ev/f/gJvb/3mN0/9WZb//WmS//2Jmw/9YX77/W2W1/2N1
265 | tf9TYaj/P0eS/yYfbf9ITZf/VWCh/1xrpP9ca6H/NDZ6/y8jhv82LJL/OCya/zUonv81KJf/NTKY/0hY
266 | nv9fcbH/Y3a8/2uN3P8tJ5L/NzSa/z9Dqv9SYrz/W3PJ/1eC4f9mluv/cYDY/2t0z/9qedT/Y3jX/2uV
267 | 7P9ph97/frL5/32k9P9+nev/hqHS/4yz2P+Cn8L/e5m+/36ZvP+Jo8n/eZO7/3mVv/9eh6b/X4io/2OI
268 | qv9jiKn/aI+0/2iMuP9nirP/cZa//3GZwv9znMX/dqfO/3e48/+NrOH/g7bz/4nG/v+Etvj/e57k/4Kd
269 | 3f9faL7/e4bg/0tOqP9JU6n/XGqw/zo8iv8dGWP/U12j/15qp/9odKv/b3uv/3uItP+IlLr/gYm6/4OL
270 | u/+LkcD/h5S//4CQvP94h7r/dIK7/218u/9oesT/aIjW/zAtlv85Paj/P0Ws/05hx/9Lb9f/XGnK/2Bp
271 | yf9jcc3/YXLO/22F2P9uh9r/c5bp/36g8/94l+n/i7f5/4Shxf9/mrz/gJq6/4Gcvf+Cn8T/dJS8/3aR
272 | uv9yj7f/Xoej/2WKp/9qjrH/a4ys/3OTsf92lrz/f6LF/2+Zwf9xmsP/bKPQ/3eo1v97w/r/g8n7/47T
273 | /v+EufX/iL77/4rF+f9qiNv/ZnvO/1BZvP9KUaj/SU+n/0BKm/8/RZb/TFCc/1pkp/9nca3/c320/4GL
274 | u/+Nlr//hY+7/297rv9VYqH/YXGs/3SDuP+KlcH/j5jE/4OMwP91gL3/a3m9/2Z4xf83QKf/NTam/zg8
275 | pP9ASLj/RU+8/05Uuv9bZMT/W2fG/2d6yP9zitj/fary/3ah8v9/p/P/fqj1/4Go7/+EnsD/fZe5/3eU
276 | tf9wjbD/bY21/3ORuf9zkLb/c5C3/16Gn/9ni6b/aYup/2ONr/9ukLL/bZK4/3CUtP9xlbr/fqLH/3ed
277 | yP93ncr/f6bZ/4S98P+Kx/v/mtX+/5XW/v+Xzvv/aInc/1tpyP9IT63/TVOo/0JJn/85QZf/Li+E/1Vb
278 | pf9jaq3/cXiz/36Fuv+Kkb7/kZjA/1xmo/8jKXn/UFuj/0hSnf8hKX//hpC//5Oaw/+Mk8L/fIW+/3F8
279 | vP9odbz/YG+//y0un/8tLpv/Pj+t/z0+qv9KTLX/UFS6/2BsyP9nfND/bJPn/3ae8P9xkuj/h634/4Sq
280 | 6/95m9L/iqTH/36bvP94lLT/c5Cw/3aSt/9xhqv/boiu/3GKr/9mg5r/ZYKa/3eMpv9xiqf/b4mi/2iL
281 | sf9qiKn/cJrA/3Sew/9/ocX/i6vN/4Gjzf+AqNv/ir3z/6LZ/v+g2P7/jMn5/22W4/9eacj/T1Sx/0xR
282 | q/9AQ5z/NDWR/0hLnP9dYqz/bHOy/3qAuv+Jj8D/jZTB/4uTv/9rcav/Zm+r/4ONu/9/iLz/YWus/32H
283 | uf+Rl8P/jZXC/4KJv/95gb3/cHi8/2Vwuf8jIpf/KCeR/zIzn/85OaL/SUyy/1RZvP9casf/YoDV/26R
284 | 5P9vlen/fqT0/4Sz+P+Rs9n/k8X0/5i73P96lrj/fpi4/3WStf94kbP/dYyu/3SIq/9yia3/aIec/2eF
285 | nv9yi6f/c46o/26Mqv9tjKz/bYyu/2yGq/9virL/eZK5/3Wcxv+JoMf/hq/j/4at5P+MwP7/jL/+/47I
286 | +v9oit7/WWDE/0lLrf9JS6f/OjuU/yglgP9RVaf/ZWmx/3d8uv+Dib//jpPD/5GXxP+JkcD/a3Go/4eP
287 | uf+qr8j/lJvD/3F6tP97hbr/k5vF/5Saxv+LksP/gonA/3d+vf9rc7r/U1u2/zMvlv81OJ//Nzeb/0hM
288 | rv9WXbz/YXTK/2mC1P9ri9//eqXy/3Wd7/+ArPH/gK3s/4az8v+Dnr3/iKHC/3mTtP92lLn/fpi6/3iV
289 | uv92iq3/doms/2uGnv9uiaD/co2m/2uKpP9li6r/bYyr/3WVtf9zj7P/ZZTQ/4e16/99reP/g67j/4Wp
290 | 4v9/ouX/jMD7/4/D/f98r/X/YXDT/1VYvf9FRqn/QkKj/zo4lv8iH3X/Wl6s/3J2uf+BhsD/i5DE/5GW
291 | xv+Umsf/jJfD/3R/s/97hbX/p6nH/5OZxP9wfLT/go7B/5igyv+aoMr/lJvI/4yRxf+AhsH/c3y9/1xl
292 | t/8nIor/KiWO/1JXtP9KTa3/VF24/2F0yf9ridb/eKPw/4av+v+DtPb/f630/42/9/9ykrX/hZ6//4yh
293 | vf93k7T/c5S//4Gcvv91ia//cIOq/3SKsf9rjqX/Xoik/2WLpf9jiaX/Yomq/26Qrv9vkq//cJGu/3md
294 | vP+AocX/e5bC/4Sr5/+Zyvz/i7r7/5bN/f+Juvz/Z4vk/1Vdx/9SU7v/QT6h/zc1lP88OZX/REOb/2Vq
295 | tP99hL7/iI3D/4+Vxf+Smcf/lp7K/5KcyP+HksL/foe5/6KlyP+MlcT/e4i8/42Xxv+aosv/nKPM/5qh
296 | y/+SmMj/ipHF/32EwP9mcLn/KiSL/zErlf8vKpD/SU6q/1dhuP9shNH/e6Tt/3+2+f+Dtvn/h6vj/4Ws
297 | z/95osP/dJO4/3SQtP94lLT/kaW8/4Obt/+Ala7/gZGo/3CDqP9tgKb/YIea/2mJnf9jh6D/bIyn/2iP
298 | qP9tiaP/cI2l/3SSt/9ujLr/dJLD/3iVu/99msL/fZm7/4Sk1P+RvPj/gav2/3Wg7v9PVL//RUWu/zMt
299 | j/80MI3/OjaT/05Mo/9xeLj/g4u//4uSwf+PlcT/kJbE/5ObyP+WoMr/j5rI/4OOv/+jpsn/jJfE/4KP
300 | wf+RnMj/mqHL/5qgyf+Ynsj/lJrH/46Wxv+EjML/bHS5/ygnh/8zLZT/Mi6P/0JBnf9mdcb/cpPe/3uv
301 | 9/95sfb/fqrv/4msz/+AosP/cI+3/3WRt/9zjrT/dI+w/3GMrP9xi67/cIWr/3KHqv98kLD/dYep/2SH
302 | mv9ohpn/Youc/2qMoP9qi6P/d5Gs/2yOsf9tkbb/aoe1/2+Mtf9zj7X/epa7/32cwv98nrz/h7D4/4u3
303 | +v9+q/D/QECv/zcxmv8uKY3/KCJ5/zg3jv9TWKX/cny1/3yFt/93f7P/dn6z/4CGuP+Mj77/kJnE/5Gc
304 | xv+Gk8P/n6XJ/4yYxv+Hk8H/lJ7G/5OZxf+QlcH/hoy9/3+Iuf+Aibr/f4m8/294tv81NZD/OzSU/zMq
305 | gf9XXq//U122/2qO3v9xqvP/eqHp/32p7f9+ocT/epvA/3GPtf9xja3/c4yu/3SNrv91jq7/co6s/3CJ
306 | p/9xjK7/eJCv/3SPuv9qjJ3/a4mb/2iNnP9jiqb/aI6s/2qNrP9xlrf/bo6x/26Nsf9wkLX/dJa7/3eb
307 | v/9+oMT/hajv/4649/+Jtfj/cpbm/zs6qf8qJYf/JiB+/yAcav80MYj/VWCl/255sP9kbqT/SkuB/0I4
308 | bv9AOWj/T02C/251qf+Gkr7/e4q+/5mjyP+CkcL/eIa3/4OPvf9+grT/enen/z84cf9SUo3/UV2X/3B6
309 | r/9odLL/PT6W/zIugv85NYj/VFeq/1dluv9xqPD/dqbv/4Cq8P+Fsen/gaLF/3uYvP93k7T/dI+y/3ON
310 | rv9wjK3/c4yt/2yKrv9qg6T/d5Cy/3eKp/9wirX/aYqa/2WFlf9qjJz/bI6r/2mLpv9si63/aIin/2mI
311 | rP9vjrj/cZCx/3aUu/96mL3/d5q8/3qg5f+Pse3/g6/0/3+q7P8yLZr/LiiJ/yUge/8eGmj/Kyp8/1Je
312 | ov9ja6b/OjZv/2tphP8TESH/EBc2/4N6hv8QE13/XGup/2Z4tP+ElMP/eYvB/1JjpP9baqn/UliA/xsW
313 | Kf8ZIUb/fnaE/yonYf9bYp7/Y26r/zs8lP8xLYH/MS6E/z5AoP9LWK//YY3g/26Q4v9/qPH/iavX/3+c
314 | wP97l7z/eJG6/3aPtf9xia7/fZO2/3GKrP9siKr/coqo/4GVsv92iKn/eI20/2eFlf9qiZf/b5Cd/26K
315 | pf9qian/aoWk/2mGqf9riKz/co+3/3aVtv96l7r/gaPH/4Gew/9zpuv/erv4/3mm7f9HW8b/KieJ/ycl
316 | ff8mIHv/Ihxr/y0sd/9HU5r/Rk2O/xcPH/8aEiD/DQoX/xELEf8ODBv/Qk6O/0lYnf9qe7X/fI3A/3OG
317 | vP9RYqX/R1aa/zNBf/8PCxn/DwoV/0w9SP8NCBP/Mzh2/1llpf80N4r/NCyE/yUgeP8sJ4n/PkSz/05z
318 | 0P91qPP/fKrv/4iozf+Anb7/fJi8/3iXrv9zirb/cYex/22IrP9uiKn/bomq/2yHqP+AlK3/laOy/3yP
319 | q/9ohZT/aIWR/2WOlv9riqH/b4ef/2uHqP9siKr/a4mx/3GOtf9yj7b/epS6/4Gbvf9+oeL/irHt/2+c
320 | 6/80OcD/Kian/yginv8kHn7/LCd9/ygld/8nI27/RUyU/0lQkf8zNnj/EAw7/xYQG/8bETP/QkiH/0JN
321 | j/9RW5v/eoq9/4WUw/9/j8D/aHi0/0tXm/9CUZL/Eg9L/w8JEP8NBhP/KSVq/0lSlf9SW6D/OTqN/ykf
322 | df8lHnr/KR+H/yommP8+Rsj/a5vx/3mr8f+Pq87/iJ++/3iWuP92kbn/b4a0/26Frv9rh6//dIyp/3GL
323 | p/9viaT/boar/3+Vrf9of5z/aYac/2WFlP9ohJz/bYWc/3CJn/9qhqb/a4eo/22Lsv9wjbb/b5G+/3yV
324 | vP+Amr3/f6Pi/3Kb6f84PMP/KSWr/yYgn/8lH5P/Jh2N/yEYdf85NIT/KSRt/0JIk/9lb6T/ZW6i/15j
325 | mf9ISYf/JyFL/yMfRf85PXL/gY+9/4+dxf+Wosj/kp7G/4OQvf8wNXT/HB5J/ywrY/9OVZb/Y2mj/294
326 | qv9ncqf/REyP/zIsf/8hGWf/Hxtz/ycgiv8xLZ//MzKr/zo6xf9bguj/gaHS/6Cz0P+AnML/dI+9/3OK
327 | uP9thK7/a4ar/3CJpP9wiKL/a36i/2h5of9se6L/bn6f/2eEnf9og57/aISc/2aCov9rhJz/aoak/2uF
328 | pP9riLD/cY66/3CRv/94lr3/f5rA/3mi5P87PsH/Liuq/zUxq/8pIp//JB2S/y8sj/8rI4T/GxZd/ywr
329 | cP8+QIz/Nz59/ztBdP8uLVf/Mi9Z/19nlf+Nm8H/lKLJ/5iny/+frM7/oKzN/56qzP+XpMn/j5zD/4eT
330 | uf9LRXT/MSZM/zItW/9dZJT/TVOJ/0FIiP8jHGD/Ix1r/yYdgv8oIYv/MCia/y4lof8vJqj/PjrG/26Y
331 | 0v+Kocr/f5jA/3SMvP90irj/bIWv/2p8ov9tf6X/boSn/2h8o/9peKH/a3if/2x6oP9ohJ//Z4Kf/2yE
332 | nv9siKv/boWd/2uFp/9thaX/aoev/2+Jtf9xkcL/c5TG/4Ggy/9LWMr/NTGr/zk5qv88Par/Miyg/ygf
333 | jf8gGHb/IRpz/yMcb/8ZFFL/MjSA/15trP92h7j/gZK9/4qZwv+Rocn/mKfO/52t0v+gsNP/o7HT/6Wy
334 | 0/+jsdL/oK7P/52rzv+Zpsr/k6DF/42Zvf9/iK7/aXKd/1xqn/8uMXP/Ihlb/yIcZv8yMIT/NCmK/y8j
335 | jv8mHZH/KR+Z/zYvs/8+Usf/fpzI/3+UxP90irf/boa1/3CGtP9tg6r/bH+k/2p9qf9oe6X/a3qi/3uK
336 | p/9tfKD/aYSe/2eAnP9lgp7/aYWl/2iCof9pgqH/a4Cb/2eCqv9thaz/bpbG/2+c0v94o9j/PUK7/zUx
337 | nf81Mpv/KiKG/2J/pf9fgaj/U3Wj/1VypP9Xda//RVeU/yEgZP9MWaH/eYy+/4WYxv+Lncr/j6HN/5an
338 | 0P+drtP/orHV/6Sy1v+jstb/obDU/5+u0v+cq9D/l6bM/5Oiyf+OnMX/hZO9/3CAsf9ET4//R1SW/1Rn
339 | pf9Xf7H/QW6c/0Jvnf9airb/XY+z/ysjg/8uIp//NC6s/3uby/94k8f/dIq+/2+Etv9vg7L/anui/2Z5
340 | oP9mdZ3/aXun/21/ov9vgqD/bn6f/2V9lv9ngZr/aIOg/2iCo/9mg6f/ZoKg/2x+mv9lf6n/aYKr/3Sg
341 | zf91nMv/c53I/zQumf8wKIf/XnWX/16Ckv9ZeZz/Z4mz/2uOuP9hgbH/S2GY/01jn/9JVZr/NTyD/15x
342 | rv+Ak8P/ip7L/4yfzf+Wp9H/nK3V/6Kz1/+ltdj/pbPX/6Oy1/+fr9T/m6vR/5anzv+Rosn/hZfE/3OE
343 | uf9AT5b/S1ym/0VUm/9RZ6b/RF+g/0BYl/9Sbqr/SWGY/0xkif9Gb3r/UmaJ/ysik/9iZK3/fpXI/2+I
344 | vf9ugrT/aoGx/2l5oP9nfqn/anul/2t9pf9vgKL/dImg/32Oof9mgJn/ZoGa/2aEof9mgJ//ZoGj/2iB
345 | pv9qfZj/Zn6q/2+Dqf9zncb/c5vB/2+KtP9ofrb/W353/1d3fv9Tdov/UnKZ/1JtoP9GXJL/QVGN/z5L
346 | iP9LWJf/Oj5//z5Ahv9DS5L/YnOx/4aZyP+Qos//lqfS/5yt1v+jsdj/p7TZ/6e12f+mtdj/o7HW/5+u
347 | 1P+ZqdH/j6HL/3+Swv9EVJ3/Tl2l/z9Mkv86RI3/MTmB/yMhW/85PI3/SVqg/0pekf9AWZL/Qmdk/0Jg
348 | WP9DWHH/MjGQ/3iFs/93lMr/aoG1/2h/rv9mdZv/aHul/25/qP9ugKf/boCi/21+p/9sfaX/Z4Se/2V+
349 | lf9lg5//ZX+d/2d/ov9lgKn/aX6b/26Bpv9ug6j/dZK2/3egwf9wl9f/k7KT/1qBd/9cfoT/UXKN/1Nv
350 | mv9MaaD/QVmU/zs9d/8mJV//KiRn/x8aWv8uK3H/PT2A/ztDj/9rern/jZ7M/5an0f+aqtT/nazU/6Ox
351 | 1/+ksdb/pLHX/6Cs1P+dqtP/lqbP/4aayf9kdbX/Wmuv/0lSmf81OIP/Lit7/0RBj/9GTpv/QEWi/yMg
352 | Yf8mJFn/ZEVj/2dhX/9Pdm//QmVi/0xgjP8jMHn/aYzB/2aCuf9keKn/anqk/2R4n/9sfab/aXqh/2x+
353 | o/9peZ//aXqk/2KBnpBnfJX6ZYKf/2J9nv9mgab/ZoGt/2l+mf9sf5//d4er/0lxv//by6L/9/Cy/8Hk
354 | 3P+Eu6v/l8XA/0BRef80Q3j/QVOM/52aw/89Omr/KB1P/xsXRv8fH2D/Sleg/0hTnP9FTZr/Rkya/32N
355 | wf+OnMv/lKHO/5Shz/+ToM//jZvK/5ek0P+aptH/lqTP/42dy/96jMH/Znm2/1Fgo/84PYL/TlCQ/zIz
356 | ef9NTHv/Pzxq/zAseP85PJn/T0p9/1tJY/9gmNX/Z5as/4a92/9/wN3/W7je/1damv9ikM7/X3iw/2V6
357 | qP9kdp3/aXul/2Z7qf9oeJ//Z3if/2h4ov9ihKFGXoGg7mGDov9egKD/ZX+g/3GYy/8pRmX/l5mc/7qy
358 | sf/Zz8z/zs3F/6HK5v+Yz/7/kNL9/8Xt+v/I3+7/t8vU/zg4Y/8mFzD/SlCP/0lanf9KYaL/N0iO/0ZU
359 | mf9FU5b/MzqD/0BBif8+QpH/ZG+x/3yJvv9verf/R0qZ/z5Hk/9VX7H/gZDE/4uYx/+BksT/aXi2/1Jh
360 | nv9XYp7/Q0KG/0A6hf88MHL/OiZC/2BThP8zL2b/Oyxs/1lHeP9RQGX/nN3z/3C+9v+c1fX/WXOs/12N
361 | w/9qq97/RHGt/06Evf9FN2T/ZHih/2V6pP9nfq7/Znih/2V3oP9ecJj/YH+hOluDpe1ffp//X36f/1x5
362 | lf9khbD/ZYCh/3mOuP9reLL/UWaR/3TWzv+H7ef/QL25/1bLzP+A6/D/odPw/z89X/9BSWD/QUZ5/1ls
363 | rP9cc7D/S16g/z5Tmf8wPYj/Iyt0/y83ff8xMXn/LSlv/yIfa/8pKXn/JiZ4/0JGkP9GTZj/MD2D/0tS
364 | pP9KV6L/Tluh/0dQj/9GS4r/Iho9/yIWMv8mHUf/Jxs5/zoqWP9BOGD/OjFn/zQsaf9VQmz/aHOa/0aW
365 | wP9Qsc3/RrfO/z6uzP9xm+X/aIXD/2aIuP9je6b/ZXuh/2R6pP9kd5//Y3yq/2V8qv9hc5//XnCdTgAA
366 | AABbgaXTXn6f/119nv9efp3/Y4Oq/1x4nf95o9X/e6re/3+x5P+ZzPb/l8/8/6vh+/+Qx/b/ibby/1Zr
367 | mv9MRnz/PzhW/3qX0/9hfLv/X3y5/0xmqv9BWqP/Q1qg/zNCkP81Por/OD2E/z1Bjf87P4j/Tluh/zM8
368 | hv9RZaX/U2Sp/zU+g/9MV6b/TFel/zU7hf8pLE7/JiFK/355lf81FzX/SStE/3Vvn/8sK2T/cXm3/0I+
369 | gv9eWpv/cmqT/1ldnv99qdv/l837/4aw8/+GsfL/h7nz/2mIu/9gfbj/Y3qj/2J3oP9geKP/X3ai/15y
370 | oP9geaj/XnGg/11xoQ0AAAAAVXqhXluBpPVafJv/W3ua/158mv9hgqv/aYat/32o2/98sef/f6rb/4vE
371 | +f+Mv/X/j77z/5vM+/+lz/b/Rjlg/1Vdlv+Go9T/eprV/22Nx/9ggsL/VXa4/0ttsf9FZKj/Tmiq/09l
372 | pP9KWqH/co/E/0pdov9kgLv/T2mm/1pusP9TZKv/S1ul/1Zlr/9DSJb/Ihoz/yculv8/JUb/h2uB/2tO
373 | Zf96Z3n/Li9u/zkzbP8zLWz/OTBl/1BCeP9RRWz/n9D9/5zM/f+Hq+v/g67y/4mw7/9jgbX/X3iw/193
374 | p/9heKP/YXml/155q/9ddKH/XXal/193qOUAAAAAAAAAAFV9pBdZf6PFXH+f/1p+nv9bfJz/X4Ck/2GA
375 | pf99r+T/fbfr/4a/8v+Guu//fKvj/43I+f9yndj/ksj2/1JWe/8yN3L/YXPA/4Om2f+buOX/Z4vH/2GH
376 | xf9uls3/bpXK/3qh0f98o8//cZbH/2OFv/91ns3/Zoe9/116s/9GW5r/Vm21/1Vnsf9bbLP/TVGk/y0f
377 | Pf8pN6L/b1pu/1c+U/+OeIb/XEVh/15Ubv9APIz/Pj6A/zxWkf9iVYH/pLnQ/5jN/f+GqOf/lMb8/4Om
378 | 7P9yjsz/YoPB/151q/9ieKf/WXOi/1lunv9ed6n/X3Wj/1tzpO9jfq0QWW6bFVJ+pQFUfaICV3yjSVmB
379 | o+lbfZr/Wnuc/1t5l/9fhKz/Y4Ww/3Kk2/+At+z/grjt/3il3f+HuvD/ir3x/46+8/90k8P/U1af/yks
380 | X/9DTqH/P0md/2aGy/9XesH/T3fA/1OBxP9cjcr/Z5XM/26cz/92odD/ZI/E/2qRxf9nhb7/cY7G/15z
381 | uf9ierv/V2ax/1ZQp/80Kmz/RD+N/3RYa/93ZoL/qpqj/6aVrf+Xkaz/aW6s/4CRvf/G4e7/foCk/5Kh
382 | 0P+czPz/i6/s/4629v99n+b/YXy9/1twrP9bd7H/XHOn/1Zun/9Zdar/W2+e/1drmP9deKaPYHuoBFlw
383 | mhxRfaMDAAAAAFh7pAJZgaVDWnmU4ll5mP9afZv/XoGm/1+Bq/9kjMH/cajg/4O37f+Lw/f/i77y/4q9
384 | 8v+SyPr/ptf9/46bvP++y9H/VVmR/zwzc/9SU4//m7Tf/2OEyf9PecD/Un/D/09/wP9ZhsX/apXL/2iO
385 | xv9pjcT/fJrN/3KNx/9qgsH/ZXy8/2NzuP9NO3P/bXCv/0lKhf97YXP/j3CA/6aNmv95Xn//W1d6/4qs
386 | tf9eXX7/eJjp/6nL8f+94v3/irLv/6zd/f+LtPT/aofL/1x5vf9YdK3/WW+p/1Rzq/9Uapz/Vmye/1Vt
387 | nv9UaJX/W3imIwAAAABadZ8CUHmfBFCHrQEAAAAAVHigAlZ2mVVdfZi3WHuezVl8ofdcfaj/X3+u/2CL
388 | xP99te7/jsT5/3ii3P+Ryfz/mM39/3GMpv8+TJb/f4KW/4uMpf92YZf/RkCk/yMQPf9FT5L/O0SK/2OJ
389 | zv9hicv/XYjK/2eOx/92m87/e5zN/4Ofz/91j8T/Z325/214sf/Ry9P/UkiG/ygjQP9XV5H/fIO7/11O
390 | Zv9pVXP/fYGl/8PE2P+QoeD/c3/o/3+Q8P+bxfj/pdD8/57N/P+gz/3/e5/h/1p4u/9ac7j/VXGy/1Bv
391 | rv9SaZ//VG+k/1hxo/9VcaTDU2eWDll4pAFaeaIBXnylAk54nwJLia4FVXqiAVZ6ogFVe6IPWHWVKll6
392 | m0pYe6LDW3qn+1p5p/9efq//bJXM/4vD+P+HufL/eKLZ/5TK+v+o2Pj/Jz5n/zcwXv9OQIz/eHS1/y8H
393 | e/9sVYT/WkWA/xoRU/8wJor/Vn/M/ysxmP8sLYf/Kyd2/zM1fv8wMHP/gIK4/3NpiP9EPVz/SUVw/4WF
394 | mP9OTpj/S2S4/1denP9LT4n/SU92/8HN4/96jfD/fYrw/4GL9P+Rr/7/kLby/3+k4P+Yyvz/Z4fM/2KC
395 | yP9dhcT/WHK6/1Rytv9QaaH/T2mf/09qnP9Vdao+UWmaA1BqmAVYeqQYVHOdBVl+qBNNeZ8HR4SoBll7
396 | oxJYfaQLV32kEld7pBFWeJ8MVnSbG1VslzZadKjJWXWm/1p4q/9jfbL/ernv/4S98f9wmcr/fLTh/6jo
397 | /f9hoL7/d2C5/0lPnf9pQqn/Ok+L/zhIgf94lKz/UIi//zo9lP9CVpP/GS5g/yIXWv8xLXH/R1eA/0Q9
398 | dv83OWv/VVeb/42Vvf9KTpT/SmWj/0tyqP9IYJv/T2eh/1Rpmf+Lo/X/hJr2/5S0//+ey/7/q9T+/6PH
399 | +P+Txfr/ZYbL/1t9xP9Qa7P/ZI3J/1RyvP9QaqPfTmujNEtml0pMdqZYT3KlQlFpmi9SbJktWH2nKFFx
400 | mx9Tf6kUAAAAAAAAACAQAAAAAAAAAKAAAAAAAAAA4AAAAAAAAAbAAAAAAAAAAIAAAAAAAAAAgAAAAAAA
401 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
402 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
403 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
404 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
405 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
406 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
407 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAGAAAAAAAAAAAAA
408 | AAAAAAAAQAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
409 |
410 |
411 |
--------------------------------------------------------------------------------