├── .gitignore ├── Iconizer.sln ├── Iconizer ├── App.config ├── Form1.Designer.cs ├── Form1.cs ├── Form1.resx ├── IconExtractor │ ├── IconExtractor.cs │ ├── IconUtil.cs │ └── NativeMethods.cs ├── Iconizer.cs ├── Iconizer.csproj ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── UnitData.cs └── icon.ico ├── Info ├── Iconizer.exe └── IconizerDemo.gif ├── LICENSE └── README.md /.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 | *.suo 8 | *.user 9 | *.userosscache 10 | *.sln.docstates 11 | 12 | # User-specific files (MonoDevelop/Xamarin Studio) 13 | *.userprefs 14 | 15 | # Build results 16 | [Dd]ebug/ 17 | [Dd]ebugPublic/ 18 | [Rr]elease/ 19 | [Rr]eleases/ 20 | x64/ 21 | x86/ 22 | bld/ 23 | [Bb]in/ 24 | [Oo]bj/ 25 | [Ll]og/ 26 | 27 | # Visual Studio 2015 cache/options directory 28 | .vs/ 29 | # Uncomment if you have tasks that create the project's static files in wwwroot 30 | #wwwroot/ 31 | 32 | # MSTest test Results 33 | [Tt]est[Rr]esult*/ 34 | [Bb]uild[Ll]og.* 35 | 36 | # NUNIT 37 | *.VisualState.xml 38 | TestResult.xml 39 | 40 | # Build Results of an ATL Project 41 | [Dd]ebugPS/ 42 | [Rr]eleasePS/ 43 | dlldata.c 44 | 45 | # .NET Core 46 | project.lock.json 47 | project.fragment.lock.json 48 | artifacts/ 49 | **/Properties/launchSettings.json 50 | 51 | *_i.c 52 | *_p.c 53 | *_i.h 54 | *.ilk 55 | *.meta 56 | *.obj 57 | *.pch 58 | *.pdb 59 | *.pgc 60 | *.pgd 61 | *.rsp 62 | *.sbr 63 | *.tlb 64 | *.tli 65 | *.tlh 66 | *.tmp 67 | *.tmp_proj 68 | *.log 69 | *.vspscc 70 | *.vssscc 71 | .builds 72 | *.pidb 73 | *.svclog 74 | *.scc 75 | 76 | # Chutzpah Test files 77 | _Chutzpah* 78 | 79 | # Visual C++ cache files 80 | ipch/ 81 | *.aps 82 | *.ncb 83 | *.opendb 84 | *.opensdf 85 | *.sdf 86 | *.cachefile 87 | *.VC.db 88 | *.VC.VC.opendb 89 | 90 | # Visual Studio profiler 91 | *.psess 92 | *.vsp 93 | *.vspx 94 | *.sap 95 | 96 | # TFS 2012 Local Workspace 97 | $tf/ 98 | 99 | # Guidance Automation Toolkit 100 | *.gpState 101 | 102 | # ReSharper is a .NET coding add-in 103 | _ReSharper*/ 104 | *.[Rr]e[Ss]harper 105 | *.DotSettings.user 106 | 107 | # JustCode is a .NET coding add-in 108 | .JustCode 109 | 110 | # TeamCity is a build add-in 111 | _TeamCity* 112 | 113 | # DotCover is a Code Coverage Tool 114 | *.dotCover 115 | 116 | # Visual Studio code coverage results 117 | *.coverage 118 | *.coveragexml 119 | 120 | # NCrunch 121 | _NCrunch_* 122 | .*crunch*.local.xml 123 | nCrunchTemp_* 124 | 125 | # MightyMoose 126 | *.mm.* 127 | AutoTest.Net/ 128 | 129 | # Web workbench (sass) 130 | .sass-cache/ 131 | 132 | # Installshield output folder 133 | [Ee]xpress/ 134 | 135 | # DocProject is a documentation generator add-in 136 | DocProject/buildhelp/ 137 | DocProject/Help/*.HxT 138 | DocProject/Help/*.HxC 139 | DocProject/Help/*.hhc 140 | DocProject/Help/*.hhk 141 | DocProject/Help/*.hhp 142 | DocProject/Help/Html2 143 | DocProject/Help/html 144 | 145 | # Click-Once directory 146 | publish/ 147 | 148 | # Publish Web Output 149 | *.[Pp]ublish.xml 150 | *.azurePubxml 151 | # TODO: Comment the next line if you want to checkin your web deploy settings 152 | # but database connection strings (with potential passwords) will be unencrypted 153 | *.pubxml 154 | *.publishproj 155 | 156 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 157 | # checkin your Azure Web App publish settings, but sensitive information contained 158 | # in these scripts will be unencrypted 159 | PublishScripts/ 160 | 161 | # NuGet Packages 162 | *.nupkg 163 | # The packages folder can be ignored because of Package Restore 164 | **/packages/* 165 | # except build/, which is used as an MSBuild target. 166 | !**/packages/build/ 167 | # Uncomment if necessary however generally it will be regenerated when needed 168 | #!**/packages/repositories.config 169 | # NuGet v3's project.json files produces more ignorable files 170 | *.nuget.props 171 | *.nuget.targets 172 | 173 | # Microsoft Azure Build Output 174 | csx/ 175 | *.build.csdef 176 | 177 | # Microsoft Azure Emulator 178 | ecf/ 179 | rcf/ 180 | 181 | # Windows Store app package directories and files 182 | AppPackages/ 183 | BundleArtifacts/ 184 | Package.StoreAssociation.xml 185 | _pkginfo.txt 186 | 187 | # Visual Studio cache files 188 | # files ending in .cache can be ignored 189 | *.[Cc]ache 190 | # but keep track of directories ending in .cache 191 | !*.[Cc]ache/ 192 | 193 | # Others 194 | ClientBin/ 195 | ~$* 196 | *~ 197 | *.dbmdl 198 | *.dbproj.schemaview 199 | *.jfm 200 | *.pfx 201 | *.publishsettings 202 | orleans.codegen.cs 203 | 204 | # Since there are multiple workflows, uncomment next line to ignore bower_components 205 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 206 | #bower_components/ 207 | 208 | # RIA/Silverlight projects 209 | Generated_Code/ 210 | 211 | # Backup & report files from converting an old project file 212 | # to a newer Visual Studio version. Backup files are not needed, 213 | # because we have git ;-) 214 | _UpgradeReport_Files/ 215 | Backup*/ 216 | UpgradeLog*.XML 217 | UpgradeLog*.htm 218 | 219 | # SQL Server files 220 | *.mdf 221 | *.ldf 222 | *.ndf 223 | 224 | # Business Intelligence projects 225 | *.rdl.data 226 | *.bim.layout 227 | *.bim_*.settings 228 | 229 | # Microsoft Fakes 230 | FakesAssemblies/ 231 | 232 | # GhostDoc plugin setting file 233 | *.GhostDoc.xml 234 | 235 | # Node.js Tools for Visual Studio 236 | .ntvs_analysis.dat 237 | node_modules/ 238 | 239 | # Typescript v1 declaration files 240 | typings/ 241 | 242 | # Visual Studio 6 build log 243 | *.plg 244 | 245 | # Visual Studio 6 workspace options file 246 | *.opt 247 | 248 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 249 | *.vbw 250 | 251 | # Visual Studio LightSwitch build output 252 | **/*.HTMLClient/GeneratedArtifacts 253 | **/*.DesktopClient/GeneratedArtifacts 254 | **/*.DesktopClient/ModelManifest.xml 255 | **/*.Server/GeneratedArtifacts 256 | **/*.Server/ModelManifest.xml 257 | _Pvt_Extensions 258 | 259 | # Paket dependency manager 260 | .paket/paket.exe 261 | paket-files/ 262 | 263 | # FAKE - F# Make 264 | .fake/ 265 | 266 | # JetBrains Rider 267 | .idea/ 268 | *.sln.iml 269 | 270 | # CodeRush 271 | .cr/ 272 | 273 | # Python Tools for Visual Studio (PTVS) 274 | __pycache__/ 275 | *.pyc 276 | 277 | # Cake - Uncomment if you are using it 278 | # tools/** 279 | # !tools/packages.config 280 | 281 | # Telerik's JustMock configuration file 282 | *.jmconfig 283 | 284 | # BizTalk build output 285 | *.btp.cs 286 | *.btm.cs 287 | *.odx.cs 288 | *.xsd.cs 289 | -------------------------------------------------------------------------------- /Iconizer.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.23107.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Iconizer", "Iconizer\Iconizer.csproj", "{664F93DD-773F-410E-95DB-4C35DC3B9616}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Debug|x64 = Debug|x64 12 | Release|Any CPU = Release|Any CPU 13 | Release|x64 = Release|x64 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {664F93DD-773F-410E-95DB-4C35DC3B9616}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {664F93DD-773F-410E-95DB-4C35DC3B9616}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {664F93DD-773F-410E-95DB-4C35DC3B9616}.Debug|x64.ActiveCfg = Debug|x64 19 | {664F93DD-773F-410E-95DB-4C35DC3B9616}.Debug|x64.Build.0 = Debug|x64 20 | {664F93DD-773F-410E-95DB-4C35DC3B9616}.Release|Any CPU.ActiveCfg = Release|Any CPU 21 | {664F93DD-773F-410E-95DB-4C35DC3B9616}.Release|Any CPU.Build.0 = Release|Any CPU 22 | {664F93DD-773F-410E-95DB-4C35DC3B9616}.Release|x64.ActiveCfg = Release|x64 23 | {664F93DD-773F-410E-95DB-4C35DC3B9616}.Release|x64.Build.0 = Release|x64 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | EndGlobal 29 | -------------------------------------------------------------------------------- /Iconizer/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Iconizer/Form1.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Iconizer 2 | { 3 | partial class Form1 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(Form1)); 32 | this._options = new System.Windows.Forms.CheckedListBox(); 33 | this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); 34 | this._clear = new System.Windows.Forms.Button(); 35 | this._add = new System.Windows.Forms.Button(); 36 | this.label1 = new System.Windows.Forms.Label(); 37 | this._saveQuick = new System.Windows.Forms.Button(); 38 | this._saveFull = new System.Windows.Forms.Button(); 39 | this._view = new System.Windows.Forms.ListView(); 40 | this._openDiag = new System.Windows.Forms.OpenFileDialog(); 41 | this._saveDiag = new System.Windows.Forms.FolderBrowserDialog(); 42 | this.tableLayoutPanel1.SuspendLayout(); 43 | this.SuspendLayout(); 44 | // 45 | // _options 46 | // 47 | this._options.ColumnWidth = 90; 48 | this._options.Dock = System.Windows.Forms.DockStyle.Fill; 49 | this._options.FormattingEnabled = true; 50 | this._options.Items.AddRange(new object[] { 51 | "8px", 52 | "16px", 53 | "32px", 54 | "48px", 55 | "64px", 56 | "128px", 57 | "256px", 58 | "Keep Crisp", 59 | "Keep Ratio"}); 60 | this._options.Location = new System.Drawing.Point(165, 3); 61 | this._options.MultiColumn = true; 62 | this._options.Name = "_options"; 63 | this.tableLayoutPanel1.SetRowSpan(this._options, 2); 64 | this._options.Size = new System.Drawing.Size(303, 54); 65 | this._options.TabIndex = 0; 66 | // 67 | // tableLayoutPanel1 68 | // 69 | this.tableLayoutPanel1.ColumnCount = 4; 70 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 162F)); 71 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); 72 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 110F)); 73 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 103F)); 74 | this.tableLayoutPanel1.Controls.Add(this._clear, 2, 1); 75 | this.tableLayoutPanel1.Controls.Add(this._add, 2, 0); 76 | this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); 77 | this.tableLayoutPanel1.Controls.Add(this._options, 1, 0); 78 | this.tableLayoutPanel1.Controls.Add(this._saveQuick, 3, 0); 79 | this.tableLayoutPanel1.Controls.Add(this._saveFull, 3, 1); 80 | this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top; 81 | this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); 82 | this.tableLayoutPanel1.Name = "tableLayoutPanel1"; 83 | this.tableLayoutPanel1.RowCount = 2; 84 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); 85 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); 86 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); 87 | this.tableLayoutPanel1.Size = new System.Drawing.Size(684, 60); 88 | this.tableLayoutPanel1.TabIndex = 1; 89 | // 90 | // _clear 91 | // 92 | this._clear.Dock = System.Windows.Forms.DockStyle.Fill; 93 | this._clear.Location = new System.Drawing.Point(474, 33); 94 | this._clear.Name = "_clear"; 95 | this._clear.Size = new System.Drawing.Size(104, 24); 96 | this._clear.TabIndex = 3; 97 | this._clear.Text = "Clear"; 98 | this._clear.UseVisualStyleBackColor = true; 99 | this._clear.Click += new System.EventHandler(this._clear_Click); 100 | // 101 | // _add 102 | // 103 | this._add.Dock = System.Windows.Forms.DockStyle.Fill; 104 | this._add.Location = new System.Drawing.Point(474, 3); 105 | this._add.Name = "_add"; 106 | this._add.Size = new System.Drawing.Size(104, 24); 107 | this._add.TabIndex = 4; 108 | this._add.Text = "Add ..."; 109 | this._add.UseVisualStyleBackColor = true; 110 | this._add.Click += new System.EventHandler(this._add_Click); 111 | // 112 | // label1 113 | // 114 | this.label1.AutoSize = true; 115 | this.label1.Cursor = System.Windows.Forms.Cursors.Help; 116 | this.label1.Dock = System.Windows.Forms.DockStyle.Fill; 117 | this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 24F); 118 | this.label1.Location = new System.Drawing.Point(3, 0); 119 | this.label1.Name = "label1"; 120 | this.tableLayoutPanel1.SetRowSpan(this.label1, 2); 121 | this.label1.Size = new System.Drawing.Size(156, 60); 122 | this.label1.TabIndex = 0; 123 | this.label1.Text = "Iconizer"; 124 | this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight; 125 | this.label1.Click += new System.EventHandler(this.label1_Click); 126 | // 127 | // _saveQuick 128 | // 129 | this._saveQuick.Dock = System.Windows.Forms.DockStyle.Fill; 130 | this._saveQuick.Location = new System.Drawing.Point(584, 3); 131 | this._saveQuick.Name = "_saveQuick"; 132 | this._saveQuick.Size = new System.Drawing.Size(97, 24); 133 | this._saveQuick.TabIndex = 1; 134 | this._saveQuick.Text = "Quick Save"; 135 | this._saveQuick.UseVisualStyleBackColor = true; 136 | this._saveQuick.Click += new System.EventHandler(this._saveQuick_Click); 137 | // 138 | // _saveFull 139 | // 140 | this._saveFull.Dock = System.Windows.Forms.DockStyle.Fill; 141 | this._saveFull.Location = new System.Drawing.Point(584, 33); 142 | this._saveFull.Name = "_saveFull"; 143 | this._saveFull.Size = new System.Drawing.Size(97, 24); 144 | this._saveFull.TabIndex = 2; 145 | this._saveFull.Text = "Save ..."; 146 | this._saveFull.UseVisualStyleBackColor = true; 147 | this._saveFull.Click += new System.EventHandler(this._saveFull_Click); 148 | // 149 | // _view 150 | // 151 | this._view.AllowDrop = true; 152 | this._view.Dock = System.Windows.Forms.DockStyle.Fill; 153 | this._view.FullRowSelect = true; 154 | this._view.Location = new System.Drawing.Point(0, 60); 155 | this._view.Name = "_view"; 156 | this._view.Size = new System.Drawing.Size(684, 315); 157 | this._view.TabIndex = 2; 158 | this._view.UseCompatibleStateImageBehavior = false; 159 | this._view.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this._view_ItemDrag); 160 | this._view.DragDrop += new System.Windows.Forms.DragEventHandler(this._view_DragDrop); 161 | this._view.DragEnter += new System.Windows.Forms.DragEventHandler(this._view_DragEnter); 162 | this._view.KeyDown += new System.Windows.Forms.KeyEventHandler(this._view_KeyDown); 163 | // 164 | // _openDiag 165 | // 166 | this._openDiag.Filter = "Image or Binary Files|*.png;*.jpg;*.jpeg;*.bmp;*.exe;*.dll"; 167 | this._openDiag.Multiselect = true; 168 | this._openDiag.RestoreDirectory = true; 169 | // 170 | // _saveDiag 171 | // 172 | this._saveDiag.Description = "Select the folder where icons will be saved"; 173 | // 174 | // Form1 175 | // 176 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 177 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 178 | this.ClientSize = new System.Drawing.Size(684, 375); 179 | this.Controls.Add(this._view); 180 | this.Controls.Add(this.tableLayoutPanel1); 181 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 182 | this.MinimumSize = new System.Drawing.Size(700, 100); 183 | this.Name = "Form1"; 184 | this.Text = "Iconizer"; 185 | this.Activated += new System.EventHandler(this.Form1_Activated); 186 | this.tableLayoutPanel1.ResumeLayout(false); 187 | this.tableLayoutPanel1.PerformLayout(); 188 | this.ResumeLayout(false); 189 | 190 | } 191 | 192 | #endregion 193 | 194 | private System.Windows.Forms.CheckedListBox _options; 195 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; 196 | private System.Windows.Forms.Label label1; 197 | private System.Windows.Forms.Button _saveQuick; 198 | private System.Windows.Forms.Button _saveFull; 199 | private System.Windows.Forms.ListView _view; 200 | private System.Windows.Forms.Button _clear; 201 | private System.Windows.Forms.Button _add; 202 | private System.Windows.Forms.OpenFileDialog _openDiag; 203 | private System.Windows.Forms.FolderBrowserDialog _saveDiag; 204 | } 205 | } 206 | 207 | -------------------------------------------------------------------------------- /Iconizer/Form1.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Collections.Specialized; 4 | using System.Diagnostics; 5 | using System.Drawing; 6 | using System.Drawing.Imaging; 7 | using System.IO; 8 | using System.Linq; 9 | using System.Reflection; 10 | using System.Windows.Forms; 11 | using TsudaKageyu; 12 | 13 | namespace Iconizer 14 | { 15 | public enum DropOperation 16 | { 17 | NormalExport = 0, 18 | DesktopINI = 1, 19 | BitmapExport = 2, 20 | } 21 | public partial class Form1 : Form 22 | { 23 | public List bitmaps = new List(); 24 | 25 | static bool CheckIfImage(string path) 26 | { 27 | var ext = Path.GetExtension(path); 28 | return ext == ".png" || ext == ".jpg" || ext == ".jpeg" || ext == ".bmp"; 29 | } 30 | 31 | static bool CheckIfBinary(string path) 32 | { 33 | var ext = Path.GetExtension(path); 34 | return ext == ".exe" || ext == ".dll"; 35 | } 36 | 37 | static bool CheckIfIcon(string path) 38 | { 39 | var ext = Path.GetExtension(path); 40 | return ext == ".ico"; 41 | } 42 | 43 | bool CheckIfExist(string path) 44 | { 45 | return bitmaps.Any((x) => x.path == path); 46 | } 47 | 48 | static bool CheckIfCompatible(string[] paths) 49 | { 50 | return paths.Any((x) => CheckIfImage(x) || CheckIfBinary(x) || CheckIfIcon(x)); 51 | } 52 | 53 | void AddImage(Image bitmap, string path) 54 | { 55 | var data = new BitmapData() { bitmap = bitmap, path = path, name = Path.GetFileNameWithoutExtension(path) }; 56 | bitmaps.Add(data); 57 | _view.LargeImageList.Images.Add(data.GetHashCode().ToString(), data.bitmap); 58 | _view.Items.Add(new ListViewItem() { ImageKey = data.GetHashCode().ToString(), Text = data.name, ToolTipText = data.path, Tag = data, Selected = true }); 59 | } 60 | 61 | void AddBinary(string path) 62 | { 63 | var icons = new IconExtractor(path); 64 | var iter = 0; 65 | foreach (var icon in icons.GetAllIcons()) 66 | { 67 | var iconss = IconUtil.Split(icon); 68 | var data = new BitmapData() { bitmap = IconUtil.ToBitmap(Utility.GetNicestIcon(iconss)), path = path, name = Path.GetFileNameWithoutExtension(path), iteration = iter++ }; 69 | bitmaps.Add(data); 70 | _view.LargeImageList.Images.Add(data.GetHashCode().ToString(), data.bitmap); 71 | _view.Items.Add(new ListViewItem() { ImageKey = data.GetHashCode().ToString(), Text = data.name, ToolTipText = data.path, Tag = data, Selected = true }); 72 | 73 | foreach (var ic in iconss) 74 | { 75 | ic.Dispose(); 76 | } 77 | icon.Dispose(); 78 | } 79 | } 80 | 81 | void AddIcon(string path) 82 | { 83 | Icon c = new Icon(path); 84 | var cc = (IconUtil.Split(c)); 85 | var data = new BitmapData() { bitmap = IconUtil.ToBitmap(Utility.GetNicestIcon(cc)), path = path, name = Path.GetFileNameWithoutExtension(path) }; 86 | bitmaps.Add(data); 87 | _view.LargeImageList.Images.Add(data.GetHashCode().ToString(), data.bitmap); 88 | _view.Items.Add(new ListViewItem() { ImageKey = data.GetHashCode().ToString(), Text = data.name, ToolTipText = data.path, Tag = data, Selected = true }); 89 | 90 | foreach (var ic in cc) 91 | { 92 | ic.Dispose(); 93 | } 94 | c.Dispose(); 95 | } 96 | 97 | void RemoveSelected() 98 | { 99 | _view.BeginUpdate(); 100 | for (int i = _view.SelectedItems.Count - 1; i >= 0; i--) 101 | { 102 | var data = (BitmapData)_view.SelectedItems[i].Tag; 103 | bitmaps.Remove(data); 104 | _view.SelectedItems[i].Remove(); 105 | _view.LargeImageList.Images.RemoveByKey(data.GetHashCode().ToString()); 106 | data.bitmap.Dispose(); 107 | } 108 | _view.EndUpdate(); 109 | } 110 | 111 | void RemoveAll() 112 | { 113 | _view.BeginUpdate(); 114 | for (int i = _view.Items.Count - 1; i >= 0; i--) 115 | { 116 | var data = (BitmapData)_view.Items[i].Tag; 117 | bitmaps.Remove(data); 118 | _view.Items[i].Remove(); 119 | _view.LargeImageList.Images.RemoveByKey(data.GetHashCode().ToString()); 120 | data.bitmap.Dispose(); 121 | } 122 | _view.EndUpdate(); 123 | } 124 | 125 | 126 | Bitmap[] GetImageSeries(Image master, OptionsData options) 127 | { 128 | var v = new Bitmap[options.sizes.Count]; 129 | for (int i = 0; i < options.sizes.Count; i++) 130 | { 131 | if (!options.keepCrisp || (master.Width >= options.sizes[i].Width && master.Height >= options.sizes[i].Height)) 132 | v[i] = Utility.ResizeImage(master, options.sizes[i], options.keepAspect); 133 | } 134 | return v; 135 | } 136 | 137 | void SaveQuick() 138 | { 139 | var options = OptionsData.FromCheckBoxes(_options); 140 | foreach (var data in bitmaps) 141 | { 142 | var images = GetImageSeries(data.bitmap, options); 143 | var file = new FileStream(Utility.NextAvailableFilename(data.GetIcoPath()), FileMode.CreateNew); 144 | Utility.SavePngsAsIcon(images, file); 145 | 146 | file.Dispose(); 147 | foreach (var img in images) 148 | { 149 | if (img != null) 150 | img.Dispose(); 151 | } 152 | } 153 | } 154 | 155 | StringCollection SendToCopyDump(DropOperation op) 156 | { 157 | var options = OptionsData.FromCheckBoxes(_options); 158 | StringCollection paths = new StringCollection(); 159 | if (op == DropOperation.BitmapExport) 160 | foreach (ListViewItem item in _view.SelectedItems) 161 | { 162 | var data = (BitmapData)item.Tag; 163 | var path = data.GetPngPath(Path.GetTempPath()); 164 | if (File.Exists(path)) File.Delete(path); 165 | var file = new FileStream(path, FileMode.Create); 166 | paths.Add(path); 167 | data.bitmap.Save(file, ImageFormat.Png); 168 | file.Close(); 169 | } 170 | else 171 | foreach (ListViewItem item in _view.SelectedItems) 172 | { 173 | var data = (BitmapData)item.Tag; 174 | var images = GetImageSeries(data.bitmap, options); 175 | var path = data.GetIcoPath(Path.GetTempPath()); 176 | if (File.Exists(path)) File.Delete(path); 177 | var file = new FileStream(path, FileMode.Create); 178 | paths.Add(path); 179 | Utility.SavePngsAsIcon(images, file); 180 | 181 | file.Dispose(); 182 | foreach (var img in images) 183 | { 184 | if (img != null) 185 | img.Dispose(); 186 | } 187 | } 188 | 189 | if (op == DropOperation.DesktopINI && _view.SelectedItems.Count == 1) 190 | { 191 | var path = Path.Combine(Path.GetTempPath(), "desktop.ini"); 192 | if (File.Exists(path)) File.Delete(path); 193 | var ico = (BitmapData)_view.SelectedItems[0].Tag; 194 | var icon = Path.GetFileName(ico.GetIcoPath()); 195 | File.WriteAllText(path, string.Format("[.ShellClassInfo]\r\nIconResource={0}", icon)); 196 | new FileInfo(ico.GetIcoPath(Path.GetTempPath())).Attributes = new FileInfo(path).Attributes = FileAttributes.Hidden | FileAttributes.System; 197 | 198 | paths.Add(path); 199 | } 200 | 201 | return paths; 202 | } 203 | 204 | void SaveFull(string folder) 205 | { 206 | var options = OptionsData.FromCheckBoxes(_options); 207 | foreach (var data in bitmaps) 208 | { 209 | var images = GetImageSeries(data.bitmap, options); 210 | var file = new FileStream(Utility.NextAvailableFilename(data.GetIcoPath(folder)), FileMode.CreateNew); 211 | Utility.SavePngsAsIcon(images, file); 212 | 213 | file.Dispose(); 214 | foreach (var img in images) 215 | { 216 | if (img != null) 217 | img.Dispose(); 218 | } 219 | } 220 | } 221 | 222 | public Form1() 223 | { 224 | InitializeComponent(); 225 | _view.LargeImageList = new ImageList() { ImageSize = new Size(128, 128), ColorDepth = ColorDepth.Depth32Bit }; 226 | for (int i = 0; i < _options.Items.Count; i++) 227 | { 228 | _options.SetItemChecked(i, true); 229 | } 230 | } 231 | 232 | private void _view_DragDrop(object sender, DragEventArgs e) 233 | { 234 | if (e.Data.GetDataPresent(DataFormats.FileDrop)) 235 | { 236 | _view.BeginUpdate(); 237 | foreach (var path in (string[])e.Data.GetData(DataFormats.FileDrop)) 238 | { 239 | if (CheckIfExist(path)) { } 240 | else if (CheckIfImage(path)) 241 | AddImage(Image.FromFile(path), path); 242 | else if (CheckIfBinary(path)) 243 | AddBinary(path); 244 | else if (CheckIfIcon(path)) 245 | AddIcon(path); 246 | } 247 | _view.EndUpdate(); 248 | } 249 | 250 | } 251 | 252 | private void _view_DragEnter(object sender, DragEventArgs e) 253 | { 254 | if (e.Data.GetDataPresent(DataFormats.FileDrop) && CheckIfCompatible((string[])e.Data.GetData(DataFormats.FileDrop))) 255 | e.Effect = DragDropEffects.Copy; 256 | else 257 | e.Effect = DragDropEffects.None; 258 | } 259 | 260 | private void _clear_Click(object sender, EventArgs e) 261 | { 262 | if (_view.SelectedItems.Count == 0) 263 | RemoveAll(); 264 | else 265 | RemoveSelected(); 266 | } 267 | 268 | private void _saveQuick_Click(object sender, EventArgs e) 269 | { 270 | UseWaitCursor = true; 271 | Application.DoEvents(); 272 | SaveQuick(); 273 | UseWaitCursor = false; 274 | MessageBox.Show("Icon(s) saved successfully!", "Finished", MessageBoxButtons.OK, MessageBoxIcon.Information); 275 | } 276 | 277 | private void _saveFull_Click(object sender, EventArgs e) 278 | { 279 | if (_saveDiag.ShowDialog() == DialogResult.OK) 280 | { 281 | UseWaitCursor = true; 282 | Application.DoEvents(); 283 | SaveFull(_saveDiag.SelectedPath); 284 | UseWaitCursor = false; 285 | MessageBox.Show("Icon(s) saved successfully!", "Finished", MessageBoxButtons.OK, MessageBoxIcon.Information); 286 | } 287 | } 288 | 289 | private void _add_Click(object sender, EventArgs e) 290 | { 291 | if (_openDiag.ShowDialog() == DialogResult.OK) 292 | { 293 | foreach (var path in _openDiag.FileNames) 294 | { 295 | if (CheckIfImage(path)) 296 | AddImage(Image.FromFile(path), path); 297 | if (CheckIfBinary(path)) 298 | AddBinary(path); 299 | else if (CheckIfIcon(path)) 300 | AddIcon(path); 301 | } 302 | } 303 | } 304 | 305 | private void _view_KeyDown(object sender, KeyEventArgs e) 306 | { 307 | if (e.KeyCode == Keys.Delete) 308 | { 309 | RemoveSelected(); 310 | } 311 | else if (e.Control && e.KeyCode == Keys.A) 312 | { 313 | _view.BeginUpdate(); 314 | foreach (ListViewItem item in _view.Items) 315 | { 316 | item.Selected = true; 317 | } 318 | _view.EndUpdate(); 319 | } 320 | } 321 | 322 | private void _view_ItemDrag(object sender, ItemDragEventArgs e) 323 | { 324 | bool withPNG = ModifierKeys == Keys.Shift; 325 | bool withINI = !withPNG && ModifierKeys == Keys.Control; 326 | 327 | UseWaitCursor = true; 328 | if (withINI) 329 | this.Text = "Iconizer - Drop to Change Folder icon"; 330 | else 331 | this.Text = withPNG ? "Iconizer - Release SHIFT and Drop to Export PNG" : "Iconizer - Drop to Export ICO"; 332 | 333 | Application.DoEvents(); 334 | var lists = SendToCopyDump((triggerInvalidating = withINI) ? DropOperation.DesktopINI : (withPNG ? DropOperation.BitmapExport : DropOperation.NormalExport)); 335 | var data = new DataObject(); 336 | data.SetFileDropList(lists); 337 | data.SetData("Preferred DropEffect", DragDropEffects.Move); // Cut 338 | 339 | DoDragDrop(data, DragDropEffects.Copy); 340 | if (withINI) 341 | this.Text = "Iconizer - Click here to Invalidate the explorer cache"; 342 | else 343 | this.Text = "Iconizer"; 344 | UseWaitCursor = false; 345 | } 346 | 347 | 348 | // This trick is used for invalidating folder caches.. 349 | bool triggerInvalidating = false; 350 | 351 | private void Form1_Activated(object sender, EventArgs e) 352 | { 353 | 354 | if (triggerInvalidating) 355 | { 356 | triggerInvalidating = false; 357 | Utility.InvalidateExplorerCache(); 358 | this.Text = "Iconizer"; 359 | } 360 | 361 | } 362 | 363 | private void label1_Click(object sender, EventArgs e) 364 | { 365 | MessageBox.Show("Iconizer is made with <3 by Wello Soft\n\n" + 366 | "http://github.com/willnode/Iconizer" + "\n" + 367 | "http://wellosoft.wordpress.com", "Iconizer " + AssemblyName.GetAssemblyName(Assembly.GetExecutingAssembly().Location).Version.ToSt‌​ring(), MessageBoxButtons.OK, MessageBoxIcon.Information 368 | ); 369 | } 370 | } 371 | } 372 | -------------------------------------------------------------------------------- /Iconizer/Form1.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 | 17, 17 122 | 123 | 124 | 157, 17 125 | 126 | 127 | 128 | 129 | AAABAAgAAAAAAAEAIABrFQAAhgAAAEBAAAABACAAKEIAAPEVAAAwMAAAAQAgAKglAAAZWAAAKCgAAAEA 130 | IABoGgAAwX0AACAgAAABACAAqBAAACmYAAAYGAAAAQAgAIgJAADRqAAAFBQAAAEAIAC4BgAAWbIAABAQ 131 | AAABACAAaAQAABG5AACJUE5HDQoaCgAAAA1JSERSAAABAAAAAQAIBgAAAFxyqGYAABUySURBVHic7d1N 132 | UBtXggfw/0NCgCywAPFl7BhvxkmYWmfI1xxyyMDUHFK1W7vMVZeJ82HnkC2bQ3KNc9vaC7Brx5nsVtl7 133 | 0WWmyt6t3aqtrZ0xmZpK1WQTh3ysv7CRiT0GGwwCCQmEpN4DEgbRSC0h+r2n/v+qlAr0U/dTKv+/ultN 134 | SxiGASJyphrZEyAieVgARA7GAiByMBYAkYOxAIgcjAVA5GAsACIHYwEQORgLgMjBWABEDsYCIHIwFgCR 135 | g7EAiByMBUDkYCwAIgdjARA5GAuAyMFYAEQOxgIgcjAWAJGDsQCIHIwFQORgLAAiB2MBEDkYC4DIwVgA 136 | RA7GAiByMLfdGxRCbPz7+d9N9AM4BWAQALZ9S6FR8MdtrHzLYbGvQiz7mxIN03+1tG6jjA1b3kYFXu8O 137 | Yy4DGH3/9aNjFlZBFtn9XZ3C9g1mC+D87yaGAZxubmxAZ0sT6uvyumgPwl+JMOxyE+ZjytiwHa93p+WJ 138 | ZAoP5pYwH00AwMj7rx8dsjIdKs4RBZALf+/hDrS3NCKaBNI7TKMi7/oWBlYquCXPt4x1WBqzF+HP/tJV 139 | A+z3AI8Wovg+/BAGMPIBS6Aiqr4APvn97X4AV3oPd2D//kYsJYFMgSmostuvSvhVeb01AvDXAYtL6yUA 140 | YOADHg7smt15lHES8FRzYwPaWxj+Xa/DbIxNrzdtAAurQEdzI1oaG4D1czmkGRkFMNjZ0oQow7+7dZiN 141 | sfn1ZgxgMQkcCDQB2RO5pBcpHwPW17l3POYH9AyDreswGyPp9aYyQIPH9g+TqEJsLwADQLOvAavpnZcX 142 | e37RbTD8pa/DwpPM1pPMAE3eOgtbIBUpdSGQ7mHY83WYjZH8ejMG4HbVFJ0HqUmZAqiGMOzpOszGqPp6 143 | SRtKFEBVh4HhJ4XZXwBGwR+LDTcfo2oYGH5SnNQ9gKoOA8NPGpBWAFUdBoafNCGlAKo6DAw/aUTKdQC7 144 | WQ4oHAaGnzSjxKcAOVqHgeEnDSlTAFqHgeEnTSlRAFqHgeFnQ2hMegFoHQaGn5cAa07p6wAAhcPA8G+Z 145 | K3tAT8peBwAoHAaGn+/8VULJ6wAAhcPA8JvPlYWgJeWuAwAUDgPDz3f+KiP9JGA+ZcPA8DP8VUipAlA2 146 | DAw/w1+llCkAZcPA8FuaK/tBT0oUgLJhYPj37qvUSAnSC0DZMCgcKJ3mSmqTeyGQqmFQOFA6zZXUJ+9C 147 | IFXDoHCgdJor6UFOAagaBoUDpdNcSR/2XwikahgUDpROcyW9SD8JuBnDb2GMwnMl/ShTAAy/hTE6zZW0 148 | oEQBMPwWxug0V9KG9AJg+C2M0WmupBX1bwhi4UkMfxnbYfgJqt8QxMKTGP4ytsPwU5a6NwSx8CSGv4zt 149 | MPy0iZo3BLHwJIa/jO3YNFfSh/STgPkY/tLXo9JcSS9KFQDDX/p6VJor6UeZAmD4S1+PSnMlPSlRAAx/ 150 | 6etRaa6kL+kFwPCXvh6d5kpqU+tCIIa/quZK6lPnQiCGv6rmSnqQfggAgOG3sB6d5kr6kF8ADH9VzZX0 151 | IrcAGP6qmSuLQU/yCoDhr6q5sgH0JP8QIIvhL2M7Gs2V1KREATD8ZWxHo7mSuuwvAKPgj8WGM1DQa66k 152 | NrUuBCq2nIHSaq6kPnUuBCq2nIFSd65sA21JuSEIw1/GdlSdq2F9+6QeJU4Cbub4QJmNUXWuTL32lCoA 153 | xwfKbIyqc2X4q4IyBeD4QJmNUXWuDH/VUKIAHB8oszGqzpXhryrSC8DxgTIbo+pcy1gHqU3qbcEdHyiz 154 | MarOleGvSupcB+C0QJmNUXWuDH/VUuObgZwWKLMxqs6V4a9q0s8BOC5QZmNUnWsp62AraEn/G4KYjVE1 155 | UGZjVJ0r3/kdQe8bgpiNUTVQZmNUnesevV5Sj5xPAZwWKLMxqs6V4XcU6fcD2OFXJS0HFA6U2RhV58rw 156 | O470k4BVHSizMarOleF3JL1uCGI2RtVAmY1Rda4Mv2OpcyFQicsBhQNlNkbVuTL8jib9EMCM1oEyG6Pq 157 | XBl+x1OuALQOlNkYVefK8BMUKwCtA2U2RtW57sHrZTnoSZkC0DpQZmNUnSvf+WkTJQpA60CZjVF1rpJe 158 | L6lLegFoHSizMarOleEnE0pfBwAoHCizMarO1Y7XyyLQklvWhrUOlNkYSXOdejyOP935DW7M/HFjqZE3 159 | evPPWzO7dW3GDs+0ur6jw69sWaGV9e08g/LmV+gZ2/uq0Kss/PxiSy3O9TKA0aWhyTFIYnsBGFA7UGVt 160 | R9Jc//v7s/jT5G/QFmjBKy8dQ4O3Hm2BlgLbKBQ3s21ZX15ovFm0Ci0vND7/FRRbXuq2Cy0vbTY7j56e 161 | m0U0voyJqanB6bnZwabhvxhZGpocMp3AHpO2B1AIw198TC78L790DG0Hm3Etfh3L6WX8YW5u03MKB36n 162 | d6lK/1zJtVp/Rfk/m1VUacsL7QGUMpfO2g7sa9mH1w6+hOn7c/jDV1+ebho+gqWhsO0lIP0kYD6Gv/iY 163 | qcfj+GLyt3j5pWNARxr/s/B7TK38gNm1ue1PJuXMrD3E7ZU7+I+F/0RNRxqvvfQyAJxuHD7Sb/dclCoA 164 | ht/aer6481sEAi1oO9iMb2LfYs1Ys7A1Uk3SSOJ/Y1+i62AAnYE2ADhl9xyUKQCG3/p6bs78EYcPH8C1 165 | +HWGX3NJI4lv4t/imcOHAWDQ7u0rUQCyA1XSdhSZ6z5vA+LpuIWtkeqW0zH4vF4p25b6xSCAOoHSKfwA 166 | EAi08Ji/SsynFtC63y9l23IvBFIkUDqF38p2SC9JIwlPba2Ubcu7IYhGgdJprkSlkFMAGgWK4adqpsRd 167 | gUtYbD6G4ScqixKfAuSoFChlw882oApSpgAY/vLWQbQbShQAw1/eOoh2S3oBMPzlrYOoEtS/IYiFJzH8 168 | ROVR9otBTMcw/OwDqigpBcDw7806iEol/W8BLI1h+Bl+2hPSTwLmY/jLmwtROZQqAIa/vLkQlUuZAmD4 169 | y5sL0W4oUQAMf3lzIdot6QXA8Jc3F6JKUOtCIIa/Iq+XyCp1LgRi+Bl+sp0aFwIx/Aw/SSH/QiCGn+En 170 | aeSeBGT4GX6SSl4BMPwMP0knpQCi8VXUu7b+juEvbTlRJcgpgEQSrk1bZvhLW05UKTIK4PKDuSXs9wA1 171 | guEvdTlRJckogNH5aAKPFqLw162XwE4YfpMxbAiqINsL4P3Xj44BGPk+/BCLS1F0eQFfLUo+JwAw/ES7 172 | 5Zax0fdfPzr0D/81ge/DD08/mFvCgUATGjxudDQ2ALC4G7wX4S+DlfBXYh4MP+0FKQUAAB+sl8C/zUcT 173 | p+ajiY3vRS/1f3Rj27+Y/rjz88pkFFhJKQVWib0LonJJKwAA+GD9cGAMAP49bPhv3LjdV8rzd8qCzBNt 174 | ldh7sTDsirU1EBUmtQA2+5sjIoJsGVBhLwz/TPYUqEpIvx8AEcnDAiByMBYAkYPZfg6g6XioB8AFAKNL 175 | F4KX7d4+ET1hewEIoB/rDwBgARBJZP8hgEAPBACB/v1vhnps3z4RbbC9AASAhsZmuFxuCGCw6BOIaM9I 176 | OwnoC3QBwClZ2yciSXsAAkBTxyEIoKf5zVC/3XMgonX2F0C2AWrr6lHf2AwAH9o9ByJaJ+e24Ok1AIC/ 177 | +wiEQH/LW9wLIJJBxiHA+Fo8BgCob/RzL4BIIhl7ABHgybkA/4EjEEB/61shfiJAZDMZ5wAiQgCp5AqA 178 | 9b2A7CcCw61vhfx2z4fIyWwvgLl/CY4DQHp1ZeN3zYeOwuV29wih3qGA/02WElUvKScBBXA3mYhuHAfU 179 | uN1oPdILAKcDb6t1QlAAV5pZAlSlpBXAWiK2cR5AAPD62+D1t0EAl9reVipwfWAJUJWSdSXgZ2vx6LZf 180 | th7phbuu3g/gkv1TMicE4HK7+4TAlRaeo6AqI6cABMZTidi2X9e43Gh7+nm4XO7+9rdDFyTMzFTXcy+i 181 | xuXuA1gCVF1kHQKMAcBqNLJtWa3XB/9TRwGBN9rfCZ22e275BACP14eu516EK1sC/LSCqoWUAnj4z8GI 182 | AMZXIrNbzgPkHr7WLrT29EIAwx3vhN6QMcec3JzqWAJUhWTeEmxsNbaw48J9rV1o6ekFgAtSS2DTV5dt 183 | 3hMQwJUAS4A0J60AhMBnqUQM6eTKjmNyJSCAC53vhM7YN7sn8r+60OP1ofO5F1HjdvdB4EpArU8siEoi 184 | rQCmPw1eBhBJRGYhBHZ8+AIbewIfdr4TutD5jv2By59T3b6thwOKfWxJZJnUuwIL4HJifrrouH2BLgR+ 185 | dAw1bvcbQuBK1wn7biW205cX5/YEWAKkM9m3Bf/XtXgMub8OLKTB34b2Z15ErdfXB+DrrhM2/fFQga8v 186 | 3zgcYAmQpqQWwINPg2NC4O7y7D1L42u9PrQ98yJ87Yf8AC51nQhd6jqxt6ErkH8AW/cEBHClnSVAGpG9 187 | BwAAoyuRWRjplOlHgvkPl8uN5kNH1/cGPPWDAggfOLG3JwiLzaku78Rgu4TzFETlkF4AArhopFOR5UfW 188 | 9gJy6hr9aP/xT9F04IgfwIcHToTCB05U/uPCYnsAOR6vD53PPtkT6GAJkAakF8D9XwcjAEaXH91DJp0q 189 | 6bk1Ljeauo6g69ir2Nfa1SOAC90nQuHuE6HT3RU6NBBWGwDrJdDx7JNzAiwBUp30AgAAAYwY6VQkXuJe 190 | QI7LU4/mnl50HnsVvo5DPTVu9zAEFrpPhi50n7T3TkP5ewIyPrYkskqJArj362AEAqPLs/csnwswe7g9 191 | 9fAfPIrOv3wVLT29qPX63gBwqftkaKH7ZOhS98nQG90nS/sIsZx5eLw+dGz6dIAlQKqy/bsBd5LdCzgV 192 | mwn7mw4e3dW6atxueFu74G3tQjq5gkRk1r8ajQyuRhcGM+kUuk+GIgDGs49FZP84KaehuT1y++9/Mb55 193 | cqXKlcCjm1f7MunUla4ToYHpT4Pb//qJSCJlCuCHT4KRp94NDS0/unehobULtQ2+iqzX5amHr/0QfO2H 194 | AABr8RjWElH/WjzWn0zE+o30GpLx2JZbkSUWHqH7ZGjX2/Z4fWh/liVA6lKmAADgh0+CFw+/G/rV0t1r 195 | /YHen+7JNjxeHzxeH9C6J6vfpi57YvBhtgQOnAgNPGAJkCKUOAeQZ2htJYbYdFj2PCom9+lA7rLhA3t8 196 | 8RKRVcoVwNQnwXEBfBSbCcPsrkG6yh0O1LAESCHKFQAA3D0fPANgbGHyWxglXhugso09gew9BrtPsgRI 197 | LiULAAAE8MtMciWyOHW97I8FVXx4vD60P/NkT4AlQDIpWwDh88EIgF+uLs4i+ucJ2dOpqM3nBARw5SBL 198 | gCRRtgAAIHw+OCYEjsdn7yGxMC3/7buCj9q8cwIsAZJB6QIAgMmPgxcBjCxNXcfK/LTs3Fb+cGDTnsAh 199 | lgDZTPkCAIDJj4NDAri4NHUdVu4gpJONTweyf0p86F2WANlHiwIAgDsfB4+jSkugNntiMLcn8BRLgGyi 200 | TQEA6yUggIvR7OFANcnd7Sh3ToAlQHbQqgAA4PbHweMQGFn64TqWZ8LSj+MrfU4g8PTzEECfAIYr/J+O 201 | aBvtCgAAbp8LDgngeHwmjMXwd1VzsVAmncLi/VvA+l8pDkmeDjmAlgUAABPnghcBvLC6OBuZv/mF9pcN 202 | Z9IpzN26irVEbFwIDEx9wj8Yor2nbQEAwMS54DiAI5nkytjCzS+QmLsnfz++jEcmk8LjifXwAxi4e57h 203 | J3toXQAAMHEuGLl1LjgA4KPY/QksTnyNdCImO9OWH0Y6hce3rmItHhsXDD/ZTPsCyLl1LngGwAvJ5YWx 204 | +RtfYHkmrPy5gUw2/KnEevjDDD/ZrGoKAABunQuO3zobHBACQ/GZcOTxtc+RsPilI3bLpFOYv/Vkt3+S 205 | 4ScJqqoAcm6eDY4AOGKkUx/F/jyB+WufY2V+Wpk9AmNT+AUwMPkxw09yVGUBAMDNs8HIzbPBM1g/SXgx 206 | +sP1yPy1zxGfCSOTXJF6zD8/8WS3/w7DTxJVbQHk3DwbvHvjbPC4yO4RxGfCd+evfY6l8He27xXkwr+W 207 | iI1DYOA2w0+SKXVT0L1042wwAuAMgDPPvRcaXF2c/dXq4uxgFNdRt78Nnv0B1Pqa4fLU78n289/5J84x 208 | /CSfYwpgsxtng5cBXH7uvZAfwODq4uzfri7O9gPwuzz1qPU1w93gg9vbCHeDDzWu3f1nyuSF/xbDT4pw 209 | ZAHkZPcKLmYf6H0v1JdJrvSvzk//bBXoM4AeAGh/4edlb8NIp7AwcRXplfWz/Qw/qcTRBZDv+tlg7tuC 210 | RnK/6/27kFHu+nLhTyUYflJT1Z8ElGVz+AUwcPMsw0/q4R5AEbmP70phpFOI3H7yzn+D4SdFcQ+giHLC 211 | v5ANvxAMP6mNBVBMCQ2Qe+dPZ3f7r/8Tw09q4yFAEVYPATLpFBY37fZfY/hJAywAK4o0gJFOYfHOVaRW 212 | 1t/5/4/hJ03wEKCIYu/+RvadP7fbz/CTTlgAxRRoACNvt//7f2T4SS88BChip3MARjqFpTtP3vm/Y/hJ 213 | Q9wDKKJo+AXDT/piAZRoc/gBDHw7yvCTvlgARYhNuwBGOoUow09VhAVggQCAdArRyfW/6hPAwDcMP1UB 214 | FkARAoCRyYY/+84/rkD4FxejaKsNyJ4GVUBnbQem52albJsFYEF009n+8RH54QeAyOISvC6v7GlQBexz 215 | +RCLx6VsmwVQhBBAJhv+rxUJP4DLU1MP8GNvL2pFrey50C54hAc/8T6PW1NTAHDZ7u2zAIobh8DAVXXC 216 | DwCjc3PzmL2/gJ/4nmcJaMojPHjF9zKm789hZv0QYNTuObAAihDAwNVhpcKPr4c+GwMw8uVX3wEPXfhF 217 | 889xuP4pnhPQgEd40FnbgR/VP42/bv4rZB668IevvgSAkehQeMzu+QjDKPuOV+VtUJT6F/a0k77h14YB 218 | nG4LtODw4W40eOvRFmjZcbwBo+DPW5c9+aeV5YXG548qtrzQ+PxXUGx5qdsutLy02ZiPTq6t4fFiBNH4 219 | MiampnIn/0aWhiaHAMD2PLIA9NY3/Fo/gFMGMFg8llv/Jy5UCMa2f+7N+gpVUmXXl7/uQmsp/vxiSy3O 220 | 9TKA0aWhybGN31Z7ARCROngOgMjBWABEDsYCIHIwFgCRg7EAiByMBUDkYCwAIgdjARA5GAuAyMFYAEQO 221 | xgIgcjAWAJGDsQCIHIwFQORgLAAiB2MBEDkYC4DIwVgARA7GAiByMBYAkYOxAIgcjAVA5GAsACIHYwEQ 222 | ORgLgMjBWABEDsYCIHKw/wc/GVGSZ5l0QwAAAABJRU5ErkJggigAAABAAAAAgAAAAAEAIAAAAAAAAAAA 223 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 224 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 225 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 226 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 227 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 228 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 229 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 230 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 231 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 232 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 233 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 234 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 235 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 236 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 237 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 238 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 239 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 240 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 241 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 242 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 243 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 244 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 245 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 246 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 247 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 248 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 249 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 250 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 251 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 252 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 253 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 254 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP48w 255 | gD6PL/89jy7/PI8t/zuPLP86jyv/OY8q/ziPKP83jyf/No8m/zWPJf80jyP/M48i/zKPIf8xjyD/MI8f 256 | /y+PHv8ujxz/LY8b/yyPGv8rjxn/Ko8X/ymPFv8ojxX/J48U/yaPE/8ljxL/JI8Q/yOPD/8ijw6AAAAA 257 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 258 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 259 | AAAAAAAAAAAAAAAAAD+PMf9iuFn/heCC/4Xggv+E4IH/g+CA/4PggP+C4H//guB+/4Hgff+A4H3/gOB8 260 | /3/gfP9/4Hv/fuB6/33gev994Hn/fOB5/3zgeP974Hf/euB3/3rgdv954Hb/eeB1/3jgdP934HT/d+Bz 261 | /3Hbbf9MuEH/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 262 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmcDKfAAAA 263 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/jzH/huCD/zTML/8zzC7/Mswt/zHMLP8wzCv/L8wp 264 | /y7MKP8tzCf/LMwm/yvMJf8qzCT/Kcwj/yjMIv8nzCH/Jswg/yXMH/8kzB7/I8wd/yLMHP8hzBv/IMwa 265 | /x/MGf8ezBj/HcwX/xzMFv8bzBX/duBy/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 266 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 267 | AAAAAAAAAAAApm8v/6ZvL58AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x/4bgg/80zC//M8wu 268 | /zLMLf8xzCz/MMwr/y/MKf8uzCj/Lcwn/yzMJv8rzCX/Kswk/ynMI/8ozCL/J8wh/ybMIP8lzB//JMwe 269 | /yPMHf8izBz/Icwb/yDMGv8fzBn/HswY/x3MF/8czBb/G8wV/3bgcv8ijw7/AAAAAAAAAAAAAAAAAAAA 270 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 271 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZuLf+ydzD/pm4snwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 272 | AD+PMf+G4IP/NMwv/zPMLv8yzC3/Mcws/zDMK/8vzCn/Lswo/y3MJ/8szCb/K8wl/yrMJP8pzCP/KMwi 273 | /yfMIf8mzCD/Jcwf/yTMHv8jzB3/Iswc/yHMG/8gzBr/H8wZ/x7MGP8dzBf/HMwW/xvMFf924HL/Io8O 274 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 275 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmbSr/5Jo9/7J2Lf+mbCmfAAAA 276 | AAAAAAAAAAAAAAAAAAAAAAA/jzH/huCD/zTML/8zzC7/Mswt/zHMLP8wzCv/L8wp/y7MKP8tzCf/LMwm 277 | /yvMJf8qzCT/Kcwj/yjMIv8nzCH/Jswg/yXMH/8kzB7/I8wd/yLMHP8hzBv/IMwa/x/MGf8ezBj/HcwX 278 | /xzMFv8bzBX/duBy/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 279 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApmwoYKZsKK+mbCjvqm8p 280 | /+idPv/kmTz/snUr/6ZrJZ8AAAAAAAAAAAAAAAAAAAAAP48x/4bgg/80zC//M8wu/zLMLf8xzCz/MMwr 281 | /y/MKf8uzCj/Lcwn/yzMJv8rzCX/Kswk/ynMI/8ozCL/J8wh/ybMIP8lzB//JMwe/yPMHf8izBz/Icwb 282 | /yDMGv8fzBn/HswY/x3MF/8czBb/G8wV/3bgcv8ijw7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 283 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmayZQpmwn 284 | 37J1K//PijT/4JY5/+icPP/onDz/6Jw8/+SZO/+ydCj/pmoinwAAAAAAAAAAAAAAAD+PMf+G4IP/NMwv 285 | /zPMLv8yzC3/Mcws/zDMK/8vzCn/Lswo/y3MJ/8szCb/K8wl/yrMJP8pzCP/KMwi/yfMIf8mzCD/Jcwf 286 | /yTMHv8jzB3/Iswc/yHMG/8gzBr/H8wZ/x7MGP8dzBf/HMwW/xvMFf924HL/Io8O/wAAAAAAAAAAAAAA 287 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 288 | AAAAAACmayWPqm4m/8+JM//omzv/6Js7/+ibO//omzv/6Js7/+ibO//omzv/5Jg5/7JyJf+maSCfAAAA 289 | AAAAAAA/jzH/huCD/zTML/8zzC7/Mswt/zHMLP8wzCv/L8wp/y7MKP8tzCf/LMwm/yvMJf8qzCT/Kcwj 290 | /yjMIv8nzCH/Jswg/yXMH/8kzB7/I8wd/yLMHP8hzBv/IMwa/x/MGf8ezBj/HcwX/xzMFv8bzBX/duBy 291 | /yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 292 | AAAAAAAAAAAAAAAAAAAAAACmaiOfsnMn/+SYOP/omzr/6Js6/+ibOv/omzr/6Js6/+ibOv/omzr/6Js6 293 | /9yRNf+qax//pmgeYAAAAAAAAAAAP48x/4bgg/80zC//M8wu/zLMLf8xzCz/MMwr/y/MKf8uzCj/Lcwn 294 | /yzMJv8rzCX/Kswk/ynMI/8ozCL/J8wh/ybMIP8lzB//JMwe/yPMHf8izBz/Icwb/yDMGv8fzBn/HswY 295 | /x3MF/8czBb/G8wV/3bgcv8ijw7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 296 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmaSBwrm8j/+SXN//omjn/6Jo5/+iaOf/omjn/6Jo5 297 | /+iaOf/omjn/6Jo5/9yQM/+qah3/pmccYAAAAAAAAAAAAAAAAD+PMf+G4IP/NMwv/zPMLv8yzC3/Mcws 298 | /zDMK/8vzCn/Lswo/y3MJ/8szCb/K8wl/yrMJP8pzCP/KMwi/yfMIf8mzCD/Jcwf/yTMHv8jzB3/Iswc 299 | /yHMG/8gzBr/H8wZ/x7MGP8dzBf/HMwW/xvMFf924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 300 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmaB4gpmge/9yQM//omjf/z4ct 301 | /7t3Jf+qah7/pmcc/6ZnG/+mZxv/6Jo3/9yQMv+qaRv/pmYaYAAAAAAAAAAAAAAAAAAAAAA/jzH/huCD 302 | /zTML/8zzC7/Mswt/zHMLP8wzCv/L8wp/y7MKP8tzCf/LMwm/yvMJf8qzCT/Kcwj/yjMIv8nzCH/Jswg 303 | /yXMH/8kzB7/I8wd/yLMHP8hzBv/IMwa/x/MGf8ezBj/HcwX/xzMFv8bzBX/duBy/yKPDv8AAAAAAAAA 304 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApmcc 305 | n796Jv/ckDH/rm0e/6ZmGt+mZxtwpmYbIAAAAAAAAAAApmUY/9yPMP+qaBn/pmUYYAAAAAAAAAAAAAAA 306 | AAAAAAAAAAAAP48x/4bgg/80zC//M8wu/zLMLf8xzCz/MMwr/y/MKf8uzCj/Lcwn/yzMJv8rzCX/Kswk 307 | /ynMI/8ozCL/J8wh/ybMIP8lzB//JMwe/yPMHf8izBz/Icwb/yDMGv8fzBn/HswY/x3MF/8czBb/G8wV 308 | /3bgcv8ijw7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 309 | AAAAAAAAAAAApmYZEKZmGv/Hfyf/pmYZ/6ZmGXAAAAAAAAAAAAAAAAAAAAAAAAAAAKZkFv+qZxf/pmQW 310 | YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+PMf+G4IP/NMwv/zPMLv8yzC3/Mcws/zDMK/8vzCn/Lswo 311 | /y3MJ/8szCb/K8wl/yrMJP8pzCP/KMwi/yfMIf8mzCD/Jcwf/yTMHv8jzB3/Iswc/yHMG/8gzBr/H8wZ 312 | /x7MGP8dzBf/HMwW/xvMFf924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 313 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZlF1CmZRf/pmUX/6ZlF0AAAAAAAAAAAAAAAAAAAAAAAAAA 314 | AAAAAACmYxP/pmMTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/jzH/huCD/zTML/8zzC7/Mswt 315 | /zHMLP8wzCv/L8wp/y7MKP8tzCf/LMwm/yvMJf8qzCT/Kcwj/yjMIv8nzCH/Jswg/yXMH/8kzB7/I8wd 316 | /yLMHP8hzBv/IMwa/x/MGf8ezBj/HcwX/xzMFv8bzBX/duBy/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAA 317 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmZBWApmQV/6ZkFWAAAAAAAAAA 318 | AAAAAAAAAAAAAAAAAAAAAAAAAAAApmIRYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x 319 | /4bgg/80zC//M8wu/zLMLf8xzCz/MMwr/y/MKf8uzCj/Lcwn/yzMJv8rzCX/Kswk/ynMI/8ozCL/J8wh 320 | /ybMIP8lzB//JMwe/yPMHf8izBz/Icwb/yDMGv8fzBn/HswY/x3MF/8czBb/G8wV/3bgcv8ijw7/AAAA 321 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApmMS 322 | n6ZjEr8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 323 | AAAAAAAAAAAAAAAAAD+PMf+G4IP/NMwv/zPMLv8yzC3/Mcws/zDMK/8vzCn/Lswo/y3MJ/8szCb/K8wl 324 | /yrMJP8pzCP/KMwi/yfMIf8mzCD/Jcwf/yTMHv8jzB3/Iswc/yHMG/8gzBr/H8wZ/x7MGP8dzBf/HMwW 325 | /xvMFf924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 326 | AAAAAAAAAAAAAAAAAKZiEL+mYhBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 327 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/jzH/huCD/zTML/8zzC7/Mswt/zHMLP8wzCv/L8wp 328 | /y7MKP8tzCf/LMwm/yvMJf8qzCT/Kcwj/yjMIv8nzCH/Jswg/yXMH/8kzB7/I8wd/yLMHP8hzBv/IMwa 329 | /x/MGf8ezBj/HcwX/xzMFv8bzBX/duBy/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 330 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmYQ4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 331 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x/4bgg/80zC//M8wu 332 | /zLMLf8xzCz/MMwr/y/MKf8uzCj/Lcwn/yzMJv8rzCX/Kswk/ynMI/8ozCL/J8wh/ybMIP8lzB//JMwe 333 | /yPMHf8izBz/Icwb/yDMGv8fzBn/HswY/x3MF/8czBb/G8wV/3bgcv8ijw7/AAAAAAAAAAAAAAAAAAAA 334 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 335 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 336 | AD+PMf+G4IP/NMwv/zPMLv8yzC3/Mcws/zDMK/8vzCn/Lswo/y3MJ/8szCb/K8wl/yrMJP8pzCP/KMwi 337 | /yfMIf8mzCD/Jcwf/yTMHv8jzB3/Iswc/yHMG/8gzBr/H8wZ/x7MGP8dzBf/HMwW/xvMFf924HL/Io8O 338 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27iL 339 | gNu4iv/buIr/27eJ/9u3if/bt4j/27aI/9u2h//btof/27aG/9u2hv/btob/27aG/9u1hf/btYX/27WE 340 | /9u1hP/btIT/27SD/9u0g/8/jzH/huCD/zTML/8zzC7/Mswt/zHMLP8wzCv/L8wp/y7MKP8tzCf/LMwm 341 | /yvMJf8qzCT/Kcwj/yjMIv8nzCH/Jswg/yXMH/8kzB7/I8wd/yLMHP8hzBv/IMwa/x/MGf8ezBj/HcwX 342 | /xzMFv8bzBX/duBy/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 343 | AAAAAAAAAAAAAAAAANu4i//t0q7//+zR///s0f//7ND//+zQ///r0P//69D//+vP///rz///687//+vO 344 | ///rzv//687//+vN///qzf//6s3//+rN///qzf//6sz/P48x/4bgg/80zC//M8wu/zLMLf8xzCz/MMwr 345 | /y/MKf8uzCj/Lcwn/yzMJv8rzCX/Kswk/ynMI/8ozCL/J8wh/ybMIP8lzB//JMwe/yPMHf8izBz/Icwb 346 | /yDMGv8fzBn/HswY/x3MF/8czBb/G8wV/3bgcv8ijw7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 347 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuIv//+zR///fsv//37L//9+y///fsf//37H//96w 348 | ///esP//3q///96v///erv//3a7//92t///drf//3az//9ys///crP//3Kv//9yr/z+PMf+G4IP/NMwv 349 | /zPMLv8yzC3/Mcws/zDMK/8vzCn/Lswo/y3MJ/8szCb/K8wl/yrMJP8pzCP/KMwi/yfMIf8mzCD/Jcwf 350 | /yTMHv8jzB3/Iswc/yHMG/8gzBr/H8wZ/x7MGP8dzBf/HMwW/xvMFf924HL/Io8O/wAAAAAAAAAAAAAA 351 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27iM///s0f//37P//9+y 352 | ///fsv//37L//9+x///fsf//3rD//96w///er///3q///96u///drv//3a3//92t///drP//3Kz//9ys 353 | ///cq/8/jzH/huCD/zTML/8zzC7/Mswt/zHMLP8wzCv/L8wp/y7MKP8tzCf/LMwm/yvMJf8qzCT/Kcwj 354 | /yjMIv8nzCH/Jswg/yXMH/8kzB7/I8wd/yLMHP8hzBv/IMwa/x/MGf8ezBj/HcwX/xzMFv8bzBX/duBy 355 | /yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 356 | ANu4jP//7NL//+Cz///fs///37L//9+y///fsv//37H//9+x///esP//3rD//96v///er///3q7//92u 357 | ///drf//3a3//92s///crP//3Kz/P48x/4bgg/80zC//M8wu/zLMLf8xzCz/MMwr/y/MKf8uzCj/Lcwn 358 | /yzMJv8rzCX/Kswk/ynMI/8ozCL/J8wh/ybMIP8lzB//JMwe/yPMHf8izBz/Icwb/yDMGv8fzBn/HswY 359 | /x3MF/8czBb/G8wV/3bgcv8ijw7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 360 | AAAAAAAAAAAAAAAAAAAAAADbuI3//+zS///gtP//4LP//9+z///fsv//37L//9+y///fsf//37H//96w 361 | ///esP//3q///96v///erv//3a7//92t///drf//3az//9ys/z+PMf+G4IP/NMwv/zPMLv8yzC3/Mcws 362 | /zDMK/8vzCn/Lswo/y3MJ/8szCb/K8wl/yrMJP8pzCP/KMwi/yfMIf8mzCD/Jcwf/yTMHv8jzB3/Iswc 363 | /yHMG/8gzBr/H8wZ/x7MGP8dzBf/HMwW/xvMFf924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 364 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27iN///s0///4LT//+C0///gs///37P//9+y 365 | ///fsv//37L//9+x///fsf//3rD//96w///er///3q///96u///drv//3a3//92t///drP8/jzH/huCD 366 | /zTML/8zzC7/Mswt/zHMLP8wzCv/L8wp/y7MKP8tzCf/LMwm/yvMJf8qzCT/Kcwj/yjMIv8nzCH/Jswg 367 | /yXMH/8kzB7/I8wd/yLMHP8hzBv/IMwa/x/MGf8ezBj/HcwX/xzMFv8bzBX/duBy/yKPDv8AAAAAAAAA 368 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu5jf//7NP//+C1 369 | ///gtP//4LT//+Cz///fs///37L//9+y///fsv//37H//9+x///esP//3rD//96v///er///3q7//92u 370 | ///drf/z2KX/P48x/4bgg/80zC//M8wu/zLMLf8xzCz/MMwr/y/MKf8uzCj/Lcwn/yzMJv8rzCX/Kswk 371 | /ynMI/8ozCL/J8wh/ybMIP8lzB//JMwe/yPMHf8izBz/Icwb/yDMGv8fzBn/HswY/x3MF/8czBb/G8wV 372 | /3HbbP8ijw7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 373 | AAAAAADbuY7//+3T///gtf//4LX//+C0///gtP//4LP//9+z///fsv//37L//9+y///fsf//37H//96w 374 | ///esP//3q///96v///erv//3a7/89il/z+PMf9iuFn/heCC/4Xggv+E4IH/g+CA/4PggP+C4H//guB+ 375 | /4Hgff+A4H3/gOB8/3/gfP9/4Hv/fuB6/33gev994Hn/fOB5/3zgeP974Hf/euB3/3rgdv954Hb/eeB1 376 | /3jgdP934HT/d+Bz/3bgc/9MuEH/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 377 | AAAAAAAAAAAAAAAAAAAAAAAAAAAA27mO///t0///4bb//+C1///gtf//4LT//+C0///gs///37P//9+y 378 | ///fsv//37L//9+x///fsf//3rD//96w///er///3q///96u///drv+ftm//Po8v/z2PLv88jy3/O48s 379 | /zqPK/85jyr/OI8o/zePJ/82jyb/NY8l/zSPI/8zjyL/Mo8h/zGPIP8wjx//L48e/y6PHP8tjxv/LI8a 380 | /yuPGf8qjxf/KY8W/yiPFf8njxT/Jo8T/yWPEv8kjxD/I48P/yKPDoAAAAAAAAAAAAAAAAAAAAAAAAAA 381 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu5j///7dT//+G2///htv//4LX//+C1 382 | ///gtP//4LT//+Cz///fs///37L//9+y///fsv//37H//9+x///esP//3rD//96v///er///3q7//92u 383 | ///drf//3a3//92s///crP//3Kz//9yr///cq///6sz/27SD/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 384 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 385 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuY///+3U 386 | ///ht///4bb//+G2///gtf//4LX//+C0///gtP//4LP//9+z///fsv//37L//9+y///fsf//37H//96w 387 | ///esP//3q///96v///erv//3a7//92t///drf//3az//9ys///crP//3Kv//+rN/9u0g/8AAAAAAAAA 388 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 389 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 390 | AAAAAAAAAAAA27qP///t1P//4bf//+G3///htv//4bb//+C1///gtf//4LT//+C0///gs///37P//9+y 391 | ///fsv//37L//9+x///fsf//3rD//96w///er///3q///96u///drv//3a3//92t///drP//3Kz//9ys 392 | ///qzf/btIT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 393 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 394 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu6kP//7tT//+G4///ht///4bf//+G2///htv//4LX//+C1 395 | ///gtP//4LT//+Cz///fs///37L//9+y///fsv//37H//9+x///esP//3rD//96v///er///3q7//92u 396 | ///drf//3a3//92s///crP//6s3/27WE/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 397 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 398 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbupH//+7V///iuP//4bj//+G3 399 | ///ht///4bb//+G2///gtf//4LX//+C0///gtP//4LP//9+z///fsv//37L//9+y///fsf//37H//96w 400 | ///esP//3q///96v///erv//3a7//92t///drf//3az//+rN/9u1hP8AAAAAAAAAAAAAAAAAAAAAAAAA 401 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 402 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27qR 403 | ///u1f//4rn//+K4///huP//4bf//+G3///htv//4bb//+C1///gtf//4LT//+C0///gs///37P//9+y 404 | ///fsv//37L//9+x///fsf//3rD//96w///er///3q///96u///drv//3a3//92t///rzf/btYX/AAAA 405 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 406 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 407 | AAAAAAAAAAAAAAAAANu6kv//7tX//+K5///iuf//4rj//+G4///ht///4bf//+G2///htv//4LX//+C1 408 | ///gtP//4LT//+Cz///fs///37L//9+y///fsv//37H//9+x///esP//3rD//96v///er///3q7//92u 409 | ///drf//687/27WF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 410 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 411 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbu5L//+7W///iuf//4rn//+K5///iuP//4bj//+G3 412 | ///ht///4bb//+G2///gtf//4LX//+C0///gtP//4LP//9+z///fsv//37L//9+y///fsf//37H//96w 413 | ///esP//3q///96v///erv//3a7//+vO/9u2hv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 414 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 415 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27uS///u1v//4rr//+K5 416 | ///iuf//4rn//+K4///huP//4bf//+G3///htv//4bb//+C1///gtf//4LT//+C0///gs///37P//9+y 417 | ///fsv//37L//9+x///fsf//3rD//96w///er///3q///96u///rzv/btob/AAAAAAAAAAAAAAAAAAAA 418 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 419 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 420 | ANu7kv//7tb//+O6///iuv//4rn//+K5///iuf//4rj//+G4///ht///4bf//+G2///htv//4LX//+C1 421 | ///gtP//4LT//+Cz///fs///37L//9+y///fsv//37H//9+x///esP//3rD//96v///er///687/27aG 422 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 423 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 424 | AAAAAAAAAAAAAAAAAAAAAADbu5P//+7W///ju///47r//+K6///iuf//4rn//+K5///iuP//4bj//+G3 425 | ///ht///4bb//+G2///gtf//4LX//+C0///gtP//4LP//9+z///fsv//37L//9+y///fsf//37H//96w 426 | ///esP//3q///+vP/9u2hv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 427 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 428 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27uT///u1///47v//+O7///juv//4rr//+K5 429 | ///iuf//4rn//+K4///huP//4bf//+G3///htv//4bb//+C1///gtf//4LT//+C0///gs///37P//9+y 430 | ///fsv//37L//9+x///fsf//3rD//96w///rz//btof/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 431 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 432 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu8lP//7tf//+O8 433 | ///ju///47v//+O6///iuv//4rn//+K5///iuf//4rj//+G4///ht///4bf//+G2///htv//4LX//+C1 434 | ///gtP//4LT//+Cz///fs///37L//9+y///fsv//37H//9+x///esP//69D/27aH/wAAAAAAAAAAAAAA 435 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 436 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 437 | AAAAAADbvJT//+/X///jvP//47z//+O7///ju///47r//+K6///iuf//4rn//+K5///iuP//4bj//+G3 438 | ///ht///4bb//+G2///gtf//4LX//+C0///gtP//4LP//9+z///fsv//37L//9+y///fsf//37H//+vQ 439 | /9u2iP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 440 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 441 | AAAAAAAAAAAAAAAAAAAAAAAAAAAA27yV///v1///5L3//+O8///jvP//47v//+O7///juv//4rr//+K5 442 | ///iuf//4rn//+K4///huP//4bf//+G3///htv//4bb//+C1///gtf//4LT//+C0///gs///37P//9+y 443 | ///fsv//37L//9+x///s0P/bt4j/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 444 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 445 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu8lf//79j//+S9///kvf//47z//+O8 446 | ///ju///47v//+O6///iuv//4rn//+K5///iuf//4rj//+G4///ht///4bf//+G2///htv//4LX//+C1 447 | ///gtP//4LT//+Cz///fs///37L//9+y///fsv//7ND/27eJ/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 448 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 449 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbvJb//+/Y 450 | ///kvv//5L3//+S9///jvP//47z//+O7///ju///47r//+K6///iuf//4rn//+K5///iuP//4bj//+G3 451 | ///ht///4bb//+G2///gtf//4LX//+C0///gtP//4LP//9+z///fsv//37L//+zR/9u3if8AAAAAAAAA 452 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 453 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 454 | AAAAAAAAAAAA272W///v2f//5L7//+S+///kvf//5L3//+O8///jvP//47v//+O7///juv//4rr//+K5 455 | ///iuf//4rn//+K4///huP//4bf//+G3///htv//4bb//+C1///gtf//4LT//+C0///gs///37P//9+y 456 | //3pzf/buIr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 457 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 458 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu9l//t1rj//+/Z///v2P//79j//+/X///v1///7tf//+7X 459 | ///u1v//7tb//+7W///u1v//7tX//+7V///u1f//7tT//+3U///t1P//7dT//+3T///t0///7NP//+zT 460 | ///s0v//7NL//+zR///s0f/t0q7/27iK/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 461 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 462 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbvZeA272X/9u9lv/bvJb/27yV 463 | /9u8lf/bvJT/27yU/9u7k//bu5P/27uS/9u7kv/bu5L/27qS/9u6kf/bupH/27qQ/9u6j//buY//27mP 464 | /9u5jv/buY7/27mN/9u4jf/buI3/27iM/9u4jP/buIv/27iL/9u4i4AAAAAAAAAAAAAAAAAAAAAAAAAA 465 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 466 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 467 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 468 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 469 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 470 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 471 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 472 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 473 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 474 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 475 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 476 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 477 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 478 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 479 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 480 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 481 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 482 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 483 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 484 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 485 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 486 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 487 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 488 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 489 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 490 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 491 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 492 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 493 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 494 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 495 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 496 | AAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////////////// 497 | ///////////////////////////gAAAAf////+AAAAB////f4AAAAH///8/gAAAAf///x+AAAAB////D 498 | 4AAAAH///gHgAAAAf//4AOAAAAB///AAYAAAAH//4ABgAAAAf//AAOAAAAB//4AB4AAAAH//gMPgAAAA 499 | f/8Hx+AAAAB//w/P4AAAAH//H9/gAAAAf/8//+AAAAB//z//4AAAAH//f//gAAAAf////+AAAAB//gAA 500 | AAAAAH/+AAAAAAAAf/4AAAAAAAB//gAAAAAAAH/+AAAAAAAAf/4AAAAAAAB//gAAAAAAAH/+AAAAAAAA 501 | f/4AAAAAAAB//gAAAAAAAH/+AAAAB/////4AAAAH/////gAAAAf////+AAAAB/////4AAAAH/////gAA 502 | AAf////+AAAAB/////4AAAAH/////gAAAAf////+AAAAB/////4AAAAH/////gAAAAf////+AAAAB/// 503 | //4AAAAH/////gAAAAf////+AAAAB/////4AAAAH/////gAAAAf////+AAAAB/////4AAAAH//////// 504 | //////////////////////////////////////////////////////////////////////8oAAAAMAAA 505 | AGAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 506 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 507 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 508 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 509 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 510 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 511 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 512 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 513 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 514 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 515 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 516 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 517 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 518 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 519 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 520 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 521 | 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 549 | /yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX/xzMFv924HL/Io8O 550 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmZxxAu3ck/+SWNf+/eSX/pmcb 551 | v6ZnG2CmZhsgAAAAAMd/J//cjzD/qmgZ76ZlGDAAAAAAAAAAAAAAAAAAAAAAP48x/4Xggv8zzC7/Msws 552 | /zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX 553 | /xzMFv924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmZhmfy4Io 554 | /69sHO+mZhlQAAAAAAAAAAAAAAAAAAAAALt1H/+qZxfvpmQVMAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x 555 | /4Xggv8zzC7/Msws/zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb 556 | /yDMGv8ezBn/HcwX/xzMFv924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 557 | AAAAAACmZRbfr2sa76ZlFzAAAAAAAAAAAAAAAAAAAAAAAAAAAKZjEu+mYxMwAAAAAAAAAAAAAAAAAAAA 558 | AAAAAAAAAAAAP48x/4Xggv8zzC7/Msws/zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg 559 | /yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX/xzMFv924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 560 | AAAAAAAAAAAAAAAAAAAAAACmYxP/pmMTcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZiEDAAAAAAAAAA 561 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x/4Xggv8zzC7/Msws/zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk 562 | /yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX/xzMFv924HL/Io8O/wAAAAAAAAAAAAAA 563 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmYhHfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 564 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x/4Xggv8zzC7/Msws/zDMK/8vzCr/Lswo 565 | /yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX/xzMFv924HL/Io8O 566 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmYQ9AAAAAAAAAAAAAAAAAAAAA 567 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x/4Xggv8zzC7/Msws 568 | /zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX 569 | /xzMFv924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 570 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x 571 | /4Xggv8zzC7/Msws/zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb 572 | /yDMGv8ezBn/HcwX/xzMFv924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 573 | AAAAAADbuIvP27iK/9u3if/bt4n/27eI/9u2h//btof/27aG/9u2hv/btob/27WF/9u1hP/btYT/27SD 574 | /9u0gv/bs4L/P48x/4Xggv8zzC7/Msws/zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg 575 | /yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX/xzMFv924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 576 | AAAAAAAAAAAAAAAAAAAAAADbuIv/+OLE///s0f//7ND//+zQ///r0P//68///+vP///rzv//687//+vO 577 | ///rzf//6s3//+rN///qzP//6sz/P48x/4Xggv8zzC7/Msws/zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk 578 | /yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX/xzMFv924HL/Io8O/wAAAAAAAAAAAAAA 579 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuIz//+zR///fs///37L//9+x///fsf//3rD//96v 580 | ///er///3q7//92t///drf//3az//9ys///cq///3Kr/P48x/4Xggv8zzC7/Msws/zDMK/8vzCr/Lswo 581 | /yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX/xzMFv924HL/Io8O 582 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuIz//+zS///gs///37P//9+y 583 | ///fsf//37H//96w///er///3q///96u///drf//3a3//92s///crP//3Kv/P48x/4Xggv8zzC7/Msws 584 | /zDMK/8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yjMI/8nzCH/Jcwg/yTMHv8jzB3/Icwb/yDMGv8ezBn/HcwX 585 | /xzMFv924HL/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuI3//+zS 586 | ///gtP//4LP//9+z///fsv//37H//9+x///esP//3q///96v///erv//3a3//92t///drP/n0pz/P48x 587 | /3jRc/+F4IL/hOCA/4PggP+C4H//guB+/4Dgff+A4Hz/f+B8/37ge/994Hr/fOB5/3zgeP974Hf/euB2 588 | /3ngdv944HX/d+B0/3fgc/9hzFr/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 589 | AAAAAADbuY3//+zT///gtP//4LT//+Cz///fs///37L//9+x///fsf//3rD//96v///er///3q7//92t 590 | ///drf//3az/Y55I/z2PL/88jy3/O48s/zmPKv84jyj/N48n/zWPJf80jyP/Mo8i/zGPIP8wjx//Lo8d 591 | /y2PG/8sjxr/Ko8Y/ymPFv8njxX/Jo8T/yWPEv8jjxD/Io8OzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 592 | AAAAAAAAAAAAAAAAAAAAAADbuY7//+3T///gtf//4LT//+C0///gs///37P//9+y///fsf//37H//96w 593 | ///er///3q///96u///drf//3a3//92s///crP//3Kv//9yq///qzP/bs4L/AAAAAAAAAAAAAAAAAAAA 594 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 595 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuY///+3T///htv//4LX//+C0///gtP//4LP//9+z 596 | ///fsv//37H//9+x///esP//3q///96v///erv//3a3//92t///drP//3Kz//9yr///qzP/btIL/AAAA 597 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 598 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuY///+3U///htv//4bb//+C1 599 | ///gtP//4LT//+Cz///fs///37L//9+x///fsf//3rD//96v///er///3q7//92t///drf//3az//9ys 600 | ///qzf/btIP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 601 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbupD//+3U 602 | ///ht///4bb//+G2///gtf//4LT//+C0///gs///37P//9+y///fsf//37H//96w///er///3q///96u 603 | ///drf//3a3//92s///qzf/btYT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 604 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 605 | AAAAAADbupD//+7U///huP//4bf//+G2///htv//4LX//+C0///gtP//4LP//9+z///fsv//37H//9+x 606 | ///esP//3q///96v///erv//3a3//92t///rzf/btYT/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 607 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 608 | AAAAAAAAAAAAAAAAAAAAAADbupH//+7V///iuP//4bj//+G3///htv//4bb//+C1///gtP//4LT//+Cz 609 | ///fs///37L//9+x///fsf//3rD//96v///er///3q7//92t///rzv/btYX/AAAAAAAAAAAAAAAAAAAA 610 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 611 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbu5L//+7V///iuf//4rj//+G4///ht///4bb//+G2 612 | ///gtf//4LT//+C0///gs///37P//9+y///fsf//37H//96w///er///3q///96u///rzv/btob/AAAA 613 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 614 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbu5L//+7W///iuf//4rn//+K4 615 | ///huP//4bf//+G2///htv//4LX//+C0///gtP//4LP//9+z///fsv//37H//9+x///esP//3q///96v 616 | ///rzv/btob/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 617 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbu5L//+7W 618 | ///juv//4rn//+K5///iuP//4bj//+G3///htv//4bb//+C1///gtP//4LT//+Cz///fs///37L//9+x 619 | ///fsf//3rD//96v///rz//btob/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 620 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 621 | AAAAAADbu5P//+7W///ju///47r//+K5///iuf//4rj//+G4///ht///4bb//+G2///gtf//4LT//+C0 622 | ///gs///37P//9+y///fsf//37H//96w///rz//btof/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 623 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 624 | AAAAAAAAAAAAAAAAAAAAAADbvJT//+7X///ju///47v//+O6///iuf//4rn//+K4///huP//4bf//+G2 625 | ///htv//4LX//+C0///gtP//4LP//9+z///fsv//37H//9+x///r0P/btof/AAAAAAAAAAAAAAAAAAAA 626 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 627 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbvJT//+/X///jvP//47v//+O7///juv//4rn//+K5 628 | ///iuP//4bj//+G3///htv//4bb//+C1///gtP//4LT//+Cz///fs///37L//9+x///s0P/bt4j/AAAA 629 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 630 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbvJX//+/X///kvf//47z//+O7 631 | ///ju///47r//+K5///iuf//4rj//+G4///ht///4bb//+G2///gtf//4LT//+C0///gs///37P//9+y 632 | ///s0P/bt4n/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 633 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbvJb//+/Y 634 | ///kvf//5L3//+O8///ju///47v//+O6///iuf//4rn//+K4///huP//4bf//+G2///htv//4LX//+C0 635 | ///gtP//4LP//9+z///s0f/bt4n/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 636 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 637 | AAAAAADbvZb/+ObM///v2P//79f//+/X///u1///7tb//+7W///u1v//7tX//+7V///u1P//7dT//+3U 638 | ///t0///7dP//+zT///s0v//7NL//+zR//bfv//buIr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 639 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 640 | AAAAAAAAAAAAAAAAAAAAAADbvZfP272W/9u8lv/bvJX/27yU/9u8lP/bu5P/27uS/9u7kv/bu5L/27qR 641 | /9u6kP/bupD/27mP/9u5j//buY7/27mN/9u4jf/buIz/27iM/9u4i//buIvPAAAAAAAAAAAAAAAAAAAA 642 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 643 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 644 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 645 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 646 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 647 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 648 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 649 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 650 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 651 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 652 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 653 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 654 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 655 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 656 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 657 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 658 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 659 | AAAAAAAAAAAA////////AAD///////8AAP///////wAA////////jv////////+2///7+AAAH7X///n4 660 | AAAftP//+PgAAB+z///4eAAAH7L//8A4AAAfsf//ABgAAB+w//4AGAAAH6///AAYAAAfrv/8ADgAAB9v 661 | //gIeAAAHy7/+Hj4AAAfLP/4+fgAAB8q//n7+AAAHyf/+//4AAAfJf/7//gAAB8i////+AAAHyD/+AAA 662 | AAAfHv/4AAAAAB8b//gAAAAAHxn/+AAAAAAfFv/4AAAAAB8U//gAAAAAHxL/+AAAH///D//4AAAf//8A 663 | APgAAB///wAA+AAAH///AAD4AAAf//8AAPgAAB///wAA+AAAH///AAD4AAAf//8AAPgAAB///4//+AAA 664 | H///tv/4AAAf//+1//gAAB///7T/+AAAH///s//4AAAf//+y//gAAB///7L/+AAAH///sf////////+w 665 | /////////6//////////rv////////+t/////////6z/KAAAACgAAABQAAAAAQAgAAAAAAAAAAAAAAAA 666 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 667 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 668 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 669 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 670 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 671 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 672 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 673 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 674 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 675 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 676 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 677 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 678 | AD6PMM89jy//O48t/zqPK/84jyn/N48n/zWPJf80jyP/Mo8h/zCPH/8vjx7/LY8c/yyPGv8qjxj/KY8W 679 | /yePFP8ljxL/JI8Q/yKPDs8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 680 | AAAAAAAAAAAAAAAAAAAAAACmcDCfAAAAAAAAAAAAAAAAAAAAAAAAAAA/jzH/gdt9/4Tggf+D4ID/guB/ 681 | /4Lgfv+A4H3/gOB8/3/gfP994Hr/feB5/3zgef974Hf/euB2/3ngdv944HT/d+Bz/3HbbP8ijw7/AAAA 682 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsncw 683 | /6ZuLJ8AAAAAAAAAAAAAAAAAAAAAP48x/4Xggv8yzC3/Mcws/y/MKv8uzCj/LMwn/yvMJf8pzCT/J8wi 684 | /ybMIP8kzB//I8wd/yHMG/8gzBr/HswY/xzMFv924HP/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 685 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmbCkgpmwocMeFM//Pizb/pmwnnwAAAAAAAAAAAAAA 686 | AD+PMf+F4IL/Mswt/zHMLP8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yfMIv8mzCD/JMwf/yPMHf8hzBv/IMwa 687 | /x7MGP8czBb/duBz/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 688 | AKZrJiCmbCavt3gs/8+KNP/gljn/6Jw8/8+JM/+maiKfAAAAAAAAAAA/jzH/heCC/zLMLf8xzCz/L8wq 689 | /y7MKP8szCf/K8wl/ynMJP8nzCL/Jswg/yTMH/8jzB3/Icwb/yDMGv8ezBj/HMwW/3bgc/8ijw7/AAAA 690 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZqIzCqbiXv2I81/+ibO//omzv/6Js7 691 | /+ibO//omzv/v3sp/6ZoHnAAAAAAP48x/4Xggv8yzC3/Mcws/y/MKv8uzCj/LMwn/yvMJf8pzCT/J8wi 692 | /ybMIP8kzB//I8wd/yHMG/8gzBr/HswY/xzMFv924HP/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 693 | AAAAAAAAAAAAAAAAAKZpIBCqbCLv3JE0/+iaOf/ckTP/2I4y/+CUNf/omjn/z4ct/6ZnHM+mZxwQAAAA 694 | AD+PMf+F4IL/Mswt/zHMLP8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yfMIv8mzCD/JMwf/yPMHf8hzBv/IMwa 695 | /x7MGP8czBb/duBz/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmaB2fz4ct 696 | /8eAKf+qah3vpmcbn6ZnG4DHgCj/z4Yr/6ZmGM+mZhkQAAAAAAAAAAA/jzH/heCC/zLMLf8xzCz/L8wq 697 | /y7MKP8szCf/K8wl/ynMJP8nzCL/Jswg/yTMH/8jzB3/Icwb/yDMGv8ezBj/HMwW/3bgc/8ijw7/AAAA 698 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmZhkQrmwd/7JvHv+mZhmAAAAAAAAAAAAAAAAAsm4b 699 | /6ZkFc+mZBYQAAAAAAAAAAAAAAAAP48x/4Xggv8yzC3/Mcws/y/MKv8uzCj/LMwn/yvMJf8pzCT/J8wi 700 | /ybMIP8kzB//I8wd/yHMG/8gzBr/HswY/xzMFv924HP/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 701 | AAAAAAAAAAAAsW0bYKZkFv+mZRZgAAAAAAAAAAAAAAAAAAAAAKZjEs+mYxMQAAAAAAAAAAAAAAAAAAAA 702 | AD+PMf+F4IL/Mswt/zHMLP8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yfMIv8mzCD/JMwf/yPMHf8hzBv/IMwa 703 | /x7MGP8czBb/duBz/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZjE4CmYxKPAAAA 704 | AAAAAAAAAAAAAAAAAAAAAACmYg8QAAAAAAAAAAAAAAAAAAAAAAAAAAA/jzH/heCC/zLMLf8xzCz/L8wq 705 | /y7MKP8szCf/K8wl/ynMJP8nzCL/Jswg/yTMH/8jzB3/Icwb/yDMGv8ezBj/HMwW/3bgc/8ijw7/AAAA 706 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmYg9gpmIQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 707 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAP48x/4Xggv8yzC3/Mcws/y/MKv8uzCj/LMwn/yvMJf8pzCT/J8wi 708 | /ybMIP8kzB//I8wd/yHMG/8gzBr/HswY/xzMFv924HP/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 709 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 710 | AD+PMf+F4IL/Mswt/zHMLP8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yfMIv8mzCD/JMwf/yPMHf8hzBv/IMwa 711 | /x7MGP8czBb/duBz/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu4i8/buIr/27eJ 712 | /9u3if/btoj/27aH/9u2hv/btob/27aG/9u1hf/btYT/27SD/9u0g/8/jzH/heCC/zLMLf8xzCz/L8wq 713 | /y7MKP8szCf/K8wl/ynMJP8nzCL/Jswg/yTMH/8jzB3/Icwb/yDMGv8ezBj/HMwW/3bgc/8ijw7/AAAA 714 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuIv//enN///s0f//7ND//+vQ///r0P//68///+vO 715 | ///rzv//687//+rN///qzf//6sz/P48x/4Xggv8yzC3/Mcws/y/MKv8uzCj/LMwn/yvMJf8pzCT/J8wi 716 | /ybMIP8kzB//I8wd/yHMG/8gzBr/HswY/xzMFv924HP/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 717 | AAAAAAAAAAAA27iM///s0f//37P//9+y///fsf//3rD//96w///er///3q7//92t///drf//3Kz//9yr 718 | /z+PMf+F4IL/Mswt/zHMLP8vzCr/Lswo/yzMJ/8rzCX/Kcwk/yfMIv8mzCD/JMwf/yPMHf8hzBv/IMwa 719 | /x7MGP8czBb/duBz/yKPDv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu4jf//7NL//+Cz 720 | ///fs///37L//9+x///esP//3rD//96v///erv//3a3//92t///crP8/jzH/heCC/zLMLf8xzCz/L8wq 721 | /y7MKP8szCf/K8wl/ynMJP8nzCL/Jswg/yTMH/8jzB3/Icwb/yDMGv8ezBj/HMwW/3bgc/8ijw7/AAAA 722 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuI3//+zT///gtP//4LP//9+z///fsv//37H//96w 723 | ///esP//3q///96u///drf/n053/P48x/4Hbff+E4IH/g+CA/4Lgf/+C4H7/gOB9/4DgfP9/4Hz/feB6 724 | /33gef984Hn/e+B3/3rgdv954Hb/eOB0/3fgc/9x22z/Io8O/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 725 | AAAAAAAAAAAA27mO///s0///4LX//+C0///gs///37P//9+y///fsf//3rD//96w///er///3q7//92t 726 | /2OeSP89jy//O48t/zqPK/84jyn/N48n/zWPJf80jyP/Mo8h/zCPH/8vjx7/LY8c/yyPGv8qjxj/KY8W 727 | /yePFP8ljxL/JI8Q/yKPDs8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu5j///7dP//+C1 728 | ///gtf//4LT//+Cz///fs///37L//9+x///esP//3rD//96v///erv//3a3//92t///crP//3Kv//+rM 729 | /9u0g/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 730 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuY///+3U///htv//4LX//+C1///gtP//4LP//9+z 731 | ///fsv//37H//96w///esP//3q///96u///drf//3a3//9ys///qzf/btIP/AAAAAAAAAAAAAAAAAAAA 732 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 733 | AAAAAAAAAAAA27qQ///t1P//4bf//+G2///gtf//4LX//+C0///gs///37P//9+y///fsf//3rD//96w 734 | ///er///3q7//92t///drf//6s3/27WE/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 735 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu6kf//7tT//+G4 736 | ///ht///4bb//+C1///gtf//4LT//+Cz///fs///37L//9+x///esP//3rD//96v///erv//3a3//+vO 737 | /9u1hf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 738 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbupL//+7V///iuP//4bj//+G3///htv//4LX//+C1 739 | ///gtP//4LP//9+z///fsv//37H//96w///esP//3q///96u///rzv/btob/AAAAAAAAAAAAAAAAAAAA 740 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 741 | AAAAAAAAAAAA27uS///u1v//4rn//+K4///huP//4bf//+G2///gtf//4LX//+C0///gs///37P//9+y 742 | ///fsf//3rD//96w///er///687/27aG/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 743 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu7kv//7tb//+K6 744 | ///iuf//4rj//+G4///ht///4bb//+C1///gtf//4LT//+Cz///fs///37L//9+x///esP//3rD//+vP 745 | /9u2hv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 746 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbu5P//+7W///ju///4rr//+K5///iuP//4bj//+G3 747 | ///htv//4LX//+C1///gtP//4LP//9+z///fsv//37H//96w///r0P/btof/AAAAAAAAAAAAAAAAAAAA 748 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 749 | AAAAAAAAAAAA27yU///u1///47v//+O7///iuv//4rn//+K4///huP//4bf//+G2///gtf//4LX//+C0 750 | ///gs///37P//9+y///fsf//69D/27aI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 751 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu8lf//79f//+O8 752 | ///ju///47v//+K6///iuf//4rj//+G4///ht///4bb//+C1///gtf//4LT//+Cz///fs///37L//+zQ 753 | /9u3if8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 754 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbvJX//+/Y///kvf//47z//+O7///ju///4rr//+K5 755 | ///iuP//4bj//+G3///htv//4LX//+C1///gtP//4LP//9+z///s0f/bt4n/AAAAAAAAAAAAAAAAAAAA 756 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 757 | AAAAAAAAAAAA272W//3s1P//79j//+/X///u1///7tb//+7W///u1v//7tX//+7U///t1P//7dT//+3T 758 | ///s0///7NP//+zS///s0f/96c3/27iK/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 759 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu9l8/bvZb/27yV 760 | /9u8lf/bvJT/27uT/9u7kv/bu5L/27qS/9u6kf/bupD/27mP/9u5j//buY7/27iN/9u4jf/buIz/27iL 761 | /9u4i88AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 762 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 763 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 764 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 765 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 766 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 767 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 768 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 769 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 770 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 771 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 772 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////9+z 773 | ////////37H////////esP///////96v////gAAP687//++AAA8AAAD/54AADwAAAP+DgAAPAAAA/gGA 774 | AA8AAAD8AIAADwAAAPgAgAAPAAAA+AGAAA8AAADw44AADwAAAPHngAAPAAAA8++AAA8AAADz/4AADwAA 775 | AP//gAAPAAAA8AAAAA8AAADwAAAAD7uS//AAAAAP4rn/8AAAAA/iuP/wAAAAD+G3//AAAAAP4bb/8AAB 776 | ///gtP/wAAH//+Cz//AAAf//37L/8AAB///fsf/wAAH//96v//AAAf//687/8AAB//8AAADwAAH//wAA 777 | APAAAf//AAAA8AAB//8AAADwAAH//wAAAPAAAf//AAAA8AAB//8AAAD//////wAAAP//////AAAA//// 778 | //8AAAD//////wAAACgAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 779 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 780 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 781 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 782 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 783 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 784 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 785 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 786 | AAAAAAAAAAAAAAAAAD6PMO88jy7/Oo8r/ziPKf82jyf/NI8k/zKPIv8wjx//Lo8d/yyPG/8qjxj/KI8W 787 | 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 815 | AAAAAAAAAAAAAAAAAAAAAAAAAAAA27iN///s0v//4LT//9+z///fsv//37H//96w///er///3a7//92t 816 | //PYpf9KlDj/PI8u/zqPK/84jyn/No8n/zSPJP8yjyL/MI8f/y6PHf8sjxv/Ko8Y/yiPFv8mjxP/JI8R 817 | /yKPD+8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbuY7//+zT///gtP//4LT//9+z///fsv//37H//96w 818 | ///er///3a7//92t///drP//3Kv//+rM/9u0gv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 819 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu5j///7dP//+C1///gtP//4LT//9+z 820 | ///fsv//37H//96w///er///3a7//92t///drP//6s3/27SD/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 821 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27qQ///t1P//4bb//+C1 822 | ///gtP//4LT//9+z///fsv//37H//96w///er///3a7//92t///rzf/btYT/AAAAAAAAAAAAAAAAAAAA 823 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbupH//+7U 824 | ///ht///4bb//+C1///gtP//4LT//9+z///fsv//37H//96w///er///3a7//+vO/9u1hf8AAAAAAAAA 825 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 826 | ANu7kv//7tX//+K4///ht///4bb//+C1///gtP//4LT//9+z///fsv//37H//96w///er///687/27aG 827 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 828 | AAAAAAAAAAAA27uS///u1v//4rn//+K4///ht///4bb//+C1///gtP//4LT//9+z///fsv//37H//96w 829 | ///rz//btob/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 830 | AAAAAAAAAAAAAAAAAAAAAADbu5P//+7W///juv//4rn//+K4///ht///4bb//+C1///gtP//4LT//9+z 831 | ///fsv//37H//+vQ/9u2h/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 832 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu8lP//7tf//+O7///juv//4rn//+K4///ht///4bb//+C1 833 | ///gtP//4LT//9+z///fsv//7ND/27aI/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 834 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27yV///v1///47z//+O7///juv//4rn//+K4 835 | ///ht///4bb//+C1///gtP//4LT//9+z///s0f/bt4n/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 836 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADbvJb//+/Y///v1///7tf//+7W 837 | ///u1v//7tX//+7U///t1P//7dP//+zT///s0v//7NL//+zR/9u4iv8AAAAAAAAAAAAAAAAAAAAAAAAA 838 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu9l+/bvJb/27yV 839 | /9u8lP/bu5P/27uS/9u7kv/bupH/27qQ/9u5j//buY7/27iN/9u4jP/buIz/27iL7wAAAAAAAAAAAAAA 840 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 841 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 842 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 843 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 844 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 845 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 846 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 847 | AAAAAAAAAAAA//////////////////wAB//8AAf/vAAH/5wAB/wMAAf4BAAH8AwAB/CcAAfzvAAH9/wA 848 | B/f8AAfgAAAH4AAAB+AAAAfgAAAH4AA//+AAP//gAD//4AA//+AAP//gAD//4AA//+AAP//gAD//4AA/ 849 | /+AAP/////////////////8oAAAAGAAAADAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 850 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 851 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 852 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 853 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 854 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 855 | AAAAAAAAAAAAAAAAAKZvL58AAAAAAAAAAAAAAAA+jzD/O48t/zmPKv82jyb/M48j/zCPIP8ujxz/K48Z 856 | /yiPFv8ljxL/I48P/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApmwoMKZtKv+mbCifAAAA 857 | AAAAAAA+jzD/hOCB/4PggP+B4H7/f+B8/37gev984Hn/euB3/3ngdf934HT/I48P/wAAAAAAAAAAAAAA 858 | AAAAAAAAAAAAAAAAAKZrJTCmayXfv30u/9ONNf+/fSz/pmkhnwAAAAA+jzD/hOCB/zDMKv8tzCf/Kswl 859 | /yfMIv8lzB//Iswc/x/MGv934HT/I48P/wAAAAAAAAAAAAAAAAAAAAAAAAAApmkgMKpsIu/Hgiz/x4Er 860 | /8+HLv+/eif/pmccnwAAAAA+jzD/hOCB/zDMKv8tzCf/Kswl/yfMIv8lzB//Iswc/x/MGv934HT/I48P 861 | /wAAAAAAAAAAAAAAAAAAAAAAAAAApmcbr6ZmG/+mZhuPpmYbUKZlF/+mZRefAAAAAAAAAAA+jzD/hOCB 862 | /zDMKv8tzCf/Kswl/yfMIv8lzB//Iswc/x/MGv934HT/I48P/wAAAAAAAAAAAAAAAAAAAAAAAAAApmQW 863 | 76ZlFzAAAAAAAAAAAKZjEp8AAAAAAAAAAAAAAAA+jzD/hOCB/zDMKv8tzCf/Kswl/yfMIv8lzB//Iswc 864 | /x/MGv934HT/I48P/wAAAAAAAAAAAAAAAAAAAAAAAAAApmIQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 865 | AAAAAAA+jzD/hOCB/zDMKv8tzCf/Kswl/yfMIv8lzB//Iswc/x/MGv934HT/I48P/wAAAAAAAAAAAAAA 866 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+jzD/hOCB/zDMKv8tzCf/Kswl 867 | /yfMIv8lzB//Iswc/x/MGv934HT/I48P/wAAAAAAAAAAAAAAAAAAAADdu4//5MSb/+TEmv/kw5n/5MOY 868 | /+TDl//kwpb/5MGV/+TBlP8+jzD/hOCB/zDMKv8tzCf/Kswl/yfMIv8lzB//Iswc/x/MGv934HT/I48P 869 | /wAAAAAAAAAAAAAAAAAAAADkxZ7//+nK///lwf//5cD//+W////kvv//5L3//+O8///ju/8+jzD/hOCB 870 | /4PggP+B4H7/f+B8/37gev984Hn/euB3/3ngdf934HT/I48P/wAAAAAAAAAAAAAAAAAAAADkxZ///+bD 871 | ///fs///37H//96w///er///3a7//92s/+fSnP8+jzD/O48t/zmPKv82jyb/M48j/zCPIP8ujxz/K48Z 872 | /yiPFv8ljxL/I48P/xjMEiAAAAAAAAAAAAAAAADkxqD//+bE///gtP//37P//9+x///esP//3q///92u 873 | ///drP//47z/5MGV/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 874 | AAAAAADkxqD//+fF///gtf//4LT//9+z///fsf//3rD//96v///drv//5L3/5MKW/wAAAAAAAAAAAAAA 875 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkx6L//+fG///htv//4LX//+C0 876 | ///fs///37H//96w///er///5L7/5MOX/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 877 | AAAAAAAAAAAAAAAAAAAAAADkyKP//+jH///huP//4bb//+C1///gtP//37P//9+x///esP//5b//5MOY 878 | /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkyKT//+jI 879 | ///iuf//4bj//+G2///gtf//4LT//9+z///fsf//5cD/5MOZ/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 880 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkyaX//+nJ///juv//4rn//+G4///htv//4LX//+C0 881 | ///fs///5cH/5MSa/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 882 | AAAAAADkyab//+zQ///pyf//6Mj//+jH///nxv//58X//+bE///mw///6cr/5MSb/wAAAAAAAAAAAAAA 883 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdwJv/5Mmm/+TJpf/kyKT/5Mij 884 | /+THov/kxqD/5Mag/+TFn//kxZ7/3buP///fsiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 885 | 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 937 | /4B/s/+Af7H/gH+w/4B/zv+AP4X///8AAA== 938 | 939 | 940 | -------------------------------------------------------------------------------- /Iconizer/IconExtractor/IconExtractor.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * IconExtractor/IconUtil for .NET 3 | * Copyright (C) 2014 Tsuda Kageyu. All rights reserved. 4 | * 5 | * Redistribution and use in source and binary forms, with or without 6 | * modification, are permitted provided that the following conditions 7 | * are met: 8 | * 9 | * 1. Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * 2. Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * 15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 18 | * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 19 | * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 22 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 23 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 24 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | */ 27 | 28 | using System; 29 | using System.Collections.Generic; 30 | using System.ComponentModel; 31 | using System.Drawing; 32 | using System.IO; 33 | using System.Runtime.InteropServices; 34 | using System.Text; 35 | 36 | namespace TsudaKageyu 37 | { 38 | public class IconExtractor 39 | { 40 | //////////////////////////////////////////////////////////////////////// 41 | // Constants 42 | 43 | // Flags for LoadLibraryEx(). 44 | 45 | private const uint LOAD_LIBRARY_AS_DATAFILE = 0x00000002; 46 | 47 | // Resource types for EnumResourceNames(). 48 | 49 | private readonly static IntPtr RT_ICON = (IntPtr)3; 50 | private readonly static IntPtr RT_GROUP_ICON = (IntPtr)14; 51 | 52 | private const int MAX_PATH = 260; 53 | 54 | //////////////////////////////////////////////////////////////////////// 55 | // Fields 56 | 57 | private byte[][] iconData = null; // Binary data of each icon. 58 | 59 | //////////////////////////////////////////////////////////////////////// 60 | // Public properties 61 | 62 | /// 63 | /// Gets the full path of the associated file. 64 | /// 65 | public string FileName 66 | { 67 | get; 68 | private set; 69 | } 70 | 71 | /// 72 | /// Gets the count of the icons in the associated file. 73 | /// 74 | public int Count 75 | { 76 | get { return iconData.Length; } 77 | } 78 | 79 | /// 80 | /// Initializes a new instance of the IconExtractor class from the specified file name. 81 | /// 82 | /// The file to extract icons from. 83 | public IconExtractor(string fileName) 84 | { 85 | Initialize(fileName); 86 | } 87 | 88 | /// 89 | /// Extracts an icon from the file. 90 | /// 91 | /// Zero based index of the icon to be extracted. 92 | /// A System.Drawing.Icon object. 93 | /// Always returns new copy of the Icon. It should be disposed by the user. 94 | public Icon GetIcon(int index) 95 | { 96 | if (index < 0 || Count <= index) 97 | throw new ArgumentOutOfRangeException("index"); 98 | 99 | // Create an Icon from the .ico file in memory. 100 | 101 | using (var ms = new MemoryStream(iconData[index])) 102 | { 103 | return new Icon(ms); 104 | } 105 | } 106 | 107 | /// 108 | /// Extracts all the icons from the file. 109 | /// 110 | /// An array of System.Drawing.Icon objects. 111 | /// Always returns new copies of the Icons. They should be disposed by the user. 112 | public Icon[] GetAllIcons() 113 | { 114 | var icons = new List(); 115 | for (int i = 0; i < Count; ++i) 116 | icons.Add(GetIcon(i)); 117 | 118 | return icons.ToArray(); 119 | } 120 | 121 | /// 122 | /// Save an icon to the specified output Stream. 123 | /// 124 | /// Zero based index of the icon to be saved. 125 | /// The Stream to save to. 126 | public void Save(int index, Stream outputStream) 127 | { 128 | if (index < 0 || Count <= index) 129 | throw new ArgumentOutOfRangeException("index"); 130 | 131 | if (outputStream == null) 132 | throw new ArgumentNullException("outputStream"); 133 | 134 | var data = iconData[index]; 135 | outputStream.Write(data, 0, data.Length); 136 | } 137 | 138 | private void Initialize(string fileName) 139 | { 140 | if (fileName == null) 141 | throw new ArgumentNullException("fileName"); 142 | 143 | IntPtr hModule = IntPtr.Zero; 144 | try 145 | { 146 | hModule = NativeMethods.LoadLibraryEx(fileName, IntPtr.Zero, LOAD_LIBRARY_AS_DATAFILE); 147 | if (hModule == IntPtr.Zero) 148 | throw new Win32Exception(); 149 | 150 | FileName = GetFileName(hModule); 151 | 152 | // Enumerate the icon resource and build .ico files in memory. 153 | 154 | var tmpData = new List(); 155 | 156 | ENUMRESNAMEPROC callback = (h, t, name, l) => 157 | { 158 | // Refer to the following URL for the data structures used here: 159 | // http://msdn.microsoft.com/en-us/library/ms997538.aspx 160 | 161 | // RT_GROUP_ICON resource consists of a GRPICONDIR and GRPICONDIRENTRY's. 162 | 163 | var dir = GetDataFromResource(hModule, RT_GROUP_ICON, name); 164 | 165 | // Calculate the size of an entire .icon file. 166 | 167 | int count = BitConverter.ToUInt16(dir, 4); // GRPICONDIR.idCount 168 | int len = 6 + 16 * count; // sizeof(ICONDIR) + sizeof(ICONDIRENTRY) * count 169 | for (int i = 0; i < count; ++i) 170 | len += BitConverter.ToInt32(dir, 6 + 14 * i + 8); // GRPICONDIRENTRY.dwBytesInRes 171 | 172 | using (var dst = new BinaryWriter(new MemoryStream(len))) 173 | { 174 | // Copy GRPICONDIR to ICONDIR. 175 | 176 | dst.Write(dir, 0, 6); 177 | 178 | int picOffset = 6 + 16 * count; // sizeof(ICONDIR) + sizeof(ICONDIRENTRY) * count 179 | 180 | for (int i = 0; i < count; ++i) 181 | { 182 | // Load the picture. 183 | 184 | ushort id = BitConverter.ToUInt16(dir, 6 + 14 * i + 12); // GRPICONDIRENTRY.nID 185 | var pic = GetDataFromResource(hModule, RT_ICON, (IntPtr)id); 186 | 187 | // Copy GRPICONDIRENTRY to ICONDIRENTRY. 188 | 189 | dst.Seek(6 + 16 * i, SeekOrigin.Begin); 190 | 191 | dst.Write(dir, 6 + 14 * i, 8); // First 8bytes are identical. 192 | dst.Write(pic.Length); // ICONDIRENTRY.dwBytesInRes 193 | dst.Write(picOffset); // ICONDIRENTRY.dwImageOffset 194 | 195 | // Copy a picture. 196 | 197 | dst.Seek(picOffset, SeekOrigin.Begin); 198 | dst.Write(pic, 0, pic.Length); 199 | 200 | picOffset += pic.Length; 201 | } 202 | 203 | tmpData.Add(((MemoryStream)dst.BaseStream).ToArray()); 204 | } 205 | 206 | return true; 207 | }; 208 | NativeMethods.EnumResourceNames(hModule, RT_GROUP_ICON, callback, IntPtr.Zero); 209 | 210 | iconData = tmpData.ToArray(); 211 | } 212 | finally 213 | { 214 | if (hModule != IntPtr.Zero) 215 | NativeMethods.FreeLibrary(hModule); 216 | } 217 | } 218 | 219 | private byte[] GetDataFromResource(IntPtr hModule, IntPtr type, IntPtr name) 220 | { 221 | // Load the binary data from the specified resource. 222 | 223 | IntPtr hResInfo = NativeMethods.FindResource(hModule, name, type); 224 | if (hResInfo == IntPtr.Zero) 225 | throw new Win32Exception(); 226 | 227 | IntPtr hResData = NativeMethods.LoadResource(hModule, hResInfo); 228 | if (hResData == IntPtr.Zero) 229 | throw new Win32Exception(); 230 | 231 | IntPtr pResData = NativeMethods.LockResource(hResData); 232 | if (pResData == IntPtr.Zero) 233 | throw new Win32Exception(); 234 | 235 | uint size = NativeMethods.SizeofResource(hModule, hResInfo); 236 | if (size == 0) 237 | throw new Win32Exception(); 238 | 239 | byte[] buf = new byte[size]; 240 | Marshal.Copy(pResData, buf, 0, buf.Length); 241 | 242 | return buf; 243 | } 244 | 245 | private string GetFileName(IntPtr hModule) 246 | { 247 | // Alternative to GetModuleFileName() for the module loaded with 248 | // LOAD_LIBRARY_AS_DATAFILE option. 249 | 250 | // Get the file name in the format like: 251 | // "\\Device\\HarddiskVolume2\\Windows\\System32\\shell32.dll" 252 | 253 | string fileName; 254 | { 255 | var buf = new StringBuilder(MAX_PATH); 256 | int len = NativeMethods.GetMappedFileName( 257 | NativeMethods.GetCurrentProcess(), hModule, buf, buf.Capacity); 258 | if (len == 0) 259 | throw new Win32Exception(); 260 | 261 | fileName = buf.ToString(); 262 | } 263 | 264 | // Convert the device name to drive name like: 265 | // "C:\\Windows\\System32\\shell32.dll" 266 | 267 | for (char c = 'A'; c <= 'Z'; ++c) 268 | { 269 | var drive = c + ":"; 270 | var buf = new StringBuilder(MAX_PATH); 271 | int len = NativeMethods.QueryDosDevice(drive, buf, buf.Capacity); 272 | if (len == 0) 273 | continue; 274 | 275 | var devPath = buf.ToString(); 276 | if (fileName.StartsWith(devPath)) 277 | return (drive + fileName.Substring(devPath.Length)); 278 | } 279 | 280 | return fileName; 281 | } 282 | } 283 | } 284 | -------------------------------------------------------------------------------- /Iconizer/IconExtractor/IconUtil.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * IconExtractor/IconUtil for .NET 3 | * Copyright (C) 2014 Tsuda Kageyu. All rights reserved. 4 | * 5 | * Redistribution and use in source and binary forms, with or without 6 | * modification, are permitted provided that the following conditions 7 | * are met: 8 | * 9 | * 1. Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * 2. Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * 15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 18 | * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 19 | * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 22 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 23 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 24 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | */ 27 | 28 | using System; 29 | using System.Collections.Generic; 30 | using System.Drawing; 31 | using System.IO; 32 | using System.Reflection; 33 | using System.Reflection.Emit; 34 | 35 | namespace TsudaKageyu 36 | { 37 | public static class IconUtil 38 | { 39 | private delegate byte[] GetIconDataDelegate(Icon icon); 40 | 41 | static GetIconDataDelegate getIconData; 42 | 43 | static IconUtil() 44 | { 45 | // Create a dynamic method to access Icon.iconData private field. 46 | 47 | var dm = new DynamicMethod( 48 | "GetIconData", typeof(byte[]), new Type[] { typeof(Icon) }, typeof(Icon)); 49 | var fi = typeof(Icon).GetField( 50 | "iconData", BindingFlags.Instance | BindingFlags.NonPublic); 51 | var gen = dm.GetILGenerator(); 52 | gen.Emit(OpCodes.Ldarg_0); 53 | gen.Emit(OpCodes.Ldfld, fi); 54 | gen.Emit(OpCodes.Ret); 55 | 56 | getIconData = (GetIconDataDelegate)dm.CreateDelegate(typeof(GetIconDataDelegate)); 57 | } 58 | 59 | /// 60 | /// Split an Icon consists of multiple icons into an array of Icon each 61 | /// consists of single icons. 62 | /// 63 | /// A System.Drawing.Icon to be split. 64 | /// An array of System.Drawing.Icon. 65 | public static Icon[] Split(Icon icon) 66 | { 67 | if (icon == null) 68 | throw new ArgumentNullException("icon"); 69 | 70 | // Get an .ico file in memory, then split it into separate icons. 71 | 72 | var src = GetIconData(icon); 73 | 74 | var splitIcons = new List(); 75 | { 76 | int count = BitConverter.ToUInt16(src, 4); 77 | 78 | for (int i = 0; i < count; i++) 79 | { 80 | int length = BitConverter.ToInt32(src, 6 + 16 * i + 8); // ICONDIRENTRY.dwBytesInRes 81 | int offset = BitConverter.ToInt32(src, 6 + 16 * i + 12); // ICONDIRENTRY.dwImageOffset 82 | 83 | using (var dst = new BinaryWriter(new MemoryStream(6 + 16 + length))) 84 | { 85 | // Copy ICONDIR and set idCount to 1. 86 | 87 | dst.Write(src, 0, 4); 88 | dst.Write((short)1); 89 | 90 | // Copy ICONDIRENTRY and set dwImageOffset to 22. 91 | 92 | dst.Write(src, 6 + 16 * i, 12); // ICONDIRENTRY except dwImageOffset 93 | dst.Write(22); // ICONDIRENTRY.dwImageOffset 94 | 95 | // Copy a picture. 96 | 97 | dst.Write(src, offset, length); 98 | 99 | // Create an icon from the in-memory file. 100 | 101 | dst.BaseStream.Seek(0, SeekOrigin.Begin); 102 | splitIcons.Add(new Icon(dst.BaseStream)); 103 | } 104 | } 105 | } 106 | 107 | return splitIcons.ToArray(); 108 | } 109 | 110 | /// 111 | /// Converts an Icon to a GDI+ Bitmap preserving the transparent area. 112 | /// 113 | /// An System.Drawing.Icon to be converted. 114 | /// A System.Drawing.Bitmap Object. 115 | public static Bitmap ToBitmap(Icon icon) 116 | { 117 | if (icon == null) 118 | throw new ArgumentNullException("icon"); 119 | 120 | // Quick workaround: Create an .ico file in memory, then load it as a Bitmap. 121 | 122 | using (var ms = new MemoryStream()) 123 | { 124 | icon.Save(ms); 125 | using (var bmp = (Bitmap)Image.FromStream(ms)) 126 | { 127 | return new Bitmap(bmp); 128 | } 129 | } 130 | } 131 | 132 | /// 133 | /// Gets the bit depth of an Icon. 134 | /// 135 | /// An System.Drawing.Icon object. 136 | /// Bit depth of the icon. 137 | /// 138 | /// This method takes into account the PNG header. 139 | /// If the icon has multiple variations, this method returns the bit 140 | /// depth of the first variation. 141 | /// 142 | public static int GetBitCount(Icon icon) 143 | { 144 | if (icon == null) 145 | throw new ArgumentNullException("icon"); 146 | 147 | // Get an .ico file in memory, then read the header. 148 | 149 | var data = GetIconData(icon); 150 | if (data.Length >= 51 151 | && data[22] == 0x89 && data[23] == 0x50 && data[24] == 0x4e && data[25] == 0x47 152 | && data[26] == 0x0d && data[27] == 0x0a && data[28] == 0x1a && data[29] == 0x0a 153 | && data[30] == 0x00 && data[31] == 0x00 && data[32] == 0x00 && data[33] == 0x0d 154 | && data[34] == 0x49 && data[35] == 0x48 && data[36] == 0x44 && data[37] == 0x52) 155 | { 156 | // The picture is PNG. Read IHDR chunk. 157 | 158 | switch (data[47]) 159 | { 160 | case 0: 161 | return data[46]; 162 | case 2: 163 | return data[46] * 3; 164 | case 3: 165 | return data[46]; 166 | case 4: 167 | return data[46] * 2; 168 | case 6: 169 | return data[46] * 4; 170 | default: 171 | // NOP 172 | break; 173 | } 174 | } 175 | else if (data.Length >= 22) 176 | { 177 | // The picture is not PNG. Read ICONDIRENTRY structure. 178 | 179 | return BitConverter.ToUInt16(data, 12); 180 | } 181 | 182 | throw new ArgumentException("The icon is corrupt. Couldn't read the header.", "icon"); 183 | } 184 | 185 | private static byte[] GetIconData(Icon icon) 186 | { 187 | var data = getIconData(icon); 188 | if (data != null) 189 | { 190 | return data; 191 | } 192 | else 193 | { 194 | using (var ms = new MemoryStream()) 195 | { 196 | icon.Save(ms); 197 | return ms.ToArray(); 198 | } 199 | } 200 | } 201 | } 202 | } 203 | -------------------------------------------------------------------------------- /Iconizer/IconExtractor/NativeMethods.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * IconExtractor/IconUtil for .NET 3 | * Copyright (C) 2014 Tsuda Kageyu. All rights reserved. 4 | * 5 | * Redistribution and use in source and binary forms, with or without 6 | * modification, are permitted provided that the following conditions 7 | * are met: 8 | * 9 | * 1. Redistributions of source code must retain the above copyright 10 | * notice, this list of conditions and the following disclaimer. 11 | * 2. Redistributions in binary form must reproduce the above copyright 12 | * notice, this list of conditions and the following disclaimer in the 13 | * documentation and/or other materials provided with the distribution. 14 | * 15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 18 | * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 19 | * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 22 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 23 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 24 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | */ 27 | 28 | using System; 29 | using System.Runtime.InteropServices; 30 | using System.Security; 31 | using System.Text; 32 | 33 | namespace TsudaKageyu 34 | { 35 | internal static class NativeMethods 36 | { 37 | [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] 38 | [SuppressUnmanagedCodeSecurity] 39 | public static extern IntPtr LoadLibraryEx(string lpFileName, IntPtr hFile, uint dwFlags); 40 | 41 | [DllImport("kernel32.dll", SetLastError = true)] 42 | [SuppressUnmanagedCodeSecurity] 43 | public static extern bool FreeLibrary(IntPtr hModule); 44 | 45 | [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] 46 | [SuppressUnmanagedCodeSecurity] 47 | public static extern bool EnumResourceNames(IntPtr hModule, IntPtr lpszType, ENUMRESNAMEPROC lpEnumFunc, IntPtr lParam); 48 | 49 | [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] 50 | [SuppressUnmanagedCodeSecurity] 51 | public static extern IntPtr FindResource(IntPtr hModule, IntPtr lpName, IntPtr lpType); 52 | 53 | [DllImport("kernel32.dll", SetLastError = true)] 54 | [SuppressUnmanagedCodeSecurity] 55 | public static extern IntPtr LoadResource(IntPtr hModule, IntPtr hResInfo); 56 | 57 | [DllImport("kernel32.dll", SetLastError = true)] 58 | [SuppressUnmanagedCodeSecurity] 59 | public static extern IntPtr LockResource(IntPtr hResData); 60 | 61 | [DllImport("kernel32.dll", SetLastError = true)] 62 | [SuppressUnmanagedCodeSecurity] 63 | public static extern uint SizeofResource(IntPtr hModule, IntPtr hResInfo); 64 | 65 | [DllImport("kernel32.dll", SetLastError = true)] 66 | [SuppressUnmanagedCodeSecurity] 67 | public static extern IntPtr GetCurrentProcess(); 68 | 69 | [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] 70 | [SuppressUnmanagedCodeSecurity] 71 | public static extern int QueryDosDevice(string lpDeviceName, StringBuilder lpTargetPath, int ucchMax); 72 | 73 | [DllImport("psapi.dll", SetLastError = true, CharSet = CharSet.Unicode)] 74 | [SuppressUnmanagedCodeSecurity] 75 | public static extern int GetMappedFileName(IntPtr hProcess, IntPtr lpv, StringBuilder lpFilename, int nSize); 76 | } 77 | 78 | [UnmanagedFunctionPointer(CallingConvention.Winapi, SetLastError = true, CharSet = CharSet.Unicode)] 79 | [SuppressUnmanagedCodeSecurity] 80 | internal delegate bool ENUMRESNAMEPROC(IntPtr hModule, IntPtr lpszType, IntPtr lpszName, IntPtr lParam); 81 | } 82 | -------------------------------------------------------------------------------- /Iconizer/Iconizer.cs: -------------------------------------------------------------------------------- 1 | // https://stackoverflow.com/questions/1922040/resize-an-image-c-sharp 2 | // https://stackoverflow.com/questions/3213999/how-to-create-an-icon-file-that-contains-multiple-sizes-images-in-c-sharp 3 | 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Diagnostics; 7 | using System.Drawing; 8 | using System.Drawing.Drawing2D; 9 | using System.Drawing.Imaging; 10 | using System.IO; 11 | using System.Linq; 12 | using System.Runtime.InteropServices; 13 | using System.Windows.Forms; 14 | 15 | /// 16 | /// Method utilities for creating icons, checking path, resize, etc. 17 | /// 18 | public class Utility 19 | { 20 | 21 | /// 22 | /// Resize the image to the specified width and height. 23 | /// 24 | /// The image to resize. 25 | /// The width to resize to. 26 | /// The height to resize to. 27 | /// The resized image. 28 | public static Bitmap ResizeImage(Image image, Size size, bool fit) 29 | { 30 | var width = size.Width; 31 | var height = size.Height; 32 | var destRect = new Rectangle(0, 0, width, height); 33 | var destImage = new Bitmap(width, height, PixelFormat.Format32bppArgb); 34 | 35 | if (fit) 36 | { 37 | if (image.Width > image.Height) 38 | { 39 | destRect.Height = (int)(image.Height / (float)image.Width * height); 40 | destRect.Y = (height - destRect.Height) / 2; 41 | } 42 | else 43 | { 44 | destRect.Width = (int)(image.Width / (float)image.Height * width); 45 | destRect.X = (width - destRect.Width) / 2; 46 | } 47 | } 48 | 49 | destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); 50 | 51 | using (var graphics = Graphics.FromImage(destImage)) 52 | { 53 | graphics.CompositingMode = CompositingMode.SourceCopy; 54 | graphics.CompositingQuality = CompositingQuality.HighQuality; 55 | graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; 56 | graphics.SmoothingMode = SmoothingMode.HighQuality; 57 | graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; 58 | 59 | using (var wrapMode = new ImageAttributes()) 60 | { 61 | wrapMode.SetWrapMode(WrapMode.TileFlipXY); 62 | graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode); 63 | } 64 | } 65 | 66 | return destImage; 67 | } 68 | 69 | 70 | 71 | // --------------------------------------------------------------------------------------- 72 | // --------------------------------------------------------------------------------------- 73 | 74 | /// 75 | /// Represents the max allowed width of an icon. 76 | /// 77 | private const int MaxIconWidth = 256; 78 | 79 | /// 80 | /// Represents the max allowed height of an icon. 81 | /// 82 | private const int MaxIconHeight = 256; 83 | 84 | private const ushort HeaderReserved = 0; 85 | private const ushort HeaderIconType = 1; 86 | private const byte HeaderLength = 6; 87 | 88 | private const byte EntryReserved = 0; 89 | private const byte EntryLength = 16; 90 | 91 | private const byte PngColorsInPalette = 0; 92 | private const ushort PngColorPlanes = 1; 93 | 94 | /// 95 | /// Saves the specified objects as a single 96 | /// icon into the output stream. 97 | /// 98 | /// The bitmaps to save as an icon. 99 | /// The output stream. 100 | /// 101 | /// The expected input for the parameter are 102 | /// portable network graphic files that have a 103 | /// of and where the 104 | /// width is less than or equal to and the 105 | /// height is less than or equal to . 106 | /// 107 | /// 108 | /// Occurs if any of the input images do 109 | /// not follow the required image format. See remarks for details. 110 | /// 111 | /// 112 | /// Occurs if any of the arguments are null. 113 | /// 114 | public static void SavePngsAsIcon(IEnumerable images, Stream stream) 115 | { 116 | if (images == null) 117 | throw new ArgumentNullException("images"); 118 | if (stream == null) 119 | throw new ArgumentNullException("stream"); 120 | 121 | Bitmap[] orderedImages = images.Where(i => i != null) 122 | .OrderBy(i => i.Width) 123 | .ThenBy(i => i.Height) 124 | .ToArray(); 125 | 126 | using (var writer = new BinaryWriter(stream)) 127 | { 128 | 129 | // write the header 130 | writer.Write(HeaderReserved); 131 | writer.Write(HeaderIconType); 132 | writer.Write((ushort)orderedImages.Length); 133 | 134 | // save the image buffers and offsets 135 | Dictionary buffers = new Dictionary(); 136 | 137 | // tracks the length of the buffers as the iterations occur 138 | // and adds that to the offset of the entries 139 | uint lengthSum = 0; 140 | uint baseOffset = (uint)(HeaderLength + 141 | EntryLength * orderedImages.Length); 142 | 143 | for (int i = 0; i < orderedImages.Length; i++) 144 | { 145 | Bitmap image = orderedImages[i]; 146 | 147 | // creates a byte array from an image 148 | byte[] buffer = CreateImageBuffer(image); 149 | 150 | // calculates what the offset of this image will be 151 | // in the stream 152 | uint offset = (baseOffset + lengthSum); 153 | 154 | // writes the image entry 155 | writer.Write(GetIconWidth(image)); 156 | writer.Write(GetIconHeight(image)); 157 | writer.Write(PngColorsInPalette); 158 | writer.Write(EntryReserved); 159 | writer.Write(PngColorPlanes); 160 | writer.Write((ushort)Image.GetPixelFormatSize(image.PixelFormat)); 161 | writer.Write((uint)buffer.Length); 162 | writer.Write(offset); 163 | 164 | lengthSum += (uint)buffer.Length; 165 | 166 | // adds the buffer to be written at the offset 167 | buffers.Add(offset, buffer); 168 | } 169 | 170 | // writes the buffers for each image 171 | foreach (var kvp in buffers) 172 | { 173 | 174 | // seeks to the specified offset required for the image buffer 175 | writer.BaseStream.Seek(kvp.Key, SeekOrigin.Begin); 176 | 177 | // writes the buffer 178 | writer.Write(kvp.Value); 179 | } 180 | } 181 | 182 | } 183 | 184 | private static byte GetIconHeight(Bitmap image) 185 | { 186 | if (image.Height == MaxIconHeight) 187 | return 0; 188 | 189 | return (byte)image.Height; 190 | } 191 | 192 | private static byte GetIconWidth(Bitmap image) 193 | { 194 | if (image.Width == MaxIconWidth) 195 | return 0; 196 | 197 | return (byte)image.Width; 198 | } 199 | 200 | private static byte[] CreateImageBuffer(Bitmap image) 201 | { 202 | using (var stream = new MemoryStream()) 203 | { 204 | image.Save(stream, ImageFormat.Png); 205 | 206 | return stream.ToArray(); 207 | } 208 | } 209 | 210 | // --------------------------------------------------------------------------------------- 211 | // --------------------------------------------------------------------------------------- 212 | 213 | private static string numberPattern = " ({0})"; 214 | 215 | public static string NextAvailableFilename(string path) 216 | { 217 | // Short-cut if already available 218 | if (!File.Exists(path)) 219 | return path; 220 | 221 | // If path has extension then insert the number pattern just before the extension and return next filename 222 | if (Path.HasExtension(path)) 223 | return GetNextFilename(path.Insert(path.LastIndexOf(Path.GetExtension(path)), numberPattern)); 224 | 225 | // Otherwise just append the pattern to the path and return next filename 226 | return GetNextFilename(path + numberPattern); 227 | } 228 | 229 | private static string GetNextFilename(string pattern) 230 | { 231 | string tmp = string.Format(pattern, 1); 232 | if (tmp == pattern) 233 | throw new ArgumentException("The pattern must include an index place-holder", "pattern"); 234 | 235 | if (!File.Exists(tmp)) 236 | return tmp; // short-circuit if no matches 237 | 238 | int min = 1, max = 2; // min is inclusive, max is exclusive/untested 239 | 240 | while (File.Exists(string.Format(pattern, max))) 241 | { 242 | min = max; 243 | max *= 2; 244 | } 245 | 246 | while (max != min + 1) 247 | { 248 | int pivot = (max + min) / 2; 249 | if (File.Exists(string.Format(pattern, pivot))) 250 | min = pivot; 251 | else 252 | max = pivot; 253 | } 254 | 255 | return string.Format(pattern, max); 256 | } 257 | 258 | // ------------------------------------------------------------------------------------------- 259 | 260 | public static Icon GetNicestIcon (Icon[] icons) 261 | { 262 | var nicest = icons[0]; 263 | var nicestDepth = TsudaKageyu.IconUtil.GetBitCount(nicest); 264 | for (int i = 1; i < icons.Length; i++) 265 | { 266 | var icon = icons[i]; 267 | var bit = TsudaKageyu.IconUtil.GetBitCount(icon); 268 | if (!(icon.Width < nicest.Width && icon.Height < nicest.Height) && bit >= nicestDepth) 269 | { 270 | nicest = icon; 271 | nicestDepth = bit; 272 | } 273 | } 274 | return nicest; 275 | } 276 | 277 | [DllImport("kernel32.dll", SetLastError =true)] 278 | public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr intptr); 279 | 280 | [DllImport("kernel32.dll", SetLastError = true)] 281 | public static extern bool Wow64RevertWow64FsRedirection(ref IntPtr intptr); 282 | 283 | public static void InvalidateExplorerCache () 284 | { 285 | try 286 | { 287 | var intptr = new IntPtr(); 288 | // Calling 32 bit to external 64 bit is dangerous.... 289 | if (Wow64DisableWow64FsRedirection(ref intptr)) 290 | { 291 | Process.Start("ie4uinit", "-show"); 292 | Wow64RevertWow64FsRedirection(ref intptr); 293 | } else 294 | Process.Start("ie4uinit", "-show"); 295 | } 296 | catch (Exception) 297 | { 298 | 299 | } 300 | } 301 | 302 | } 303 | -------------------------------------------------------------------------------- /Iconizer/Iconizer.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {664F93DD-773F-410E-95DB-4C35DC3B9616} 8 | WinExe 9 | Properties 10 | Iconizer 11 | Iconizer 12 | v4.5.2 13 | 512 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 | true 37 | 38 | 39 | icon.ico 40 | 41 | 42 | true 43 | bin\x64\Debug\ 44 | DEBUG;TRACE 45 | full 46 | x64 47 | prompt 48 | MinimumRecommendedRules.ruleset 49 | true 50 | 51 | 52 | bin\x64\Release\ 53 | TRACE 54 | true 55 | pdbonly 56 | x64 57 | prompt 58 | MinimumRecommendedRules.ruleset 59 | true 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | Form 69 | 70 | 71 | Form1.cs 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | Form1.cs 82 | 83 | 84 | ResXFileCodeGenerator 85 | Resources.Designer.cs 86 | Designer 87 | 88 | 89 | True 90 | Resources.resx 91 | 92 | 93 | SettingsSingleFileGenerator 94 | Settings.Designer.cs 95 | 96 | 97 | True 98 | Settings.settings 99 | True 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 116 | -------------------------------------------------------------------------------- /Iconizer/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using System.Windows.Forms; 7 | 8 | namespace Iconizer 9 | { 10 | static class Program 11 | { 12 | /// 13 | /// The main entry point for the application. 14 | /// 15 | [STAThread] 16 | static void Main() 17 | { 18 | Application.EnableVisualStyles(); 19 | Application.SetCompatibleTextRenderingDefault(false); 20 | Application.Run(new Form1()); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Iconizer/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("Iconizer")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Iconizer")] 13 | [assembly: AssemblyCopyright("Copyright © 2017")] 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("664f93dd-773f-410e-95db-4c35dc3b9616")] 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.1.*")] 35 | [assembly: AssemblyFileVersion("1.1.0.0")] 36 | -------------------------------------------------------------------------------- /Iconizer/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 Iconizer.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("Iconizer.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 | -------------------------------------------------------------------------------- /Iconizer/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 | -------------------------------------------------------------------------------- /Iconizer/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 Iconizer.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 | -------------------------------------------------------------------------------- /Iconizer/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Iconizer/UnitData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Drawing; 4 | using System.IO; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | using System.Windows.Forms; 9 | 10 | namespace Iconizer 11 | { 12 | /// 13 | /// Each options data 14 | /// 15 | public class OptionsData 16 | { 17 | public List sizes = new List(); 18 | public bool keepAspect; 19 | public bool keepCrisp; 20 | 21 | public static OptionsData FromCheckBoxes(CheckedListBox box) 22 | { 23 | var data = new OptionsData(); 24 | if (box.GetItemChecked(0)) 25 | data.sizes.Add(new Size(8, 8)); 26 | if (box.GetItemChecked(1)) 27 | data.sizes.Add(new Size(16, 16)); 28 | if (box.GetItemChecked(2)) 29 | data.sizes.Add(new Size(32, 32)); 30 | if (box.GetItemChecked(3)) 31 | data.sizes.Add(new Size(48, 48)); 32 | if (box.GetItemChecked(4)) 33 | data.sizes.Add(new Size(64, 64)); 34 | if (box.GetItemChecked(5)) 35 | data.sizes.Add(new Size(128, 128)); 36 | if (box.GetItemChecked(6)) 37 | data.sizes.Add(new Size(256, 256)); 38 | if (box.GetItemChecked(7)) 39 | data.keepCrisp = true; 40 | if (box.GetItemChecked(8)) 41 | data.keepAspect = true; 42 | return data; 43 | } 44 | } 45 | 46 | /// 47 | /// Stored individual bitmap data 48 | /// 49 | public class BitmapData 50 | { 51 | public Image bitmap; 52 | public string path; 53 | public string name; 54 | 55 | public int iteration; 56 | 57 | public override int GetHashCode() 58 | { 59 | return path.GetHashCode() ^ iteration; 60 | } 61 | 62 | public override bool Equals(object obj) 63 | { 64 | return obj is BitmapData && path.GetHashCode() == ((BitmapData)obj).GetHashCode(); 65 | } 66 | 67 | public string GetIcoPath() 68 | { 69 | if (iteration == 0) 70 | return Path.ChangeExtension(path, ".ico"); 71 | else 72 | return Path.ChangeExtension(path, null) + iteration.ToString() + ".ico"; 73 | } 74 | 75 | public string GetIcoPath(string directory) 76 | { 77 | return Path.Combine(directory, Path.GetFileName(GetIcoPath())); 78 | } 79 | 80 | public string GetPngPath() 81 | { 82 | if (iteration == 0) 83 | return Path.ChangeExtension(path, ".png"); 84 | else 85 | return Path.ChangeExtension(path, null) + iteration.ToString() + ".png"; 86 | } 87 | 88 | public string GetPngPath(string directory) 89 | { 90 | return Path.Combine(directory, Path.GetFileName(GetPngPath())); 91 | } 92 | 93 | } 94 | 95 | 96 | } 97 | -------------------------------------------------------------------------------- /Iconizer/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/willnode/Iconizer/d10d75b8bd2293d7ae5854921406e0dbfeb9983d/Iconizer/icon.ico -------------------------------------------------------------------------------- /Info/Iconizer.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/willnode/Iconizer/d10d75b8bd2293d7ae5854921406e0dbfeb9983d/Info/Iconizer.exe -------------------------------------------------------------------------------- /Info/IconizerDemo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/willnode/Iconizer/d10d75b8bd2293d7ae5854921406e0dbfeb9983d/Info/IconizerDemo.gif -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Wildan Mubarok 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Iconizer 2 | 3 | Image to Icon Converter with High Quality Output 4 | 5 | ![Screenshot](Info/IconizerDemo.gif) 6 | 7 | [Download Binary](Info/Iconizer.exe) 8 | 9 | ## Usage 10 | 11 | There are range of software that offer Bitmap to Icon conversion, but most of them are either too simple (only write one image per icon) or too complicated (too much button/steps). This program tries to solve this problem. 12 | 13 | ## Features 14 | 15 | In very simple step: Drag in, then drag out. You can do this with multiple files. 16 | 17 | In longer explanation you can drag Bitmaps (`*.jpg, *.png, *.bmp`) inward to add them in collections, or do this via Add Button. Other than bitmaps, you also can drag in binary files (`*.exe, *.dll`) to extract icons inside it. The software automatically pick the clearest image in case the icon is packed to multiple images. 18 | 19 | While it's easy to drag in, it's also legit to drag it out. You drag the selected icon out to the folder destination in explorer. All image processing is done quickly after you hold and move the mouse. It just works. 20 | 21 | However if you want the convenient way to save these icons, you can hit the `Quick Save` to save the icons in the same folder with each image sources. Or use the obvious `Save...` button to place all of the icons in one place together. 22 | 23 | Options above the header determines how the icon output should be generated. All `..px` options determines which resolutions should be generated and packet to the icon. `Keep crisp` means the icon won't generate larger images if source is not large enough to avoid blur. `Keep ratio` means the icon won't stretched out in case if the image doesn't have equal width and height. 24 | 25 | There also cool hidden trick: If you drag one icon out with helding down the control key, it'll also generate `desktop.ini` refering to the icon in destination folder, thus changing the folder icon in instant. Of course, the change can't be see instantly. That's why after switching focus to the software, the explorer 'blinks' to update its cache. Internally this equivalent to call `ie4uinit -show` in cmd to invalidate explorer cache. 26 | 27 | ## Credit 28 | 29 | (c) 2017 Wildan Mubarok 30 | 31 | This software uses [IconExtractor](https://github.com/TsudaKageyu/IconExtractor/) to pull icons from binaries. 32 | 33 | This software uses code snippets from SE [here](https://stackoverflow.com/a/32530019/3908409), [here](https://stackoverflow.com/a/24199315/3908409), [here](https://stackoverflow.com/a/1078898/3908409) to build the software faster than I thought. 34 | 35 | Unless otherwise stated, the code is redistributed under MIT License --------------------------------------------------------------------------------