[
  {
    "path": ".gitignore",
    "content": "*.suo\r\nRED2/bin/\r\nRED2/obj/\r\nRED2/publish/\r\nInstaller/output/\r\nInstaller/bin/\r\n.vs\r\npackages/\nScripts/test-*\n"
  },
  {
    "path": "Installer/README.md",
    "content": "# RED Installer\n\nThis directory contains all resources related to the RED installer.\n\nI wrote this document mostly for myself because I forgot how I did it last time.\n\nMaybe it can be helpful to others too.\n\n\n## How-to generate a new installer\n\n### Step 1: Build binaries\n\n* Install Microsoft Visual Studio (Community), I used version 2019\n* Open the project file \"red2_project.sln\"\n* Change to build configuration to \"Release-x86\" and build the solution\n* Then change the build configuration to \"Release-x64\" and build the solution again\n\n### Step 2: Compile installer\n\n* Install Inno Setup (Version 6.1+)\n* Make sure you build the binaries first (see step 1)\n* Open red_installer-v2.iss with Inno Setup\n* Select \"Compile\" in the \"Build\" menu\n  * Inno Setup should automatically find and use the newly generated binaries, otherwise, paths in the iss file might need to be fixed\n* Inno Setup should now compile a new installer and save it into the bin/ folder below this directory\n  * Check the compiler output of Inno Setup to see if there were any problems\n* Done :)\n"
  },
  {
    "path": "Installer/legacy-files/legacy-disclaimer.txt",
    "content": "# Archived legacy disclaimer\n\n## Remark from 2021\n\nNo more cases where reported since about ten years, so I removed this disclaimer from the main license and info files. \nKeeping this file is for historic reasons.\n\n## Original message\n\nTo be honest with you as user of RED I have to tell you that one user of RED \n(v2.1) reported that it deleted folders which were not completely empty and \ncontained files important to him. I'm really very sorry for that! I checked all\nroutines of RED several times to ensure nothing goes wrong, but somehow it \nhappened on the system of that user. Unfortunately, I could not determine what\ncaused that behaviour. In addition to that the user did not wanted to try to\nlocate the error, because he was (understandably) very upset and uninstalled RED \ninstantly. But he told me that the directory names contained chinese characters. \nSo I tried to reproduce the error by testing RED with foreign directory names. \nBut I could not find a bug - RED worked as expected.\n\nMy conclusion: I currently assume it was a unfortunate exception or some sort\nof misconfiguration and I hope that it does not happen again. I also refactored\nand optimized the whole sourcecode of RED 2.2 to improve the stability and the\nerror handling.\n\nTo sum up, if you use RED for the first time have a look at the directories \nRED found and rethink if they are plausible. And if you want to be really \nsafe double-click a few folders to see if they are really empty. This \nespecially applies to systems with directory names containing any special \ncharacters. Contact me if you notice anything strange.\n\nBTW: As I originally developed RED for myself therefore I took particular \ncare to ensure everything works correctly."
  },
  {
    "path": "Installer/legacy-files/manifest-info.txt",
    "content": "http://msdn.microsoft.com/en-us/library/bb756929.aspx"
  },
  {
    "path": "Installer/legacy-files/red_installer-v1.iss",
    "content": "; Script generated by the Inno Setup Script Wizard.\n; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!\n\n#include \"scripts\\products.iss\"\n#include \"scripts\\products\\dotnetfx35.iss\"\n\n[Setup]\n; NOTE: The value of AppId uniquely identifies this application.\n; Do not use the same AppId value in installers for other applications.\n; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)\nAppId={{06F25DC8-71E2-44E2-805A-F15E15B51C74}\n;AppId=Remove Empty Directories\nAppName=Remove Empty Directories\n;AppVersion=2.2\nAppVersion=2.2 (Admin Editon)\nAppPublisher=Jonas John\nAppCopyright=Remove Empty Directories  Jonas John 2006-2011\nAppPublisherURL=http://www.jonasjohn.de/\nAppSupportURL=http://www.jonasjohn.de/\nAppUpdatesURL=http://www.jonasjohn.de/\nDefaultDirName={pf}\\Remove Empty Directories\nDefaultGroupName=Remove Empty Directories\nAllowNoIcons=true\nLicenseFile=license.txt\n;OutputBaseFilename=red-v2.2-setup\nOutputBaseFilename=red-v2.2-setup-admin\nSourceDir=.\nOutputDir=output\\\n;SetupIconFile=red.ico\nCompression=lzma\nSolidCompression=true\nUninstallDisplayIcon={app}\\RED2.exe\n\n;MinVersion=4.1,5.0\n;PrivilegesRequired=admin\n;ArchitecturesAllowed=x86 x64 ia64\n;ArchitecturesInstallIn64BitMode=x64 ia64\n\n[Languages]\nName: en; MessagesFile: compiler:Default.isl\n;Name: \"de\"; MessagesFile: \"compiler:Languages\\German.isl\"\n\n[Tasks]\nName: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked\n; Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1\n;Name: common; Description: \"&All users\"; GroupDescription: \"Install For:\"; Flags: exclusive unchecked\n;Name: local;  Description: \"Just &me\"; GroupDescription: \"Install For:\"; Flags: exclusive\n\n[Files]\nSource: RED2.exe; DestDir: {app}; Flags: ignoreversion\nSource: license.txt; DestDir: {app}; Flags: ignoreversion\nSource: credits.txt; DestDir: {app}; Flags: ignoreversion\n; NOTE: Don't use \"Flags: ignoreversion\" on any shared system files\n\n[InstallDelete]\n; Delete old files from RED 2.1\nName: {group}\\Readme file.lnk; Type: files\nName: {group}\\Uninstall.lnk; Type: files\nName: {app}\\readme.txt; Type: files\nName: {app}\\lgpl.txt; Type: files\nName: {app}\\RED2.exe.manifest; Type: files\nName: {app}\\uninst.exe; Type: files\n\n[UninstallDelete]\n; cleanup - delete config dir\nName: {localappdata}\\Remove_Empty_Directories; Type: filesandordirs; Tasks: ; Languages: \n; Delete application directory if empty\nName: {app}; Type: dirifempty\n\n[Icons]\nName: {group}\\Remove Empty Directories; Filename: {app}\\RED2.exe\nName: {group}\\{cm:UninstallProgram,Remove Empty Directories}; Filename: {uninstallexe}\nName: {commondesktop}\\Remove Empty Directories; Filename: {app}\\RED2.exe; Tasks: desktopicon\n;Name: {userappdata}\\Microsoft\\Internet Explorer\\Quick Launch\\Remove Empty Directories; Filename: {app}\\RED2.exe; Tasks: quicklaunchicon\n\n[Registry]\n; remove explorer context entry if exists\nRoot: HKCR; Subkey: Folder\\shell\\Remove empty dirs; ValueType: string; Flags: uninsdeletekey deletekey dontcreatekey; Tasks: ; Languages: \n\n[Run]\nFilename: {app}\\RED2.exe; Description: {cm:LaunchProgram,Remove Empty Directories}; Flags: nowait postinstall skipifsilent shellexec; Tasks: ; Languages: \n\n[Code]\n\nfunction InitializeSetup(): Boolean;\nvar\n    UninstallerPath: String;\n    ErrorCode: Integer;\nbegin\n    //install .net 3.5 if possible\n    dotnetfx35();\n\n    // Check whether application is already installed\n    if RegKeyExists(HKEY_LOCAL_MACHINE,  'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Remove Empty Directories') then\n    begin\n        if MsgBox('The setup has detected that RED is already installed on your computer. Do you wish to uninstall the previous version and continue with a fresh installation?', mbConfirmation, MB_YESNO) = IDYES then\n        begin\n\n            RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Remove Empty Directories', 'UninstallString', UninstallerPath);\n\n            // ShellExec('runas', uninstaller, '/SILENT', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);\n            // use above statement if extra level security is required usually it is not req\n            //ShellExec('open', UninstallerPath, '/S', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);\n            ShellExec('runas', UninstallerPath, '/S', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);\n            //Exec(UninstallerPath, '/S', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);\n        end;\n    end;\n\n    Result := true;\nend;\n"
  },
  {
    "path": "Installer/legacy-files/require_administrator.manifest",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">\n   <ms_asmv2:trustInfo xmlns:ms_asmv2=\"urn:schemas-microsoft-com:asm.v2\">\n      <ms_asmv2:security>\n         <ms_asmv2:requestedPrivileges>\n            <ms_asmv2:requestedExecutionLevel level=\"requireAdministrator\" uiAccess=\"False\" />\n         </ms_asmv2:requestedPrivileges>\n      </ms_asmv2:security>\n   </ms_asmv2:trustInfo>\n</assembly>"
  },
  {
    "path": "Installer/legacy-files/set_require_administrator.bat",
    "content": "\"C:\\Program Files\\Microsoft SDKs\\Windows\\v7.0A\\bin\\mt.exe\" -manifest \"require_administrator.manifest\" -outputresource:\"RED2.exe;#1\"\npause"
  },
  {
    "path": "Installer/license.txt",
    "content": "﻿DISCLAIMER\n\nRED is a tool that DELETES stuff! So please be careful with it and its settings.\n\n\nLICENSE\n\nThe program is distributed under the terms of the GNU Lesser General Public License which I copied from here: http://www.gnu.org/copyleft/lgpl.html\n\n                   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\n  This version of the GNU Lesser General Public License incorporates\nthe terms and conditions of version 3 of the GNU General Public\nLicense, supplemented by the additional permissions listed below.\n\n  0. Additional Definitions.\n\n  As used herein, \"this License\" refers to version 3 of the GNU Lesser\nGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\nGeneral Public License.\n\n  \"The Library\" refers to a covered work governed by this License,\nother than an Application or a Combined Work as defined below.\n\n  An \"Application\" is any work that makes use of an interface provided\nby the Library, but which is not otherwise based on the Library.\nDefining a subclass of a class defined by the Library is deemed a mode\nof using an interface provided by the Library.\n\n  A \"Combined Work\" is a work produced by combining or linking an\nApplication with the Library.  The particular version of the Library\nwith which the Combined Work was made is also called the \"Linked\nVersion\".\n\n  The \"Minimal Corresponding Source\" for a Combined Work means the\nCorresponding Source for the Combined Work, excluding any source code\nfor portions of the Combined Work that, considered in isolation, are\nbased on the Application, and not on the Linked Version.\n\n  The \"Corresponding Application Code\" for a Combined Work means the\nobject code and/or source code for the Application, including any data\nand utility programs needed for reproducing the Combined Work from the\nApplication, but excluding the System Libraries of the Combined Work.\n\n  1. Exception to Section 3 of the GNU GPL.\n\n  You may convey a covered work under sections 3 and 4 of this License\nwithout being bound by section 3 of the GNU GPL.\n\n  2. Conveying Modified Versions.\n\n  If you modify a copy of the Library, and, in your modifications, a\nfacility refers to a function or data to be supplied by an Application\nthat uses the facility (other than as an argument passed when the\nfacility is invoked), then you may convey a copy of the modified\nversion:\n\n   a) under this License, provided that you make a good faith effort to\n   ensure that, in the event an Application does not supply the\n   function or data, the facility still operates, and performs\n   whatever part of its purpose remains meaningful, or\n\n   b) under the GNU GPL, with none of the additional permissions of\n   this License applicable to that copy.\n\n  3. Object Code Incorporating Material from Library Header Files.\n\n  The object code form of an Application may incorporate material from\na header file that is part of the Library.  You may convey such object\ncode under terms of your choice, provided that, if the incorporated\nmaterial is not limited to numerical parameters, data structure\nlayouts and accessors, or small macros, inline functions and templates\n(ten or fewer lines in length), you do both of the following:\n\n   a) Give prominent notice with each copy of the object code that the\n   Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the object code with a copy of the GNU GPL and this license\n   document.\n\n  4. Combined Works.\n\n  You may convey a Combined Work under terms of your choice that,\ntaken together, effectively do not restrict modification of the\nportions of the Library contained in the Combined Work and reverse\nengineering for debugging such modifications, if you also do each of\nthe following:\n\n   a) Give prominent notice with each copy of the Combined Work that\n   the Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the Combined Work with a copy of the GNU GPL and this license\n   document.\n\n   c) For a Combined Work that displays copyright notices during\n   execution, include the copyright notice for the Library among\n   these notices, as well as a reference directing the user to the\n   copies of the GNU GPL and this license document.\n\n   d) Do one of the following:\n\n       0) Convey the Minimal Corresponding Source under the terms of this\n       License, and the Corresponding Application Code in a form\n       suitable for, and under terms that permit, the user to\n       recombine or relink the Application with a modified version of\n       the Linked Version to produce a modified Combined Work, in the\n       manner specified by section 6 of the GNU GPL for conveying\n       Corresponding Source.\n\n       1) Use a suitable shared library mechanism for linking with the\n       Library.  A suitable mechanism is one that (a) uses at run time\n       a copy of the Library already present on the user's computer\n       system, and (b) will operate properly with a modified version\n       of the Library that is interface-compatible with the Linked\n       Version.\n\n   e) Provide Installation Information, but only if you would otherwise\n   be required to provide such information under section 6 of the\n   GNU GPL, and only to the extent that such information is\n   necessary to install and execute a modified version of the\n   Combined Work produced by recombining or relinking the\n   Application with a modified version of the Linked Version. (If\n   you use option 4d0, the Installation Information must accompany\n   the Minimal Corresponding Source and Corresponding Application\n   Code. If you use option 4d1, you must provide the Installation\n   Information in the manner specified by section 6 of the GNU GPL\n   for conveying Corresponding Source.)\n\n  5. Combined Libraries.\n\n  You may place library facilities that are a work based on the\nLibrary side by side in a single library together with other library\nfacilities that are not Applications and are not covered by this\nLicense, and convey such a combined library under terms of your\nchoice, if you do both of the following:\n\n   a) Accompany the combined library with a copy of the same work based\n   on the Library, uncombined with any other library facilities,\n   conveyed under the terms of this License.\n\n   b) Give prominent notice with the combined library that part of it\n   is a work based on the Library, and explaining where to find the\n   accompanying uncombined form of the same work.\n\n  6. Revised Versions of the GNU Lesser General Public License.\n\n  The Free Software Foundation may publish revised and/or new versions\nof the GNU Lesser General Public License from time to time. Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.\n\n  Each version is given a distinguishing version number. If the\nLibrary as you received it specifies that a certain numbered version\nof the GNU Lesser General Public License \"or any later version\"\napplies to it, you have the option of following the terms and\nconditions either of that published version or of any later version\npublished by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser\nGeneral Public License, you may choose any version of the GNU Lesser\nGeneral Public License ever published by the Free Software Foundation.\n\n  If the Library as you received it specifies that a proxy can decide\nwhether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is\npermanent authorization for you to choose that version for the\nLibrary. \n\nThe progam may also contain traces of nuts.\n"
  },
  {
    "path": "Installer/red_installer.iss",
    "content": "// contribute: https://github.com/DomGries/InnoDependencyInstaller\n// official article: https://codeproject.com/Articles/20868/Inno-Setup-Dependency-Installer\n\n#define APP_ID \"06F25DC8-71E2-44E2-805A-F15E15B51C74\"\n\n#define MyAppSetupName \"Remove Empty Directories\"\n#define MyAppVersion \"2.3\"\n#define MyAppPublisher \"Jonas John\"\n#define MyAppCopyright 'Copyright (c) Jonas John'\n#define MyAppURL \"https://www.jonasjohn.de/\"\n\n#define MyAppSourceDir \"\"\n#define MyAppExeName \"RED2.exe\"\n\n#define SourceBinPathX86 \"..\\RED2\\bin\\x86\\Release-x86\\RED2.exe\"\n#define SourceBinPathX64 \"..\\RED2\\bin\\x64\\Release-x64\\RED2.exe\"\n\n; DLL is the same for X86 & X64\n#define SourceDLLPath \"..\\RED2\\bin\\x86\\Release-x86\\AlphaFS.dll\"\n\n[Setup]\n; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.\n; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)\nAppId={{{#APP_ID}}\nAppName={#MyAppSetupName}\nAppVersion={#MyAppVersion}\nAppVerName={#MyAppSetupName} {#MyAppVersion}\nAppCopyright={#MyAppCopyright}\nVersionInfoVersion={#MyAppVersion}\nVersionInfoCompany={#MyAppPublisher}\nAppPublisher={#MyAppPublisher}\nAppPublisherURL={#MyAppURL}\nAppSupportURL={#MyAppURL}\nAppUpdatesURL={#MyAppURL}\nOutputBaseFilename=red-{#MyAppVersion}-setup\nDefaultGroupName={#MyAppSetupName}\nDefaultDirName={autopf}\\{#MyAppSetupName}\nUninstallDisplayIcon={app}\\{#MyAppExeName}\n; SourceDir={#MyAppSourceDir}\nOutputDir={#SourcePath}\\bin\nAllowNoIcons=yes\nLicenseFile=license.txt\n; WizardStyle=modern\n\n; Compression=lzma\nSolidCompression=yes\n\nMinVersion=6.0\nPrivilegesRequired=admin\n\n// remove next line if you only deploy 32-bit binaries and dependencies\nArchitecturesInstallIn64BitMode=x64\n\n// dependency installation requires ready page and ready memo to be enabled (default behaviour)\nDisableReadyPage=no\nDisableReadyMemo=no\n\n\n// shared code for installing the dependencies\n[Code]\n// types and variables\ntype\n  TDependency = record\n    Filename: String;\n    Parameters: String;\n    Title: String;\n    URL: String;\n    Checksum: String;\n    ForceSuccess: Boolean;\n    InstallClean: Boolean;\n    RebootAfter: Boolean;\n  end;\n\n  InstallResult = (InstallSuccessful, InstallRebootRequired, InstallError);\n\nvar\n  MemoInstallInfo: String;\n  Dependencies: array of TDependency;\n  DelayedReboot, ForceX86: Boolean;\n  DownloadPage: TDownloadWizardPage;\n\nprocedure AddDependency(const Filename, Parameters, Title, URL, Checksum: String; const ForceSuccess, InstallClean, RebootAfter: Boolean);\nvar\n  Dependency: TDependency;\n  I: Integer;\nbegin\n  MemoInstallInfo := MemoInstallInfo + #13#10 + '%1' + Title;\n\n  Dependency.Filename := Filename;\n  Dependency.Parameters := Parameters;\n  Dependency.Title := Title;\n\n  if FileExists(ExpandConstant('{tmp}{\\}') + Filename) then begin\n    Dependency.URL := '';\n  end else begin\n    Dependency.URL := URL;\n  end;\n\n  Dependency.Checksum := Checksum;\n  Dependency.ForceSuccess := ForceSuccess;\n  Dependency.InstallClean := InstallClean;\n  Dependency.RebootAfter := RebootAfter;\n\n  I := GetArrayLength(Dependencies);\n  SetArrayLength(Dependencies, I + 1);\n  Dependencies[I] := Dependency;\nend;\n\nfunction IsPendingReboot: Boolean;\nvar\n  Value: String;\nbegin\n  Result := RegQueryMultiStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\\CurrentControlSet\\Control\\Session Manager', 'PendingFileRenameOperations', Value) or\n    (RegQueryMultiStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\\CurrentControlSet\\Control\\Session Manager', 'SetupExecute', Value) and (Value <> ''));\nend;\n\nfunction InstallProducts: InstallResult;\nvar\n  ResultCode, I, ProductCount: Integer;\nbegin\n  Result := InstallSuccessful;\n  ProductCount := GetArrayLength(Dependencies);\n  MemoInstallInfo := SetupMessage(msgReadyMemoTasks);\n\n  if ProductCount > 0 then begin\n    DownloadPage.Show;\n\n    for I := 0 to ProductCount - 1 do begin\n      if Dependencies[I].InstallClean and (DelayedReboot or IsPendingReboot) then begin\n        Result := InstallRebootRequired;\n        break;\n      end;\n\n      DownloadPage.SetText(Dependencies[I].Title, '');\n      DownloadPage.SetProgress(I + 1, ProductCount);\n\n      while True do begin\n        ResultCode := 0;\n        if ShellExec('', ExpandConstant('{tmp}{\\}') + Dependencies[I].Filename, Dependencies[I].Parameters, '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then begin\n          if Dependencies[I].RebootAfter then begin\n            // delay reboot after install if we installed the last dependency anyways\n            if I = ProductCount - 1 then begin\n              DelayedReboot := True;\n            end else begin\n              Result := InstallRebootRequired;\n              MemoInstallInfo := Dependencies[I].Title;\n            end;\n            break;\n          end else if (ResultCode = 0) or Dependencies[I].ForceSuccess then begin\n            break;\n          end else if ResultCode = 3010 then begin\n            // Windows Installer ResultCode 3010: ERROR_SUCCESS_REBOOT_REQUIRED\n            DelayedReboot := True;\n            break;\n          end;\n        end;\n\n        case SuppressibleMsgBox(FmtMessage(SetupMessage(msgErrorFunctionFailed), [Dependencies[I].Title, IntToStr(ResultCode)]), mbError, MB_ABORTRETRYIGNORE, IDIGNORE) of\n          IDABORT: begin\n            Result := InstallError;\n            MemoInstallInfo := MemoInstallInfo + #13#10 + '      ' + Dependencies[I].Title;\n            break;\n          end;\n          IDIGNORE: begin\n            MemoInstallInfo := MemoInstallInfo + #13#10 + '      ' + Dependencies[I].Title;\n            break;\n          end;\n        end;\n      end;\n\n      if Result <> InstallSuccessful then begin\n        break;\n      end;\n    end;\n\n    DownloadPage.Hide;\n  end;\nend;\n\n// Inno Setup event functions\nprocedure InitializeWizard;\nbegin\n  DownloadPage := CreateDownloadPage(SetupMessage(msgWizardPreparing), SetupMessage(msgPreparingDesc), nil);\nend;\n\nfunction PrepareToInstall(var NeedsRestart: Boolean): String;\nvar\n  I: Integer;\nbegin\n  DelayedReboot := False;\n\n  case InstallProducts of\n    InstallError: begin\n      Result := MemoInstallInfo;\n    end;\n    InstallRebootRequired: begin\n      Result := MemoInstallInfo;\n      NeedsRestart := True;\n\n      // write into the registry that the installer needs to be executed again after restart\n      RegWriteStringValue(HKEY_CURRENT_USER, 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce', 'InstallBootstrap', ExpandConstant('{srcexe}'));\n    end;\n  end;\nend;\n\nfunction NeedRestart: Boolean;\nbegin\n  Result := DelayedReboot;\nend;\n\nfunction UpdateReadyMemo(const Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;\nbegin\n  Result := '';\n  if MemoUserInfoInfo <> '' then begin\n    Result := Result + MemoUserInfoInfo + Newline + NewLine;\n  end;\n  if MemoDirInfo <> '' then begin\n    Result := Result + MemoDirInfo + Newline + NewLine;\n  end;\n  if MemoTypeInfo <> '' then begin\n    Result := Result + MemoTypeInfo + Newline + NewLine;\n  end;\n  if MemoComponentsInfo <> '' then begin\n    Result := Result + MemoComponentsInfo + Newline + NewLine;\n  end;\n  if MemoGroupInfo <> '' then begin\n    Result := Result + MemoGroupInfo + Newline + NewLine;\n  end;\n  if MemoTasksInfo <> '' then begin\n    Result := Result + MemoTasksInfo;\n  end;\n\n  if MemoInstallInfo <> '' then begin\n    if MemoTasksInfo = '' then begin\n      Result := Result + SetupMessage(msgReadyMemoTasks);\n    end;\n    Result := Result + FmtMessage(MemoInstallInfo, [Space]);\n  end;\nend;\n\nfunction NextButtonClick(const CurPageID: Integer): Boolean;\nvar\n  I, ProductCount: Integer;\n  Retry: Boolean;\nbegin\n  Result := True;\n\n  if (CurPageID = wpReady) and (MemoInstallInfo <> '') then begin\n    DownloadPage.Show;\n\n    ProductCount := GetArrayLength(Dependencies);\n    for I := 0 to ProductCount - 1 do begin\n      if Dependencies[I].URL <> '' then begin\n        DownloadPage.Clear;\n        DownloadPage.Add(Dependencies[I].URL, Dependencies[I].Filename, Dependencies[I].Checksum);\n\n        Retry := True;\n        while Retry do begin\n          Retry := False;\n\n          try\n            DownloadPage.Download;\n          except\n            if GetExceptionMessage = SetupMessage(msgErrorDownloadAborted) then begin\n              Result := False;\n              I := ProductCount;\n            end else begin\n              case SuppressibleMsgBox(AddPeriod(GetExceptionMessage), mbError, MB_ABORTRETRYIGNORE, IDIGNORE) of\n                IDABORT: begin\n                  Result := False;\n                  I := ProductCount;\n                end;\n                IDRETRY: begin\n                  Retry := True;\n                end;\n              end;\n            end;\n          end;\n        end;\n      end;\n    end;\n\n    DownloadPage.Hide;\n  end;\nend;\n\n\n// architecture helper functions\nfunction IsX64: Boolean;\nbegin\n  Result := not ForceX86 and Is64BitInstallMode;\nend;\n\nfunction GetString(const x86, x64: String): String;\nbegin\n  if IsX64 then begin\n    Result := x64;\n  end else begin\n    Result := x86;\n  end;\nend;\n\nfunction GetArchitectureSuffix: String;\nbegin\n  Result := GetString('', '_x64');\nend;\n\nfunction GetArchitectureTitle: String;\nbegin\n  Result := GetString(' (x86)', ' (x64)');\nend;\n\nfunction CompareVersion(const Version1, Version2: String): Integer;\nvar\n  Position, Number1, Number2: Integer;\nbegin\n  Result := 0;\n  while (Version1 <> '') or (Version2 <> '') do begin\n    Position := Pos('.', Version1);\n    if Position > 0 then begin\n      Number1 := StrToIntDef(Copy(Version1, 1, Position - 1), 0);\n      Delete(Version1, 1, Position);\n    end else if Version1 <> '' then begin\n      Number1 := StrToIntDef(Version1, 0);\n      Version1 := '';\n    end else begin\n      Number1 := 0;\n    end;\n\n    Position := Pos('.', Version2);\n    if Position > 0 then begin\n      Number2 := StrToIntDef(Copy(Version2, 1, Position - 1), 0);\n      Delete(Version2, 1, Position);\n    end else if Version2 <> '' then begin\n      Number2 := StrToIntDef(Version2, 0);\n      Version2 := '';\n    end else begin\n      Number2 := 0;\n    end;\n\n    if Number1 < Number2 then begin\n      Result := -1;\n      break;\n    end else if Number1 > Number2 then begin\n      Result := 1;\n      break;\n    end;\n  end;\nend;\n\n\n// custom setup content\n[Languages]\n// Name: en; MessagesFile: \"compiler:Default.isl\"\n// Name: nl; MessagesFile: \"compiler:Languages\\Dutch.isl\"\n// Name: de; MessagesFile: \"compiler:Languages\\German.isl\"\nName: \"english\"; MessagesFile: \"compiler:Default.isl\"\nName: \"armenian\"; MessagesFile: \"compiler:Languages\\Armenian.isl\"\nName: \"brazilianportuguese\"; MessagesFile: \"compiler:Languages\\BrazilianPortuguese.isl\"\nName: \"catalan\"; MessagesFile: \"compiler:Languages\\Catalan.isl\"\nName: \"corsican\"; MessagesFile: \"compiler:Languages\\Corsican.isl\"\nName: \"czech\"; MessagesFile: \"compiler:Languages\\Czech.isl\"\nName: \"danish\"; MessagesFile: \"compiler:Languages\\Danish.isl\"\nName: \"dutch\"; MessagesFile: \"compiler:Languages\\Dutch.isl\"\nName: \"finnish\"; MessagesFile: \"compiler:Languages\\Finnish.isl\"\nName: \"french\"; MessagesFile: \"compiler:Languages\\French.isl\"\nName: \"german\"; MessagesFile: \"compiler:Languages\\German.isl\"\nName: \"hebrew\"; MessagesFile: \"compiler:Languages\\Hebrew.isl\"\nName: \"icelandic\"; MessagesFile: \"compiler:Languages\\Icelandic.isl\"\nName: \"italian\"; MessagesFile: \"compiler:Languages\\Italian.isl\"\nName: \"japanese\"; MessagesFile: \"compiler:Languages\\Japanese.isl\"\nName: \"norwegian\"; MessagesFile: \"compiler:Languages\\Norwegian.isl\"\nName: \"polish\"; MessagesFile: \"compiler:Languages\\Polish.isl\"\nName: \"portuguese\"; MessagesFile: \"compiler:Languages\\Portuguese.isl\"\nName: \"russian\"; MessagesFile: \"compiler:Languages\\Russian.isl\"\nName: \"slovak\"; MessagesFile: \"compiler:Languages\\Slovak.isl\"\nName: \"slovenian\"; MessagesFile: \"compiler:Languages\\Slovenian.isl\"\nName: \"spanish\"; MessagesFile: \"compiler:Languages\\Spanish.isl\"\nName: \"turkish\"; MessagesFile: \"compiler:Languages\\Turkish.isl\"\nName: \"ukrainian\"; MessagesFile: \"compiler:Languages\\Ukrainian.isl\"\n\n\n[Files]\n// TODO: .NET could be included in the installer\n// Source: \"dotnetfx46.exe\"; Flags: dontcopy noencryption\nSource: \"{#SourceBinPathX64}\"; DestDir: \"{app}\"; DestName: \"{#MyAppExeName}\"; Check: IsX64; Flags: ignoreversion\nSource: \"{#SourceBinPathX86}\"; DestDir: \"{app}\"; Check: not IsX64; Flags: ignoreversion\nSource: \"{#SourceDLLPath}\"; DestDir: \"{app}\"; Flags: ignoreversion\n; NOTE: Don't use \"Flags: ignoreversion\" on any shared system files\n\n[Icons]\nName: \"{group}\\{#MyAppSetupName}\"; Filename: \"{app}\\{#MyAppExeName}\"\nName: \"{group}\\{cm:UninstallProgram,{#MyAppSetupName}}\"; Filename: \"{uninstallexe}\"\nName: \"{commondesktop}\\{#MyAppSetupName}\"; Filename: \"{app}\\{#MyAppExeName}\"; Tasks: desktopicon\n\n[Tasks]\nName: \"desktopicon\"; Description: \"{cm:CreateDesktopIcon}\"; GroupDescription: \"{cm:AdditionalIcons}\"; Flags: unchecked\n\n[Registry]\n; remove explorer context entry if it exists\nRoot: HKCR; Subkey: Folder\\shell\\Remove empty dirs; ValueType: string; Flags: uninsdeletekey deletekey dontcreatekey; Tasks: ; Languages: \n\n[Run]\nFilename: \"{app}\\{#MyAppExeName}\"; Description: \"{cm:LaunchProgram,{#MyAppSetupName}}\"; Flags: nowait postinstall skipifsilent\n\n[Code]\nfunction InitializeSetup: Boolean;\nvar\n  Version: String;\n  UninstallerPath: String;\n  // PrevVersion: String;\n  ErrorCode: Integer;\nbegin\n\n  // Check whether application is already installed (legacy)\n  if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Remove Empty Directories') then begin\n    if MsgBox('The setup has detected that RED is already installed on your computer. Do you wish to uninstall the previous version and continue with a fresh installation?', mbConfirmation, MB_YESNO) = IDYES then begin\n      RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Remove Empty Directories', 'UninstallString', UninstallerPath);\n\n      // ShellExec('runas', uninstaller, '/SILENT', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);\n      // use above statement if extra level security is required usually it is not req\n      //ShellExec('open', UninstallerPath, '/S', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);\n      ShellExec('runas', UninstallerPath, '/SILENT', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);\n      //Exec(UninstallerPath, '/S', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);\n    end;\n  end;\n\n  // Check whether application is already installed (new way with appId)\n  if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{{#APP_ID}}_is1') then begin\n    if MsgBox('The setup has detected that RED is already installed on your computer. Do you wish to uninstall the previous version and continue with a fresh installation?', mbConfirmation, MB_YESNO) = IDYES then begin\n      RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{{#APP_ID}}_is1', 'UninstallString', UninstallerPath);\n\n      // ShellExec('runas', uninstaller, '/SILENT', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);\n      // use above statement if extra level security is required usually it is not req\n      //ShellExec('open', UninstallerPath, '/S', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);\n      ShellExec('runas', UninstallerPath, '/SILENT', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);\n      //Exec(UninstallerPath, '/S', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);\n    end;\n  end;\n\n  // Check whether application is already installed (new way with appId + WOW6432Node tree)\n  if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{{#APP_ID}}_is1') then begin\n    if MsgBox('The setup has detected that RED is already installed on your computer. Do you wish to uninstall the previous version and continue with a fresh installation?', mbConfirmation, MB_YESNO) = IDYES then begin\n      RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{{#APP_ID}}_is1', 'UninstallString', UninstallerPath);\n      // RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{{#APP_ID}}_is1', 'DisplayVersion', PrevVersion);\n\n      // ShellExec('runas', uninstaller, '/SILENT', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);\n      // use above statement if extra level security is required usually it is not req\n      //ShellExec('open', UninstallerPath, '/S', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);\n      ShellExec('runas', UninstallerPath, '/SILENT', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);\n      //Exec(UninstallerPath, '/S', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);\n    end;\n  end;\n\n  // Check for .NET Framework 4.6.2\n  // https://www.microsoft.com/en-US/download/details.aspx?id=53345\n  if not IsDotNetInstalled(net462, 0) then begin\n    AddDependency('dotnetfx46.exe',\n      '/lcid ' + IntToStr(GetUILanguage) + ' /passive /norestart',\n      '.NET Framework 4.6.2',\n      'https://download.microsoft.com/download/D/5/C/D5C98AB0-35CC-45D9-9BA5-B18256BA2AE6/NDP462-KB3151802-Web.exe',\n      '', False, False, False);\n  end;\n\n  Result := True;\nend;\n"
  },
  {
    "path": "LICENSE",
    "content": "                   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\n  This version of the GNU Lesser General Public License incorporates\nthe terms and conditions of version 3 of the GNU General Public\nLicense, supplemented by the additional permissions listed below.\n\n  0. Additional Definitions.\n\n  As used herein, \"this License\" refers to version 3 of the GNU Lesser\nGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\nGeneral Public License.\n\n  \"The Library\" refers to a covered work governed by this License,\nother than an Application or a Combined Work as defined below.\n\n  An \"Application\" is any work that makes use of an interface provided\nby the Library, but which is not otherwise based on the Library.\nDefining a subclass of a class defined by the Library is deemed a mode\nof using an interface provided by the Library.\n\n  A \"Combined Work\" is a work produced by combining or linking an\nApplication with the Library.  The particular version of the Library\nwith which the Combined Work was made is also called the \"Linked\nVersion\".\n\n  The \"Minimal Corresponding Source\" for a Combined Work means the\nCorresponding Source for the Combined Work, excluding any source code\nfor portions of the Combined Work that, considered in isolation, are\nbased on the Application, and not on the Linked Version.\n\n  The \"Corresponding Application Code\" for a Combined Work means the\nobject code and/or source code for the Application, including any data\nand utility programs needed for reproducing the Combined Work from the\nApplication, but excluding the System Libraries of the Combined Work.\n\n  1. Exception to Section 3 of the GNU GPL.\n\n  You may convey a covered work under sections 3 and 4 of this License\nwithout being bound by section 3 of the GNU GPL.\n\n  2. Conveying Modified Versions.\n\n  If you modify a copy of the Library, and, in your modifications, a\nfacility refers to a function or data to be supplied by an Application\nthat uses the facility (other than as an argument passed when the\nfacility is invoked), then you may convey a copy of the modified\nversion:\n\n   a) under this License, provided that you make a good faith effort to\n   ensure that, in the event an Application does not supply the\n   function or data, the facility still operates, and performs\n   whatever part of its purpose remains meaningful, or\n\n   b) under the GNU GPL, with none of the additional permissions of\n   this License applicable to that copy.\n\n  3. Object Code Incorporating Material from Library Header Files.\n\n  The object code form of an Application may incorporate material from\na header file that is part of the Library.  You may convey such object\ncode under terms of your choice, provided that, if the incorporated\nmaterial is not limited to numerical parameters, data structure\nlayouts and accessors, or small macros, inline functions and templates\n(ten or fewer lines in length), you do both of the following:\n\n   a) Give prominent notice with each copy of the object code that the\n   Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the object code with a copy of the GNU GPL and this license\n   document.\n\n  4. Combined Works.\n\n  You may convey a Combined Work under terms of your choice that,\ntaken together, effectively do not restrict modification of the\nportions of the Library contained in the Combined Work and reverse\nengineering for debugging such modifications, if you also do each of\nthe following:\n\n   a) Give prominent notice with each copy of the Combined Work that\n   the Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the Combined Work with a copy of the GNU GPL and this license\n   document.\n\n   c) For a Combined Work that displays copyright notices during\n   execution, include the copyright notice for the Library among\n   these notices, as well as a reference directing the user to the\n   copies of the GNU GPL and this license document.\n\n   d) Do one of the following:\n\n       0) Convey the Minimal Corresponding Source under the terms of this\n       License, and the Corresponding Application Code in a form\n       suitable for, and under terms that permit, the user to\n       recombine or relink the Application with a modified version of\n       the Linked Version to produce a modified Combined Work, in the\n       manner specified by section 6 of the GNU GPL for conveying\n       Corresponding Source.\n\n       1) Use a suitable shared library mechanism for linking with the\n       Library.  A suitable mechanism is one that (a) uses at run time\n       a copy of the Library already present on the user's computer\n       system, and (b) will operate properly with a modified version\n       of the Library that is interface-compatible with the Linked\n       Version.\n\n   e) Provide Installation Information, but only if you would otherwise\n   be required to provide such information under section 6 of the\n   GNU GPL, and only to the extent that such information is\n   necessary to install and execute a modified version of the\n   Combined Work produced by recombining or relinking the\n   Application with a modified version of the Linked Version. (If\n   you use option 4d0, the Installation Information must accompany\n   the Minimal Corresponding Source and Corresponding Application\n   Code. If you use option 4d1, you must provide the Installation\n   Information in the manner specified by section 6 of the GNU GPL\n   for conveying Corresponding Source.)\n\n  5. Combined Libraries.\n\n  You may place library facilities that are a work based on the\nLibrary side by side in a single library together with other library\nfacilities that are not Applications and are not covered by this\nLicense, and convey such a combined library under terms of your\nchoice, if you do both of the following:\n\n   a) Accompany the combined library with a copy of the same work based\n   on the Library, uncombined with any other library facilities,\n   conveyed under the terms of this License.\n\n   b) Give prominent notice with the combined library that part of it\n   is a work based on the Library, and explaining where to find the\n   accompanying uncombined form of the same work.\n\n  6. Revised Versions of the GNU Lesser General Public License.\n\n  The Free Software Foundation may publish revised and/or new versions\nof the GNU Lesser General Public License from time to time. Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.\n\n  Each version is given a distinguishing version number. If the\nLibrary as you received it specifies that a certain numbered version\nof the GNU Lesser General Public License \"or any later version\"\napplies to it, you have the option of following the terms and\nconditions either of that published version or of any later version\npublished by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser\nGeneral Public License, you may choose any version of the GNU Lesser\nGeneral Public License ever published by the Free Software Foundation.\n\n  If the Library as you received it specifies that a proxy can decide\nwhether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is\npermanent authorization for you to choose that version for the\nLibrary.\n"
  },
  {
    "path": "README.md",
    "content": "Remove Empty Directories\n========================\n\nRED finds, displays, and deletes empty directories recursively below a given start folder. Furthermore, \nit allows you to create custom rules for keeping and deleting folders (e.g. treat directories with empty files as empty).\n\n\n## Features\n\n- Simple user interface\n- Shows empty directories before deleting them\n- Supports multiple delete modes (including Delete to recycle bin)\n- Allows white and blacklisting of directories by using filter lists\n- Can detect directories with empty files as empty\n\n\n## System requirements\n\n- Windows 7 or 10\n  - Version 2.2 should also still work with older Windows versions like XP or Vista\n- Microsoft .NET Framework 4.6.2 or later\n  - The installer checks for the right version and installs it if missing\n\n## How to contribute to the project\n\nYou are very welcome to contribute code, translations, or anything else :)\n\nHere are some tasks you can help with:\n- Look at open issues/bugs and try to fix them\n- Fix typos and general wording\n- Optimize user interface\n- Create a strategy/foundation for translations, are there any existing frameworks/concepts?\n- Add unit tests\n\n## History\n\nThe first version of RED was created by [Jonas John](http://www.jonasjohn.de/) around 2005. \n\nSince then [a small team of contributors](https://github.com/hxseven/Remove-Empty-Directories/graphs/contributors) helped to fix bugs and add new features.\n\n## Changelog\n\n2.3\n- Disabled settings during active search or deletion process\n- Refactored the interface to improve the design and usability\n  - Divided packed settings tab into three separate tabs\n  - Renamed some options and captions to make more sense \n  - Added more descriptions and examples to explain settings\n  - Increased default window size and added more whitespace to make it look less crowded\n- Optimized config defaults\n  - Set pause between deletions to zero because the default delete to recycle bin method is slow enough to not overwhelm the GUI\n  - Deleted some unnecessary entries and updated some values\n  - Removed *.tmp as default pattern to make the default settings safer because those files could still contain valuable data in some cases.\n- Long paths support and other improvements (contributed by gioccher, see #5)\n  - Fix crash due to case sensitivity of paths \n  - Speed up crawl and deletion by disabling UI updates (dubbed fast mode)\n  - Long path support by switching to AlphaFS \n  - And more minor improvements (see closed pull request #5 for details)\n- Ignore folders newer than N hours #3 (contributed by jsytniak, see #3)\n\n2.2\n- Improved error handling\n- Added logging of errors and deleted directories\n- Added multiple delete modes (e.g. delete to recycle bin)\n- Implemented a function to delete a single empty directory\n- Implemented optional function to detect paths in clipboard\n- Infinite loop detection\n- Added a few new configuration settings\n- Removed counting method to increase speed\n- Replaced old custom settings module with the default settings framework of .NET to be more standard-compliant (This should fix problems some users had when starting RED)\n\n2.1\n- Implemented a \"Protect\" and \"Unprotect\" function to let the user choose folders to keep\n- Implemented an update button for a fast update check\n\n2.0\n- Created the installer (using NSIS)\n- Updated this readme file\n\n1.9\n- Added better-looking icons to the GUI\n- Corrected and updates some texts\n\n1.8\n- Finished the main parts of the application\n- Added XML configuration file\n\n1.7\n- Removed some main parts of the new application and started\nusing the \"BackgroundWorker\" for threading support.\n\n1.6\n- Finished the first prototype of the C# version\n\n1.5\n- Started the development of an entirely new version of RED by using Microsoft Visual C# (.NET 2.0)\n\n1.4\n- Updated the readme and changed the license from GPL to LGPL\n- fixed some small issues\n\n1.2\n- Fixed the gauge in the process window\n- implemented a second safety check to prevent deleting filled folders\n\n1.1\n- renamed the program to RED (Remove empty directories)\n- made a new icon\n\n1.0\n- changes some structure things, renamed functions, renamed variables\n- corrected code, fixed some issues...\n- optional logfile implemented\n- other minor changes\n- updated version history -> complete rewrite ;)\n\n0.9\n- Added a readme, the licenses\n- Translated the readme into English\n\n0.8\n- Cleaned the directories and sorted the files\n- Renamed some functions and variables, to make it look better\n\n0.6 + 0.7\n- I learned about WinBinder (A native Windows binding for PHP) and converted\nthe program to PHP with a Windows GUI using WinBinder\n\n0.5\n- Used NSIS Install System (http://nsis.sourceforge.net/) to create a\nGUI for the perl script\n\n0.2 - 0.4\n- Minor changes\n- Added filters to exclude some folders like the recycler\n\n0.1\n- I made a simple perl script to delete empty folders, I called it \"DEF\" (Delete Empty Folders)\n\n\n## Credits\n\nThird-party components\n- File system calls are powered by the [AlphaFS library](https://github.com/alphaleonis/AlphaFS)\n- The Installer is made by using [Inno Setup](https://jrsoftware.org/isinfo.php) & [Inno Setup Dependency Installer](https://github.com/DomGries/InnoDependencyInstaller)\n\nIcon sources\n- Nuvola icons (GNU LGPL 2.1. license)\n- NuoveXT icons (GPL license)\n- [famfamfam silk icons](http://www.famfamfam.com/lab/icons/ \"famfamfam silk icons\") (Creative Commons Attribution license) \n- [Coffee icon](https://www.freeimages.com/de/photo/coffee-and-desserts-1571223 \"Coffee icon\") by Ivan Freaner\n- Ignore list icon taken from \"Primo Icon Set\" made by [Webdesigner Depot](http://www.webdesignerdepot.com/)\n  - License: Free of charge for personal or commercial purposes\n\n\n## License\n\nRED is free software; you can redistribute it and/or modify it under the terms of the\n[GNU Lesser General Public License](http://www.gnu.org/licenses/lgpl.html) as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version."
  },
  {
    "path": "RED2/DeletionError.Designer.cs",
    "content": "﻿namespace RED2\r\n{\r\n    partial class DeletionError\r\n    {\r\n        /// <summary>\r\n        /// Erforderliche Designervariable.\r\n        /// </summary>\r\n        private System.ComponentModel.IContainer components = null;\r\n\r\n        /// <summary>\r\n        /// Verwendete Ressourcen bereinigen.\r\n        /// </summary>\r\n        /// <param name=\"disposing\">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>\r\n        protected override void Dispose(bool disposing)\r\n        {\r\n            if (disposing && (components != null))\r\n            {\r\n                components.Dispose();\r\n            }\r\n            base.Dispose(disposing);\r\n        }\r\n\r\n        #region Vom Windows Form-Designer generierter Code\r\n\r\n        /// <summary>\r\n        /// Erforderliche Methode für die Designerunterstützung.\r\n        /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.\r\n        /// </summary>\r\n        private void InitializeComponent()\r\n        {\r\n            this.label1 = new System.Windows.Forms.Label();\r\n            this.btnAbort = new System.Windows.Forms.Button();\r\n            this.btnIgnore = new System.Windows.Forms.Button();\r\n            this.btnIgnoreAllErrors = new System.Windows.Forms.Button();\r\n            this.tbErrorMessage = new System.Windows.Forms.TextBox();\r\n            this.tbPath = new System.Windows.Forms.TextBox();\r\n            this.panel1 = new System.Windows.Forms.Panel();\r\n            this.panel1.SuspendLayout();\r\n            this.SuspendLayout();\r\n            // \r\n            // label1\r\n            // \r\n            this.label1.AutoSize = true;\r\n            this.label1.Location = new System.Drawing.Point(8, 7);\r\n            this.label1.Name = \"label1\";\r\n            this.label1.Size = new System.Drawing.Size(301, 13);\r\n            this.label1.TabIndex = 0;\r\n            this.label1.Text = \"An error occurred while RED tried to delete a file or a directory:\";\r\n            // \r\n            // btnAbort\r\n            // \r\n            this.btnAbort.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.btnAbort.DialogResult = System.Windows.Forms.DialogResult.Abort;\r\n            this.btnAbort.Location = new System.Drawing.Point(158, 180);\r\n            this.btnAbort.Name = \"btnAbort\";\r\n            this.btnAbort.Size = new System.Drawing.Size(88, 25);\r\n            this.btnAbort.TabIndex = 1;\r\n            this.btnAbort.Text = \"A&bort\";\r\n            this.btnAbort.UseVisualStyleBackColor = true;\r\n            // \r\n            // btnIgnore\r\n            // \r\n            this.btnIgnore.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.btnIgnore.DialogResult = System.Windows.Forms.DialogResult.Ignore;\r\n            this.btnIgnore.Location = new System.Drawing.Point(251, 180);\r\n            this.btnIgnore.Name = \"btnIgnore\";\r\n            this.btnIgnore.Size = new System.Drawing.Size(88, 25);\r\n            this.btnIgnore.TabIndex = 2;\r\n            this.btnIgnore.Text = \"&Ignore error\";\r\n            this.btnIgnore.UseVisualStyleBackColor = true;\r\n            // \r\n            // btnIgnoreAllErrors\r\n            // \r\n            this.btnIgnoreAllErrors.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.btnIgnoreAllErrors.DialogResult = System.Windows.Forms.DialogResult.Retry;\r\n            this.btnIgnoreAllErrors.Location = new System.Drawing.Point(344, 180);\r\n            this.btnIgnoreAllErrors.Name = \"btnIgnoreAllErrors\";\r\n            this.btnIgnoreAllErrors.Size = new System.Drawing.Size(122, 25);\r\n            this.btnIgnoreAllErrors.TabIndex = 3;\r\n            this.btnIgnoreAllErrors.Text = \"Ignore &all errors\";\r\n            this.btnIgnoreAllErrors.UseVisualStyleBackColor = true;\r\n            // \r\n            // tbErrorMessage\r\n            // \r\n            this.tbErrorMessage.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)\r\n                        | System.Windows.Forms.AnchorStyles.Left)\r\n                        | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.tbErrorMessage.Font = new System.Drawing.Font(\"Lucida Console\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n            this.tbErrorMessage.Location = new System.Drawing.Point(8, 53);\r\n            this.tbErrorMessage.Multiline = true;\r\n            this.tbErrorMessage.Name = \"tbErrorMessage\";\r\n            this.tbErrorMessage.ReadOnly = true;\r\n            this.tbErrorMessage.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;\r\n            this.tbErrorMessage.Size = new System.Drawing.Size(458, 108);\r\n            this.tbErrorMessage.TabIndex = 5;\r\n            // \r\n            // tbPath\r\n            // \r\n            this.tbPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)\r\n                        | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.tbPath.Location = new System.Drawing.Point(8, 28);\r\n            this.tbPath.Name = \"tbPath\";\r\n            this.tbPath.ReadOnly = true;\r\n            this.tbPath.Size = new System.Drawing.Size(458, 20);\r\n            this.tbPath.TabIndex = 6;\r\n            // \r\n            // panel1\r\n            // \r\n            this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)\r\n                        | System.Windows.Forms.AnchorStyles.Left)\r\n                        | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.panel1.BackColor = System.Drawing.SystemColors.Window;\r\n            this.panel1.Controls.Add(this.tbPath);\r\n            this.panel1.Controls.Add(this.label1);\r\n            this.panel1.Controls.Add(this.tbErrorMessage);\r\n            this.panel1.Location = new System.Drawing.Point(0, 0);\r\n            this.panel1.Name = \"panel1\";\r\n            this.panel1.Size = new System.Drawing.Size(476, 171);\r\n            this.panel1.TabIndex = 7;\r\n            // \r\n            // DeletionError\r\n            // \r\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r\n            this.ClientSize = new System.Drawing.Size(474, 212);\r\n            this.Controls.Add(this.btnIgnoreAllErrors);\r\n            this.Controls.Add(this.btnIgnore);\r\n            this.Controls.Add(this.btnAbort);\r\n            this.Controls.Add(this.panel1);\r\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\r\n            this.MaximizeBox = false;\r\n            this.MinimizeBox = false;\r\n            this.Name = \"DeletionError\";\r\n            this.ShowIcon = false;\r\n            this.ShowInTaskbar = false;\r\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\r\n            this.Text = \"Warning deletion failed\";\r\n            this.Load += new System.EventHandler(this.DeletionError_Load);\r\n            this.panel1.ResumeLayout(false);\r\n            this.panel1.PerformLayout();\r\n            this.ResumeLayout(false);\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        private System.Windows.Forms.Label label1;\r\n        private System.Windows.Forms.Button btnAbort;\r\n        private System.Windows.Forms.Button btnIgnore;\r\n        private System.Windows.Forms.Button btnIgnoreAllErrors;\r\n        private System.Windows.Forms.TextBox tbErrorMessage;\r\n        private System.Windows.Forms.TextBox tbPath;\r\n        private System.Windows.Forms.Panel panel1;\r\n    }\r\n}"
  },
  {
    "path": "RED2/DeletionError.cs",
    "content": "﻿using System;\r\nusing System.Windows.Forms;\r\n\r\nnamespace RED2\r\n{\r\n    public partial class DeletionError : Form\r\n    {\r\n        public DeletionError()\r\n        {\r\n            InitializeComponent();\r\n        }\r\n\r\n        private void DeletionError_Load(object sender, EventArgs e)\r\n        {\r\n\r\n        }\r\n\r\n        internal void SetPath(string path)\r\n        {\r\n            this.tbPath.Text = path;\r\n        }\r\n\r\n        internal void SetErrorMessage(string msg)\r\n        {\r\n            this.tbErrorMessage.Text = msg;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "RED2/DeletionError.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n</root>"
  },
  {
    "path": "RED2/Lib/Core.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\n\r\nnamespace RED2\r\n{\r\n    /// <summary>\r\n    /// RED core class, handles events and communicates with the GUI\r\n    /// </summary>\r\n    public class REDCore\r\n    {\r\n        private MainWindow redMainWindow = null;\r\n        public WorkflowSteps CurrentProcessStep = WorkflowSteps.Idle;\r\n        private RuntimeData Data = null;\r\n\r\n        // Workers\r\n        private FindEmptyDirectoryWorker searchEmptyFoldersWorker = null;\r\n        private DeletionWorker deletionWorker = null;\r\n\r\n        // Events\r\n        public event EventHandler<ErrorEventArgs> OnError;\r\n        public event EventHandler OnCancelled;\r\n        public event EventHandler OnAborted;\r\n        public event EventHandler<ProgressChangedEventArgs> OnProgressChanged;\r\n        public event EventHandler<FoundEmptyDirInfoEventArgs> OnFoundEmptyDirectory;\r\n        public event EventHandler<FinishedScanForEmptyDirsEventArgs> OnFinishedScanForEmptyDirs;\r\n        public event EventHandler<DeleteProcessUpdateEventArgs> OnDeleteProcessChanged;\r\n        public event EventHandler<DeletionErrorEventArgs> OnDeleteError;\r\n        public event EventHandler<DeleteProcessFinishedEventArgs> OnDeleteProcessFinished;\r\n\r\n        public REDCore(MainWindow mainWindow, RuntimeData data)\r\n        {\r\n            this.redMainWindow = mainWindow;\r\n            this.Data = data;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Start searching empty folders\r\n        /// </summary>\r\n        public void SearchingForEmptyDirectories()\r\n        {\r\n            this.CurrentProcessStep = WorkflowSteps.StartSearchingForEmptyDirs;\r\n\r\n            // Rest folder list\r\n            this.Data.ProtectedFolderList = new Dictionary<string, bool>();\r\n\r\n            // Start async empty directory search worker\r\n            searchEmptyFoldersWorker = new FindEmptyDirectoryWorker();\r\n            searchEmptyFoldersWorker.Data = this.Data;\r\n\r\n            searchEmptyFoldersWorker.ProgressChanged += new ProgressChangedEventHandler(searchEmptyFoldersWorker_ProgressChanged);\r\n            searchEmptyFoldersWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(searchEmptyFoldersWorker_RunWorkerCompleted);\r\n\r\n            searchEmptyFoldersWorker.RunWorkerAsync(this.Data.StartFolder);\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function gets called on a status update of the find worker\r\n        /// </summary>\r\n        void searchEmptyFoldersWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)\r\n        {\r\n            if (e.UserState is FoundEmptyDirInfoEventArgs)\r\n            {\r\n                var info = (FoundEmptyDirInfoEventArgs)e.UserState;\r\n\r\n                if (info.Type == DirectorySearchStatusTypes.Empty)\r\n                {\r\n                    // Found an empty dir, add it to the list\r\n                    this.Data.EmptyFolderList.Add(info.Directory);\r\n                }\r\n                else if (info.Type == DirectorySearchStatusTypes.Error && this.Data.HideScanErrors)\r\n                {\r\n                    return;\r\n                }\r\n\r\n                if (this.OnFoundEmptyDirectory != null)\r\n                    this.OnFoundEmptyDirectory(this, info);\r\n            }\r\n            else if (e.UserState is string)\r\n            {\r\n                if (this.OnProgressChanged != null)\r\n                    this.OnProgressChanged(this, new ProgressChangedEventArgs(0, (string)e.UserState));\r\n            }\r\n            else\r\n            {\r\n                // TODO: Handle unknown types\r\n            }\r\n        }\r\n\r\n        void searchEmptyFoldersWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)\r\n        {\r\n            this.CurrentProcessStep = WorkflowSteps.Idle;\r\n\r\n            if (e.Error != null)\r\n            {\r\n                this.searchEmptyFoldersWorker.Dispose(); this.searchEmptyFoldersWorker = null;\r\n\r\n                this.showErrorMsg(e.Error.Message);\r\n            }\r\n            else if (e.Cancelled)\r\n            {\r\n                if (this.searchEmptyFoldersWorker.ErrorInfo != null)\r\n                {\r\n                    // A error occurred, process was stopped\r\n                    this.showErrorMsg(this.searchEmptyFoldersWorker.ErrorInfo.ErrorMessage);\r\n\r\n                    this.searchEmptyFoldersWorker.Dispose(); this.searchEmptyFoldersWorker = null;\r\n\r\n                    if (this.OnAborted != null)\r\n                        this.OnAborted(this, new EventArgs());\r\n                }\r\n                else\r\n                {\r\n                    this.searchEmptyFoldersWorker.Dispose(); this.searchEmptyFoldersWorker = null;\r\n\r\n                    if (this.OnCancelled != null)\r\n                        this.OnCancelled(this, new EventArgs());\r\n                }\r\n            }\r\n            else\r\n            {\r\n                int FolderCount = this.searchEmptyFoldersWorker.FolderCount;\r\n\r\n                this.searchEmptyFoldersWorker.Dispose(); this.searchEmptyFoldersWorker = null;\r\n\r\n                if (this.OnFinishedScanForEmptyDirs != null)\r\n                    this.OnFinishedScanForEmptyDirs(this, new FinishedScanForEmptyDirsEventArgs(this.Data.EmptyFolderList.Count, FolderCount));\r\n            }\r\n        }\r\n\r\n        internal void CancelCurrentProcess()\r\n        {\r\n            if (this.CurrentProcessStep == WorkflowSteps.StartSearchingForEmptyDirs)\r\n            {\r\n                if (this.searchEmptyFoldersWorker == null) return;\r\n\r\n                if ((this.searchEmptyFoldersWorker.IsBusy == true) || (searchEmptyFoldersWorker.CancellationPending == false))\r\n                    searchEmptyFoldersWorker.CancelAsync();\r\n            }\r\n            else if (this.CurrentProcessStep == WorkflowSteps.DeleteProcessRunning)\r\n            {\r\n                if (this.deletionWorker == null) return;\r\n\r\n                if ((this.deletionWorker.IsBusy == true) || (deletionWorker.CancellationPending == false))\r\n                    deletionWorker.CancelAsync();\r\n            }\r\n        }\r\n\r\n        public void StartDeleteProcess()\r\n        {\r\n            this.CurrentProcessStep = WorkflowSteps.DeleteProcessRunning;\r\n\r\n            // Kick-off deletion worker to async delete directories\r\n            this.deletionWorker = new DeletionWorker();\r\n            this.deletionWorker.Data = this.Data;\r\n\r\n            this.deletionWorker.ProgressChanged += new ProgressChangedEventHandler(deletionWorker_ProgressChanged);\r\n            this.deletionWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(deletionWorker_RunWorkerCompleted);\r\n\r\n            this.deletionWorker.RunWorkerAsync();\r\n        }\r\n\r\n        void deletionWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)\r\n        {\r\n            var state = e.UserState as DeleteProcessUpdateEventArgs;\r\n\r\n            if (this.OnDeleteProcessChanged != null)\r\n                this.OnDeleteProcessChanged(this, state);\r\n        }\r\n\r\n        void deletionWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)\r\n        {\r\n            this.CurrentProcessStep = WorkflowSteps.Idle;\r\n\r\n            if (e.Error != null)\r\n            {\r\n                this.showErrorMsg(e.Error.Message);\r\n\r\n                this.deletionWorker.Dispose(); this.deletionWorker = null;\r\n            }\r\n            else if (e.Cancelled)\r\n            {\r\n                if (this.deletionWorker.ErrorInfo != null)\r\n                {\r\n                    // A error occurred, process was stopped\r\n                    //\r\n                    // -> Ask user to continue\r\n\r\n                    if (OnDeleteError != null)\r\n                        OnDeleteError(this, this.deletionWorker.ErrorInfo);\r\n                    else\r\n                        throw new Exception(\"Internal error: event handler is missing.\");\r\n                }\r\n                else\r\n                {\r\n                    // The user cancelled the process\r\n                    if (this.OnCancelled != null)\r\n                        this.OnCancelled(this, new EventArgs());\r\n                }\r\n            }\r\n            else\r\n            {\r\n                // TODO: Use separate class here?\r\n                int deletedCount = this.deletionWorker.DeletedCount;\r\n                int failedCount = this.deletionWorker.FailedCount;\r\n                int protectedCount = this.deletionWorker.ProtectedCount;\r\n\r\n                this.deletionWorker.Dispose(); \r\n                this.deletionWorker = null;\r\n\r\n                if (this.OnDeleteProcessFinished != null)\r\n                    this.OnDeleteProcessFinished(this, new DeleteProcessFinishedEventArgs(deletedCount, failedCount, protectedCount));\r\n            }\r\n        }\r\n\r\n        internal void AddProtectedFolder(string path)\r\n        {\r\n            if (!this.Data.ProtectedFolderList.ContainsKey(path))\r\n                this.Data.ProtectedFolderList.Add(path, true);\r\n        }\r\n\r\n        internal void RemoveProtected(string FolderFullName)\r\n        {\r\n            if (this.Data.ProtectedFolderList.ContainsKey(FolderFullName))\r\n                this.Data.ProtectedFolderList.Remove(FolderFullName);\r\n        }\r\n\r\n        public string GetLogMessages()\r\n        {\r\n            return this.Data.LogMessages.ToString();\r\n        }\r\n\r\n        private void showErrorMsg(string errorMessage)\r\n        {\r\n            if (this.OnError != null)\r\n                this.OnError(this, new ErrorEventArgs(errorMessage));\r\n        }\r\n\r\n        internal void AbortDeletion()\r\n        {\r\n            this.CurrentProcessStep = WorkflowSteps.Idle;\r\n\r\n            this.deletionWorker.Dispose(); this.deletionWorker = null;\r\n\r\n            if (this.OnAborted != null)\r\n                this.OnAborted(this, new EventArgs());\r\n        }\r\n\r\n        internal void ContinueDeleteProcess()\r\n        {\r\n            this.CurrentProcessStep = WorkflowSteps.DeleteProcessRunning;\r\n            this.deletionWorker.RunWorkerAsync();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "RED2/Lib/DeletionWorker.cs",
    "content": "﻿using System;\r\nusing System.ComponentModel;\r\nusing System.Threading;\r\nusing Alphaleonis.Win32.Filesystem;\r\n\r\nnamespace RED2\r\n{\r\n    /// <summary>\r\n    /// Deletes the empty directories RED found\r\n    /// </summary>\r\n    public class DeletionWorker : BackgroundWorker\r\n    {\r\n        public RuntimeData Data { get; set; }\r\n\r\n        public int DeletedCount { get; set; }\r\n        public int FailedCount { get; set; }\r\n        public int ProtectedCount { get; set; }\r\n\r\n        public int ListPos { get; set; }\r\n\r\n        public DeletionErrorEventArgs ErrorInfo { get; set; }\r\n\r\n        public DeletionWorker()\r\n        {\r\n            WorkerReportsProgress = true;\r\n            WorkerSupportsCancellation = true;\r\n\r\n            this.ListPos = 0;\r\n        }\r\n\r\n        protected override void OnDoWork(DoWorkEventArgs e)\r\n        {\r\n            // This method will run on a thread other than the UI thread.\r\n            // Be sure not to manipulate any Windows Forms controls created\r\n            // on the UI thread from this method.\r\n\r\n            if (CancellationPending)\r\n            {\r\n                e.Cancel = true;\r\n                return;\r\n            }\r\n\r\n            bool stopNow = false;\r\n            string errorMessage = \"\";\r\n            this.ErrorInfo = null;\r\n\r\n            int count = this.Data.EmptyFolderList.Count;\r\n\r\n            while (this.ListPos < this.Data.EmptyFolderList.Count)\r\n            {\r\n                if (CancellationPending)\r\n                {\r\n                    e.Cancel = true;\r\n                    return;\r\n                }\r\n\r\n                var folder = this.Data.EmptyFolderList[this.ListPos];\r\n                var status = DirectoryDeletionStatusTypes.Ignored;\r\n\r\n                // Do not delete one time protected folders\r\n                if (!this.Data.ProtectedFolderList.ContainsKey(folder))\r\n                {\r\n                    try\r\n                    {\r\n                        // Try to delete the directory\r\n                        this.secureDelete(folder);\r\n\r\n                        this.Data.AddLogMessage(String.Format(\"Successfully deleted dir \\\"{0}\\\"\", folder));\r\n\r\n                        status = DirectoryDeletionStatusTypes.Deleted;\r\n                        this.DeletedCount++;\r\n                    }\r\n                    catch (REDPermissionDeniedException ex)\r\n                    {\r\n                        errorMessage = ex.Message;\r\n\r\n                        this.Data.AddLogMessage(String.Format(\"Directory is protected by the system \\\"{0}\\\" - Message: \\\"{1}\\\"\", folder, errorMessage));\r\n\r\n                        status = DirectoryDeletionStatusTypes.Protected;\r\n                        this.ProtectedCount++;\r\n                    }\r\n                    catch (Exception ex)\r\n                    {\r\n                        errorMessage = ex.Message;\r\n                        stopNow = (!this.Data.IgnoreAllErrors);\r\n\r\n                        this.Data.AddLogMessage(String.Format(\"Failed to delete dir \\\"{0}\\\" - Error message: \\\"{1}\\\"\", folder, errorMessage));\r\n\r\n                        status = DirectoryDeletionStatusTypes.Warning;\r\n                        this.FailedCount++;\r\n                    }\r\n\r\n                    if (!stopNow && this.Data.PauseTime > 0)\r\n                        Thread.Sleep(TimeSpan.FromMilliseconds(this.Data.PauseTime));\r\n                }\r\n                else\r\n                    status = DirectoryDeletionStatusTypes.Protected;\r\n\r\n                this.ReportProgress(1, new DeleteProcessUpdateEventArgs(this.ListPos, folder, status, count));\r\n\r\n                this.ListPos++;\r\n\r\n                if (stopNow)\r\n                {\r\n                    // stop here for now\r\n                    if (errorMessage == \"\") errorMessage = \"Unknown error\";\r\n\r\n                    e.Cancel = true;\r\n                    this.ErrorInfo = new DeletionErrorEventArgs(folder, errorMessage);\r\n                    return;\r\n                }\r\n            }\r\n\r\n            e.Result = count;\r\n        }\r\n\r\n        private void secureDelete(string path)\r\n        {\r\n            var emptyDirectory = new DirectoryInfo(path);\r\n\r\n            if (!emptyDirectory.Exists)\r\n                throw new Exception(\"Could not delete the directory \\\"\" + emptyDirectory.FullName + \"\\\" because it does not exist anymore.\");\r\n\r\n            // Cleanup folder\r\n\r\n            String[] ignoreFileList = this.Data.GetIgnoreFileList();\r\n\r\n            FileInfo[] Files = emptyDirectory.GetFiles();\r\n\r\n            if (Files != null && Files.Length != 0)\r\n            {\r\n                // loop trough files and cancel if containsFiles == true\r\n                for (int f = 0; f < Files.Length; f++)\r\n                {\r\n                    var file = Files[f];\r\n\r\n                    string delPattern = \"\";\r\n                    bool deleteTrashFile = SystemFunctions.MatchesIgnorePattern(file, (int)file.Length, this.Data.IgnoreEmptyFiles, ignoreFileList, out delPattern);\r\n\r\n                    // If only one file is good, then stop.\r\n                    if (deleteTrashFile)\r\n                    {\r\n                        try\r\n                        {\r\n                            SystemFunctions.SecureDeleteFile(file, this.Data.DeleteMode);\r\n\r\n                            this.Data.AddLogMessage(String.Format(\"-> Successfully deleted file \\\"{0}\\\" because it matched the ignore pattern \\\"{1}\\\"\", file.FullName, delPattern));\r\n                        }\r\n                        catch (Exception ex)\r\n                        {\r\n                            this.Data.AddLogMessage(String.Format(\"Failed to delete file \\\"{0}\\\" - Error message: \\\"{1}\\\"\", file.FullName, ex.Message));\r\n\r\n                            var msg = \"Could not delete this empty (trash) file:\" + Environment.NewLine + file.FullName + Environment.NewLine + Environment.NewLine + \"Error message: \" + ex.Message;\r\n\r\n                            if (ex is REDPermissionDeniedException)\r\n                                throw new REDPermissionDeniedException(msg, ex);\r\n                            else\r\n                                throw new Exception(msg, ex);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            // End cleanup\r\n\r\n            // This function will ensure that the directory is really empty before it gets deleted\r\n            SystemFunctions.SecureDeleteDirectory(emptyDirectory.FullName, this.Data.DeleteMode);\r\n\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "RED2/Lib/Enums.cs",
    "content": "﻿namespace RED2\r\n{\r\n    /// <summary>\r\n    /// RED workflow steps\r\n    /// </summary>\r\n    public enum WorkflowSteps\r\n    {\r\n        Idle,\r\n        StartSearchingForEmptyDirs,\r\n        DeleteProcessRunning,\r\n    }\r\n\r\n    /// <summary>\r\n    /// Result status types of the scan\r\n    /// </summary>\r\n    public enum DirectorySearchStatusTypes\r\n    {\r\n        Empty,\r\n        Error,\r\n        NotEmpty,\r\n        Ignore\r\n    }\r\n\r\n    /// <summary>\r\n    /// Result types of the deletion process\r\n    /// </summary>\r\n    public enum DirectoryDeletionStatusTypes\r\n    {\r\n        Deleted,\r\n        Warning,\r\n        Ignored,\r\n        Protected\r\n    }\r\n}\r\n"
  },
  {
    "path": "RED2/Lib/Events.cs",
    "content": "﻿using System;\r\nusing Alphaleonis.Win32.Filesystem;\r\n\r\nnamespace RED2\r\n{\r\n    public class WorkflowStepChangedEventArgs : EventArgs\r\n    {\r\n        public WorkflowSteps NewStep { get; set; }\r\n\r\n        public WorkflowStepChangedEventArgs(WorkflowSteps NewStep)\r\n        {\r\n            this.NewStep = NewStep;\r\n        }\r\n    }\r\n\r\n    public class ErrorEventArgs : EventArgs\r\n    {\r\n        public string Message { get; set; }\r\n\r\n        public ErrorEventArgs(string msg)\r\n        {\r\n            this.Message = msg;\r\n        }\r\n    }\r\n\r\n    public class FinishedScanForEmptyDirsEventArgs : EventArgs\r\n    {\r\n        public int EmptyFolderCount { get; set; }\r\n        public int FolderCount { get; set; }\r\n\r\n        public FinishedScanForEmptyDirsEventArgs(int EmptyFolderCount, int FolderCount)\r\n        {\r\n            this.EmptyFolderCount = EmptyFolderCount;\r\n            this.FolderCount = FolderCount;\r\n        }\r\n    }\r\n\r\n    public class DeleteProcessUpdateEventArgs : EventArgs\r\n    {\r\n        public int ProgressStatus { get; set; }\r\n        public string Path { get; set; }\r\n        public DirectoryDeletionStatusTypes Status { get; set; }\r\n        public int FolderCount { get; set; }\r\n\r\n        public DeleteProcessUpdateEventArgs(int progressStatus, string path, DirectoryDeletionStatusTypes status, int folderCount)\r\n        {\r\n            this.ProgressStatus = progressStatus;\r\n            this.Path = path;\r\n            this.Status = status;\r\n            this.FolderCount = folderCount;\r\n        }\r\n    }\r\n\r\n    public class DeleteProcessFinishedEventArgs : EventArgs\r\n    {\r\n        public int DeletedFolderCount { get; set; }\r\n        public int FailedFolderCount { get; set; }\r\n        public int ProtectedCount { get; set; }\r\n\r\n        public DeleteProcessFinishedEventArgs(int deletedFolderCount, int failedFolderCount, int protectedCount)\r\n        {\r\n            this.DeletedFolderCount = deletedFolderCount;\r\n            this.FailedFolderCount = failedFolderCount;\r\n            this.ProtectedCount = protectedCount;\r\n        }\r\n    }\r\n\r\n    public class ProtectionStatusChangedEventArgs : EventArgs\r\n    {\r\n        public string Path { get; set; }\r\n        public bool Protected { get; set; }\r\n\r\n        public ProtectionStatusChangedEventArgs(string Path, bool Protected)\r\n        {\r\n            this.Path = Path;\r\n            this.Protected = Protected;\r\n        }\r\n    }\r\n\r\n    public class DeleteRequestFromTreeEventArgs : EventArgs\r\n    {\r\n        public string Directory { get; set; }\r\n\r\n        public DeleteRequestFromTreeEventArgs(string Directory)\r\n        {\r\n            this.Directory = Directory;\r\n        }\r\n    }\r\n\r\n    public class DeletionErrorEventArgs : EventArgs\r\n    {\r\n        public string Path { get; set; }\r\n        public string ErrorMessage { get; set; }\r\n\r\n        public DeletionErrorEventArgs(string Path, string ErrorMessage)\r\n        {\r\n            this.Path = Path;\r\n            this.ErrorMessage = ErrorMessage;\r\n        }\r\n    }\r\n\r\n    public class FoundEmptyDirInfoEventArgs : EventArgs\r\n    {\r\n        public string Directory { get; set; }\r\n        public DirectorySearchStatusTypes Type { get; set; }\r\n        public string ErrorMessage { get; set; }\r\n\r\n        public FoundEmptyDirInfoEventArgs(string Directory, DirectorySearchStatusTypes type)\r\n        {\r\n            this.Directory = Directory;\r\n            this.Type = type;\r\n            this.ErrorMessage = \"\";\r\n        }\r\n\r\n        public FoundEmptyDirInfoEventArgs(string Directory, DirectorySearchStatusTypes type, string ErrorMessage)\r\n        {\r\n            this.Directory = Directory;\r\n            this.Type = type;\r\n            this.ErrorMessage = ErrorMessage;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "RED2/Lib/FindEmptyDirectoryWorker.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing Alphaleonis.Win32.Filesystem;\r\nusing FileAttributes = System.IO.FileAttributes;\r\n\r\nnamespace RED2\r\n{\r\n    /// <summary>\r\n    /// Searches for empty directories\r\n    /// </summary>\r\n    public class FindEmptyDirectoryWorker : BackgroundWorker\r\n    {\r\n        private int folderCount = 0;\r\n        public int FolderCount\r\n        {\r\n            get { return folderCount; }\r\n        }\r\n\r\n        public RuntimeData Data { get; set; }\r\n\r\n        private string[] ignoreFolderList = null;\r\n        private string[] ignoreFileList = null;\r\n\r\n        public DeletionErrorEventArgs ErrorInfo { get; set; }\r\n\r\n        public int PossibleEndlessLoop { get; set; }\r\n\r\n        public FindEmptyDirectoryWorker()\r\n        {\r\n            WorkerReportsProgress = true;\r\n            WorkerSupportsCancellation = true;\r\n        }\r\n\r\n        protected override void OnDoWork(DoWorkEventArgs e)\r\n        {\r\n            DirectoryInfo startFolder = (DirectoryInfo)e.Argument;\r\n\r\n            this.PossibleEndlessLoop = 0;\r\n\r\n            // Clean dir list\r\n            this.Data.EmptyFolderList = new List<string>();\r\n\r\n            this.ignoreFileList = this.Data.GetIgnoreFileList();\r\n            this.ignoreFolderList = this.Data.GetIgnoreDirectories();\r\n\r\n            try\r\n            {\r\n                var rootStatusType = this.checkIfDirectoryEmpty(startFolder, 1);\r\n\r\n                this.ReportProgress(0, new FoundEmptyDirInfoEventArgs(startFolder.FullName, rootStatusType));\r\n\r\n                if (this.PossibleEndlessLoop > this.Data.InfiniteLoopDetectionCount)\r\n                {\r\n                    this.Data.AddLogMessage(\"Detected possible infinite-loop somewhere in the target path \\\"\" + startFolder + \"\\\" (symbolic links can cause this)\");\r\n                    throw new Exception(\"Possible infinite-loop detected (symbolic links can cause this)\");\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                e.Cancel = true;\r\n                this.Data.AddLogMessage(\"An error occurred during the scan process: \" + ex.Message);\r\n                this.ErrorInfo = new DeletionErrorEventArgs(startFolder.FullName, ex.Message);\r\n                return;\r\n            }\r\n\r\n            if (CancellationPending)\r\n            {\r\n                this.Data.AddLogMessage(\"Scan process was cancelled\");\r\n                e.Cancel = true;\r\n                e.Result = 0;\r\n                return;\r\n            }\r\n\r\n            e.Result = 1;\r\n        }\r\n\r\n        private DirectorySearchStatusTypes checkIfDirectoryEmpty(DirectoryInfo startDir, int depth)\r\n        {\r\n            if (this.PossibleEndlessLoop > this.Data.InfiniteLoopDetectionCount)\r\n            {\r\n                this.ReportProgress(0, new FoundEmptyDirInfoEventArgs(startDir.FullName, DirectorySearchStatusTypes.Error, \"Aborted - possible infinite-loop detected\"));\r\n                return DirectorySearchStatusTypes.Error;\r\n            }\r\n\r\n            try\r\n            {\r\n                // Thread.Sleep(500); -> ?\r\n\r\n                if (this.Data.MaxDepth != -1 && depth > this.Data.MaxDepth)\r\n                    return DirectorySearchStatusTypes.NotEmpty;\r\n\r\n                // Cancel process if the user hits stop\r\n                if (CancellationPending)\r\n                    return DirectorySearchStatusTypes.NotEmpty;\r\n\r\n                this.folderCount++;\r\n\r\n                // update status progress bar after 100 steps:\r\n                if (this.folderCount % 100 == 0)\r\n                    this.ReportProgress(folderCount, \"Checking directory: \" + startDir.Name);\r\n\r\n                bool containsFiles = false;\r\n\r\n                // Get file list\r\n                FileInfo[] fileList = null;\r\n\r\n                // some directories could trigger an exception:\r\n                try\r\n                {\r\n                    fileList = startDir.GetFiles();\r\n                }\r\n                catch\r\n                {\r\n                    fileList = null;\r\n                }\r\n\r\n                if (fileList == null)\r\n                {\r\n                    // CF = true = folder does not get deleted:\r\n                    containsFiles = true; // secure way\r\n                    this.Data.AddLogMessage(\"Failed to access files in \\\"\" + startDir.FullName + \"\\\"\");\r\n                    this.ReportProgress(0, new FoundEmptyDirInfoEventArgs(startDir.FullName, DirectorySearchStatusTypes.Error, \"Failed to access files\"));\r\n                }\r\n                else if (fileList.Length == 0)\r\n                {\r\n                    containsFiles = false;\r\n                }\r\n                else\r\n                {\r\n                    string delPattern = \"\";\r\n\r\n                    // loop trough files and cancel if containsFiles == true\r\n                    for (int f = 0; (f < fileList.Length && !containsFiles); f++)\r\n                    {\r\n                        FileInfo file = null;\r\n                        int filesize = 0;\r\n\r\n                        try\r\n                        {\r\n                            file = fileList[f];\r\n                            filesize = (int)file.Length;\r\n                        }\r\n                        catch\r\n                        {\r\n                            // keep folder if there is a strange file that\r\n                            // triggers a exception:\r\n                            containsFiles = true;\r\n                            break;\r\n                        }\r\n\r\n                        // If only one file is good, then stop.\r\n                        if (!SystemFunctions.MatchesIgnorePattern(file, filesize, this.Data.IgnoreEmptyFiles, this.ignoreFileList, out delPattern))\r\n                            containsFiles = true;\r\n                    }\r\n                }\r\n\r\n                // If the folder does not contain any files -> get subfolders:\r\n                DirectoryInfo[] subFolderList = null;\r\n\r\n                try\r\n                {\r\n                    subFolderList = startDir.GetDirectories();\r\n                }\r\n                catch\r\n                {\r\n                    // If we can not read the folder -> don't delete it:\r\n                    this.Data.AddLogMessage(\"Failed to access subdirectories in \\\"\" + startDir.FullName + \"\\\"\");\r\n                    this.ReportProgress(0, new FoundEmptyDirInfoEventArgs(startDir.FullName, DirectorySearchStatusTypes.Error, \"Failed to access subdirectories\"));\r\n                    return DirectorySearchStatusTypes.Error;\r\n                }\r\n\r\n                // The folder is empty, break here:\r\n                if (!containsFiles && subFolderList.Length == 0)\r\n                {\r\n                    return DirectorySearchStatusTypes.Empty;\r\n                }\r\n\r\n                bool allSubDirectoriesEmpty = true;\r\n\r\n                foreach (var curDir in subFolderList)\r\n                {\r\n                    var attribs = curDir.Attributes;\r\n\r\n                    bool ignoreSystemDir = (this.Data.KeepSystemFolders && ((attribs & FileAttributes.System) == FileAttributes.System));\r\n                    bool ignoreHiddenDir = (this.Data.IgnoreHiddenFolders && ((attribs & FileAttributes.Hidden) == FileAttributes.Hidden));\r\n\r\n                    bool ignoreSubDirectory = (ignoreSystemDir || ignoreHiddenDir);\r\n\r\n                    if (!ignoreSubDirectory && checkIfDirectoryIsOnIgnoreList(curDir))\r\n                    {\r\n                        this.Data.AddLogMessage(\"Aborted scan of \\\"\" + curDir.FullName + \"\\\" because it is on the ignore list.\");\r\n                        this.ReportProgress(0, new FoundEmptyDirInfoEventArgs(curDir.FullName, DirectorySearchStatusTypes.Ignore));\r\n                        ignoreSubDirectory = true;\r\n                    }\r\n\r\n                    if (!ignoreSubDirectory && (attribs & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint)\r\n                    {\r\n                        this.Data.AddLogMessage(\"Aborted scan of \\\"\" + curDir.FullName + \"\\\" because it is a symbolic link\");\r\n                        this.ReportProgress(0, new FoundEmptyDirInfoEventArgs(curDir.FullName, DirectorySearchStatusTypes.Error, \"Aborted because dir is a symbolic link\"));\r\n                        ignoreSubDirectory = true;\r\n                    }\r\n\r\n                    // TODO: Implement more checks\r\n                    //else if ((attribs & FileAttributes.Device) == FileAttributes.Device) msg = \"Device - Aborted - found\";\r\n                    //else if ((attribs & FileAttributes.Encrypted) == FileAttributes.Encrypted) msg = \"Encrypted -  found\";\r\n                    // The file will not be indexed by the operating system's content indexing service.\r\n                    // else if ((attribs & FileAttributes.NotContentIndexed) == FileAttributes.NotContentIndexed) msg = \"NotContentIndexed - Device found\";\r\n                    //else if ((attribs & FileAttributes.Offline) == FileAttributes.Offline) msg = \"Offline -  found\";\r\n                    //else if ((attribs & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) msg = \"ReadOnly -  found\";\r\n                    //else if ((attribs & FileAttributes.Temporary) == FileAttributes.Temporary) msg = \"Temporary -  found\";\r\n\r\n                    // Scan sub folder:\r\n                    var subFolderStatus = DirectorySearchStatusTypes.NotEmpty;\r\n\r\n                    if (!ignoreSubDirectory)\r\n                    {\r\n                        // JRS ADDED check for AGE of folder\r\n                        if(curDir.CreationTime.AddHours(this.Data.MinFolderAgeHours) < DateTime.Now)\r\n                        {\r\n                            subFolderStatus = this.checkIfDirectoryEmpty(curDir, depth + 1);\r\n                        }\r\n                        else \r\n                        {\r\n                            this.Data.AddLogMessage(String.Format(RED2.Properties.Resources.young_folder_skipped, curDir.FullName, this.Data.MinFolderAgeHours.ToString(), curDir.CreationTime.ToString()));\r\n                        }\r\n\r\n                        // Report status to the GUI\r\n                        if (subFolderStatus == DirectorySearchStatusTypes.Empty)\r\n                            this.ReportProgress(0, new FoundEmptyDirInfoEventArgs(curDir.FullName, subFolderStatus));\r\n                    }\r\n\r\n                    // this folder is not empty:\r\n                    if (subFolderStatus != DirectorySearchStatusTypes.Empty || ignoreSubDirectory)\r\n                        allSubDirectoriesEmpty = false;\r\n                }\r\n\r\n                // All subdirectories are empty\r\n                return (allSubDirectoriesEmpty && !containsFiles) ? DirectorySearchStatusTypes.Empty : DirectorySearchStatusTypes.NotEmpty;\r\n\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                // Error handling\r\n\r\n                if (ex is System.IO.PathTooLongException)\r\n                    this.PossibleEndlessLoop++;\r\n\r\n                this.Data.AddLogMessage(\"An unknown error occurred while trying to scan this directory: \\\"\" + startDir.FullName + \"\\\" - Error message: \" + ex.Message);\r\n                this.ReportProgress(0, new FoundEmptyDirInfoEventArgs(startDir.FullName, DirectorySearchStatusTypes.Error, ex.Message));\r\n\r\n                return DirectorySearchStatusTypes.Error;\r\n            }\r\n        }\r\n\r\n        private bool checkIfDirectoryIsOnIgnoreList(DirectoryInfo Folder)\r\n        {\r\n            bool ignoreFolder = false;\r\n\r\n            if (this.ignoreFolderList.Length > 0)\r\n            {\r\n                foreach (string currentPath in this.ignoreFolderList)\r\n                {\r\n                    if (currentPath == \"\") continue;\r\n\r\n                    // skip directory if a part of it is on the filterlist\r\n                    // TODO: Use better compare method\r\n                    if (Folder.FullName.ToLower().Contains(currentPath.ToLower()))\r\n                        ignoreFolder = true;\r\n                }\r\n            }\r\n            return ignoreFolder;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "RED2/Lib/RuntimeData.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing Alphaleonis.Win32.Filesystem;\r\nusing System.Text;\r\n\r\nnamespace RED2\r\n{\r\n    /// <summary>\r\n    /// Container for runtime related data\r\n    /// </summary>\r\n    public class RuntimeData\r\n    {\r\n        // Configuration\r\n\r\n        public DirectoryInfo StartFolder { get; set; }\r\n\r\n        public bool IgnoreAllErrors { get; set; }\r\n        public bool DisableLogging { get; set; }\r\n        public DeleteModes DeleteMode { get; set; }\r\n\r\n        public string IgnoreFiles { get; set; }\r\n        public string IgnoreDirectoriesList { get; set; }\r\n\r\n        public bool IgnoreEmptyFiles { get; set; }\r\n\r\n        public bool IgnoreHiddenFolders { get; set; }\r\n        public bool KeepSystemFolders { get; set; }\r\n        public bool HideScanErrors { get; set; }\r\n        public double PauseTime { get; set; }\r\n        public uint MinFolderAgeHours { get; set; }\r\n\r\n        public int MaxDepth { get; set; }\r\n        public int InfiniteLoopDetectionCount { get; set; }\r\n\r\n        public StringBuilder LogMessages = null;\r\n        public Dictionary<string, bool> ProtectedFolderList = new Dictionary<string, bool>();\r\n\r\n        /// <summary>\r\n        /// List containing all empty directories that were found\r\n        /// </summary>\r\n        public List<string> EmptyFolderList { get; set; }\r\n\r\n        public RuntimeData()\r\n        {\r\n            this.LogMessages = new StringBuilder();\r\n            this.ProtectedFolderList = new Dictionary<string, bool>();\r\n            this.EmptyFolderList = new List<string>();\r\n        }\r\n\r\n        private string[] fixNewLines(string input)\r\n        {\r\n            return input.Replace(\"\\r\\n\", \"\\n\").Replace(\"\\r\", \"\\n\").Split('\\n');\r\n        }\r\n\r\n        public string[] GetIgnoreFileList()\r\n        {\r\n            return this.fixNewLines(this.IgnoreFiles);\r\n        }\r\n\r\n        public string[] GetIgnoreDirectories()\r\n        {\r\n            return this.fixNewLines(this.IgnoreDirectoriesList);\r\n        }\r\n\r\n        public void AddLogMessage(string msg)\r\n        {\r\n            this.LogMessages.AppendLine(DateTime.Now.ToString(\"r\") + \"\\t\" + msg);\r\n        }\r\n\r\n        internal void AddLogSpacer()\r\n        {\r\n            if (this.LogMessages.Length > 0)\r\n                this.LogMessages.Append(Environment.NewLine);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "RED2/Lib/SystemFunctions.cs",
    "content": "﻿using System;\r\nusing System.Diagnostics;\r\nusing System.Security.Permissions;\r\nusing System.Text.RegularExpressions;\r\nusing System.Windows.Forms;\r\nusing Microsoft.VisualBasic.FileIO;\r\nusing Microsoft.Win32;\r\nusing Alphaleonis.Win32.Filesystem;\r\nusing FileAccess = System.IO.FileAccess;\r\nusing FileMode = System.IO.FileMode;\r\nusing FileShare = System.IO.FileShare;\r\n\r\nnamespace RED2\r\n{\r\n    public enum DeleteModes\r\n    {\r\n        RecycleBin = 0,\r\n        RecycleBinShowErrors = 1,\r\n        RecycleBinWithQuestion = 2,\r\n        Direct = 3,\r\n        Simulate = 4\r\n    }\r\n\r\n    [Serializable]\r\n    public class REDPermissionDeniedException : Exception\r\n    {\r\n        public REDPermissionDeniedException() { }\r\n        public REDPermissionDeniedException(string message) : base(message) { }\r\n        public REDPermissionDeniedException(string message, Exception inner) : base(message, inner) { }\r\n    }\r\n\r\n    /// <summary>\r\n    /// A collection of (generic) system functions\r\n    /// \r\n    /// Exception handling should be made by the caller\r\n    /// </summary>\r\n    public class SystemFunctions\r\n    {\r\n        // Registry keys\r\n        private const string registryMenuName = \"Folder\\\\shell\\\\Remove empty dirs\";\r\n        private const string registryCommand = \"Folder\\\\shell\\\\Remove empty dirs\\\\command\";\r\n\r\n        public static string ConvertLineBreaks(string str)\r\n        {\r\n            return str.Replace(@\"\\r\\n\", \"\\r\\n\").Replace(@\"\\n\", \"\\n\");\r\n        }\r\n\r\n        public static bool MatchesIgnorePattern(FileInfo file, int filesize, bool Ignore0kbFiles, string[] ignoreFileList, out string delPattern)\r\n        {\r\n            bool matches_pattern = false;\r\n            Regex regexPattern = null;\r\n            delPattern = \"\";\r\n\r\n            for (int pos = 0; (pos < ignoreFileList.Length && !matches_pattern); pos++)\r\n            {\r\n                string pattern = ignoreFileList[pos];\r\n\r\n                // TODO: Check patterns for errors\r\n\r\n                // Skip empty patterns\r\n                if (pattern == \"\") continue;\r\n\r\n                if (Ignore0kbFiles && filesize == 0)\r\n                {\r\n                    delPattern = \"[Empty file]\";\r\n                    matches_pattern = true;\r\n                }\r\n                else if (pattern.ToLower() == file.Name.ToLower())\r\n                {\r\n                    // Direct match - ignore case\r\n                    delPattern = pattern;\r\n                    matches_pattern = true;\r\n                }\r\n                else if (pattern.Contains(\"*\") || (pattern.StartsWith(\"/\") && pattern.EndsWith(\"/\")))\r\n                {\r\n                    // Pattern is a regex\r\n                    if (pattern.StartsWith(\"/\") && pattern.EndsWith(\"/\"))\r\n                    {\r\n                        regexPattern = new Regex(pattern.Substring(1, pattern.Length - 2));\r\n                    }\r\n                    else\r\n                    {\r\n                        pattern = Regex.Escape(pattern).Replace(\"\\\\*\", \".*\");\r\n                        regexPattern = new Regex(\"^\" + pattern + \"$\");\r\n                    }\r\n\r\n                    if (regexPattern.IsMatch(file.Name))\r\n                    {\r\n                        delPattern = pattern;\r\n                        matches_pattern = true;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return matches_pattern;\r\n        }\r\n\r\n        public static void ManuallyDeleteDirectory(string path, DeleteModes deleteMode)\r\n        {\r\n            if (deleteMode == DeleteModes.Simulate) return;\r\n\r\n            if (path == \"\") throw new Exception(\"Could not delete directory because the path was empty.\");\r\n\r\n            //TODO: Add FileIOPermission code?\r\n\r\n            FileSystem.DeleteDirectory(path, UIOption.AllDialogs, RecycleOption.SendToRecycleBin, UICancelOption.ThrowException);\r\n        }\r\n\r\n        public static bool IsDirLocked(string path)\r\n        {\r\n            try\r\n            {\r\n                // UGLY hack to determine whether we have write access\r\n                // to a specific directory\r\n\r\n                var r = new Random();\r\n                var tempName = path + \"deltest\";\r\n\r\n                int counter = 0;\r\n                while (Directory.Exists(tempName))\r\n                {\r\n\r\n                    tempName = path + \"deltest\" + r.Next(0, 9999).ToString();\r\n                    if (counter > 100) return true; // Something strange is going on... stop here...\r\n                    counter++;\r\n                }\r\n\r\n                Directory.Move(path, tempName);\r\n                Directory.Move(tempName, path);\r\n\r\n                return false;\r\n            }\r\n            catch //(Exception ex)\r\n            {\r\n                // Could not rename -> probably we have no \r\n                // write access to the directory\r\n                return true;\r\n            }\r\n        }\r\n\r\n        public static bool IsFileLocked(FileInfo file)\r\n        {\r\n            try\r\n            {\r\n                using (file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None))\r\n                {\r\n                    return false;\r\n                }\r\n            }\r\n            catch //(IOException)\r\n            {\r\n                // Could not open file -> probably we have no \r\n                // write access to the file\r\n                return true;\r\n            }\r\n        }\r\n\r\n        public static void SecureDeleteDirectory(string path, DeleteModes deleteMode)\r\n        {\r\n            if (deleteMode == DeleteModes.Simulate) return;\r\n            if (deleteMode == DeleteModes.Direct)\r\n            {\r\n                Directory.Delete(path, recursive: false, ignoreReadOnly: true); //throws IOException if not empty anymore\r\n                return;\r\n            }\r\n\r\n            // Last security check before deletion\r\n            if (Directory.GetFiles(path).Length == 0 && Directory.GetDirectories(path).Length == 0)\r\n            {\r\n                if (deleteMode == DeleteModes.RecycleBin)\r\n                {\r\n                    // Check CLR permissions -> could raise a exception\r\n                    new FileIOPermission(FileIOPermissionAccess.Write, path + Path.DirectorySeparatorChar.ToString()).Demand();\r\n\r\n                    //if (!CheckWriteAccess(Directory.GetAccessControl(path)))\r\n                    if (IsDirLocked(path))\r\n                        throw new REDPermissionDeniedException(\"Could not delete directory \\\"\" + path + \"\\\" because the access is protected by the (file) system (permission denied).\");\r\n\r\n                    FileSystem.DeleteDirectory(path, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin, UICancelOption.ThrowException);\r\n                }\r\n                else if (deleteMode == DeleteModes.RecycleBinShowErrors)\r\n                {\r\n                    FileSystem.DeleteDirectory(path, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin, UICancelOption.ThrowException);\r\n                }\r\n                else if (deleteMode == DeleteModes.RecycleBinWithQuestion) FileSystem.DeleteDirectory(path, UIOption.AllDialogs, RecycleOption.SendToRecycleBin, UICancelOption.ThrowException);\r\n                else throw new Exception(\"Internal error: Unknown delete mode: \\\"\" + deleteMode.ToString() + \"\\\"\");\r\n            }\r\n            else\r\n                throw new Exception(\"Aborted deletion of the directory \\\"\" + path + \"\\\" because it is no longer empty. This can happen if RED previously failed to delete a empty (trash) file.\");\r\n        }\r\n\r\n        public static void SecureDeleteFile(FileInfo file, DeleteModes deleteMode)\r\n        {\r\n            if (deleteMode == DeleteModes.Simulate) return;\r\n\r\n            if (deleteMode == DeleteModes.RecycleBin)\r\n            {\r\n                // Check CLR permissions -> could raise a exception\r\n                new FileIOPermission(FileIOPermissionAccess.Write, file.FullName).Demand();\r\n\r\n                if (IsFileLocked(file))\r\n                    throw new REDPermissionDeniedException(\"Could not delete file \\\"\" + file.FullName + \"\\\" because the access is protected by the (file) system (permission denied).\");\r\n\r\n                FileSystem.DeleteFile(file.FullName, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin, UICancelOption.ThrowException);\r\n            }\r\n            else if (deleteMode == DeleteModes.RecycleBinShowErrors)\r\n            {\r\n                FileSystem.DeleteFile(file.FullName, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin, UICancelOption.ThrowException);\r\n            }\r\n            else if (deleteMode == DeleteModes.RecycleBinWithQuestion) FileSystem.DeleteFile(file.FullName, UIOption.AllDialogs, RecycleOption.SendToRecycleBin, UICancelOption.ThrowException);\r\n            else if (deleteMode == DeleteModes.Direct)\r\n            {\r\n                // Was used for testing the error handling:\r\n                // if (SystemFunctions.random.NextDouble() > 0.5) throw new Exception(\"Test error\");\r\n                file.Delete(ignoreReadOnly: true);\r\n            }\r\n            else throw new Exception(\"Internal error: Unknown delete mode: \\\"\" + deleteMode.ToString() + \"\\\"\");\r\n        }\r\n\r\n        public static string ChooseDirectoryDialog(string path)\r\n        {\r\n            FolderBrowserDialog folderDialog = new FolderBrowserDialog();\r\n\r\n            folderDialog.Description = RED2.Properties.Resources.please_select;\r\n            folderDialog.ShowNewFolderButton = false;\r\n\r\n            if (path != \"\")\r\n            {\r\n                DirectoryInfo dir = new DirectoryInfo(path);\r\n\r\n                if (dir.Exists)\r\n                    folderDialog.SelectedPath = path;\r\n            }\r\n\r\n            if (folderDialog.ShowDialog() == DialogResult.OK)\r\n                path = folderDialog.SelectedPath;\r\n\r\n            folderDialog.Dispose();\r\n            folderDialog = null;\r\n\r\n            return path;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Opens a folder\r\n        /// </summary>\r\n        public static void OpenDirectoryWithExplorer(string path)\r\n        {\r\n            if (path == \"\")\r\n                return;\r\n\r\n            string windows_folder = Environment.GetEnvironmentVariable(\"SystemRoot\");\r\n\r\n            Process.Start(windows_folder + \"\\\\explorer.exe\", \"/e,\\\"\" + path + \"\\\"\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check for the registry key\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public static bool IsRegKeyIntegratedIntoWindowsExplorer()\r\n        {\r\n            return (Registry.ClassesRoot.OpenSubKey(registryMenuName) != null);\r\n        }\r\n\r\n        internal static void AddOrRemoveRegKey(bool add)\r\n        {\r\n            RegistryKey regmenu = null;\r\n            RegistryKey regcmd = null;\r\n\r\n            if (add)\r\n            {\r\n                try\r\n                {\r\n                    regmenu = Registry.ClassesRoot.CreateSubKey(registryMenuName);\r\n\r\n                    if (regmenu != null)\r\n                        regmenu.SetValue(\"\", \"Remove empty dirs\");\r\n\r\n                    regcmd = Registry.ClassesRoot.CreateSubKey(registryCommand);\r\n\r\n                    if (regcmd != null)\r\n                        regcmd.SetValue(\"\", Application.ExecutablePath + \" \\\"%1\\\"\");\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    MessageBox.Show(ex.ToString());\r\n                }\r\n                finally\r\n                {\r\n                    if (regmenu != null)\r\n                        regmenu.Close();\r\n\r\n                    if (regcmd != null)\r\n                        regcmd.Close();\r\n                }\r\n            }\r\n            else\r\n            {\r\n                try\r\n                {\r\n                    var reg = Registry.ClassesRoot.OpenSubKey(registryCommand);\r\n\r\n                    if (reg != null)\r\n                    {\r\n                        reg.Close();\r\n                        Registry.ClassesRoot.DeleteSubKey(registryCommand);\r\n                    }\r\n                    reg = Registry.ClassesRoot.OpenSubKey(registryMenuName);\r\n                    if (reg != null)\r\n                    {\r\n                        reg.Close();\r\n                        Registry.ClassesRoot.DeleteSubKey(registryMenuName);\r\n                    }\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    MessageBox.Show(RED2.Properties.Resources.error + \"\\nCould not change registry settings: \" + ex.ToString());\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "RED2/Lib/TreeManager.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Drawing;\r\nusing System.Windows.Forms;\r\nusing Alphaleonis.Win32.Filesystem;\r\nusing FileAttributes = System.IO.FileAttributes;\r\n\r\nnamespace RED2\r\n{\r\n    /// <summary>\r\n    /// Handles tree related things\r\n    /// \r\n    /// TODO: Handle null references within tree nodes\r\n    /// </summary>\r\n    public class TreeManager\r\n    {\r\n        private TreeView treeView = null;\r\n        private TreeNode rootNode = null;\r\n        private string rootPath = \"\";\r\n\r\n        private Label fastModeInfoLabel = null;\r\n\r\n        private Dictionary<String, TreeNode> directoryToTreeNodeMapping = null;\r\n\r\n        /// <summary>\r\n        /// This dictionary holds the original properties of protected\r\n        /// nodes so that they can be restored if the user undoes the action\r\n        /// </summary>\r\n        private Dictionary<string, object> nodePropsBackup = new Dictionary<string, object>();\r\n\r\n        public event EventHandler<ProtectionStatusChangedEventArgs> OnProtectionStatusChanged;\r\n        public event EventHandler<DeleteRequestFromTreeEventArgs> OnDeleteRequest;\r\n\r\n\t\tprivate bool fastMode { get; set; } = true;\r\n\r\n        public TreeManager(TreeView dirTree, Label fastModeInfoLabel)\r\n        {\r\n            this.treeView = dirTree;\r\n            this.treeView.MouseClick += new System.Windows.Forms.MouseEventHandler(this.tvFolders_MouseClick);\r\n\r\n            this.fastModeInfoLabel = fastModeInfoLabel;\r\n\r\n            this.resetTree();\r\n\r\n            this.rootPath = \"\";\r\n        }\r\n\r\n        #region Incoming \"events\"\r\n        public void SetFastMode(bool fastModeActive)\r\n        {\r\n            this.fastMode = fastModeActive;\r\n\r\n            if (this.fastMode)\r\n            {\r\n                this.treeView.SuspendLayout();\r\n            }\r\n            else\r\n            {\r\n                this.clearFastMode();\r\n                this.treeView.ResumeLayout();\r\n            }\r\n        }\r\n\r\n        public void OnSearchStart(DirectoryInfo directory)\r\n        {\r\n            this.resetTree();\r\n\r\n            // Disable UI updates when fast mode is enabled\r\n            if (this.fastMode)\r\n            {\r\n                suspendTreeViewForFastMode();\r\n            }\r\n\r\n            this.createRootNode(directory, DirectoryIcons.home);\r\n        }\r\n\r\n        public void OnSearchFinished()\r\n        {\r\n            this.showFastModeResults();\r\n        }\r\n\r\n        public void OnDeletionProcessStart()\r\n        {\r\n            if (this.fastMode)\r\n            {\r\n                this.treeView.Nodes.Clear();\r\n                suspendTreeViewForFastMode();\r\n            }\r\n        }\r\n        public void OnDeletionProcessFinished()\r\n        {\r\n            this.showFastModeResults();\r\n        }  \r\n\r\n        public void OnProcessCancelled()\r\n        {\r\n            this.showFastModeResults();\r\n        }\r\n\r\n        #endregion\r\n        private void suspendTreeViewForFastMode()\r\n        {\r\n            this.treeView.SuspendLayout();\r\n\r\n            this.treeView.BackColor = System.Drawing.SystemColors.Control;\r\n            this.fastModeInfoLabel.Visible = true;\r\n        }\r\n\r\n        private void clearFastMode()\r\n        {\r\n            this.treeView.BackColor = System.Drawing.SystemColors.Window;\r\n            this.fastModeInfoLabel.Visible = false;\r\n        }\r\n\r\n        private void showFastModeResults()\r\n        {\r\n            if (!this.fastMode) return;\r\n\r\n            this.treeView.ResumeLayout();\r\n            this.clearFastMode();\r\n\r\n            this.addRootNode();\r\n\r\n            // Scroll to root node and expand all dirs\r\n            this.rootNode.EnsureVisible();\r\n            this.treeView.ExpandAll();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Hack to selected the correct node\r\n        /// </summary>\r\n        private void tvFolders_MouseClick(object sender, MouseEventArgs e)\r\n        {\r\n            this.treeView.SelectedNode = this.treeView.GetNodeAt(e.X, e.Y);\r\n        }\r\n\r\n        private void resetTree()\r\n        {\r\n            this.rootNode = null;\r\n            this.directoryToTreeNodeMapping = new Dictionary<string, TreeNode>();\r\n            this.nodePropsBackup = new Dictionary<string, object>();\r\n\r\n            this.treeView.Nodes.Clear();\r\n        }\r\n\r\n        private void createRootNode(DirectoryInfo directory, DirectoryIcons imageKey)\r\n        {\r\n            this.rootPath = directory.FullName.Trim('\\\\');\r\n\r\n            rootNode = new TreeNode(directory.Name);\r\n            rootNode.Tag = directory;\r\n            rootNode.ImageKey = imageKey.ToString();\r\n            rootNode.SelectedImageKey = imageKey.ToString();\r\n\r\n            directoryToTreeNodeMapping = new Dictionary<String, TreeNode>();\r\n            directoryToTreeNodeMapping.Add(directory.FullName, rootNode);\r\n\r\n\t\t\tif (!this.fastMode)\r\n            {\r\n                // During fast mode the root node will be added after the search finished \r\n                addRootNode();\r\n            }\r\n        }\r\n\r\n\t\tprivate void addRootNode()\r\n\t\t{\r\n\t\t\tif (rootNode == null || (treeView.Nodes.Count == 1 && treeView.Nodes[0] == rootNode))\r\n\t\t\t\treturn;\r\n\r\n\t\t\tthis.treeView.Nodes.Clear();\r\n            this.treeView.Nodes.Add(rootNode);\r\n        }\r\n\r\n        private void scrollToNode(TreeNode node)\r\n        {\r\n            // Ignore when fast mode is enabled\r\n            if (!this.fastMode)\r\n            {\r\n                node.EnsureVisible();\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Marks a folder with the warning or deleted icon\r\n        /// </summary>\r\n        /// <param name=\"path\">Dir path</param>\r\n        /// <param name=\"iconKey\">Icon</param>\r\n        internal void UpdateItemIcon(string path, DirectoryIcons iconKey)\r\n        {\r\n            var treeNode = this.findOrCreateDirectoryNodeByPath(path);\r\n\r\n            treeNode.ImageKey = iconKey.ToString();\r\n            treeNode.SelectedImageKey = iconKey.ToString();\r\n\r\n            this.scrollToNode(treeNode);\r\n        }\r\n\r\n        // TODO: Find better code structure for the following two routines\r\n        private TreeNode findOrCreateDirectoryNodeByPath(string path)\r\n        {\r\n            if (path == null) return null;\r\n\r\n            if (directoryToTreeNodeMapping.ContainsKey(path))\r\n                return directoryToTreeNodeMapping[path];\r\n            else\r\n                return AddOrUpdateDirectoryNode(path, DirectorySearchStatusTypes.NotEmpty, \"\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Add or update directory tree node\r\n        /// </summary>\r\n        /// <param name=\"path\">Directory path</param>\r\n        /// <param name=\"statusType\">Result status</param>\r\n        /// <param name=\"optionalErrorMsg\">Error message (optional)</param>\r\n        /// <returns></returns>\r\n        public TreeNode AddOrUpdateDirectoryNode(string path, DirectorySearchStatusTypes statusType, string optionalErrorMsg)\r\n        {\r\n            if (directoryToTreeNodeMapping.ContainsKey(path))\r\n            {\r\n                // Just update the style if the node already exists\r\n                var node = directoryToTreeNodeMapping[path];\r\n                applyNodeStyle(node, path, statusType, optionalErrorMsg);\r\n                return node;\r\n            }\r\n\r\n            var directory = new DirectoryInfo(path);\r\n\r\n            // Create new tree node\r\n            var newTreeNode = new TreeNode(directory.Name);\r\n\r\n            applyNodeStyle(newTreeNode, path, statusType, optionalErrorMsg);\r\n\r\n            newTreeNode.Tag = directory;\r\n\r\n            if (directory.Parent.FullName.Trim('\\\\').Equals(this.rootPath, StringComparison.OrdinalIgnoreCase))\r\n            {\r\n                this.rootNode.Nodes.Add(newTreeNode);\r\n            }\r\n            else\r\n            {\r\n                var parentNode = this.findOrCreateDirectoryNodeByPath(directory.Parent.FullName);\r\n                parentNode.Nodes.Add(newTreeNode);\r\n            }\r\n\r\n            directoryToTreeNodeMapping.Add(path, newTreeNode);\r\n\r\n            this.scrollToNode(newTreeNode);\r\n\r\n            return newTreeNode;\r\n        }\r\n\r\n        private void applyNodeStyle(TreeNode treeNode, string path, DirectorySearchStatusTypes statusType, string optionalErrorMsg)\r\n        {\r\n            var directory = new DirectoryInfo(path);\r\n\r\n            // TODO: use enums for icon names\r\n            treeNode.ForeColor = (statusType == DirectorySearchStatusTypes.Empty) ? Color.Red : Color.Gray;\r\n            var iconKey = \"\";\r\n\r\n            if (statusType == DirectorySearchStatusTypes.Empty)\r\n            {\r\n                var fileCount = directory.GetFiles().Length;\r\n                var containsTrash = (fileCount > 0);\r\n\r\n                iconKey = containsTrash ? \"folder_trash_files\" : \"folder\";\r\n\r\n                // TODO: use data from scan thread\r\n                if ((directory.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) \r\n                    iconKey = containsTrash ? \"folder_hidden_trash_files\" : \"folder_hidden\";\r\n                if ((directory.Attributes & FileAttributes.Encrypted) == FileAttributes.Encrypted) \r\n                    iconKey = containsTrash ? \"folder_lock_trash_files\" : \"folder_lock\";\r\n                if ((directory.Attributes & FileAttributes.System) == FileAttributes.System) \r\n                    iconKey = containsTrash ? \"folder_lock_trash_files\" : \"folder_lock\";\r\n\r\n                if (containsTrash && fileCount == 1)\r\n                {\r\n                    treeNode.Text += \" (contains \" + fileCount.ToString() + \" empty file)\";\r\n                }\r\n                else if (containsTrash)\r\n                {\r\n                    treeNode.Text += \" (contains \" + fileCount.ToString() + \" empty files)\";\r\n                }\r\n            }\r\n            else if (statusType == DirectorySearchStatusTypes.Error)\r\n            {\r\n                iconKey = \"folder_warning\";\r\n\r\n                if (optionalErrorMsg != \"\")\r\n                {\r\n                    optionalErrorMsg = optionalErrorMsg.Replace(\"\\r\", \"\").Replace(\"\\n\", \"\");\r\n                    if (optionalErrorMsg.Length > 55) optionalErrorMsg = optionalErrorMsg.Substring(0, 55) + \"...\";\r\n                    treeNode.Text += \" (\" + optionalErrorMsg + \")\";\r\n                }\r\n            }\r\n            else if (statusType == DirectorySearchStatusTypes.Ignore)\r\n            {\r\n                iconKey = \"protected_icon\";\r\n                treeNode.ForeColor = Color.Blue;\r\n            }\r\n\r\n            if (treeNode != this.rootNode)\r\n            {\r\n                treeNode.ImageKey = iconKey;\r\n                treeNode.SelectedImageKey = iconKey;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the selected folder path\r\n        /// </summary>\r\n        public string GetSelectedFolderPath()\r\n        {\r\n            if (this.treeView.SelectedNode != null && this.treeView.SelectedNode.Tag != null && this.treeView.SelectedNode.Tag is DirectoryInfo)\r\n                return ((DirectoryInfo)this.treeView.SelectedNode.Tag).FullName;\r\n\r\n            return \"\";\r\n        }\r\n\r\n        internal void DeleteSelectedDirectory()\r\n        {\r\n            if (this.treeView.SelectedNode != null && this.treeView.SelectedNode.Tag != null && this.treeView.SelectedNode.Tag is DirectoryInfo)\r\n            {\r\n                var folder = (DirectoryInfo)this.treeView.SelectedNode.Tag;\r\n\r\n                if (OnDeleteRequest != null)\r\n                    OnDeleteRequest(this, new DeleteRequestFromTreeEventArgs(folder.FullName));\r\n            }\r\n        }\r\n\r\n        internal void RemoveNode(string path)\r\n        {\r\n            if (this.nodePropsBackup.ContainsKey(path))\r\n                this.nodePropsBackup.Remove(path);\r\n\r\n            if (this.directoryToTreeNodeMapping.ContainsKey(path))\r\n            {\r\n                this.directoryToTreeNodeMapping[path].Remove();\r\n                this.directoryToTreeNodeMapping.Remove(path);\r\n            }\r\n        }\r\n\r\n        #region Directory protection\r\n\r\n        internal void ProtectSelected()\r\n        {\r\n            if (treeView.SelectedNode != null)\r\n                this.ProtectNode(treeView.SelectedNode);\r\n        }\r\n\r\n        internal void UnprotectSelected()\r\n        {\r\n            unprotectNode(treeView.SelectedNode);\r\n        }\r\n\r\n        private void unprotectNode(TreeNode node)\r\n        {\r\n            if (node != null)\r\n            {\r\n                var directory = ((DirectoryInfo)node.Tag);\r\n\r\n                if (!this.nodePropsBackup.ContainsKey(directory.FullName))\r\n                {\r\n                    // TODO: What to do when this info is missing, show error?\r\n                    return;\r\n                }\r\n\r\n                // Restore props from backup values\r\n                string[] propList = ((string)this.nodePropsBackup[directory.FullName]).Split('|');\r\n\r\n                this.nodePropsBackup.Remove(directory.FullName);\r\n\r\n                node.ImageKey = propList[0];\r\n                node.SelectedImageKey = propList[0];\r\n                node.ForeColor = Color.FromArgb(Int32.Parse(propList[1]));\r\n\r\n                if (OnProtectionStatusChanged != null)\r\n                    OnProtectionStatusChanged(this, new ProtectionStatusChangedEventArgs(directory.FullName, false));\r\n\r\n                // Unprotect all subnodes\r\n                foreach (TreeNode subNode in node.Nodes)\r\n                    this.unprotectNode(subNode);\r\n            }\r\n        }\r\n\r\n        private void ProtectNode(TreeNode node)\r\n        {\r\n            DirectoryInfo directory = (DirectoryInfo)node.Tag;\r\n\r\n            if (nodePropsBackup.ContainsKey(directory.FullName))\r\n                return;\r\n\r\n            if (OnProtectionStatusChanged != null)\r\n                OnProtectionStatusChanged(this, new ProtectionStatusChangedEventArgs(directory.FullName, true));\r\n\r\n            // Backup node props if the user changes his mind we can restore the node\r\n            // TODO: I'm sure there is a better way to do this, maybe this info can be stored \r\n            // in the node.Tag or we simply recreate this info like it's a new node.\r\n            nodePropsBackup.Add(directory.FullName, node.ImageKey + \"|\" + node.ForeColor.ToArgb().ToString());\r\n\r\n            node.ImageKey = \"protected_icon\";\r\n            node.SelectedImageKey = \"protected_icon\";\r\n            node.ForeColor = Color.Blue;\r\n\r\n            // Recursively protect directories\r\n            if (node.Parent != this.rootNode)\r\n                ProtectNode(node.Parent);\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}\r\n"
  },
  {
    "path": "RED2/Lib/UIHelpers.cs",
    "content": "﻿using System;\r\n\r\nnamespace RED2\r\n{\r\n    /// <summary>\r\n    /// Icon names (Warning: Entries are case sensitive)\r\n    /// </summary>\r\n    public enum DirectoryIcons\r\n    {\r\n        home,\r\n        deleted,\r\n        protected_icon,\r\n        folder_warning\r\n    }\r\n\r\n    /// <summary>\r\n    /// List box container class thingy\r\n    /// </summary>\r\n    public class DeleteModeItem\r\n    {\r\n        public DeleteModes DeleteMode { get; set; }\r\n\r\n        public DeleteModeItem(DeleteModes Mode)\r\n        {\r\n            this.DeleteMode = Mode;\r\n        }\r\n\r\n        public static DeleteModes[] GetList()\r\n        {\r\n            return new DeleteModes[] { \r\n                DeleteModes.RecycleBin, \r\n                DeleteModes.RecycleBinShowErrors,\r\n                DeleteModes.RecycleBinWithQuestion,\r\n                DeleteModes.Direct,\r\n                DeleteModes.Simulate\r\n            };\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            switch (this.DeleteMode)\r\n            {\r\n                case DeleteModes.RecycleBin:\r\n                    return \"Delete to recycle bin and ignore errors (safer but slower, default setting)\";\r\n\r\n                case DeleteModes.Direct:\r\n                    return \"Bypass recycle bin and directly delete dirs (more dangerous but faster)\";\r\n\r\n                case DeleteModes.RecycleBinShowErrors:\r\n                    return \"Delete to recycle bin and show all errors (can be annoying)\";\r\n\r\n                case DeleteModes.RecycleBinWithQuestion:\r\n                    return \"Delete to recycle bin and ask before every deletion\";\r\n\r\n                case DeleteModes.Simulate:\r\n                    return \"Simulate deletion (just pretend doing it, for testing)\";\r\n\r\n                // TODO: Idea -> Move files instead of deleting?\r\n\r\n                default:\r\n                    throw new Exception(\"Unknown delete mode\");\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "RED2/LogWindow.Designer.cs",
    "content": "﻿namespace RED2\r\n{\r\n    partial class LogWindow\r\n    {\r\n        /// <summary>\r\n        /// Erforderliche Designervariable.\r\n        /// </summary>\r\n        private System.ComponentModel.IContainer components = null;\r\n\r\n        /// <summary>\r\n        /// Verwendete Ressourcen bereinigen.\r\n        /// </summary>\r\n        /// <param name=\"disposing\">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>\r\n        protected override void Dispose(bool disposing)\r\n        {\r\n            if (disposing && (components != null))\r\n            {\r\n                components.Dispose();\r\n            }\r\n            base.Dispose(disposing);\r\n        }\r\n\r\n        #region Vom Windows Form-Designer generierter Code\r\n\r\n        /// <summary>\r\n        /// Erforderliche Methode für die Designerunterstützung.\r\n        /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.\r\n        /// </summary>\r\n        private void InitializeComponent()\r\n        {\r\n            this.tbLog = new System.Windows.Forms.TextBox();\r\n            this.SuspendLayout();\r\n            // \r\n            // tbLog\r\n            // \r\n            this.tbLog.Dock = System.Windows.Forms.DockStyle.Fill;\r\n            this.tbLog.Font = new System.Drawing.Font(\"Lucida Console\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n            this.tbLog.Location = new System.Drawing.Point(0, 0);\r\n            this.tbLog.Multiline = true;\r\n            this.tbLog.Name = \"tbLog\";\r\n            this.tbLog.ScrollBars = System.Windows.Forms.ScrollBars.Both;\r\n            this.tbLog.Size = new System.Drawing.Size(684, 462);\r\n            this.tbLog.TabIndex = 0;\r\n            this.tbLog.WordWrap = false;\r\n            this.tbLog.DoubleClick += new System.EventHandler(this.tbLog_DoubleClick);\r\n            // \r\n            // LogWindow\r\n            // \r\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r\n            this.ClientSize = new System.Drawing.Size(684, 462);\r\n            this.Controls.Add(this.tbLog);\r\n            this.MinimizeBox = false;\r\n            this.Name = \"LogWindow\";\r\n            this.ShowIcon = false;\r\n            this.ShowInTaskbar = false;\r\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\r\n            this.Text = \"Logs\";\r\n            this.Load += new System.EventHandler(this.LogWindow_Load);\r\n            this.ResumeLayout(false);\r\n            this.PerformLayout();\r\n\r\n        }\r\n\r\n        #endregion\r\n\r\n        private System.Windows.Forms.TextBox tbLog;\r\n    }\r\n}"
  },
  {
    "path": "RED2/LogWindow.cs",
    "content": "﻿using System;\r\nusing System.Windows.Forms;\r\n\r\nnamespace RED2\r\n{\r\n    public partial class LogWindow : Form\r\n    {\r\n        public LogWindow()\r\n        {\r\n            InitializeComponent();\r\n        }\r\n\r\n        private void LogWindow_Load(object sender, EventArgs e)\r\n        {\r\n\r\n        }\r\n\r\n        public void SetLog(string log) {\r\n            this.tbLog.Text = log;\r\n        }\r\n\r\n        private void tbLog_DoubleClick(object sender, EventArgs e)\r\n        {\r\n            this.tbLog.SelectAll();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "RED2/LogWindow.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n</root>"
  },
  {
    "path": "RED2/MainWindow.Designer.cs",
    "content": "﻿namespace RED2\r\n{\r\n\tpartial class MainWindow\r\n\t{\r\n\t\t/// <summary>\r\n\t\t/// Erforderliche Designervariable.\r\n\t\t/// </summary>\r\n\t\tprivate System.ComponentModel.IContainer components = null;\r\n\r\n\t\t/// <summary>\r\n\t\t/// Verwendete Ressourcen bereinigen.\r\n\t\t/// </summary>\r\n\t\t/// <param name=\"disposing\">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>\r\n\t\tprotected override void Dispose(bool disposing)\r\n\t\t{\r\n\t\t\tif (disposing && (components != null))\r\n\t\t\t{\r\n\t\t\t\tcomponents.Dispose();\r\n\t\t\t}\r\n\t\t\tbase.Dispose(disposing);\r\n\t\t}\r\n\r\n\t\t#region Vom Windows Form-Designer generierter Code\r\n\r\n\t\t/// <summary>\r\n\t\t/// Erforderliche Methode für die Designerunterstützung.\r\n\t\t/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.\r\n\t\t/// </summary>\r\n\t\tprivate void InitializeComponent()\r\n\t\t{\r\n            this.components = new System.ComponentModel.Container();\r\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow));\r\n            this.ilFolderIcons = new System.Windows.Forms.ImageList(this.components);\r\n            this.tcMain = new System.Windows.Forms.TabControl();\r\n            this.tabSearch = new System.Windows.Forms.TabPage();\r\n            this.lbFastModeInfo = new System.Windows.Forms.Label();\r\n            this.btnShowLog = new System.Windows.Forms.Button();\r\n            this.btnCancel = new System.Windows.Forms.Button();\r\n            this.btnScan = new System.Windows.Forms.Button();\r\n            this.btnDelete = new System.Windows.Forms.Button();\r\n            this.pnlIcons = new System.Windows.Forms.Panel();\r\n            this.label1 = new System.Windows.Forms.Label();\r\n            this.panel5 = new System.Windows.Forms.Panel();\r\n            this.panel3 = new System.Windows.Forms.Panel();\r\n            this.label18 = new System.Windows.Forms.Label();\r\n            this.panel2 = new System.Windows.Forms.Panel();\r\n            this.label17 = new System.Windows.Forms.Label();\r\n            this.panel1 = new System.Windows.Forms.Panel();\r\n            this.label12 = new System.Windows.Forms.Label();\r\n            this.label6 = new System.Windows.Forms.Label();\r\n            this.lbStatus = new System.Windows.Forms.Label();\r\n            this.pbProgressStatus = new System.Windows.Forms.ProgressBar();\r\n            this.tvFolders = new System.Windows.Forms.TreeView();\r\n            this.cmStrip = new System.Windows.Forms.ContextMenuStrip(this.components);\r\n            this.openFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r\n            this.scanOnlyThisDirectoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r\n            this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();\r\n            this.toolStripExpandAll = new System.Windows.Forms.ToolStripMenuItem();\r\n            this.toolStripCollapseAll = new System.Windows.Forms.ToolStripMenuItem();\r\n            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\r\n            this.protectFolderFromBeingDeletedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r\n            this.unprotectFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r\n            this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();\r\n            this.proToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r\n            this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();\r\n            this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r\n            this.btnExit = new System.Windows.Forms.Button();\r\n            this.tbFolder = new System.Windows.Forms.TextBox();\r\n            this.btnChooseFolder = new System.Windows.Forms.Button();\r\n            this.lblPickAFolder = new System.Windows.Forms.Label();\r\n            this.tabSettings = new System.Windows.Forms.TabPage();\r\n            this.gbDeleteMode = new System.Windows.Forms.GroupBox();\r\n            this.label15 = new System.Windows.Forms.Label();\r\n            this.cbDeleteMode = new System.Windows.Forms.ComboBox();\r\n            this.groupBoxExplorerIntegration = new System.Windows.Forms.GroupBox();\r\n            this.lblReqAdmin = new System.Windows.Forms.Label();\r\n            this.btnExplorerRemove = new System.Windows.Forms.Button();\r\n            this.btnExplorerIntegrate = new System.Windows.Forms.Button();\r\n            this.label16 = new System.Windows.Forms.Label();\r\n            this.gbOptions = new System.Windows.Forms.GroupBox();\r\n            this.label25 = new System.Windows.Forms.Label();\r\n            this.label11 = new System.Windows.Forms.Label();\r\n            this.label21 = new System.Windows.Forms.Label();\r\n            this.cbFastSearchMode = new System.Windows.Forms.CheckBox();\r\n            this.cbHideScanErrors = new System.Windows.Forms.CheckBox();\r\n            this.cbIgnoreErrors = new System.Windows.Forms.CheckBox();\r\n            this.cbClipboardDetection = new System.Windows.Forms.CheckBox();\r\n            this.cbIgnoreHiddenFolders = new System.Windows.Forms.CheckBox();\r\n            this.cbIgnore0kbFiles = new System.Windows.Forms.CheckBox();\r\n            this.tabIgnoreList = new System.Windows.Forms.TabPage();\r\n            this.label22 = new System.Windows.Forms.Label();\r\n            this.tbIgnoreFolders = new System.Windows.Forms.TextBox();\r\n            this.label10 = new System.Windows.Forms.Label();\r\n            this.tabAdvanced = new System.Windows.Forms.TabPage();\r\n            this.gbAdvancedSettings = new System.Windows.Forms.GroupBox();\r\n            this.label20 = new System.Windows.Forms.Label();\r\n            this.label26 = new System.Windows.Forms.Label();\r\n            this.label27 = new System.Windows.Forms.Label();\r\n            this.label19 = new System.Windows.Forms.Label();\r\n            this.cbKeepSystemFolders = new System.Windows.Forms.CheckBox();\r\n            this.nuFolderAge = new System.Windows.Forms.NumericUpDown();\r\n            this.label7 = new System.Windows.Forms.Label();\r\n            this.label24 = new System.Windows.Forms.Label();\r\n            this.nuPause = new System.Windows.Forms.NumericUpDown();\r\n            this.nuMaxDepth = new System.Windows.Forms.NumericUpDown();\r\n            this.label4 = new System.Windows.Forms.Label();\r\n            this.label3 = new System.Windows.Forms.Label();\r\n            this.nuInfiniteLoopDetectionCount = new System.Windows.Forms.NumericUpDown();\r\n            this.btnResetConfig = new System.Windows.Forms.Button();\r\n            this.btnCopyDebugInfo = new System.Windows.Forms.Button();\r\n            this.gbIgnoreFilenames = new System.Windows.Forms.GroupBox();\r\n            this.label23 = new System.Windows.Forms.Label();\r\n            this.label14 = new System.Windows.Forms.Label();\r\n            this.tbIgnoreFiles = new System.Windows.Forms.TextBox();\r\n            this.label2 = new System.Windows.Forms.Label();\r\n            this.label8 = new System.Windows.Forms.Label();\r\n            this.tabAbout = new System.Windows.Forms.TabPage();\r\n            this.llGithub = new System.Windows.Forms.LinkLabel();\r\n            this.linkLabel2 = new System.Windows.Forms.LinkLabel();\r\n            this.linkLabel1 = new System.Windows.Forms.LinkLabel();\r\n            this.tbCredits = new System.Windows.Forms.TextBox();\r\n            this.lblRedStats = new System.Windows.Forms.Label();\r\n            this.label5 = new System.Windows.Forms.Label();\r\n            this.llWebsite = new System.Windows.Forms.LinkLabel();\r\n            this.lbAppTitle = new System.Windows.Forms.Label();\r\n            this.tcMain.SuspendLayout();\r\n            this.tabSearch.SuspendLayout();\r\n            this.pnlIcons.SuspendLayout();\r\n            this.cmStrip.SuspendLayout();\r\n            this.tabSettings.SuspendLayout();\r\n            this.gbDeleteMode.SuspendLayout();\r\n            this.groupBoxExplorerIntegration.SuspendLayout();\r\n            this.gbOptions.SuspendLayout();\r\n            this.tabIgnoreList.SuspendLayout();\r\n            this.tabAdvanced.SuspendLayout();\r\n            this.gbAdvancedSettings.SuspendLayout();\r\n            ((System.ComponentModel.ISupportInitialize)(this.nuFolderAge)).BeginInit();\r\n            ((System.ComponentModel.ISupportInitialize)(this.nuPause)).BeginInit();\r\n            ((System.ComponentModel.ISupportInitialize)(this.nuMaxDepth)).BeginInit();\r\n            ((System.ComponentModel.ISupportInitialize)(this.nuInfiniteLoopDetectionCount)).BeginInit();\r\n            this.gbIgnoreFilenames.SuspendLayout();\r\n            this.tabAbout.SuspendLayout();\r\n            this.SuspendLayout();\r\n            // \r\n            // ilFolderIcons\r\n            // \r\n            this.ilFolderIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject(\"ilFolderIcons.ImageStream\")));\r\n            this.ilFolderIcons.TransparentColor = System.Drawing.Color.White;\r\n            this.ilFolderIcons.Images.SetKeyName(0, \"trash\");\r\n            this.ilFolderIcons.Images.SetKeyName(1, \"cancel\");\r\n            this.ilFolderIcons.Images.SetKeyName(2, \"deleted\");\r\n            this.ilFolderIcons.Images.SetKeyName(3, \"folder\");\r\n            this.ilFolderIcons.Images.SetKeyName(4, \"folder_hidden\");\r\n            this.ilFolderIcons.Images.SetKeyName(5, \"folder_lock\");\r\n            this.ilFolderIcons.Images.SetKeyName(6, \"folder_lock_trash_files\");\r\n            this.ilFolderIcons.Images.SetKeyName(7, \"folder_trash_files\");\r\n            this.ilFolderIcons.Images.SetKeyName(8, \"folder_warning\");\r\n            this.ilFolderIcons.Images.SetKeyName(9, \"help\");\r\n            this.ilFolderIcons.Images.SetKeyName(10, \"home\");\r\n            this.ilFolderIcons.Images.SetKeyName(11, \"search\");\r\n            this.ilFolderIcons.Images.SetKeyName(12, \"folder_hidden_trash_files\");\r\n            this.ilFolderIcons.Images.SetKeyName(13, \"preferences\");\r\n            this.ilFolderIcons.Images.SetKeyName(14, \"exit\");\r\n            this.ilFolderIcons.Images.SetKeyName(15, \"protected_icon\");\r\n            this.ilFolderIcons.Images.SetKeyName(16, \"filter\");\r\n            // \r\n            // tcMain\r\n            // \r\n            this.tcMain.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \r\n            | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.tcMain.Controls.Add(this.tabSearch);\r\n            this.tcMain.Controls.Add(this.tabSettings);\r\n            this.tcMain.Controls.Add(this.tabIgnoreList);\r\n            this.tcMain.Controls.Add(this.tabAdvanced);\r\n            this.tcMain.Controls.Add(this.tabAbout);\r\n            this.tcMain.ImageList = this.ilFolderIcons;\r\n            this.tcMain.Location = new System.Drawing.Point(9, 7);\r\n            this.tcMain.Multiline = true;\r\n            this.tcMain.Name = \"tcMain\";\r\n            this.tcMain.Padding = new System.Drawing.Point(10, 5);\r\n            this.tcMain.RightToLeft = System.Windows.Forms.RightToLeft.No;\r\n            this.tcMain.SelectedIndex = 0;\r\n            this.tcMain.ShowToolTips = true;\r\n            this.tcMain.Size = new System.Drawing.Size(706, 575);\r\n            this.tcMain.TabIndex = 18;\r\n            // \r\n            // tabSearch\r\n            // \r\n            this.tabSearch.AccessibleDescription = \"\";\r\n            this.tabSearch.AccessibleName = \"\";\r\n            this.tabSearch.Controls.Add(this.lbFastModeInfo);\r\n            this.tabSearch.Controls.Add(this.btnShowLog);\r\n            this.tabSearch.Controls.Add(this.btnCancel);\r\n            this.tabSearch.Controls.Add(this.btnScan);\r\n            this.tabSearch.Controls.Add(this.btnDelete);\r\n            this.tabSearch.Controls.Add(this.pnlIcons);\r\n            this.tabSearch.Controls.Add(this.label6);\r\n            this.tabSearch.Controls.Add(this.lbStatus);\r\n            this.tabSearch.Controls.Add(this.pbProgressStatus);\r\n            this.tabSearch.Controls.Add(this.tvFolders);\r\n            this.tabSearch.Controls.Add(this.btnExit);\r\n            this.tabSearch.Controls.Add(this.tbFolder);\r\n            this.tabSearch.Controls.Add(this.btnChooseFolder);\r\n            this.tabSearch.Controls.Add(this.lblPickAFolder);\r\n            this.tabSearch.ImageKey = \"search\";\r\n            this.tabSearch.Location = new System.Drawing.Point(4, 27);\r\n            this.tabSearch.Name = \"tabSearch\";\r\n            this.tabSearch.Padding = new System.Windows.Forms.Padding(3);\r\n            this.tabSearch.Size = new System.Drawing.Size(698, 544);\r\n            this.tabSearch.TabIndex = 0;\r\n            this.tabSearch.Text = \"Find\";\r\n            this.tabSearch.ToolTipText = \"Search for empty directories\";\r\n            this.tabSearch.UseVisualStyleBackColor = true;\r\n            // \r\n            // lbFastModeInfo\r\n            // \r\n            this.lbFastModeInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \r\n            | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.lbFastModeInfo.BackColor = System.Drawing.SystemColors.Control;\r\n            this.lbFastModeInfo.ForeColor = System.Drawing.Color.Gray;\r\n            this.lbFastModeInfo.Location = new System.Drawing.Point(107, 257);\r\n            this.lbFastModeInfo.Name = \"lbFastModeInfo\";\r\n            this.lbFastModeInfo.Size = new System.Drawing.Size(346, 13);\r\n            this.lbFastModeInfo.TabIndex = 18;\r\n            this.lbFastModeInfo.Text = \"[Fast mode is enabled, results will be shown after the process is finished]\";\r\n            this.lbFastModeInfo.Visible = false;\r\n            // \r\n            // btnShowLog\r\n            // \r\n            this.btnShowLog.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));\r\n            this.btnShowLog.Enabled = false;\r\n            this.btnShowLog.Location = new System.Drawing.Point(380, 498);\r\n            this.btnShowLog.Name = \"btnShowLog\";\r\n            this.btnShowLog.Size = new System.Drawing.Size(79, 34);\r\n            this.btnShowLog.TabIndex = 17;\r\n            this.btnShowLog.Text = \"Show &logs\";\r\n            this.btnShowLog.UseVisualStyleBackColor = true;\r\n            this.btnShowLog.Click += new System.EventHandler(this.btnShowLog_Click);\r\n            // \r\n            // btnCancel\r\n            // \r\n            this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));\r\n            this.btnCancel.Enabled = false;\r\n            this.btnCancel.ImageKey = \"cancel\";\r\n            this.btnCancel.ImageList = this.ilFolderIcons;\r\n            this.btnCancel.Location = new System.Drawing.Point(276, 498);\r\n            this.btnCancel.Name = \"btnCancel\";\r\n            this.btnCancel.Size = new System.Drawing.Size(98, 34);\r\n            this.btnCancel.TabIndex = 6;\r\n            this.btnCancel.Text = \"&Cancel\";\r\n            this.btnCancel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\r\n            this.btnCancel.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r\n            this.btnCancel.UseVisualStyleBackColor = true;\r\n            this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);\r\n            // \r\n            // btnScan\r\n            // \r\n            this.btnScan.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));\r\n            this.btnScan.ImageKey = \"search\";\r\n            this.btnScan.ImageList = this.ilFolderIcons;\r\n            this.btnScan.Location = new System.Drawing.Point(13, 497);\r\n            this.btnScan.Name = \"btnScan\";\r\n            this.btnScan.Size = new System.Drawing.Size(130, 35);\r\n            this.btnScan.TabIndex = 4;\r\n            this.btnScan.Text = \"&Find directories\";\r\n            this.btnScan.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\r\n            this.btnScan.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r\n            this.btnScan.UseVisualStyleBackColor = true;\r\n            this.btnScan.Click += new System.EventHandler(this.btnScan_Click);\r\n            // \r\n            // btnDelete\r\n            // \r\n            this.btnDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));\r\n            this.btnDelete.Enabled = false;\r\n            this.btnDelete.ImageKey = \"trash\";\r\n            this.btnDelete.ImageList = this.ilFolderIcons;\r\n            this.btnDelete.Location = new System.Drawing.Point(150, 497);\r\n            this.btnDelete.Name = \"btnDelete\";\r\n            this.btnDelete.Size = new System.Drawing.Size(120, 35);\r\n            this.btnDelete.TabIndex = 5;\r\n            this.btnDelete.Text = \"&Delete matches\";\r\n            this.btnDelete.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\r\n            this.btnDelete.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r\n            this.btnDelete.UseVisualStyleBackColor = true;\r\n            this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);\r\n            // \r\n            // pnlIcons\r\n            // \r\n            this.pnlIcons.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.pnlIcons.BackColor = System.Drawing.SystemColors.Info;\r\n            this.pnlIcons.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r\n            this.pnlIcons.Controls.Add(this.label1);\r\n            this.pnlIcons.Controls.Add(this.panel5);\r\n            this.pnlIcons.Controls.Add(this.panel3);\r\n            this.pnlIcons.Controls.Add(this.label18);\r\n            this.pnlIcons.Controls.Add(this.panel2);\r\n            this.pnlIcons.Controls.Add(this.label17);\r\n            this.pnlIcons.Controls.Add(this.panel1);\r\n            this.pnlIcons.Controls.Add(this.label12);\r\n            this.pnlIcons.Location = new System.Drawing.Point(557, 60);\r\n            this.pnlIcons.Name = \"pnlIcons\";\r\n            this.pnlIcons.Size = new System.Drawing.Size(126, 406);\r\n            this.pnlIcons.TabIndex = 16;\r\n            // \r\n            // label1\r\n            // \r\n            this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.label1.AutoSize = true;\r\n            this.label1.Location = new System.Drawing.Point(25, 382);\r\n            this.label1.Name = \"label1\";\r\n            this.label1.Size = new System.Drawing.Size(53, 13);\r\n            this.label1.TabIndex = 22;\r\n            this.label1.Text = \"Protected\";\r\n            // \r\n            // panel5\r\n            // \r\n            this.panel5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));\r\n            this.panel5.BackColor = System.Drawing.Color.Blue;\r\n            this.panel5.Location = new System.Drawing.Point(8, 381);\r\n            this.panel5.Name = \"panel5\";\r\n            this.panel5.Size = new System.Drawing.Size(15, 15);\r\n            this.panel5.TabIndex = 21;\r\n            // \r\n            // panel3\r\n            // \r\n            this.panel3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.panel3.BackColor = System.Drawing.SystemColors.Control;\r\n            this.panel3.Location = new System.Drawing.Point(8, 325);\r\n            this.panel3.Name = \"panel3\";\r\n            this.panel3.Size = new System.Drawing.Size(120, 2);\r\n            this.panel3.TabIndex = 18;\r\n            // \r\n            // label18\r\n            // \r\n            this.label18.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.label18.AutoSize = true;\r\n            this.label18.Location = new System.Drawing.Point(25, 359);\r\n            this.label18.Name = \"label18\";\r\n            this.label18.Size = new System.Drawing.Size(77, 13);\r\n            this.label18.TabIndex = 20;\r\n            this.label18.Text = \"Will be deleted\";\r\n            // \r\n            // panel2\r\n            // \r\n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));\r\n            this.panel2.BackColor = System.Drawing.Color.Red;\r\n            this.panel2.Location = new System.Drawing.Point(8, 358);\r\n            this.panel2.Name = \"panel2\";\r\n            this.panel2.Size = new System.Drawing.Size(15, 15);\r\n            this.panel2.TabIndex = 19;\r\n            // \r\n            // label17\r\n            // \r\n            this.label17.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.label17.AutoSize = true;\r\n            this.label17.Location = new System.Drawing.Point(24, 336);\r\n            this.label17.Name = \"label17\";\r\n            this.label17.Size = new System.Drawing.Size(99, 13);\r\n            this.label17.TabIndex = 18;\r\n            this.label17.Text = \"Will not be touched\";\r\n            // \r\n            // panel1\r\n            // \r\n            this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));\r\n            this.panel1.BackColor = System.Drawing.Color.Gray;\r\n            this.panel1.Location = new System.Drawing.Point(8, 335);\r\n            this.panel1.Name = \"panel1\";\r\n            this.panel1.Size = new System.Drawing.Size(15, 15);\r\n            this.panel1.TabIndex = 17;\r\n            // \r\n            // label12\r\n            // \r\n            this.label12.AutoSize = true;\r\n            this.label12.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n            this.label12.Location = new System.Drawing.Point(4, 6);\r\n            this.label12.Name = \"label12\";\r\n            this.label12.Size = new System.Drawing.Size(98, 13);\r\n            this.label12.TabIndex = 0;\r\n            this.label12.Text = \"Icon description\";\r\n            // \r\n            // label6\r\n            // \r\n            this.label6.AutoSize = true;\r\n            this.label6.Location = new System.Drawing.Point(11, 16);\r\n            this.label6.Name = \"label6\";\r\n            this.label6.Size = new System.Drawing.Size(177, 13);\r\n            this.label6.TabIndex = 15;\r\n            this.label6.Text = \"Please choose a directory to check:\";\r\n            // \r\n            // lbStatus\r\n            // \r\n            this.lbStatus.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.lbStatus.Location = new System.Drawing.Point(149, 475);\r\n            this.lbStatus.Name = \"lbStatus\";\r\n            this.lbStatus.Size = new System.Drawing.Size(532, 13);\r\n            this.lbStatus.TabIndex = 13;\r\n            this.lbStatus.Text = \"Status text\";\r\n            // \r\n            // pbProgressStatus\r\n            // \r\n            this.pbProgressStatus.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));\r\n            this.pbProgressStatus.Location = new System.Drawing.Point(14, 475);\r\n            this.pbProgressStatus.Name = \"pbProgressStatus\";\r\n            this.pbProgressStatus.Size = new System.Drawing.Size(129, 13);\r\n            this.pbProgressStatus.TabIndex = 12;\r\n            // \r\n            // tvFolders\r\n            // \r\n            this.tvFolders.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \r\n            | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.tvFolders.ContextMenuStrip = this.cmStrip;\r\n            this.tvFolders.ImageKey = \"folder\";\r\n            this.tvFolders.ImageList = this.ilFolderIcons;\r\n            this.tvFolders.Location = new System.Drawing.Point(14, 60);\r\n            this.tvFolders.Name = \"tvFolders\";\r\n            this.tvFolders.SelectedImageKey = \"folder\";\r\n            this.tvFolders.Size = new System.Drawing.Size(533, 406);\r\n            this.tvFolders.TabIndex = 3;\r\n            this.tvFolders.DoubleClick += new System.EventHandler(this.tvFolders_DoubleClick);\r\n            // \r\n            // cmStrip\r\n            // \r\n            this.cmStrip.ImageScalingSize = new System.Drawing.Size(20, 20);\r\n            this.cmStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r\n            this.openFolderToolStripMenuItem,\r\n            this.scanOnlyThisDirectoryToolStripMenuItem,\r\n            this.toolStripSeparator4,\r\n            this.toolStripExpandAll,\r\n            this.toolStripCollapseAll,\r\n            this.toolStripSeparator1,\r\n            this.protectFolderFromBeingDeletedToolStripMenuItem,\r\n            this.unprotectFolderToolStripMenuItem,\r\n            this.toolStripSeparator3,\r\n            this.proToolStripMenuItem,\r\n            this.toolStripSeparator2,\r\n            this.deleteToolStripMenuItem});\r\n            this.cmStrip.Name = \"cmStrip\";\r\n            this.cmStrip.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;\r\n            this.cmStrip.ShowImageMargin = false;\r\n            this.cmStrip.Size = new System.Drawing.Size(202, 204);\r\n            this.cmStrip.Opening += new System.ComponentModel.CancelEventHandler(this.cmStrip_Opening);\r\n            // \r\n            // openFolderToolStripMenuItem\r\n            // \r\n            this.openFolderToolStripMenuItem.Name = \"openFolderToolStripMenuItem\";\r\n            this.openFolderToolStripMenuItem.Size = new System.Drawing.Size(201, 22);\r\n            this.openFolderToolStripMenuItem.Text = \"&Open\";\r\n            this.openFolderToolStripMenuItem.Click += new System.EventHandler(this.openFolderToolStripMenuItem_Click);\r\n            // \r\n            // scanOnlyThisDirectoryToolStripMenuItem\r\n            // \r\n            this.scanOnlyThisDirectoryToolStripMenuItem.Name = \"scanOnlyThisDirectoryToolStripMenuItem\";\r\n            this.scanOnlyThisDirectoryToolStripMenuItem.Size = new System.Drawing.Size(201, 22);\r\n            this.scanOnlyThisDirectoryToolStripMenuItem.Text = \"&Search only this directory\";\r\n            this.scanOnlyThisDirectoryToolStripMenuItem.Click += new System.EventHandler(this.scanOnlyThisDirectoryToolStripMenuItem_Click);\r\n            // \r\n            // toolStripSeparator4\r\n            // \r\n            this.toolStripSeparator4.Name = \"toolStripSeparator4\";\r\n            this.toolStripSeparator4.Size = new System.Drawing.Size(198, 6);\r\n            // \r\n            // toolStripExpandAll\r\n            // \r\n            this.toolStripExpandAll.Name = \"toolStripExpandAll\";\r\n            this.toolStripExpandAll.Size = new System.Drawing.Size(201, 22);\r\n            this.toolStripExpandAll.Text = \"&Expand all\";\r\n            this.toolStripExpandAll.Click += new System.EventHandler(this.toolStripExpandAll_Click);\r\n            // \r\n            // toolStripCollapseAll\r\n            // \r\n            this.toolStripCollapseAll.Name = \"toolStripCollapseAll\";\r\n            this.toolStripCollapseAll.Size = new System.Drawing.Size(201, 22);\r\n            this.toolStripCollapseAll.Text = \"&Collapse all\";\r\n            this.toolStripCollapseAll.Click += new System.EventHandler(this.toolStripCollapseAll_Click);\r\n            // \r\n            // toolStripSeparator1\r\n            // \r\n            this.toolStripSeparator1.Name = \"toolStripSeparator1\";\r\n            this.toolStripSeparator1.Size = new System.Drawing.Size(198, 6);\r\n            // \r\n            // protectFolderFromBeingDeletedToolStripMenuItem\r\n            // \r\n            this.protectFolderFromBeingDeletedToolStripMenuItem.Name = \"protectFolderFromBeingDeletedToolStripMenuItem\";\r\n            this.protectFolderFromBeingDeletedToolStripMenuItem.Size = new System.Drawing.Size(201, 22);\r\n            this.protectFolderFromBeingDeletedToolStripMenuItem.Text = \"&Protect from deletion (once)\";\r\n            this.protectFolderFromBeingDeletedToolStripMenuItem.Click += new System.EventHandler(this.protectFolderFromBeingDeletedToolStripMenuItem_Click);\r\n            // \r\n            // unprotectFolderToolStripMenuItem\r\n            // \r\n            this.unprotectFolderToolStripMenuItem.Name = \"unprotectFolderToolStripMenuItem\";\r\n            this.unprotectFolderToolStripMenuItem.Size = new System.Drawing.Size(201, 22);\r\n            this.unprotectFolderToolStripMenuItem.Text = \"&Unprotect\";\r\n            this.unprotectFolderToolStripMenuItem.Click += new System.EventHandler(this.unprotectFolderToolStripMenuItem_Click);\r\n            // \r\n            // toolStripSeparator3\r\n            // \r\n            this.toolStripSeparator3.Name = \"toolStripSeparator3\";\r\n            this.toolStripSeparator3.Size = new System.Drawing.Size(198, 6);\r\n            // \r\n            // proToolStripMenuItem\r\n            // \r\n            this.proToolStripMenuItem.Name = \"proToolStripMenuItem\";\r\n            this.proToolStripMenuItem.Size = new System.Drawing.Size(201, 22);\r\n            this.proToolStripMenuItem.Text = \"Add to permanent &ignore list\";\r\n            this.proToolStripMenuItem.Click += new System.EventHandler(this.proToolStripMenuItem_Click);\r\n            // \r\n            // toolStripSeparator2\r\n            // \r\n            this.toolStripSeparator2.Name = \"toolStripSeparator2\";\r\n            this.toolStripSeparator2.Size = new System.Drawing.Size(198, 6);\r\n            // \r\n            // deleteToolStripMenuItem\r\n            // \r\n            this.deleteToolStripMenuItem.Name = \"deleteToolStripMenuItem\";\r\n            this.deleteToolStripMenuItem.Size = new System.Drawing.Size(201, 22);\r\n            this.deleteToolStripMenuItem.Text = \"&Delete\";\r\n            this.deleteToolStripMenuItem.Click += new System.EventHandler(this.deleteToolStripMenuItem_Click);\r\n            // \r\n            // btnExit\r\n            // \r\n            this.btnExit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.btnExit.ImageKey = \"exit\";\r\n            this.btnExit.ImageList = this.ilFolderIcons;\r\n            this.btnExit.Location = new System.Drawing.Point(558, 498);\r\n            this.btnExit.Name = \"btnExit\";\r\n            this.btnExit.Size = new System.Drawing.Size(126, 34);\r\n            this.btnExit.TabIndex = 7;\r\n            this.btnExit.Text = \"&Exit\";\r\n            this.btnExit.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\r\n            this.btnExit.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;\r\n            this.btnExit.UseVisualStyleBackColor = true;\r\n            this.btnExit.Click += new System.EventHandler(this.btnExit_Click);\r\n            // \r\n            // tbFolder\r\n            // \r\n            this.tbFolder.AccessibleDescription = \"Root directory\";\r\n            this.tbFolder.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.tbFolder.Location = new System.Drawing.Point(14, 34);\r\n            this.tbFolder.Name = \"tbFolder\";\r\n            this.tbFolder.Size = new System.Drawing.Size(533, 20);\r\n            this.tbFolder.TabIndex = 1;\r\n            this.tbFolder.Text = \"C:\\\\\";\r\n            this.tbFolder.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.tbFolder_MouseDoubleClick);\r\n            // \r\n            // btnChooseFolder\r\n            // \r\n            this.btnChooseFolder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.btnChooseFolder.Location = new System.Drawing.Point(558, 33);\r\n            this.btnChooseFolder.Name = \"btnChooseFolder\";\r\n            this.btnChooseFolder.Size = new System.Drawing.Size(126, 21);\r\n            this.btnChooseFolder.TabIndex = 2;\r\n            this.btnChooseFolder.Text = \"Browse...\";\r\n            this.btnChooseFolder.UseVisualStyleBackColor = true;\r\n            this.btnChooseFolder.Click += new System.EventHandler(this.btnChooseFolder_Click);\r\n            // \r\n            // lblPickAFolder\r\n            // \r\n            this.lblPickAFolder.AutoSize = true;\r\n            this.lblPickAFolder.Location = new System.Drawing.Point(10, 13);\r\n            this.lblPickAFolder.Name = \"lblPickAFolder\";\r\n            this.lblPickAFolder.Size = new System.Drawing.Size(0, 13);\r\n            this.lblPickAFolder.TabIndex = 3;\r\n            // \r\n            // tabSettings\r\n            // \r\n            this.tabSettings.Controls.Add(this.gbDeleteMode);\r\n            this.tabSettings.Controls.Add(this.groupBoxExplorerIntegration);\r\n            this.tabSettings.Controls.Add(this.gbOptions);\r\n            this.tabSettings.ImageKey = \"preferences\";\r\n            this.tabSettings.Location = new System.Drawing.Point(4, 27);\r\n            this.tabSettings.Name = \"tabSettings\";\r\n            this.tabSettings.Padding = new System.Windows.Forms.Padding(3);\r\n            this.tabSettings.Size = new System.Drawing.Size(698, 544);\r\n            this.tabSettings.TabIndex = 1;\r\n            this.tabSettings.Text = \"Settings\";\r\n            this.tabSettings.ToolTipText = \"Application settings\";\r\n            this.tabSettings.UseVisualStyleBackColor = true;\r\n            // \r\n            // gbDeleteMode\r\n            // \r\n            this.gbDeleteMode.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.gbDeleteMode.Controls.Add(this.label15);\r\n            this.gbDeleteMode.Controls.Add(this.cbDeleteMode);\r\n            this.gbDeleteMode.Location = new System.Drawing.Point(14, 358);\r\n            this.gbDeleteMode.Name = \"gbDeleteMode\";\r\n            this.gbDeleteMode.Size = new System.Drawing.Size(669, 84);\r\n            this.gbDeleteMode.TabIndex = 20;\r\n            this.gbDeleteMode.TabStop = false;\r\n            this.gbDeleteMode.Text = \"Delete mode\";\r\n            // \r\n            // label15\r\n            // \r\n            this.label15.AutoSize = true;\r\n            this.label15.Location = new System.Drawing.Point(16, 27);\r\n            this.label15.Name = \"label15\";\r\n            this.label15.Size = new System.Drawing.Size(204, 13);\r\n            this.label15.TabIndex = 14;\r\n            this.label15.Text = \"How should empty directories be deleted?\";\r\n            // \r\n            // cbDeleteMode\r\n            // \r\n            this.cbDeleteMode.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.cbDeleteMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\r\n            this.cbDeleteMode.FormattingEnabled = true;\r\n            this.cbDeleteMode.Location = new System.Drawing.Point(19, 45);\r\n            this.cbDeleteMode.Name = \"cbDeleteMode\";\r\n            this.cbDeleteMode.Size = new System.Drawing.Size(631, 21);\r\n            this.cbDeleteMode.TabIndex = 7;\r\n            // \r\n            // groupBoxExplorerIntegration\r\n            // \r\n            this.groupBoxExplorerIntegration.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.groupBoxExplorerIntegration.Controls.Add(this.lblReqAdmin);\r\n            this.groupBoxExplorerIntegration.Controls.Add(this.btnExplorerRemove);\r\n            this.groupBoxExplorerIntegration.Controls.Add(this.btnExplorerIntegrate);\r\n            this.groupBoxExplorerIntegration.Controls.Add(this.label16);\r\n            this.groupBoxExplorerIntegration.Location = new System.Drawing.Point(14, 461);\r\n            this.groupBoxExplorerIntegration.Name = \"groupBoxExplorerIntegration\";\r\n            this.groupBoxExplorerIntegration.Size = new System.Drawing.Size(669, 71);\r\n            this.groupBoxExplorerIntegration.TabIndex = 14;\r\n            this.groupBoxExplorerIntegration.TabStop = false;\r\n            this.groupBoxExplorerIntegration.Text = \"Windows Explorer integration\";\r\n            // \r\n            // lblReqAdmin\r\n            // \r\n            this.lblReqAdmin.AutoSize = true;\r\n            this.lblReqAdmin.ForeColor = System.Drawing.SystemColors.GrayText;\r\n            this.lblReqAdmin.Location = new System.Drawing.Point(16, 43);\r\n            this.lblReqAdmin.Name = \"lblReqAdmin\";\r\n            this.lblReqAdmin.Size = new System.Drawing.Size(314, 13);\r\n            this.lblReqAdmin.TabIndex = 26;\r\n            this.lblReqAdmin.Text = \"You need to start the application as an Admin user to change this\";\r\n            // \r\n            // btnExplorerRemove\r\n            // \r\n            this.btnExplorerRemove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.btnExplorerRemove.Location = new System.Drawing.Point(532, 24);\r\n            this.btnExplorerRemove.Name = \"btnExplorerRemove\";\r\n            this.btnExplorerRemove.Size = new System.Drawing.Size(119, 34);\r\n            this.btnExplorerRemove.TabIndex = 25;\r\n            this.btnExplorerRemove.Text = \"Uninstall\";\r\n            this.btnExplorerRemove.UseVisualStyleBackColor = true;\r\n            this.btnExplorerRemove.Click += new System.EventHandler(this.btnExplorerRemove_Click);\r\n            // \r\n            // btnExplorerIntegrate\r\n            // \r\n            this.btnExplorerIntegrate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.btnExplorerIntegrate.Location = new System.Drawing.Point(407, 24);\r\n            this.btnExplorerIntegrate.Name = \"btnExplorerIntegrate\";\r\n            this.btnExplorerIntegrate.Size = new System.Drawing.Size(119, 34);\r\n            this.btnExplorerIntegrate.TabIndex = 24;\r\n            this.btnExplorerIntegrate.Text = \"Install\";\r\n            this.btnExplorerIntegrate.UseVisualStyleBackColor = true;\r\n            this.btnExplorerIntegrate.Click += new System.EventHandler(this.btnExplorerIntegrate_Click);\r\n            // \r\n            // label16\r\n            // \r\n            this.label16.AutoSize = true;\r\n            this.label16.Location = new System.Drawing.Point(16, 24);\r\n            this.label16.Name = \"label16\";\r\n            this.label16.Size = new System.Drawing.Size(268, 13);\r\n            this.label16.TabIndex = 14;\r\n            this.label16.Text = \"Integrate RED into the Windows Explorer context menu\";\r\n            // \r\n            // gbOptions\r\n            // \r\n            this.gbOptions.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \r\n            | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.gbOptions.Controls.Add(this.label25);\r\n            this.gbOptions.Controls.Add(this.label11);\r\n            this.gbOptions.Controls.Add(this.label21);\r\n            this.gbOptions.Controls.Add(this.cbFastSearchMode);\r\n            this.gbOptions.Controls.Add(this.cbHideScanErrors);\r\n            this.gbOptions.Controls.Add(this.cbIgnoreErrors);\r\n            this.gbOptions.Controls.Add(this.cbClipboardDetection);\r\n            this.gbOptions.Controls.Add(this.cbIgnoreHiddenFolders);\r\n            this.gbOptions.Controls.Add(this.cbIgnore0kbFiles);\r\n            this.gbOptions.Location = new System.Drawing.Point(14, 12);\r\n            this.gbOptions.Name = \"gbOptions\";\r\n            this.gbOptions.Size = new System.Drawing.Size(669, 330);\r\n            this.gbOptions.TabIndex = 19;\r\n            this.gbOptions.TabStop = false;\r\n            this.gbOptions.Text = \"General options\";\r\n            // \r\n            // label25\r\n            // \r\n            this.label25.AutoSize = true;\r\n            this.label25.ForeColor = System.Drawing.SystemColors.GrayText;\r\n            this.label25.Location = new System.Drawing.Point(36, 170);\r\n            this.label25.Name = \"label25\";\r\n            this.label25.Size = new System.Drawing.Size(439, 26);\r\n            this.label25.TabIndex = 22;\r\n            this.label25.Text = \"Whenever you start or switch into the application it will check if your clipboard\" +\r\n    \" contains\\r\\na path to a directory (e.g. C:/test) and if it detects a directory it\" +\r\n    \" will use it as the root directory\";\r\n            // \r\n            // label11\r\n            // \r\n            this.label11.AutoSize = true;\r\n            this.label11.ForeColor = System.Drawing.SystemColors.GrayText;\r\n            this.label11.Location = new System.Drawing.Point(36, 53);\r\n            this.label11.Name = \"label11\";\r\n            this.label11.Size = new System.Drawing.Size(409, 13);\r\n            this.label11.TabIndex = 20;\r\n            this.label11.Text = \"An empty file means files with zero bytes this option also applies to multiple em\" +\r\n    \"pty files.\";\r\n            // \r\n            // label21\r\n            // \r\n            this.label21.AutoSize = true;\r\n            this.label21.ForeColor = System.Drawing.SystemColors.GrayText;\r\n            this.label21.Location = new System.Drawing.Point(36, 105);\r\n            this.label21.Name = \"label21\";\r\n            this.label21.Size = new System.Drawing.Size(586, 26);\r\n            this.label21.TabIndex = 19;\r\n            this.label21.Text = resources.GetString(\"label21.Text\");\r\n            // \r\n            // cbFastSearchMode\r\n            // \r\n            this.cbFastSearchMode.AutoSize = true;\r\n            this.cbFastSearchMode.Location = new System.Drawing.Point(19, 86);\r\n            this.cbFastSearchMode.Name = \"cbFastSearchMode\";\r\n            this.cbFastSearchMode.Size = new System.Drawing.Size(75, 17);\r\n            this.cbFastSearchMode.TabIndex = 18;\r\n            this.cbFastSearchMode.Text = \"Fast mode\";\r\n            this.cbFastSearchMode.UseVisualStyleBackColor = true;\r\n            // \r\n            // cbHideScanErrors\r\n            // \r\n            this.cbHideScanErrors.AutoSize = true;\r\n            this.cbHideScanErrors.Location = new System.Drawing.Point(19, 288);\r\n            this.cbHideScanErrors.Name = \"cbHideScanErrors\";\r\n            this.cbHideScanErrors.Size = new System.Drawing.Size(238, 17);\r\n            this.cbHideScanErrors.TabIndex = 16;\r\n            this.cbHideScanErrors.Tag = \"hide_scan_errors\";\r\n            this.cbHideScanErrors.Text = \"Hide search errors (like access denied errors)\";\r\n            this.cbHideScanErrors.UseVisualStyleBackColor = true;\r\n            // \r\n            // cbIgnoreErrors\r\n            // \r\n            this.cbIgnoreErrors.AutoSize = true;\r\n            this.cbIgnoreErrors.Location = new System.Drawing.Point(19, 252);\r\n            this.cbIgnoreErrors.Name = \"cbIgnoreErrors\";\r\n            this.cbIgnoreErrors.Size = new System.Drawing.Size(157, 17);\r\n            this.cbIgnoreErrors.TabIndex = 15;\r\n            this.cbIgnoreErrors.Tag = \"ignore_deletion_errors\";\r\n            this.cbIgnoreErrors.Text = \"Ignore errors during deletion\\r\\n\";\r\n            this.cbIgnoreErrors.UseVisualStyleBackColor = true;\r\n            // \r\n            // cbClipboardDetection\r\n            // \r\n            this.cbClipboardDetection.AutoSize = true;\r\n            this.cbClipboardDetection.Location = new System.Drawing.Point(19, 151);\r\n            this.cbClipboardDetection.Name = \"cbClipboardDetection\";\r\n            this.cbClipboardDetection.Size = new System.Drawing.Size(162, 17);\r\n            this.cbClipboardDetection.TabIndex = 5;\r\n            this.cbClipboardDetection.Tag = \"clipboard_detection\";\r\n            this.cbClipboardDetection.Text = \"Detect paths in the clipboard\";\r\n            this.cbClipboardDetection.UseVisualStyleBackColor = true;\r\n            // \r\n            // cbIgnoreHiddenFolders\r\n            // \r\n            this.cbIgnoreHiddenFolders.AutoSize = true;\r\n            this.cbIgnoreHiddenFolders.Location = new System.Drawing.Point(19, 216);\r\n            this.cbIgnoreHiddenFolders.Name = \"cbIgnoreHiddenFolders\";\r\n            this.cbIgnoreHiddenFolders.Size = new System.Drawing.Size(142, 17);\r\n            this.cbIgnoreHiddenFolders.TabIndex = 4;\r\n            this.cbIgnoreHiddenFolders.Tag = \"ignore_hidden\";\r\n            this.cbIgnoreHiddenFolders.Text = \"Ignore hidden directories\";\r\n            this.cbIgnoreHiddenFolders.UseVisualStyleBackColor = true;\r\n            // \r\n            // cbIgnore0kbFiles\r\n            // \r\n            this.cbIgnore0kbFiles.AutoSize = true;\r\n            this.cbIgnore0kbFiles.Checked = true;\r\n            this.cbIgnore0kbFiles.CheckState = System.Windows.Forms.CheckState.Checked;\r\n            this.cbIgnore0kbFiles.Location = new System.Drawing.Point(19, 34);\r\n            this.cbIgnore0kbFiles.Name = \"cbIgnore0kbFiles\";\r\n            this.cbIgnore0kbFiles.Size = new System.Drawing.Size(268, 17);\r\n            this.cbIgnore0kbFiles.TabIndex = 3;\r\n            this.cbIgnore0kbFiles.Tag = \"ignore_0kb_files\";\r\n            this.cbIgnore0kbFiles.Text = \"Directories with empty files will be considered empty\";\r\n            this.cbIgnore0kbFiles.UseVisualStyleBackColor = true;\r\n            // \r\n            // tabIgnoreList\r\n            // \r\n            this.tabIgnoreList.Controls.Add(this.label22);\r\n            this.tabIgnoreList.Controls.Add(this.tbIgnoreFolders);\r\n            this.tabIgnoreList.Controls.Add(this.label10);\r\n            this.tabIgnoreList.ImageKey = \"filter\";\r\n            this.tabIgnoreList.Location = new System.Drawing.Point(4, 27);\r\n            this.tabIgnoreList.Name = \"tabIgnoreList\";\r\n            this.tabIgnoreList.Padding = new System.Windows.Forms.Padding(3);\r\n            this.tabIgnoreList.Size = new System.Drawing.Size(698, 544);\r\n            this.tabIgnoreList.TabIndex = 4;\r\n            this.tabIgnoreList.Text = \"Ignore list\";\r\n            this.tabIgnoreList.UseVisualStyleBackColor = true;\r\n            // \r\n            // label22\r\n            // \r\n            this.label22.AutoSize = true;\r\n            this.label22.ForeColor = System.Drawing.SystemColors.GrayText;\r\n            this.label22.Location = new System.Drawing.Point(14, 38);\r\n            this.label22.Name = \"label22\";\r\n            this.label22.Size = new System.Drawing.Size(435, 13);\r\n            this.label22.TabIndex = 14;\r\n            this.label22.Text = \"Use one item per line and you can specify a directory name or a full path like \\\"C\" +\r\n    \":/example\\\".\";\r\n            // \r\n            // tbIgnoreFolders\r\n            // \r\n            this.tbIgnoreFolders.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \r\n            | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.tbIgnoreFolders.Font = new System.Drawing.Font(\"Lucida Console\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n            this.tbIgnoreFolders.Location = new System.Drawing.Point(14, 64);\r\n            this.tbIgnoreFolders.Multiline = true;\r\n            this.tbIgnoreFolders.Name = \"tbIgnoreFolders\";\r\n            this.tbIgnoreFolders.ScrollBars = System.Windows.Forms.ScrollBars.Both;\r\n            this.tbIgnoreFolders.Size = new System.Drawing.Size(668, 467);\r\n            this.tbIgnoreFolders.TabIndex = 6;\r\n            this.tbIgnoreFolders.WordWrap = false;\r\n            // \r\n            // label10\r\n            // \r\n            this.label10.AutoSize = true;\r\n            this.label10.Location = new System.Drawing.Point(14, 16);\r\n            this.label10.Name = \"label10\";\r\n            this.label10.Size = new System.Drawing.Size(458, 13);\r\n            this.label10.TabIndex = 13;\r\n            this.label10.Text = \"When a directory name matches an item of this list it will be skipped (including \" +\r\n    \"all subdirectories).\";\r\n            // \r\n            // tabAdvanced\r\n            // \r\n            this.tabAdvanced.Controls.Add(this.gbAdvancedSettings);\r\n            this.tabAdvanced.Controls.Add(this.btnResetConfig);\r\n            this.tabAdvanced.Controls.Add(this.btnCopyDebugInfo);\r\n            this.tabAdvanced.Controls.Add(this.gbIgnoreFilenames);\r\n            this.tabAdvanced.Controls.Add(this.label8);\r\n            this.tabAdvanced.ImageKey = \"(none)\";\r\n            this.tabAdvanced.Location = new System.Drawing.Point(4, 27);\r\n            this.tabAdvanced.Name = \"tabAdvanced\";\r\n            this.tabAdvanced.Padding = new System.Windows.Forms.Padding(3);\r\n            this.tabAdvanced.Size = new System.Drawing.Size(698, 544);\r\n            this.tabAdvanced.TabIndex = 3;\r\n            this.tabAdvanced.Text = \"Advanced settings\";\r\n            this.tabAdvanced.UseVisualStyleBackColor = true;\r\n            // \r\n            // gbAdvancedSettings\r\n            // \r\n            this.gbAdvancedSettings.Controls.Add(this.label20);\r\n            this.gbAdvancedSettings.Controls.Add(this.label26);\r\n            this.gbAdvancedSettings.Controls.Add(this.label27);\r\n            this.gbAdvancedSettings.Controls.Add(this.label19);\r\n            this.gbAdvancedSettings.Controls.Add(this.cbKeepSystemFolders);\r\n            this.gbAdvancedSettings.Controls.Add(this.nuFolderAge);\r\n            this.gbAdvancedSettings.Controls.Add(this.label7);\r\n            this.gbAdvancedSettings.Controls.Add(this.label24);\r\n            this.gbAdvancedSettings.Controls.Add(this.nuPause);\r\n            this.gbAdvancedSettings.Controls.Add(this.nuMaxDepth);\r\n            this.gbAdvancedSettings.Controls.Add(this.label4);\r\n            this.gbAdvancedSettings.Controls.Add(this.label3);\r\n            this.gbAdvancedSettings.Controls.Add(this.nuInfiniteLoopDetectionCount);\r\n            this.gbAdvancedSettings.Location = new System.Drawing.Point(15, 17);\r\n            this.gbAdvancedSettings.Name = \"gbAdvancedSettings\";\r\n            this.gbAdvancedSettings.Size = new System.Drawing.Size(668, 160);\r\n            this.gbAdvancedSettings.TabIndex = 30;\r\n            this.gbAdvancedSettings.TabStop = false;\r\n            this.gbAdvancedSettings.Text = \"Advanced settings\";\r\n            // \r\n            // label20\r\n            // \r\n            this.label20.AutoSize = true;\r\n            this.label20.ForeColor = System.Drawing.SystemColors.GrayText;\r\n            this.label20.Location = new System.Drawing.Point(16, 134);\r\n            this.label20.Name = \"label20\";\r\n            this.label20.Size = new System.Drawing.Size(314, 13);\r\n            this.label20.TabIndex = 19;\r\n            this.label20.Text = \"This gives you time to stop the process but is not really necessary\";\r\n            // \r\n            // label26\r\n            // \r\n            this.label26.AutoSize = true;\r\n            this.label26.ForeColor = System.Drawing.SystemColors.GrayText;\r\n            this.label26.Location = new System.Drawing.Point(357, 79);\r\n            this.label26.Name = \"label26\";\r\n            this.label26.Size = new System.Drawing.Size(246, 13);\r\n            this.label26.TabIndex = 28;\r\n            this.label26.Text = \"This allows you to ignore freshly created directories\";\r\n            // \r\n            // label27\r\n            // \r\n            this.label27.AutoSize = true;\r\n            this.label27.ForeColor = System.Drawing.SystemColors.GrayText;\r\n            this.label27.Location = new System.Drawing.Point(16, 78);\r\n            this.label27.Name = \"label27\";\r\n            this.label27.Size = new System.Drawing.Size(259, 13);\r\n            this.label27.TabIndex = 29;\r\n            this.label27.Text = \"RED will only able to find empty directories that are N \";\r\n            // \r\n            // label19\r\n            // \r\n            this.label19.AutoSize = true;\r\n            this.label19.Location = new System.Drawing.Point(357, 56);\r\n            this.label19.Name = \"label19\";\r\n            this.label19.Size = new System.Drawing.Size(167, 13);\r\n            this.label19.TabIndex = 26;\r\n            this.label19.Text = \"Skip folders less than N hours old:\";\r\n            // \r\n            // cbKeepSystemFolders\r\n            // \r\n            this.cbKeepSystemFolders.AutoSize = true;\r\n            this.cbKeepSystemFolders.Checked = true;\r\n            this.cbKeepSystemFolders.CheckState = System.Windows.Forms.CheckState.Checked;\r\n            this.cbKeepSystemFolders.Location = new System.Drawing.Point(248, 26);\r\n            this.cbKeepSystemFolders.Name = \"cbKeepSystemFolders\";\r\n            this.cbKeepSystemFolders.Size = new System.Drawing.Size(15, 14);\r\n            this.cbKeepSystemFolders.TabIndex = 2;\r\n            this.cbKeepSystemFolders.Tag = \"keep_system_dirs\";\r\n            this.cbKeepSystemFolders.UseVisualStyleBackColor = true;\r\n            // \r\n            // nuFolderAge\r\n            // \r\n            this.nuFolderAge.Location = new System.Drawing.Point(588, 52);\r\n            this.nuFolderAge.Margin = new System.Windows.Forms.Padding(2);\r\n            this.nuFolderAge.Maximum = new decimal(new int[] {\r\n            96,\r\n            0,\r\n            0,\r\n            0});\r\n            this.nuFolderAge.Name = \"nuFolderAge\";\r\n            this.nuFolderAge.Size = new System.Drawing.Size(53, 20);\r\n            this.nuFolderAge.TabIndex = 25;\r\n            // \r\n            // label7\r\n            // \r\n            this.label7.AutoSize = true;\r\n            this.label7.Location = new System.Drawing.Point(16, 113);\r\n            this.label7.Name = \"label7\";\r\n            this.label7.Size = new System.Drawing.Size(218, 13);\r\n            this.label7.TabIndex = 17;\r\n            this.label7.Text = \"Pause between each deletion in milliseconds\";\r\n            // \r\n            // label24\r\n            // \r\n            this.label24.AutoSize = true;\r\n            this.label24.Location = new System.Drawing.Point(16, 26);\r\n            this.label24.Name = \"label24\";\r\n            this.label24.Size = new System.Drawing.Size(190, 13);\r\n            this.label24.TabIndex = 27;\r\n            this.label24.Text = \"Skip system directories (recommended)\";\r\n            // \r\n            // nuPause\r\n            // \r\n            this.nuPause.Location = new System.Drawing.Point(249, 109);\r\n            this.nuPause.Maximum = new decimal(new int[] {\r\n            999999,\r\n            0,\r\n            0,\r\n            0});\r\n            this.nuPause.Name = \"nuPause\";\r\n            this.nuPause.Size = new System.Drawing.Size(53, 20);\r\n            this.nuPause.TabIndex = 8;\r\n            // \r\n            // nuMaxDepth\r\n            // \r\n            this.nuMaxDepth.Location = new System.Drawing.Point(249, 52);\r\n            this.nuMaxDepth.Maximum = new decimal(new int[] {\r\n            10000000,\r\n            0,\r\n            0,\r\n            0});\r\n            this.nuMaxDepth.Minimum = new decimal(new int[] {\r\n            1,\r\n            0,\r\n            0,\r\n            -2147483648});\r\n            this.nuMaxDepth.Name = \"nuMaxDepth\";\r\n            this.nuMaxDepth.Size = new System.Drawing.Size(53, 20);\r\n            this.nuMaxDepth.TabIndex = 7;\r\n            this.nuMaxDepth.Value = new decimal(new int[] {\r\n            1,\r\n            0,\r\n            0,\r\n            -2147483648});\r\n            // \r\n            // label4\r\n            // \r\n            this.label4.AutoSize = true;\r\n            this.label4.Location = new System.Drawing.Point(357, 119);\r\n            this.label4.Name = \"label4\";\r\n            this.label4.Size = new System.Drawing.Size(200, 13);\r\n            this.label4.TabIndex = 20;\r\n            this.label4.Text = \"Infinite-loop detection: Stop after N errors\";\r\n            // \r\n            // label3\r\n            // \r\n            this.label3.AutoSize = true;\r\n            this.label3.Location = new System.Drawing.Point(16, 56);\r\n            this.label3.Name = \"label3\";\r\n            this.label3.Size = new System.Drawing.Size(200, 13);\r\n            this.label3.TabIndex = 13;\r\n            this.label3.Text = \"Max directory nesting depth (-1 = infinite):\";\r\n            // \r\n            // nuInfiniteLoopDetectionCount\r\n            // \r\n            this.nuInfiniteLoopDetectionCount.Location = new System.Drawing.Point(588, 115);\r\n            this.nuInfiniteLoopDetectionCount.Maximum = new decimal(new int[] {\r\n            999999,\r\n            0,\r\n            0,\r\n            0});\r\n            this.nuInfiniteLoopDetectionCount.Name = \"nuInfiniteLoopDetectionCount\";\r\n            this.nuInfiniteLoopDetectionCount.Size = new System.Drawing.Size(53, 20);\r\n            this.nuInfiniteLoopDetectionCount.TabIndex = 21;\r\n            this.nuInfiniteLoopDetectionCount.Value = new decimal(new int[] {\r\n            10,\r\n            0,\r\n            0,\r\n            0});\r\n            // \r\n            // btnResetConfig\r\n            // \r\n            this.btnResetConfig.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));\r\n            this.btnResetConfig.Location = new System.Drawing.Point(318, 505);\r\n            this.btnResetConfig.Name = \"btnResetConfig\";\r\n            this.btnResetConfig.Size = new System.Drawing.Size(183, 27);\r\n            this.btnResetConfig.TabIndex = 23;\r\n            this.btnResetConfig.Text = \"Reset settings to default values\";\r\n            this.btnResetConfig.UseVisualStyleBackColor = true;\r\n            this.btnResetConfig.Click += new System.EventHandler(this.btnResetConfig_Click);\r\n            // \r\n            // btnCopyDebugInfo\r\n            // \r\n            this.btnCopyDebugInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));\r\n            this.btnCopyDebugInfo.Location = new System.Drawing.Point(15, 505);\r\n            this.btnCopyDebugInfo.Name = \"btnCopyDebugInfo\";\r\n            this.btnCopyDebugInfo.Size = new System.Drawing.Size(297, 27);\r\n            this.btnCopyDebugInfo.TabIndex = 24;\r\n            this.btnCopyDebugInfo.Text = \"Copy debugging information to clipboard (for error reports)\";\r\n            this.btnCopyDebugInfo.UseVisualStyleBackColor = true;\r\n            this.btnCopyDebugInfo.Click += new System.EventHandler(this.btnCopyDebugInfo_Click);\r\n            // \r\n            // gbIgnoreFilenames\r\n            // \r\n            this.gbIgnoreFilenames.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \r\n            | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.gbIgnoreFilenames.Controls.Add(this.label23);\r\n            this.gbIgnoreFilenames.Controls.Add(this.label14);\r\n            this.gbIgnoreFilenames.Controls.Add(this.tbIgnoreFiles);\r\n            this.gbIgnoreFilenames.Controls.Add(this.label2);\r\n            this.gbIgnoreFilenames.Location = new System.Drawing.Point(15, 194);\r\n            this.gbIgnoreFilenames.Name = \"gbIgnoreFilenames\";\r\n            this.gbIgnoreFilenames.Size = new System.Drawing.Size(668, 303);\r\n            this.gbIgnoreFilenames.TabIndex = 20;\r\n            this.gbIgnoreFilenames.TabStop = false;\r\n            this.gbIgnoreFilenames.Text = \"Filenames to ignore\";\r\n            // \r\n            // label23\r\n            // \r\n            this.label23.AutoSize = true;\r\n            this.label23.Location = new System.Drawing.Point(15, 60);\r\n            this.label23.Name = \"label23\";\r\n            this.label23.Size = new System.Drawing.Size(357, 78);\r\n            this.label23.TabIndex = 13;\r\n            this.label23.Text = resources.GetString(\"label23.Text\");\r\n            // \r\n            // label14\r\n            // \r\n            this.label14.AutoSize = true;\r\n            this.label14.BackColor = System.Drawing.SystemColors.Info;\r\n            this.label14.ForeColor = System.Drawing.Color.DarkRed;\r\n            this.label14.Location = new System.Drawing.Point(484, 64);\r\n            this.label14.Name = \"label14\";\r\n            this.label14.Padding = new System.Windows.Forms.Padding(5);\r\n            this.label14.Size = new System.Drawing.Size(165, 62);\r\n            this.label14.TabIndex = 12;\r\n            this.label14.Text = \"Warning: Use  this feature with \\r\\ncare, a bad pattern could \\r\\npotentially cause a\" +\r\n    \"ccidental \\r\\ndeletion of important files.\";\r\n            this.label14.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\r\n            // \r\n            // tbIgnoreFiles\r\n            // \r\n            this.tbIgnoreFiles.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \r\n            | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.tbIgnoreFiles.Font = new System.Drawing.Font(\"Lucida Console\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n            this.tbIgnoreFiles.Location = new System.Drawing.Point(18, 150);\r\n            this.tbIgnoreFiles.Multiline = true;\r\n            this.tbIgnoreFiles.Name = \"tbIgnoreFiles\";\r\n            this.tbIgnoreFiles.ScrollBars = System.Windows.Forms.ScrollBars.Both;\r\n            this.tbIgnoreFiles.Size = new System.Drawing.Size(631, 139);\r\n            this.tbIgnoreFiles.TabIndex = 5;\r\n            this.tbIgnoreFiles.WordWrap = false;\r\n            // \r\n            // label2\r\n            // \r\n            this.label2.AutoSize = true;\r\n            this.label2.Location = new System.Drawing.Point(15, 23);\r\n            this.label2.Name = \"label2\";\r\n            this.label2.Size = new System.Drawing.Size(546, 26);\r\n            this.label2.TabIndex = 10;\r\n            this.label2.Text = resources.GetString(\"label2.Text\");\r\n            // \r\n            // label8\r\n            // \r\n            this.label8.AutoSize = true;\r\n            this.label8.Location = new System.Drawing.Point(318, 119);\r\n            this.label8.Name = \"label8\";\r\n            this.label8.Size = new System.Drawing.Size(20, 13);\r\n            this.label8.TabIndex = 18;\r\n            this.label8.Text = \"ms\";\r\n            // \r\n            // tabAbout\r\n            // \r\n            this.tabAbout.Controls.Add(this.llGithub);\r\n            this.tabAbout.Controls.Add(this.linkLabel2);\r\n            this.tabAbout.Controls.Add(this.linkLabel1);\r\n            this.tabAbout.Controls.Add(this.tbCredits);\r\n            this.tabAbout.Controls.Add(this.lblRedStats);\r\n            this.tabAbout.Controls.Add(this.label5);\r\n            this.tabAbout.Controls.Add(this.llWebsite);\r\n            this.tabAbout.Controls.Add(this.lbAppTitle);\r\n            this.tabAbout.ImageKey = \"help\";\r\n            this.tabAbout.Location = new System.Drawing.Point(4, 27);\r\n            this.tabAbout.Name = \"tabAbout\";\r\n            this.tabAbout.Size = new System.Drawing.Size(698, 544);\r\n            this.tabAbout.TabIndex = 2;\r\n            this.tabAbout.Text = \"About\";\r\n            this.tabAbout.ToolTipText = \"Shows the help and about screen\";\r\n            this.tabAbout.UseVisualStyleBackColor = true;\r\n            // \r\n            // llGithub\r\n            // \r\n            this.llGithub.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.llGithub.AutoSize = true;\r\n            this.llGithub.Location = new System.Drawing.Point(11, 103);\r\n            this.llGithub.Name = \"llGithub\";\r\n            this.llGithub.Size = new System.Drawing.Size(38, 13);\r\n            this.llGithub.TabIndex = 28;\r\n            this.llGithub.TabStop = true;\r\n            this.llGithub.Text = \"Github\";\r\n            this.llGithub.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llGithub_LinkClicked);\r\n            // \r\n            // linkLabel2\r\n            // \r\n            this.linkLabel2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.linkLabel2.AutoSize = true;\r\n            this.linkLabel2.Location = new System.Drawing.Point(134, 103);\r\n            this.linkLabel2.Name = \"linkLabel2\";\r\n            this.linkLabel2.Size = new System.Drawing.Size(128, 13);\r\n            this.linkLabel2.TabIndex = 27;\r\n            this.linkLabel2.TabStop = true;\r\n            this.linkLabel2.Text = \"Feedback / Report a bug\";\r\n            this.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel2_LinkClicked_1);\r\n            // \r\n            // linkLabel1\r\n            // \r\n            this.linkLabel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.linkLabel1.AutoSize = true;\r\n            this.linkLabel1.Location = new System.Drawing.Point(134, 81);\r\n            this.linkLabel1.Name = \"linkLabel1\";\r\n            this.linkLabel1.Size = new System.Drawing.Size(94, 13);\r\n            this.linkLabel1.TabIndex = 26;\r\n            this.linkLabel1.TabStop = true;\r\n            this.linkLabel1.Text = \"Check for updates\";\r\n            this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);\r\n            // \r\n            // tbCredits\r\n            // \r\n            this.tbCredits.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \r\n            | System.Windows.Forms.AnchorStyles.Left) \r\n            | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.tbCredits.Font = new System.Drawing.Font(\"Lucida Console\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n            this.tbCredits.Location = new System.Drawing.Point(14, 131);\r\n            this.tbCredits.Multiline = true;\r\n            this.tbCredits.Name = \"tbCredits\";\r\n            this.tbCredits.ReadOnly = true;\r\n            this.tbCredits.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;\r\n            this.tbCredits.Size = new System.Drawing.Size(669, 400);\r\n            this.tbCredits.TabIndex = 25;\r\n            this.tbCredits.Text = resources.GetString(\"tbCredits.Text\");\r\n            this.tbCredits.WordWrap = false;\r\n            // \r\n            // lblRedStats\r\n            // \r\n            this.lblRedStats.AutoSize = true;\r\n            this.lblRedStats.Location = new System.Drawing.Point(11, 56);\r\n            this.lblRedStats.Name = \"lblRedStats\";\r\n            this.lblRedStats.Size = new System.Drawing.Size(165, 13);\r\n            this.lblRedStats.TabIndex = 20;\r\n            this.lblRedStats.Text = \"{Deleted N dirs placeholder label}\";\r\n            // \r\n            // label5\r\n            // \r\n            this.label5.AutoSize = true;\r\n            this.label5.Font = new System.Drawing.Font(\"Arial\", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n            this.label5.Location = new System.Drawing.Point(11, 36);\r\n            this.label5.Name = \"label5\";\r\n            this.label5.Size = new System.Drawing.Size(304, 14);\r\n            this.label5.TabIndex = 5;\r\n            this.label5.Text = \"Created by Jonas John and a some contributors (see Github).\";\r\n            // \r\n            // llWebsite\r\n            // \r\n            this.llWebsite.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\r\n            this.llWebsite.AutoSize = true;\r\n            this.llWebsite.Location = new System.Drawing.Point(11, 81);\r\n            this.llWebsite.Name = \"llWebsite\";\r\n            this.llWebsite.Size = new System.Drawing.Size(93, 13);\r\n            this.llWebsite.TabIndex = 19;\r\n            this.llWebsite.TabStop = true;\r\n            this.llWebsite.Text = \"Project homepage\\r\\n\";\r\n            this.llWebsite.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llWebsite_LinkClicked);\r\n            // \r\n            // lbAppTitle\r\n            // \r\n            this.lbAppTitle.AutoSize = true;\r\n            this.lbAppTitle.Font = new System.Drawing.Font(\"Arial\", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\r\n            this.lbAppTitle.ForeColor = System.Drawing.SystemColors.ControlText;\r\n            this.lbAppTitle.Location = new System.Drawing.Point(11, 15);\r\n            this.lbAppTitle.Name = \"lbAppTitle\";\r\n            this.lbAppTitle.Size = new System.Drawing.Size(213, 15);\r\n            this.lbAppTitle.TabIndex = 0;\r\n            this.lbAppTitle.Text = \"Remove Empty Directories - Version \";\r\n            // \r\n            // MainWindow\r\n            // \r\n            this.AllowDrop = true;\r\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\r\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r\n            this.ClientSize = new System.Drawing.Size(724, 591);\r\n            this.Controls.Add(this.tcMain);\r\n            this.Icon = ((System.Drawing.Icon)(resources.GetObject(\"$this.Icon\")));\r\n            this.Name = \"MainWindow\";\r\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;\r\n            this.Text = \"Remove Empty Directories\";\r\n            this.Activated += new System.EventHandler(this.fMain_Activated);\r\n            this.Load += new System.EventHandler(this.fMain_Load);\r\n            this.DragDrop += new System.Windows.Forms.DragEventHandler(this.fMain_DragDrop);\r\n            this.DragEnter += new System.Windows.Forms.DragEventHandler(this.fMain_DragEnter);\r\n            this.tcMain.ResumeLayout(false);\r\n            this.tabSearch.ResumeLayout(false);\r\n            this.tabSearch.PerformLayout();\r\n            this.pnlIcons.ResumeLayout(false);\r\n            this.pnlIcons.PerformLayout();\r\n            this.cmStrip.ResumeLayout(false);\r\n            this.tabSettings.ResumeLayout(false);\r\n            this.gbDeleteMode.ResumeLayout(false);\r\n            this.gbDeleteMode.PerformLayout();\r\n            this.groupBoxExplorerIntegration.ResumeLayout(false);\r\n            this.groupBoxExplorerIntegration.PerformLayout();\r\n            this.gbOptions.ResumeLayout(false);\r\n            this.gbOptions.PerformLayout();\r\n            this.tabIgnoreList.ResumeLayout(false);\r\n            this.tabIgnoreList.PerformLayout();\r\n            this.tabAdvanced.ResumeLayout(false);\r\n            this.tabAdvanced.PerformLayout();\r\n            this.gbAdvancedSettings.ResumeLayout(false);\r\n            this.gbAdvancedSettings.PerformLayout();\r\n            ((System.ComponentModel.ISupportInitialize)(this.nuFolderAge)).EndInit();\r\n            ((System.ComponentModel.ISupportInitialize)(this.nuPause)).EndInit();\r\n            ((System.ComponentModel.ISupportInitialize)(this.nuMaxDepth)).EndInit();\r\n            ((System.ComponentModel.ISupportInitialize)(this.nuInfiniteLoopDetectionCount)).EndInit();\r\n            this.gbIgnoreFilenames.ResumeLayout(false);\r\n            this.gbIgnoreFilenames.PerformLayout();\r\n            this.tabAbout.ResumeLayout(false);\r\n            this.tabAbout.PerformLayout();\r\n            this.ResumeLayout(false);\r\n\r\n\t\t}\r\n\r\n\t\t#endregion\r\n\r\n        private System.Windows.Forms.TabControl tcMain;\r\n\t\tprivate System.Windows.Forms.TabPage tabAbout;\r\n\t\tprivate System.Windows.Forms.Label lbAppTitle;\r\n\t\tprivate System.Windows.Forms.CheckBox cbIgnore0kbFiles;\r\n\t\tprivate System.Windows.Forms.Label label2;\r\n\t\tprivate System.Windows.Forms.TextBox tbIgnoreFiles;\r\n\t\tprivate System.Windows.Forms.CheckBox cbKeepSystemFolders;\r\n\t\tprivate System.Windows.Forms.CheckBox cbIgnoreHiddenFolders;\r\n        private System.Windows.Forms.Label label3;\r\n\t\tprivate System.Windows.Forms.TabPage tabSearch;\r\n\t\tprivate System.Windows.Forms.Label lbStatus;\r\n\t\tprivate System.Windows.Forms.ProgressBar pbProgressStatus;\r\n\t\tprivate System.Windows.Forms.TreeView tvFolders;\r\n\t\tprivate System.Windows.Forms.Button btnExit;\r\n\t\tprivate System.Windows.Forms.Button btnCancel;\r\n\t\tprivate System.Windows.Forms.TextBox tbFolder;\r\n\t\tprivate System.Windows.Forms.Button btnChooseFolder;\r\n\t\tprivate System.Windows.Forms.Label lblPickAFolder;\r\n\t\tprivate System.Windows.Forms.Button btnScan;\r\n\t\tprivate System.Windows.Forms.Button btnDelete;\r\n        private System.Windows.Forms.LinkLabel llWebsite;\r\n\t\tprivate System.Windows.Forms.Label label5;\r\n\t\tprivate System.Windows.Forms.Label label6;\r\n\t\tprivate System.Windows.Forms.NumericUpDown nuMaxDepth;\r\n\t\tprivate System.Windows.Forms.Label label7;\r\n\t\tprivate System.Windows.Forms.NumericUpDown nuPause;\r\n\t\tprivate System.Windows.Forms.Label label8;\r\n        private System.Windows.Forms.GroupBox gbIgnoreFilenames;\r\n        private System.Windows.Forms.GroupBox gbOptions;\r\n        private System.Windows.Forms.TextBox tbIgnoreFolders;\r\n        private System.Windows.Forms.Label label10;\r\n        private System.Windows.Forms.ImageList ilFolderIcons;\r\n        private System.Windows.Forms.Panel pnlIcons;\r\n        private System.Windows.Forms.Label label12;\r\n        private System.Windows.Forms.Label label17;\r\n        private System.Windows.Forms.Panel panel1;\r\n        private System.Windows.Forms.Label label18;\r\n        private System.Windows.Forms.Panel panel2;\r\n        private System.Windows.Forms.Panel panel3;\r\n        private System.Windows.Forms.Label lblRedStats;\r\n        private System.Windows.Forms.Label label1;\r\n        private System.Windows.Forms.Panel panel5;\r\n        private System.Windows.Forms.ContextMenuStrip cmStrip;\r\n        private System.Windows.Forms.ToolStripMenuItem openFolderToolStripMenuItem;\r\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;\r\n        private System.Windows.Forms.ToolStripMenuItem protectFolderFromBeingDeletedToolStripMenuItem;\r\n        private System.Windows.Forms.ToolStripMenuItem unprotectFolderToolStripMenuItem;\r\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;\r\n        private System.Windows.Forms.ToolStripMenuItem proToolStripMenuItem;\r\n        private System.Windows.Forms.CheckBox cbClipboardDetection;\r\n        private System.Windows.Forms.Button btnShowLog;\r\n        private System.Windows.Forms.ComboBox cbDeleteMode;\r\n        private System.Windows.Forms.Label label15;\r\n        private System.Windows.Forms.TextBox tbCredits;\r\n        private System.Windows.Forms.LinkLabel linkLabel1;\r\n        private System.Windows.Forms.CheckBox cbIgnoreErrors;\r\n        private System.Windows.Forms.Label label20;\r\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;\r\n        private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem;\r\n        private System.Windows.Forms.Label label4;\r\n        private System.Windows.Forms.NumericUpDown nuInfiniteLoopDetectionCount;\r\n        private System.Windows.Forms.Label label14;\r\n        private System.Windows.Forms.Button btnResetConfig;\r\n        private System.Windows.Forms.ToolStripMenuItem scanOnlyThisDirectoryToolStripMenuItem;\r\n        private System.Windows.Forms.GroupBox groupBoxExplorerIntegration;\r\n        private System.Windows.Forms.Button btnExplorerRemove;\r\n        private System.Windows.Forms.Button btnExplorerIntegrate;\r\n        private System.Windows.Forms.Label label16;\r\n        private System.Windows.Forms.Label lblReqAdmin;\r\n        private System.Windows.Forms.CheckBox cbHideScanErrors;\r\n        private System.Windows.Forms.LinkLabel linkLabel2;\r\n        private System.Windows.Forms.Button btnCopyDebugInfo;\r\n        private System.Windows.Forms.Label label19;\r\n        private System.Windows.Forms.NumericUpDown nuFolderAge;\r\n\t\tprivate System.Windows.Forms.CheckBox cbFastSearchMode;\r\n        private System.Windows.Forms.TabPage tabAdvanced;\r\n        private System.Windows.Forms.Label label21;\r\n        private System.Windows.Forms.TabPage tabIgnoreList;\r\n        private System.Windows.Forms.Label label22;\r\n        private System.Windows.Forms.Label label11;\r\n        private System.Windows.Forms.GroupBox gbDeleteMode;\r\n        private System.Windows.Forms.Label label23;\r\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;\r\n        private System.Windows.Forms.ToolStripMenuItem toolStripExpandAll;\r\n        private System.Windows.Forms.ToolStripMenuItem toolStripCollapseAll;\r\n        private System.Windows.Forms.Label label25;\r\n        private System.Windows.Forms.Label label26;\r\n        private System.Windows.Forms.Label label24;\r\n        private System.Windows.Forms.Label label27;\r\n        private System.Windows.Forms.LinkLabel llGithub;\r\n        private System.Windows.Forms.Label lbFastModeInfo;\r\n        private System.Windows.Forms.TabPage tabSettings;\r\n        private System.Windows.Forms.GroupBox gbAdvancedSettings;\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "RED2/MainWindow.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Diagnostics;\r\nusing System.Drawing;\r\nusing System.Reflection;\r\nusing System.Security.Principal;\r\nusing System.Windows.Forms;\r\nusing Alphaleonis.Win32.Filesystem;\r\n\r\nnamespace RED2\r\n{\r\n    public partial class MainWindow : Form\r\n    {\r\n        private REDCore core = null;\r\n        private TreeManager tree = null;\r\n\r\n        private RuntimeData Data = new RuntimeData();\r\n        private Stopwatch runtimeWatch = new Stopwatch();\r\n\r\n        #region Init methods\r\n\r\n        /// <summary>\r\n        /// Constructor\r\n        /// </summary>\r\n        public MainWindow()\r\n        {\r\n            InitializeComponent();\r\n        }\r\n\r\n        /// <summary>\r\n        /// On load\r\n        /// </summary>\r\n        private void fMain_Load(object sender, EventArgs e)\r\n        {\r\n            #region Init RED core\r\n            \r\n            this.core = new REDCore(this, this.Data);\r\n\r\n            // Attach events\r\n            this.core.OnError += new EventHandler<ErrorEventArgs>(core_OnError);\r\n            this.core.OnCancelled += new EventHandler(core_OnCancelled);\r\n            this.core.OnAborted += new EventHandler(core_OnAborted);\r\n\r\n            this.core.OnProgressChanged += new EventHandler<ProgressChangedEventArgs>(core_OnProgressChanged);\r\n            this.core.OnFoundEmptyDirectory += new EventHandler<FoundEmptyDirInfoEventArgs>(core_OnFoundEmptyDir);\r\n            this.core.OnFinishedScanForEmptyDirs += new EventHandler<FinishedScanForEmptyDirsEventArgs>(core_OnFoundFinishedScanForEmptyDirs);\r\n            this.core.OnDeleteProcessChanged += new EventHandler<DeleteProcessUpdateEventArgs>(core_OnDeleteProcessChanged);\r\n            this.core.OnDeleteProcessFinished += new EventHandler<DeleteProcessFinishedEventArgs>(core_OnDeleteProcessFinished);\r\n            this.core.OnDeleteError += new EventHandler<DeletionErrorEventArgs>(core_OnDeleteError);\r\n\r\n            #endregion\r\n\r\n            // Subscribe to settings events\r\n            Properties.Settings.Default.PropertyChanged += new PropertyChangedEventHandler(Default_PropertyChanged);\r\n            Properties.Settings.Default.SettingChanging += new System.Configuration.SettingChangingEventHandler(Default_SettingChanging);\r\n\r\n            // Init tree manager / helper\r\n            this.tree = new TreeManager(this.tvFolders, this.lbFastModeInfo);\r\n            this.tree.SetFastMode(Properties.Settings.Default.fast_search_mode);\r\n            this.tree.OnProtectionStatusChanged += new EventHandler<ProtectionStatusChangedEventArgs>(tree_OnProtectionStatusChanged);\r\n            this.tree.OnDeleteRequest += new EventHandler<DeleteRequestFromTreeEventArgs>(tree_OnDeleteRequest);\r\n\r\n            this.bindConfigToControls();\r\n\r\n            // Update labels\r\n            this.lblRedStats.Text = String.Format(RED2.Properties.Resources.red_deleted, Properties.Settings.Default.delete_stats);\r\n            this.lbAppTitle.Text += string.Format(\"{0}\", Assembly.GetExecutingAssembly().GetName().Version.ToString());\r\n            this.lbStatus.Text = \"\";\r\n\r\n            this.adminCheck();\r\n\r\n\t\t\tUpdateContextMenu(cmStrip, false);\r\n\r\n            this.pbProgressStatus.Maximum = 100;\r\n            this.pbProgressStatus.Minimum = 0;\r\n            this.pbProgressStatus.Step = 5;\r\n\r\n            drawDirectoryIcons();\r\n\r\n            this.processCommandLineArgs();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Bind config settings to UI controls\r\n        /// </summary>\r\n        private void bindConfigToControls()\r\n        {\r\n            this.tbFolder.DataBindings.Add(\"Text\", Properties.Settings.Default, \"last_used_directory\");\r\n            this.cbFastSearchMode.DataBindings.Add(\"Checked\", Properties.Settings.Default, \"fast_search_mode\");\r\n\r\n            this.cbIgnoreHiddenFolders.DataBindings.Add(\"Checked\", Properties.Settings.Default, \"dont_scan_hidden_folders\");\r\n            this.cbIgnore0kbFiles.DataBindings.Add(\"Checked\", Properties.Settings.Default, \"ignore_0kb_files\");\r\n            this.cbKeepSystemFolders.DataBindings.Add(\"Checked\", Properties.Settings.Default, \"keep_system_folders\");\r\n            this.cbClipboardDetection.DataBindings.Add(\"Checked\", Properties.Settings.Default, \"clipboard_detection\");\r\n            this.cbHideScanErrors.DataBindings.Add(\"Checked\", Properties.Settings.Default, \"hide_scan_errors\");\r\n\r\n            this.tbIgnoreFiles.DataBindings.Add(\"Text\", Properties.Settings.Default, \"ignore_files\");\r\n            this.tbIgnoreFolders.DataBindings.Add(\"Text\", Properties.Settings.Default, \"ignore_directories\");\r\n\r\n            this.nuMaxDepth.DataBindings.Add(\"Value\", Properties.Settings.Default, \"max_depth\");\r\n            this.nuInfiniteLoopDetectionCount.DataBindings.Add(\"Value\", Properties.Settings.Default, \"infinite_loop_detection_count\");\r\n            this.nuPause.DataBindings.Add(\"Value\", Properties.Settings.Default, \"pause_between\");\r\n            this.cbIgnoreErrors.DataBindings.Add(\"Checked\", Properties.Settings.Default, \"ignore_deletion_errors\");\r\n            this.nuFolderAge.DataBindings.Add(\"Value\", Properties.Settings.Default, \"min_folder_age_hours\");\r\n\r\n            // Populate delete mode item list\r\n            foreach (var d in DeleteModeItem.GetList())\r\n                this.cbDeleteMode.Items.Add(new DeleteModeItem(d));\r\n\r\n            this.cbDeleteMode.DataBindings.Add(\"SelectedIndex\", Properties.Settings.Default, \"delete_mode\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Check if we were started with admin rights \r\n        /// </summary>\r\n        private void adminCheck()\r\n        {\r\n            var principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());\r\n\r\n            if (principal.IsInRole(WindowsBuiltInRole.Administrator))\r\n            {\r\n                var isIntegrated = SystemFunctions.IsRegKeyIntegratedIntoWindowsExplorer();\r\n\r\n                this.btnExplorerIntegrate.Enabled = !isIntegrated;\r\n                this.btnExplorerRemove.Enabled = isIntegrated;\r\n\r\n                this.Text += \" (Admin mode)\";\r\n\r\n                this.lblReqAdmin.ForeColor = Color.DarkGray;\r\n            }\r\n            else\r\n            {\r\n                this.groupBoxExplorerIntegration.Enabled = false;\r\n\r\n                // Highlight admin info text bold \r\n                // Note: Changed it from red to bold because red looked like an error\r\n                // but actually it's just an info message\r\n                this.lblReqAdmin.Font = new Font(Label.DefaultFont, FontStyle.Bold);\r\n\r\n                // this.btnExplorerIntegrate.Enabled = false;\r\n                // this.btnExplorerRemove.Enabled = false;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Read and apply command line arguments\r\n        /// </summary>\r\n        private void processCommandLineArgs()\r\n        {\r\n            string[] args = Environment.GetCommandLineArgs();\r\n\r\n            if (args.Length > 1)\r\n            {\r\n                args[0] = \"\";\r\n                var path = String.Join(\"\", args).Replace(\"\\\"\", \"\").Trim();\r\n\r\n                // add ending backslash\r\n                if (!path.EndsWith(\"\\\\\")) path += \"\\\\\";\r\n\r\n                Properties.Settings.Default.last_used_directory = path;\r\n            }\r\n        }\r\n\r\n        void Default_SettingChanging(object sender, System.Configuration.SettingChangingEventArgs e)\r\n        {\r\n            if (e.SettingName == \"keep_system_folders\" && !(bool)e.NewValue)\r\n            {\r\n                if (MessageBox.Show(this, SystemFunctions.ConvertLineBreaks(RED2.Properties.Resources.warning_really_delete), RED2.Properties.Resources.warning, MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.Cancel)\r\n                    e.Cancel = true;\r\n            }\r\n            else if (e.SettingName == \"fast_search_mode\")\r\n            {\r\n                this.tree.SetFastMode((bool)e.NewValue);\r\n            }\r\n        }\r\n\r\n        void Default_PropertyChanged(object sender, PropertyChangedEventArgs e)\r\n        {\r\n            // Save settings when any of them was changed\r\n            Properties.Settings.Default.Save();\r\n        }\r\n\r\n        private void drawDirectoryIcons()\r\n        {\r\n            #region Set and display folder status icons\r\n\r\n            Dictionary<string, string> icons = new Dictionary<string, string>();\r\n\r\n            icons.Add(\"home\", RED2.Properties.Resources.icon_root);\r\n            icons.Add(\"folder\", RED2.Properties.Resources.icon_default);\r\n            icons.Add(\"folder_trash_files\", RED2.Properties.Resources.icon_contains_trash);\r\n            icons.Add(\"folder_hidden\", RED2.Properties.Resources.icon_hidden_folder);\r\n            icons.Add(\"folder_lock\", RED2.Properties.Resources.icon_locked_folder);\r\n            icons.Add(\"folder_warning\", RED2.Properties.Resources.icon_warning);\r\n            icons.Add(\"protected_icon\", RED2.Properties.Resources.icon_protected_folder);\r\n            icons.Add(\"deleted\", RED2.Properties.Resources.icon_deleted_folder);\r\n\r\n            int xpos = 6;\r\n            int ypos = 30;\r\n\r\n            foreach (string key in icons.Keys)\r\n            {\r\n                Image Icon = (Image)this.ilFolderIcons.Images[key];\r\n\r\n                PictureBox picIcon = new PictureBox();\r\n                picIcon.Image = Icon;\r\n                picIcon.Location = new System.Drawing.Point(xpos, ypos);\r\n                picIcon.Name = \"picIcon\";\r\n                picIcon.Size = new System.Drawing.Size(Icon.Width, Icon.Height);\r\n\r\n                Label picLabel = new Label();\r\n                picLabel.Text = icons[key];\r\n                picLabel.Location = new System.Drawing.Point(xpos + Icon.Width + 2, ypos + 2);\r\n                picLabel.Name = \"picLabel\";\r\n\r\n                this.pnlIcons.Controls.Add(picIcon);\r\n                this.pnlIcons.Controls.Add(picLabel);\r\n\r\n                ypos += Icon.Height + 6;\r\n            }\r\n\r\n            #endregion\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Step 1: Scan for empty directories\r\n\r\n        /// <summary>\r\n        /// Starts the Scan-Progress\r\n        /// </summary>\r\n        private void btnScan_Click(object sender, EventArgs e)\r\n        {\r\n            // Check given folder\r\n            DirectoryInfo selectedDirectory = null;\r\n            try\r\n            {\r\n                selectedDirectory = new DirectoryInfo(this.tbFolder.Text);\r\n\r\n                if (!selectedDirectory.Exists)\r\n                {\r\n                    MessageBox.Show(this, RED2.Properties.Resources.error_dir_does_not_exist);\r\n                    return;\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                MessageBox.Show(this, \"The given directory caused a problem:\" + Environment.NewLine + ex.Message, \"RED error\", MessageBoxButtons.OK, MessageBoxIcon.Error);\r\n                return;\r\n            }\r\n\r\n            this.Data.StartFolder = selectedDirectory;\r\n            updateRuntimeDataObject();\r\n\r\n            this.pbProgressStatus.Style = ProgressBarStyle.Marquee;\r\n\r\n            this.setProcessActiveLock(true);\r\n\r\n            this.tree.OnSearchStart(this.Data.StartFolder);\r\n\r\n            UpdateContextMenu(cmStrip, false);\r\n\r\n            this.Data.AddLogSpacer();\r\n            setStatusAndLogMessage(RED2.Properties.Resources.searching_empty_folders);\r\n\r\n            runtimeWatch.Reset();\r\n            runtimeWatch.Start();\r\n\r\n            this.core.SearchingForEmptyDirectories();\r\n        }\r\n\r\n        void core_OnProgressChanged(object sender, ProgressChangedEventArgs e)\r\n        {\r\n            this.lbStatus.Text = (string)e.UserState;\r\n        }\r\n\r\n        void core_OnFoundEmptyDir(object sender, FoundEmptyDirInfoEventArgs e)\r\n        {\r\n            this.tree.AddOrUpdateDirectoryNode(e.Directory, e.Type, e.ErrorMessage);\r\n        }\r\n\r\n        void core_OnFoundFinishedScanForEmptyDirs(object sender, FinishedScanForEmptyDirsEventArgs e)\r\n        {\r\n            // Search finished\r\n\r\n            runtimeWatch.Stop();\r\n\r\n            setStatusAndLogMessage(String.Format(\r\n                RED2.Properties.Resources.found_x_empty_folders, \r\n                e.EmptyFolderCount, \r\n                e.FolderCount,\r\n                runtimeWatch.Elapsed.Minutes, \r\n                runtimeWatch.Elapsed.Seconds\r\n            ));\r\n\r\n            this.btnDelete.Enabled = (e.EmptyFolderCount > 0);\r\n            this.pbProgressStatus.Style = ProgressBarStyle.Blocks;\r\n            this.pbProgressStatus.Maximum = e.EmptyFolderCount;\r\n            this.pbProgressStatus.Minimum = 0;\r\n            this.pbProgressStatus.Value = this.pbProgressStatus.Maximum;\r\n            this.pbProgressStatus.Step = 5;\r\n\r\n            this.setProcessActiveLock(false);\r\n\r\n            this.btnScan.Enabled = true;\r\n\r\n\t\t\tUpdateContextMenu(cmStrip, true);\r\n\r\n            this.tree.OnSearchFinished();\r\n\r\n            this.btnScan.Text = RED2.Properties.Resources.btn_scan_again;\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Step 2: Delete empty directories\r\n\r\n        private void btnDelete_Click(object sender, EventArgs e)\r\n        {\r\n            this.Data.AddLogSpacer();\r\n            setStatusAndLogMessage(RED2.Properties.Resources.started_deletion_process);\r\n\r\n            this.btnScan.Enabled = false;\r\n\t\t\tUpdateContextMenu(cmStrip, false);\r\n            this.btnDelete.Enabled = false;\r\n\r\n            this.setProcessActiveLock(true);\r\n\r\n            updateRuntimeDataObject();\r\n\r\n            this.tree.OnDeletionProcessStart();\r\n\r\n            runtimeWatch.Reset();\r\n            runtimeWatch.Start();\r\n\r\n            this.core.StartDeleteProcess();\r\n        }\r\n\r\n        private void updateRuntimeDataObject()\r\n        {\r\n            this.Data.IgnoreAllErrors = Properties.Settings.Default.ignore_deletion_errors;\r\n            this.Data.IgnoreFiles = Properties.Settings.Default.ignore_files;\r\n            this.Data.IgnoreDirectoriesList = Properties.Settings.Default.ignore_directories;\r\n            this.Data.IgnoreEmptyFiles = Properties.Settings.Default.ignore_0kb_files;\r\n            this.Data.IgnoreHiddenFolders = Properties.Settings.Default.dont_scan_hidden_folders;\r\n            this.Data.KeepSystemFolders = Properties.Settings.Default.keep_system_folders;\r\n            this.Data.HideScanErrors = Properties.Settings.Default.hide_scan_errors;\r\n            this.Data.MinFolderAgeHours = Properties.Settings.Default.min_folder_age_hours;\r\n            this.Data.MaxDepth = (int)Properties.Settings.Default.max_depth;\r\n            this.Data.InfiniteLoopDetectionCount = (int)Properties.Settings.Default.infinite_loop_detection_count;\r\n            this.Data.DeleteMode = (DeleteModes)Properties.Settings.Default.delete_mode;\r\n            this.Data.PauseTime = (int)Properties.Settings.Default.pause_between;\r\n        }\r\n\r\n        private void core_OnDeleteProcessChanged(object sender, DeleteProcessUpdateEventArgs e)\r\n        {\r\n            switch (e.Status)\r\n            {\r\n                case DirectoryDeletionStatusTypes.Deleted:\r\n                    this.lbStatus.Text = String.Format(RED2.Properties.Resources.removing_empty_folders, (e.ProgressStatus + 1), e.FolderCount);\r\n                    this.tree.UpdateItemIcon(e.Path, DirectoryIcons.deleted);\r\n                    break;\r\n\r\n                case DirectoryDeletionStatusTypes.Protected:\r\n                    this.tree.UpdateItemIcon(e.Path, DirectoryIcons.protected_icon);\r\n                    break;\r\n\r\n                default:\r\n                    this.tree.UpdateItemIcon(e.Path, DirectoryIcons.folder_warning);\r\n                    break;\r\n            }\r\n\r\n            this.pbProgressStatus.Value = e.ProgressStatus;\r\n        }\r\n\r\n        private void core_OnDeleteError(object sender, DeletionErrorEventArgs e)\r\n        {\r\n            var errorDialog = new DeletionError();\r\n\r\n            errorDialog.SetPath(e.Path);\r\n            errorDialog.SetErrorMessage(e.ErrorMessage);\r\n\r\n            var dialogResult = errorDialog.ShowDialog();\r\n\r\n            errorDialog.Dispose();\r\n\r\n            if (dialogResult == DialogResult.Abort)\r\n            {\r\n                this.core.AbortDeletion();\r\n            }\r\n            else\r\n            {\r\n                // Hack: retry means -> ignore all errors\r\n                if (dialogResult == DialogResult.Retry)\r\n                    this.Data.IgnoreAllErrors = true;\r\n\r\n                this.core.ContinueDeleteProcess();\r\n            }\r\n        }\r\n\r\n        private void core_OnDeleteProcessFinished(object sender, DeleteProcessFinishedEventArgs e)\r\n        {\r\n            runtimeWatch.Stop();\r\n\r\n            setStatusAndLogMessage(\r\n                String.Format(RED2.Properties.Resources.delete_process_finished, \r\n                e.DeletedFolderCount, e.FailedFolderCount, e.ProtectedCount, \r\n                runtimeWatch.Elapsed.Minutes, runtimeWatch.Elapsed.Seconds)\r\n            );\r\n\r\n            this.pbProgressStatus.Value = this.pbProgressStatus.Maximum;\r\n\r\n            this.btnDelete.Enabled = false;\r\n            this.btnScan.Enabled = true;\r\n\r\n            this.setProcessActiveLock(false);\r\n\r\n            // Increase deletion statistics (shown in about tab)\r\n            Properties.Settings.Default.delete_stats += e.DeletedFolderCount;\r\n\r\n            this.lblRedStats.Text = String.Format(RED2.Properties.Resources.red_deleted, Properties.Settings.Default.delete_stats);\r\n            \r\n            this.tree.OnDeletionProcessFinished();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Process core events / callbacks\r\n\r\n        private void core_OnCancelled(object sender, EventArgs e)\r\n        {\r\n            this.pbProgressStatus.Style = ProgressBarStyle.Blocks;\r\n\r\n            if (this.core.CurrentProcessStep == WorkflowSteps.DeleteProcessRunning)\r\n                setStatusAndLogMessage(RED2.Properties.Resources.deletion_aborted);\r\n            else\r\n                setStatusAndLogMessage(RED2.Properties.Resources.process_cancelled);\r\n\r\n            this.btnScan.Enabled = true;\r\n            this.btnDelete.Enabled = false;\r\n\r\n            this.setProcessActiveLock(false);\r\n            this.tree.OnProcessCancelled();\r\n        }\r\n\r\n        private void core_OnAborted(object sender, EventArgs e)\r\n        {\r\n            this.pbProgressStatus.Style = ProgressBarStyle.Blocks;\r\n\r\n            if (this.core.CurrentProcessStep == WorkflowSteps.DeleteProcessRunning)\r\n                setStatusAndLogMessage(RED2.Properties.Resources.deletion_aborted);\r\n            else\r\n                setStatusAndLogMessage(RED2.Properties.Resources.process_aborted);\r\n\r\n            this.btnScan.Enabled = true;\r\n            this.btnDelete.Enabled = false;\r\n\r\n            this.setProcessActiveLock(false);    \r\n            this.tree.OnProcessCancelled();\r\n        }\r\n\r\n        private void core_OnError(object sender, ErrorEventArgs e)\r\n        {\r\n            this.pbProgressStatus.Style = ProgressBarStyle.Blocks;\r\n\r\n            MessageBox.Show(this, \"Error: \" + e.Message, \"RED error message\");\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Tree view related methods\r\n\r\n        /// <summary>\r\n        /// User clicks twice on a folder\r\n        /// </summary>\r\n        private void tvFolders_DoubleClick(object sender, EventArgs e)\r\n        {\r\n            SystemFunctions.OpenDirectoryWithExplorer(this.tree.GetSelectedFolderPath());\r\n        }\r\n\r\n        private void openFolderToolStripMenuItem_Click(object sender, EventArgs e)\r\n        {\r\n            SystemFunctions.OpenDirectoryWithExplorer(this.tree.GetSelectedFolderPath());\r\n        }\r\n\r\n        private void scanOnlyThisDirectoryToolStripMenuItem_Click(object sender, EventArgs e)\r\n        {\r\n            Properties.Settings.Default.last_used_directory = this.tree.GetSelectedFolderPath();\r\n            this.btnScan.PerformClick();\r\n        }\r\n\r\n        private void protectFolderFromBeingDeletedToolStripMenuItem_Click(object sender, EventArgs e)\r\n        {\r\n            this.tree.ProtectSelected();\r\n        }\r\n\r\n        private void unprotectFolderToolStripMenuItem_Click(object sender, EventArgs e)\r\n        {\r\n            this.tree.UnprotectSelected();\r\n        }\r\n\r\n        private void tree_OnProtectionStatusChanged(object sender, ProtectionStatusChangedEventArgs e)\r\n        {\r\n            if (e.Protected)\r\n                this.core.AddProtectedFolder(e.Path);\r\n            else\r\n                this.core.RemoveProtected(e.Path);\r\n        }\r\n\r\n        private void proToolStripMenuItem_Click(object sender, EventArgs e)\r\n        {\r\n            if (this.tvFolders.SelectedNode == null) return;\r\n\r\n            Properties.Settings.Default.ignore_directories += \"\\r\\n\" + ((DirectoryInfo)this.tvFolders.SelectedNode.Tag).FullName;\r\n\r\n            // Focus third tab (Ignore list)\r\n            this.tcMain.SelectedIndex = 2;\r\n\r\n            // TODO: Update the results + tree to reflect the newly ignored item\r\n            // Current solution: The user has to do a complete rescan\r\n            this.btnDelete.Enabled = false;\r\n        }\r\n\r\n        private void deleteToolStripMenuItem_Click(object sender, EventArgs e)\r\n        {\r\n            this.tree.DeleteSelectedDirectory();\r\n        }\r\n\r\n        private void tree_OnDeleteRequest(object sender, DeleteRequestFromTreeEventArgs e)\r\n        {\r\n            try\r\n            {\r\n                var deletePath = e.Directory;\r\n\r\n                // To simplify the code here there is only the RecycleBinWithQuestion or simulate possible here\r\n                // (all others will be ignored)\r\n                SystemFunctions.ManuallyDeleteDirectory(deletePath, (DeleteModes)Properties.Settings.Default.delete_mode);\r\n\r\n                // Remove root node\r\n                this.tree.RemoveNode(deletePath);\r\n\r\n                this.Data.AddLogMessage(\"Manually deleted: \\\"\" + deletePath + \"\\\" including all subdirectories\");\r\n\r\n                // Disable the delete button because the user has to re-scan after he manually deleted a directory\r\n                this.btnDelete.Enabled = false;\r\n\r\n            }\r\n            catch (System.OperationCanceledException)\r\n            {\r\n                // The user canceled the deletion \r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                this.Data.AddLogMessage(\"Could not manually delete \\\"\" + e.Directory + \"\\\" because of the following error: \" + ex.Message);\r\n\r\n                MessageBox.Show(this, \"The directory was not deleted, because of the following error:\" + Environment.NewLine + ex.Message);\r\n            }\r\n        }\r\n\r\n        private void toolStripExpandAll_Click(object sender, EventArgs e)\r\n        {\r\n            this.tvFolders.ExpandAll();\r\n        }\r\n\r\n        private void toolStripCollapseAll_Click(object sender, EventArgs e)\r\n        {\r\n            this.tvFolders.CollapseAll();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region GUI related functions / events\r\n      \r\n        /// <summary>\r\n        /// Locks various GUI elements when search or deletion is active\r\n        /// </summary>\r\n        /// <param name=\"isActive\"></param>\r\n        private void setProcessActiveLock(bool isActive)\r\n        {\r\n            this.btnCancel.Enabled = isActive;\r\n            this.btnShowLog.Enabled = !isActive;\r\n         \r\n            this.gbOptions.Enabled = !isActive;\r\n            this.gbDeleteMode.Enabled = !isActive;\r\n            this.tbIgnoreFolders.Enabled = !isActive;\r\n\r\n            this.gbAdvancedSettings.Enabled = !isActive;\r\n            this.gbIgnoreFilenames.Enabled = !isActive;\r\n\r\n            this.btnResetConfig.Enabled = !isActive;\r\n        }\r\n\r\n        private void btnCancel_Click(object sender, EventArgs e)\r\n        {\r\n            this.core.CancelCurrentProcess();\r\n        }\r\n\r\n        private void setStatusAndLogMessage(string msg)\r\n        {\r\n            this.lbStatus.Text = msg;\r\n            this.Data.AddLogMessage(msg);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Part of the drag & drop functions \r\n        /// (you can drag a folder into RED)\r\n        /// </summary>\r\n        private void fMain_DragDrop(object sender, DragEventArgs e)\r\n        {\r\n            string[] s = (string[])e.Data.GetData(DataFormats.FileDrop, false);\r\n\r\n            if (s.Length == 1)\r\n                Properties.Settings.Default.last_used_directory = s[0].Trim();\r\n            else\r\n                MessageBox.Show(this, RED2.Properties.Resources.error_only_one_folder);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Part of the drag & drop functions \r\n        /// (you can drag a folder into RED)\r\n        /// </summary>\r\n        private void fMain_DragEnter(object sender, DragEventArgs e)\r\n        {\r\n            if (!e.Data.GetDataPresent(DataFormats.FileDrop))\r\n                e.Effect = DragDropEffects.None;\r\n            else\r\n                e.Effect = DragDropEffects.Copy;\r\n        }\r\n\r\n        private void fMain_Activated(object sender, EventArgs e)\r\n        {\r\n            // Detect paths in the clipboard\r\n\r\n            if (this.cbClipboardDetection.Checked && Clipboard.ContainsText(TextDataFormat.Text))\r\n            {\r\n                var clipValue = Clipboard.GetText(TextDataFormat.Text);\r\n\r\n                if (clipValue.Contains(\":\\\\\") && !clipValue.Contains(\"\\n\"))\r\n                {\r\n                    // add ending backslash\r\n                    if (!clipValue.EndsWith(\"\\\\\")) clipValue += \"\\\\\";\r\n\r\n                    Properties.Settings.Default.last_used_directory = clipValue;\r\n                }\r\n            }\r\n        }\r\n\r\n        private void tbFolder_MouseDoubleClick(object sender, MouseEventArgs e)\r\n        {\r\n            this.tbFolder.SelectAll();\r\n        }\r\n\r\n        private void btnExit_Click(object sender, EventArgs e)\r\n        {\r\n            this.Close();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Let the user select a folder\r\n        /// </summary>\r\n        private void btnChooseFolder_Click(object sender, EventArgs e)\r\n        {\r\n            Properties.Settings.Default.last_used_directory = SystemFunctions.ChooseDirectoryDialog(Properties.Settings.Default.last_used_directory);\r\n        }\r\n\r\n        private void btnShowConfig_Click(object sender, EventArgs e)\r\n        {\r\n            SystemFunctions.OpenDirectoryWithExplorer(Application.StartupPath);\r\n        }\r\n\r\n        private void btnShowLog_Click(object sender, EventArgs e)\r\n        {\r\n            var logWindow = new LogWindow();\r\n            logWindow.SetLog(this.core.GetLogMessages());\r\n            logWindow.ShowDialog();\r\n            logWindow.Dispose();\r\n        }\r\n\r\n        #endregion\r\n\r\n        #region Config and misc stuff\r\n\r\n        private void btnResetConfig_Click(object sender, EventArgs e)\r\n        {\r\n            if (MessageBox.Show(this, \"Do you really want to reset all settings to the default values?\", \"Restore default settings\", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.OK)\r\n            {\r\n                Properties.Settings.Default.Reset();\r\n\r\n                this.tree.SetFastMode(Properties.Settings.Default.fast_search_mode);\r\n            }\r\n        }\r\n\r\n        private void btnExplorerIntegrate_Click(object sender, EventArgs e)\r\n        {\r\n            SystemFunctions.AddOrRemoveRegKey(true);\r\n            this.btnExplorerRemove.Enabled = true;\r\n            this.btnExplorerIntegrate.Enabled = false;\r\n        }\r\n\r\n        private void btnExplorerRemove_Click(object sender, EventArgs e)\r\n        {\r\n            SystemFunctions.AddOrRemoveRegKey(false);\r\n            this.btnExplorerRemove.Enabled = false;\r\n            this.btnExplorerIntegrate.Enabled = true;\r\n        }\r\n\r\n        private void llWebsite_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\r\n        {\r\n            Process.Start(\"https://www.jonasjohn.de/lab/red.htm\");\r\n        }\r\n\r\n        private void llGithub_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\r\n        {\r\n            Process.Start(\"https://github.com/hxseven/Remove-Empty-Directories\");\r\n        }\r\n\r\n        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\r\n        {\r\n            Process.Start(string.Format(\"https://www.jonasjohn.de/lab/check_update.php?p=red&version={0}\", Assembly.GetExecutingAssembly().GetName().Version.ToString()));\r\n        }\r\n\r\n        private void linkLabel2_LinkClicked_1(object sender, LinkLabelLinkClickedEventArgs e)\r\n        {\r\n            Process.Start(\"https://www.jonasjohn.de/lab/red_feedback.htm\");\r\n\r\n        }\r\n\r\n        private void btnCopyDebugInfo_Click(object sender, EventArgs e)\r\n        {\r\n            var info = new System.Text.StringBuilder();\r\n\r\n            info.AppendLine(\"System info\");\r\n            info.Append(\"- RED Version: \");\r\n            try\r\n            {\r\n                info.AppendLine(string.Format(\"{0}\", Assembly.GetExecutingAssembly().GetName().Version.ToString()));\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                info.AppendLine(\"Failed (\" + ex.Message + \")\");\r\n            }\r\n\r\n            info.Append(\"- Operating System: \");\r\n            try\r\n            {\r\n                info.AppendLine(System.Environment.OSVersion.ToString());\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                info.AppendLine(\"Failed (\" + ex.Message + \")\");\r\n            }\r\n\r\n            info.Append(\"- Processor architecture: \");\r\n            try\r\n            {\r\n                info.AppendLine(Environment.GetEnvironmentVariable(\"PROCESSOR_ARCHITECTURE\"));\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                info.AppendLine(\"Failed (\" + ex.Message + \")\");\r\n            }\r\n\r\n            info.Append(\"- Is Administrator: \");\r\n            try\r\n            {\r\n                var principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());\r\n                info.AppendLine((principal.IsInRole(WindowsBuiltInRole.Administrator) ? \"Yes\" : \"No\"));\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                info.AppendLine(\"Failed (\" + ex.Message + \")\");\r\n            }\r\n\r\n            info.AppendLine(\"\");\r\n            info.AppendLine(\"RED Config settings: \");\r\n            try\r\n            {\r\n                foreach (System.Configuration.SettingsProperty setting in Properties.Settings.Default.Properties)\r\n                {\r\n                    var value = Properties.Settings.Default.PropertyValues[setting.Name].PropertyValue.ToString();\r\n\r\n                    if (setting.Name == \"ignore_files\" || setting.Name == \"ignore_directories\")\r\n                        value = value.Replace(\"\\r\", \"\").Replace(\"\\n\", \"\\\\n\");\r\n\r\n                    info.AppendLine(\"- \" + setting.Name + \": \" + value);\r\n\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                info.AppendLine(\"Failed (\" + ex.Message + \")\");\r\n            }\r\n\r\n            try\r\n            {\r\n                Clipboard.SetText(info.ToString(), TextDataFormat.Text);\r\n\r\n                MessageBox.Show(\"Copied this text to your clipboard:\" + Environment.NewLine + Environment.NewLine + info.ToString());\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                MessageBox.Show(\"Sorry, could not copy the debug info into your clipboard because of this error: \" + Environment.NewLine + ex.Message);\r\n            }\r\n        }\r\n        \r\n        private void cmStrip_Opening(object sender, CancelEventArgs e)\r\n        {\r\n            openFolderToolStripMenuItem.Enabled = tvFolders.SelectedNode != null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Enables/disables all items in the context menu\r\n        /// </summary>\r\n        /// <param name=\"contextMenuStrip\"></param>\r\n        /// <param name=\"enable\"></param>\r\n        private void UpdateContextMenu(ContextMenuStrip contextMenuStrip, bool enable)\r\n        {\r\n            foreach (ToolStripItem item in contextMenuStrip.Items)\r\n                item.Enabled = enable;\r\n        }\r\n\r\n        #endregion\r\n    }\r\n}"
  },
  {
    "path": "RED2/MainWindow.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <metadata name=\"ilFolderIcons.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\r\n    <value>14, 16</value>\r\n  </metadata>\r\n  <data name=\"ilFolderIcons.ImageStream\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n    <value>\r\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w\r\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0\r\n        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA6\r\n        UQAAAk1TRnQBSQFMAgEBEQEAAewBAQHsAQEBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA\r\n        AwABUAMAAQEBAAEgBgABUP8AKwADFAEcAzUBVgMMARD0AAMyAVAB1AHTAdIB/wKZAZgB+wMkATbwAAMy\r\n        AVAB2QHYAdcB/wHCAcABvwH/AzIBUPAAAzIBUAHZAdgB1wH/AcIBwAG/Af8DMgFQ8AADMwFSAdsB2gHZ\r\n        Af8BwgHBAb8B/wMzAVLsAAMBAQIDUgGpAd0B2wHaAf8BwgHBAcAB/wNSAakDAQEC6AADPwFsAbkBuAG2\r\n        Af8B3QHcAdoB/wHCAcEBwAH/AZ8BnQGcAf8DQAFu5AADKQE+AZABjwGOAfsBvAG7AbkB/wHdAdwB2gH/\r\n        AcIBwQHAAf8BogGgAZ4B/wF/AXcBcwH7AykBPtwAAxQBHANnAekBnQGbAZoB/wG8AbsBuQH/Ad0B3AHa\r\n        Af8BwgHBAcAB/wGiAaABngH/AYoBiAGHAf8DYgHpAxQBHNQAAwYBCANZAccBhgGEAYMB/wGdAZsBmgH/\r\n        AbwBuwG5Af8B3QHcAdoB/wHCAcEBwAH/AaIBoAGeAf8BigGIAYcB/wF0AXIBcAH/A1kBxwMGAQjQAANP\r\n        AZcBcAFuAWwB/wGGAYQBgwH/AZ0BmwGaAf8BvAG7AbkB/wHdAdwB2gH/AcIBwQHAAf8BogGgAZ4B/wGK\r\n        AYgBhwH/AXQBcgFxAf8BbAFqAWgB/wNPAZfMAAMEAQYBhQFtAVEB9wGiAYwBXAH/AawBmAFqAf8BuQGn\r\n        AYIB/wHJAboBlgH/AdkBzAGqAf8BzQG+AZsB/wG8AawBhwH/AbABnQFwAf8BpwGSAWMB/wGgAYkBWQH/\r\n        AYUBbQFRAfcDBAEGyAADDAEQAbMBgAEeAf8BzgGfATwB/wHaAbMBVQH/AeUBxgFuAf8B8QHYAY0B/wH6\r\n        AekBogH/AfQB3wGVAf8B6gHOAXgB/wHgAb0BYwH/AdYBrQFOAf8BzAGcATgB/wG3AYIBHQH/AwwBEMgA\r\n        AwEBAgM8AWYDQAFwA0ABcANAAXADQAFwA0ABcANAAXADQAFwA0ABcANAAXADQAFwAzwBZgMBAQL/AO4A\r\n        AT4BCgH/AQABPgEKAf8BAAE+AQoB/wEAAT4BCgH/AQABPgEKAf9QAAP9Af8D/AH/A/sB/xQAA/wB/3UA\r\n        AT4BCgH/AQABjAEmAf8BNwG6AY0B/wGVAdIBsgH/ATcBugGNAf8BAAGMASYB/wEAAT4BCgH/BAABwAHC\r\n        AeAB/wIAAbkB/wIAAZoB/wHkAeMB1AH/GAAB7gLwAf8B0QHSAdMB/xgAA/QB/wPwAf8D7AH/At8B4gH/\r\n        AtYB2wH/AtUB2wH/At4B4QH/AuoB6wH/AvAB7wH/A/MB/xUAAaUB1AH/AQABnQHRAf8BAAGSAcwB/wEA\r\n        AYwByQH/AQABggHEAf8BAAGBAcMB/wEAAYEBwwH/AQABgQHDAf8BAAGBAcMB/wEAAYEBwwH/AQABgQHD\r\n        Af8BAAGBAcMB/xEAAYgB2AH/BQABiAHYAf8FAAGIAdgB/wUAAYgB2AH/AQABQAERAf8BNQG6AYsB/wEz\r\n        AboBhwH/BAABMwG5AYcB/wE6AbwBjwH/AQABPgEKAf8EAAKBAc0B/wGHAZkB+gH/AQABBQHzAf8CAAGT\r\n        Af8B4AHbAcwB/xAAAe4B8QHyAf8BoQGVAZQB/wGGAoEB/wG/AcABwQH/GAAC4gHrAf8CgQHGAf8CDwHA\r\n        Af8CAAG9Af8CAAG9Af8CDwHAAf8CgQHFAf8C4gHrAf8ZAAGtAdgB/wGRAeEB+gH/AT4B2gH5Af8BPgHa\r\n        AfkB/wE+AdoB+QH/AT4B2gH5Af8BPgHaAfkB/wE+AdoB+QH/AT4B2gH5Af8BPgHaAfkB/wE+AdoB+QH/\r\n        AQABgQHDAf8MAAEGAY4B2QH/BAABpwHdAfQB/wQAAZYB2gHzAf8EAAGGAdcB8wH/BAABBAGBAR8B/wGc\r\n        AdQBtgH/DAABlQHSAbIB/wEAAT4BCgH/BAAB3gHdAewB/wGFAYkB0QH/AbwBxgH7Af8CAAHpAf8CAAGK\r\n        Af8B6AHnAdkB/wgAAe8C8QH/AZgBjgGMAf8B3gHOAc8B/wHnAdkB2AH/AY0CgQH/A8AB/xAAAt0B+QH/\r\n        Ah0B3AH/AgAB2AH/AgAB4AH/AgAB3gH/AgAB3QH/AgAB4QH/AgAB2gH/Ah0B3QH/At0B+QH/FQABtgHc\r\n        Af8B0gH1AfwB/wGoAewB+QH/AZIB5wH3Af8BkgHnAfcB/wGBAd0B8wH/ATYB0wHvAf8BJQHJAesB/wES\r\n        Ab4B5wH/AQABtAHjAf8BPgHaAfkB/wEAAYEBwwH/EAAB7wH6Af4B/wQAAZEB5QH4Af8EAAGBAd4B9gH/\r\n        BAABJwHXAfQB/wEXAYkBNQH/AZAB0wGxAf8BkgHWAbEB/wQAATgBvAGMAf8BOgG8AY8B/wEAAT4BCgH/\r\n        CAABvQG+AdwB/wGJAY4B0QH/AbgBwgH5Af8CAAHZAf8CAAGBAf8C9gH0Af8C9gH1Af8BlwKNAf8B3AHN\r\n        AcwB/wHsAeMB4gH/AeoB4AHfAf8B1gLJAf8BmgKUAf8MAALxAfwB/wIWAdwB/wIAAegB/wIAAesB/wIp\r\n        AdoB/wKCAdMB/wKBAcsB/wINAcUB/wIAAeAB/wIAAeoB/wIXAd0B/wLxAfwB/xEAAbYB3AH/AdIB9QH8\r\n        Af8BqAHsAfkB/wGSAecB9wH/AZIB5wH3Af8BgQHdAfMB/wE2AdMB7wH/ASUByQHrAf8BEgG+AecB/wEA\r\n        AbQB4wH/AT4B2gH5Af8BAAGBAcMB/wwAAQkBmgHaAf8EAAGzAe0B+gH/BAABlQHmAfgB/wQAAYEB3gH2\r\n        Af8EAAEnAbMBrgH/ATQBqwGBAf8BlQHUAbQB/wG6AeYB0AH/AT0BuwGPAf8BAAGPASoB/wEAAT4BCgH/\r\n        DAABwAHBAd0B/wGBAYUByAH/AagBsgH0Af8CAAHGAf8BGQEbAYgB/wGxAagBkgH/Ad8CzgH/Ae0B5QHm\r\n        Af8B/AL6Af8B4AHYAdcB/wGdAZcBlgH/A/oB/wwAAosB6AH/AgAB6QH/AgAB8QH/ApsB5wH/Ar4B8wH/\r\n        ApYB+AH/AqIB9wH/AsQB6AH/AjUBvAH/AgAB4QH/AgAB7AH/AosB6AH/EQABtgHcAf8B2wH3Af0B/wGo\r\n        AewB+QH/AZIB5wH3Af8BkgHnAfcB/wGBAd0B8wH/ATYB0wHvAf8BJQHJAesB/wESAb4B5wH/AQABtAHj\r\n        Af8BPgHaAfkB/wEAAYEBwwH/EAAB9gH8Af4B/wQAAbkB7wH7Af8EAAGcAegB+QH/BAABgQHgAfYB/wE/\r\n        AdwB9gH/AS4BtwG0Af8BKwGXAYEB/wEiAY4BOQH/ARoBigE0Af8BBQGMAZIB/xQAAesB7AH2Af8BjgGS\r\n        AdEB/wGbAaEB7wH/AgABuwH/AgABgwH/AeYB3AHXAf8B/gL8Af8B4QLZAf8BmwGTAZQB/wH5AfoB+QH/\r\n        DAAC9gH9Af8CGQHhAf8CCgH0Af8CjAHyAf8CwwH4Af8CJQH2Af8CJAHdAf8CEQHQAf8COwH0Af8CxAHm\r\n        Af8CEAHBAf8CAAHyAf8CGAHiAf8C9gH9Af8NAAG2AdwB/wHiAfkB/QH/AagB7AH5Af8BkgHnAfcB/wGS\r\n        AecB9wH/AYEB3QHzAf8BNgHTAe8B/wElAckB6wH/ARIBvgHnAf8BAAG0AeMB/wGRAeEB+gH/AQABggHE\r\n        Af8MAAEKAaYB2gH/BAAB+AH9Av8EAAH1AfwC/wQAAdgB9gH8Af8EAAGFAeMB9wH/BAABOwHbAfUB/wQA\r\n        AdcB9AH8Af8UAAHpAusB/wHGAcUBvAH/AaQBoQGcAf8BOQE8AasB/wFAAYEB3gH/ARoBFwGIAf8B+QH3\r\n        AfUB/wHoAuAB/wGZApIB/wP5Af8QAALhAfgB/wISAeAB/wI/AfYB/wLFAfcB/wKTAe8B/wI+AfUB/wLY\r\n        AfcB/wKKAdYB/wIHAekB/wKwAfUB/wKBAcgB/wIRAeoB/wIRAeIB/wLhAfgB/w0AAbYB3AH/AeIB+QH9\r\n        Af8BqAHsAfkB/wGSAecB9wH/AZIB5wH3Af8BgQHdAfMB/wE2AdMB7wH/ASUByQHrAf8BEgG+AecB/wEA\r\n        AbQB4wH/AZEB4QH6Af8BAAGMAckB/xAAAegB9gH7Af8EAAGIAc4B7gH/BAAByQHpAfYB/wQAAfMB/AH+\r\n        Af8EAAHwAfwB/gH/BAAB7gH7Af4B/wQAAQkBqwHaAf8MAAHGAsUB/wGbAo4B/wHBAbABrwH/AdABvwGz\r\n        Af8BhAGBAaYB/wKBAa4B/wHSAcoBuAH/AbEBqAGnAf8BpQKhAf8D+wH/FAAC3gH3Af8CGwHeAf8CgwH1\r\n        Af8CzQH1Af8CjAHdAf8CggH0Af8C5wH9Af8CowHcAf8COQHqAf8CvQH2Af8CkQHVAf8CQQHtAf8CHAHg\r\n        Af8C3gH3Af8NAAG2AdwB/wQAAe0B+wH9Af8B4gH5Af0B/wHbAfcB/QH/AdIB9QH8Af8B0gH1AfwB/wHH\r\n        AfMB+wH/AbkB8AH6Af8BqAHsAfkB/wGRAeEB+gH/AQABnQHRAf8MAAEJAaoB2gH/BAABlAHeAfUB/wQA\r\n        AYEB1QHyAf8EAAE/AcsB6gH/BAABgQHSAe8B/wQAAYEBzwHuAf8EAAHpAfcB+wH/DAAD4QH/AaYCmAH/\r\n        AekC2wH/AekB3AHdAf8B5wHaAdsB/wHlAdcBzwH/AfAB4wHaAf8B4gHbAdwB/wGLAYEBggH/AZMCjgH/\r\n        A/cB/xQAAu0B+wH/AhYB2AH/AoUB8QH/AsgB+AH/Aq8B2AH/AoMB3QH/AuoB/gH/AqkB3AH/ApYB6gH/\r\n        AtsB9AH/ApYB4gH/AoQB8AH/AhYB2QH/Au0B+wH/DQABtgHcAf8DrQH/A+sB/wOtAf8BAAG0AdgB/wEA\r\n        AbYB3AH/AQABtgHcAf8BAAG0AdgB/wOtAf8DxQH/A60B/wEAAa0B2AH/EAAB9wH8Af4B/wQAAZEB3gH1\r\n        Af8EAAGsAeEB9gH/BAAB9AH9Af4B/wQAAfEB/AH+Af8EAAHuAfsB/gH/BAABCQGvAdoB/wgAAbkCtAH/\r\n        AdwC0QH/Ae0C4gH/AagCnAH/AcoCvQH/Ae0C4gH/AegC3QH/AZcCjwH/AfEC8gH/AbgCsQH/AYUCgQH/\r\n        AfUC9gH/EAAC/QL/AkIB3wH/AjwB5wH/AqsB9AH/AtYB8QH/AqkB3wH/Au0B/QH/ArEB3AH/AsYB7gH/\r\n        As0B9QH/Ap0B8AH/AjwB5wH/AkIB3wH/Av0C/xAAA60B/wPvAf8DrQH/EAADrQH/A8UB/wOtAf8QAAEJ\r\n        AbMB2gH/BAAB/gP/BAAB/QH+Av8EAAHqAfcB+wH/BAABPgHHAeMB/wQAAT4BxwHjAf8EAAGBAcoB5QH/\r\n        DAABvAK1Af8B6wLhAf8BqAKdAf8B6ALsAf8BqgKlAf8B4wLaAf8B9QLvAf8BmwGUAZIB/wH7AvwB/wP8\r\n        Af8BswKtAf8BhwKBAf8BuAK3Af8D/gH/DAAC1AH0Af8CEQHYAf8CiQHuAf8CrQHyAf8CtwHyAf8C4AH6\r\n        Af8CvQHpAf8CswHvAf8CqQHzAf8CiAHuAf8CEAHYAf8C1AH0Af8UAAOtAf8D7wH/A60B/xAAA60B/wPF\r\n        Af8DrQH/FAABMQHCAeEB/wQAATMBwwHiAf8EAAEyAcMB4gH/BQABsgHYAf8FAAGyAdgB/wUAAbIB2AH/\r\n        BQABswHYAf8IAAHIAsUB/wGUAosB/wHvAvAB/wPRAf8BtgGsAaoB/wH7AvkB/wHnAt8B/wGiAp0B/wP+\r\n        Af8EAAH4AvkB/wHOAsUB/wGUAYUBhAH/AcwCzQH/EAACtQHtAf8CGgHbAf8ChwHuAf8CowHzAf8CqwHz\r\n        Af8CqgH0Af8CowHzAf8ChwHuAf8CGAHbAf8CtQHtAf8YAAOtAf8EAAPvAf8DrQH/A60B/wOtAf8DrQH/\r\n        A60B/wPHAf8DrQH/UAAD/AH/A/cB/wHQAc4BzQH/AbwCsQL/Av0B/wH3AvQB/wGeAZQBkwH/AeUB5gHl\r\n        Af8IAAP+Af8B4gLmAf8BtQKsAf8BrQKqAf8UAALIAfEB/wIyAdwB/wIoAd8B/wI3AeYB/wI5AeYB/wIq\r\n        Ad8B/wIyAdwB/wLIAfEB/yAAA60B/wQAA9UB/wPVAf8D1QH/A8cB/wPFAf8DrQH/XAABtwK0Af8BuQKv\r\n        Af8BuAKyAf8BqgKjAf8B3wLhAf8UAAH4AvoB/wP9Af8YAAL5Af0B/wLfAfcB/wLPAfMB/wLQAfMB/wLf\r\n        AfcB/wL5Af0B/ygAA60B/wOtAf8DrQH/A60B/wOtAf8DrQH//wBlAAHsAeMB3AH/AcABoQGLAf8BpAGB\r\n        ASgB/wGOASgBAAH/AY4BKAEAAf8BpQGBASoB/wHBAaEBiwH/AewB4wHcAf+AAAH+AfkB+AH/AYEBiAHJ\r\n        Af8BFgExAbIB/wHGAcUB1AH/SAAC/gH9Af8BxgGpAZUB/wGTAS4BCAH/AcsBrwGbAf8B5QHWAcsB/wH4\r\n        AfQB8QH/AfkB9QHyAf8B6AHbAdEB/wHTAboBpwH/AZUBMQELAf8BxwGrAZcB/wL+Af0B/xwAAfoB9wH7\r\n        Af8BzQHPAd4B/wHSAdQB4AH/AfIB8QHzAf9IAAH7AvYB/wE+AYEByQH/AQABNwHpAf8BAAGqAf0B/wEj\r\n        AYEBtAH/ApsB2wH/ARwBIgHFAf8BIgEnAcQB/wEfASQBwQH/ARoBHwG/Af8BGAEeAbwB/wEXARsBuAH/\r\n        ARcBGwG3Af8BFgEZAbUB/wESARUBrwH/AREBEwGtAf8BDwERAasB/wERARMBqQH/ARIBEwGmAf8BCAEJ\r\n        AaAB/wKDAbMB/wQAAv4B/QH/AaMBgQEnAf8BrwGGATwB/wHzAe0B6QH/Ad0ByQG6Af8BxwGlAYsB/wG7\r\n        AZEBgQH/AcEBmQGBAf8B1QG3AZ8B/wHpAdoBzQH/AfgB8wHvAf8BtwGRAYEB/wGmAYEBKwH/Av4B/QH/\r\n        DAAC/wH+Af8B5gHhAfEB/wGbAaQBvQH/AYEBjAGtAf8BmAGvAdQB/wGYAaMBygH/AYoBkgG7Af8BjwGT\r\n        AbsB/wKxAckB/wHYAdYB4AH/AfcC9QH/NAAB+gH0AfcB/wExAYEBzgH/AQABNQHqAf8BBgHDAv8BEgG7\r\n        Ae0B/wGHAZoB0gH/ApEB2AH/AgAB2QH/AgAB5gH/AgAB3AH/AQABAwHWAf8CAAHRAf8CAAHOAf8CAAHI\r\n        Af8CAAHCAf8CAAG+Af8CAAG4Af8CAAGzAf8CAAGqAf8CAAGiAf8CAAGdAf8CgQG2Af8EAAHHAaoBlgH/\r\n        Aa4BhQE8Af8B8wHuAekB/wG3AY8BgQH/AaUBgQEfAf8BswGHATgB/wgAAcEBlwGBAf8BxQGbAYEB/wHX\r\n        AbkBoAH/AfkB9QHxAf8BtAGMAYAB/wHHAasBlwH/CAAB6gHpAfMB/wGNAZoByAH/AQQBhQGBAf8BAAGD\r\n        AQAB/wE6AakBgQH/AesD/wQAAfED/wHQAeMB8QH/AaYBugHXAf8BgQGUAb8B/wGBAYMBtAH/AZEBlQG5\r\n        Af8B+AH3AfgB/xgAA/oB/wP7Af8IAAH5AfYB+wH/AS4BgQHWAf8BAAE5AfEB/wEHAcQC/wESAbwB7gH/\r\n        AYEBjgHSAf8B+QH1AfkB/wH2AfQB+QH/ASMBKAHPAf8CAAHnAf8BLwFBAd4B/wLYAdQB/wHRAdIB2wH/\r\n        AeUB5gHvAf8BQAFBAYEB/wEcAR0BJQH/Ad0B3gHmAf8B0gHTAdoB/wLYAdUB/wEwATQBvAH/AgABpwH/\r\n        AQsBDAGjAf8C8wHyAf8B7AHjAdwB/wGSAS4BBwH/AfIB6wHmAf8BsQGHATwB/wGdAToBEwH/AaMBQgEc\r\n        Af8BsgGEATUB/wgAAb0BkgFCAf8BwQGWAYEB/wHFAZsBgQH/AdYBtwGdAf8B9wHxAe0B/wGTATABCQH/\r\n        AewB4wHcAf8EAAHJAcoB4wH/AYIBrgHfAf8BBgHGAUEB/wEAAZ0BAAH/ATcBnwGBAf8B1AH3Av8B5wH0\r\n        AfcB/wG/AcwByQH/AdUB8gHzAf8B4AP/AbUB7QL/AYIBzAH+Af8BHAFAAbYB/wHmAeEB6AH/DAAD/AH/\r\n        Ac0CzgH/AagBqQGrAf8BkgGTAZUB/wGMAY0BjwH/AZ0BngGfAf8C0AHMAf8BpwGmAdcB/wEoAZAB2QH/\r\n        ARkB0AL/AREBwAH0Af8BgQGKAdYB/wH4AfEB+AH/CAABwQHAAecB/wIAAdMB/wEAAQMB6AH/AbgBvQHY\r\n        Af8B7QHsAeIB/wL7AfgB/wKxAa4B/wGdAZwBmgH/AvcB9QH/Au8B5gH/AbkBuwHRAf8CAAG1Af8CAAGl\r\n        Af8CugHUAf8EAAHAAaEBiwH/AcMBpgGRAf8B0wG8Aa0B/wGUAS8BBgH/AZoBNwEPAf8BoQE/ARgB/wGp\r\n        AYEBJQH/AcgBqAGPAf8BzAGtAZQB/wG3AYkBOAH/AbsBjwE+Af8BvwGTAYAB/wHBAZYBgQH/AecB1wHJ\r\n        Af8BzwG1AaEB/wHBAaEBiwH/BAABygHMAeQB/wGGAbUB6AH/AQYBwQGBAf8BAAGqAQAB/wEpAZ0BgQH/\r\n        AccB8AL/AdUB6AHuAf8BxAGmAYEB/wHCAc8BxgH/AakB5AL/AZsBtAHGAf8BjgG+AeEB/wESAUIBwQH/\r\n        AecB4gHnAf8IAAPxAf8BpAGlAacB/wGfAZwBmQH/Ab4BtwGtAf8BzAHCAbcB/wHCAbkBrgH/AZ8BmQGR\r\n        Af8BQAE/AT0B/wOBAf8CygHIAf8BgQG1AecB/wE/AYsB3gH/AfcB7wH4Af8QAAKBAdcB/wIAAeEB/wEX\r\n        ASsB5QH/Au0B6gH/BAADggH/A4EB/wQAAfAB8QHsAf8BGQEgAcUB/wIAAbIB/wJCAbsB/wgAAaIBgQEm\r\n        Af8B3QHMAcAB/wGvAYYBPQH/AZEBKwECAf8BlwEzAQsB/wGdAToBEwH/AacBgQEkAf8B5AHUAcgB/wHl\r\n        AdYBygH/AbQBhgE1Af8BtgGHATYB/wG5AYsBOgH/AboBjgE9Af8B0QGyAZsB/wHmAdcBzAH/AaUBgQEp\r\n        Af8EAAHKAcwB4wH/AYEBrgHpAf8BCQG1AYEB/wEAAZcBAAH/ATABngGOAf8BuAHqAv8B1gHtAe8B/wHO\r\n        AZcBJQH/AbQBugGqAf8BggHSAv8BwgGgAUEB/wG4AacBgwH/AQABNQHHAf8B6AHiAegB/wQAA/oB/wGo\r\n        AakBqgH/AcEBuQGyAf8B+gHoAdIC/wHyAd0C/wHzAd4C/wH0Ad8C/wHwAdsB/wHWAccBtAH/AaEBngGX\r\n        Af8CgQGIAf8BpAGiAdwB/wH5AfUB+wH/FAAB5gHlAfQB/wESARkB0wH/ATUBQgH3Af8B1AHVAfkB/wQA\r\n        Ay8B/wMdAf8EAAKtAfoB/wIAAecB/wIAAbEB/wHjAeIB6gH/CAABjQEmAQAB/wH1AfAB7QH/AZQBMQEL\r\n        Af8BjgEmAQAB/wGUAS4BBgH/AZkBNQENAf8BnwE8ARUB/wHzAe0B6AH/BAAB0AG1AaAB/wGwAYEBLQH/\r\n        AbIBgwExAf8BtAGFATMB/wG9AZQBgQH/AfgB8wHwAf8BjgEnAQAB/wQAAdQB1gHnAf8BOwGoAesB/wE7\r\n        AboB2wH/AYEBtwHiAf8BgQHFAfwB/wGWAdgC/wGEAcwB9gH/ATcBmAG/Af8BLwGmAeIB/wEjAbMC/wE4\r\n        AY4BsQH/AS8BiQGwAf8BAAEzAcMB/wHwAekB5gH/BAACzAHOAf8BuQG0AbAC/wHrAdEC/wHtAdYC/wHr\r\n        AdIC/wHqAdIC/wHqAdIC/wHtAdYC/wH1Ad4B/wHUAcABqgH/AS8BLgEsAf8C0AHJAf8cAAKlAeIB/wE9\r\n        AT8B5AH/ArgC/wL8Av8CIwEhAf8CFwETAf8C8QL/AiUC/wIAAdgB/wKfAc4B/wwAAY0BJgEAAf8B9QHw\r\n        Ae0B/wGTAS8BCQH/AYoBIgEAAf8BkAEpAQAB/wGVATABBwH/AZoBNgEOAf8BtQGLAUAB/wH8AfsB+QH/\r\n        A/4B/wHBAZ0BggH/AawBgQEnAf8BrQGBASkB/wG3AY0BPwH/AfcB8wHvAf8BjgEnAQAB/wK0Ac4B/wGB\r\n        AYIBtQH/ASwBnAHoAf8BPQG9Av8BQgG9Av8BgQHHAv8BKQGIAfQB/wEAAREB2QH/AQABJQHjAf8BAAEl\r\n        AeEB/wEAASoB4wH/AQABLAHqAf8BAAE0AfIB/wEAAR0BwQH/AUEBPgGkAf8CtgHMAf8BqwGsAa4B/wHs\r\n        AdgBwwL/AegBygL/AeYBxwL/AeMBwgL/AeIBwQL/AeIBwwL/AeUBxwL/AeoBzwL/AecBygH/AY8BhAGB\r\n        Af8BjgGQAZIB/xwAAfwB+wH9Af8BOwE9AdcB/wGRAZMB9wH/AdUB1AL/AhkBFgH/AhIBCwH/AqQC/wEK\r\n        AQsB9QH/ASsBLQHBAf8C/QH6Af8MAAGiAYEBJgH/Ad0BzAHAAf8BrAGCATgB/wGHAR0BAAH/AYsBIwEA\r\n        Af8BkAEpAQAB/wGVAS8BBwH/AZkBNQENAf8BwgGhAYkB/wQAAfMB7AHoAf8BpQGBAR4B/wGmAYEBIAH/\r\n        AcMBoQGGAf8B4QHSAcYB/wGkAYEBKAH/AigBqQH/AgABsAH/ARUBhQHyAf8BLQG2Av8BMQG2Av8BKwGh\r\n        AfwB/wEEAREB5wH/AQABAwHaAf8BAAEFAdoB/wEAAQMB2gH/AQABAgHaAf8BAAECAdcB/wEAAQcB2gH/\r\n        AgAB1wH/AgABqAH/AsQB1gH/AagBpwGlAv8B5QHJAv8B3wG4Av8B1wGrAv8B0wGlAv8B0QGiAv8B0wGl\r\n        Av8B1wGsAv8B3gG4Av8B6QHHAf8BrAGZAYcB/wOBAf8D/AH/HAACzQHvAf8BMAE0AdwB/wG8Ab0C/wKf\r\n        Aa4B/wKVAa8B/wKBAv8BDQEPAc0B/wLLAeQB/xAAAcABoQGLAf8BwwGlAZAB/wHQAbkBqQH/AYcBHQEA\r\n        Af8BhwEdAQAB/wGfAUEBHgH/AaABQgEgAf8BlAEuAQUB/wGoAYEBLAH/BAAB/QH8AfsB/wGhAUABGQH/\r\n        AZ8BPQEWAf8B2gHGAbcB/wHGAaoBlQH/AcABoQGLAf8C5QHuAf8BAwEAAa0B/wEAAQ4BzQH/AR0BrAL/\r\n        AR4BqQL/AQoBKAHpAf8BAAEGAd0B/wEAAQoB3AH/AQABCgHdAf8BAAEIAdwB/wEAAQkB3QH/AQABCAHd\r\n        Af8BAAEFAd4B/wIAAbwB/wKkAckB/wQAAasBqAGnAv8B3AG6Av8B0AGdAv8BzAGYAv8BzQGaAv8BzgGc\r\n        Av8BzQGaAv8BzAGYAv8B0AGeAv8B3AGwAf8BsAGXAYIB/wOBAf8D+wH/IAABiwGMAeAB/wGBAYIB6wH/\r\n        AtwC/wLDAv8BLQEwAeUB/wGDAYQB0AH/FAAB7AHjAdwB/wGSAS8BCAH/AfEB6gHlAf8BpQGBASsB/wGH\r\n        AR0BAAH/AbABiAE/Af8B/gL9Af8B6QHeAdYB/wH2AfIB7wH/BAAB3AHKAb0B/wGYATMBCwH/AbMBiQE+\r\n        Af8B8gHrAeYB/wGRAS4BBwH/AewB4wHcAf8EAAHBAcAB2gH/AgABlwH/AQABMAHQAf8BCwGBAfUB/wEB\r\n        AQUB1gH/AQABCgHWAf8BAAEIAdYB/wEAAQoB2wH/AQABBgHWAf8BAAEHAdgB/wEAAQYB2QH/AgABxQH/\r\n        AoEBtwP/AfwB/wQAAa8BsQG0Af8B9gHMAawC/wHMAZYC/wHTAacC/wHXAa4C/wHYAbAC/wHXAa0C/wHS\r\n        AaYC/wHPAZ0C/wHLAZUB/wGgAYcBgQH/AZEBlQGXAf8kAALvAfoB/wEyATUB2gH/AboBvAH7Af8BqwGs\r\n        AfsB/wEoASsBzQH/Au0B9AH/GAABxgGpAZUB/wGtAYMBOgH/AfIB6wHnAf8BpgGBASwB/wGcATwBGgH/\r\n        Ad4BzgHCAf8B9wHzAfAB/wHxAeoB5gH/AdABuAGnAf8BoAFCASAB/wGtAYIBNwH/AfMB7QHoAf8BqwGB\r\n        ATUB/wHGAakBlQH/DAABjgGMAb8B/wIAAZcB/wECAQ8B3wH/AQABAgHVAf8BAAECAdUB/wEAAQEB2QH/\r\n        AgAB2QH/AgAB0wH/AgAB1QH/AgABzgH/AR0BIAGrAf8C8gHxAf8IAAHFAccByQH/AdIBvQGxAv8BzAGg\r\n        Av8B3wG7Av8B4QHCAv8B4QHDAv8B4AHAAv8B3QG6Av8B3AGwAf8B6gGwAYQB/wGBAUIBPwH/AcMBxAHF\r\n        Af8oAAK5AewB/wE+AUIB4wH/AToBPQHeAf8CsQHiAf8cAAL+Af0B/wGjAYEBJwH/AaoBgQE0Af8B8AHo\r\n        AeMB/wHQAbkBqQH/AawBggE4Af8BlgEzAQ4B/wGWATMBDgH/AawBggE4Af8B0QG6AaoB/wHwAekB5AH/\r\n        AaoBgQE1Af8BowGBAScB/wL+Af0B/wwAA/kB/wGFAYQBxAH/ATYBOgHDAf8BNgE7AcQB/wE2AToBwwH/\r\n        ATYBPAHFAf8BNQE6AcMB/wE4ATwBwwH/ATUBOgHDAf8BOAE7AbsB/wLaAeQB/wwAA/UB/wGyAbUBtgH/\r\n        AeMBvwGsAv8BzQGtAv8B5gHOAv8B8wHgAv8B8AHaAv8B3gG+Af8B7gG3AZIB/wGZAYMBgQH/AY4BkQGT\r\n        Af8D+QH/LAABiQGLAeIB/wGFAYcB3gP/Af4B/yAAAv4B/QH/AcYBqQGVAf8BkQEuAQcB/wHBAaIBjQH/\r\n        AdsByQG9Af8B9AHvAesB/wH0Ae8B6wH/AdsByQG9Af8BwQGjAY0B/wGRAS0BBgH/AccBqgGWAf8C/gH9\r\n        Af8UAAL/Af4B/wL9AfgB/wH+Af0B+QL/Af4B+QP/AfkD/wH6A/8B+gP/AfoD/wH9Af8UAAHlAuYB/wGx\r\n        AbQBtgH/AcoBrQGjAf8B6QG4AaUB/wHxAcYBtQH/AesBvwGsAf8BzgGfAYsB/wGVAYYBgQH/AZQBlwGZ\r\n        Af8D7wH/ZAAB7AHjAdwB/wHAAaEBiwH/AaIBgQEmAf8BjQEmAQAB/wGNASYBAAH/AaIBgQEmAf8BwAGh\r\n        AYsB/wHsAeMB3AH/WAAD9QH/AcMBxwHIAf8CowGkAf8BpwGeAZsB/wGcAZUBkwH/AZQClwH/AcYBxwHJ\r\n        Af8D+wH/WAABogHKAe4B/wGBAbIB5gH/AREBkQHbAf8BBwGMAdkB/wEHAYwB2QH/AQcBjAHZAf8BBwGM\r\n        AdkB/wEHAYwB2QH/AQcBjAHZAf8BBwGMAdkB/wEHAYwB2QH/AQcBiwHZAf8BDAGPAdoB/wGFAbkB6QH/\r\n        CQABhgHYAf8BAAGIAdgB/wEAAYcB2AH/AQABiAHYAf8BAAGIAdgB/wEAAYgB2AH/AQABiAHYAf8BAAGI\r\n        AdgB/wEAAYgB2AH/AQABiAHYAf8BAAE+AQoB/wEAAT4BCgH/AQABPgEKAf8BAAE+AQoB/wEAAT4BCgH/\r\n        LAABhAGwAZQB/wEAAYEBFAH/AQABPgEKAf8BAAGBARQB/wGEAbABlAH/RAABGgGZAd0B/wHeAfEB+gH/\r\n        AagB3QH0Af8BngHbAfQB/wGWAdoB8wH/AY4B2AHzAf8BhgHXAfMB/wGBAdQB8gH/AYEB0wHyAf8BgQHS\r\n        AfEB/wE/AdAB8QH/ATwBzwHxAf8BwgHqAfgB/wESAZUB2wH/CAABBgGOAdkB/wHcAfAB+gH/AacB3QH0\r\n        Af8BngHbAfQB/wGWAdoB8wH/AY4B2AHzAf8BhgHXAfMB/wGBAdQB8gH/AYEB0wHyAf8BAAE+AQoB/wEA\r\n        AYwBJgH/ATcBugGNAf8BlQHSAbIB/wE3AboBjQH/AQABjAEmAf8BAAE+AQoB/yQAAYgBsgGXAf8BAAGM\r\n        ASYB/wE3AboBjQH/AZUB0gGyAf8BNwG6AY0B/wEAAYwBJgH/AYEBrgGRAf8JAAGIAdgB/wUAAYgB2AH/\r\n        BQABiAHYAf8FAAGIAdgB/wUAAYgB2AH/BQABhwHYAf8FAAGGAdgB/wQAAQ4BlwHbAf8B7wH6Af4B/wGh\r\n        AekB+QH/AZEB5QH4Af8BgQHhAfcB/wGBAd4B9gH/ATYB2gH1Af8BJwHXAfQB/wEaAdMB8wH/AQwB0AHy\r\n        Af8BAQHNAfEB/wEAAcsB8AH/AcoB8gH7Af8BDgGXAdsB/wgAAQgBlAHaAf8B7wH6Af4B/wGhAekB+QH/\r\n        AZEB5QH4Af8BgQHhAfcB/wGBAd4B9gH/ATYB2gH1Af8BJwHXAfQB/wEaAdMB8wH/AQABQAERAf8BNQG6\r\n        AYsB/wEzAboBhwH/BAABMwG5AYcB/wE6AbwBjwH/AQABPgEKAf8EAAGiAcoB7gH/AYEBsgHmAf8BEQGR\r\n        AdsB/wEHAYwB2QH/AQcBjAHZAf8BBwGMAdkB/wEHAYwB2QH/AQcBjAHZAf8BAAFAAREB/wE1AboBiwH/\r\n        ATMBugGHAf8EAAEzAbkBhwH/AToBvAGPAf8BAAGAARAB/wQAAQYBjgHZAf8EAAGnAd0B9AH/BAABlgHa\r\n        AfMB/wQAAYYB1wHzAf8EAAGBAdMB8gH/BAABPwHQAfEB/wQAAcIB6gH4Af8IAAEPAZ0B2wH/AfIB+gH9\r\n        Af8BswHtAfoB/wGkAekB+QH/AZUB5gH4Af8BhQHiAfcB/wGBAd4B9gH/ATgB2wH1Af8BKgHXAfQB/wEc\r\n        AdQB8wH/AQ4B0QHyAf8BAwHOAfEB/wHMAfIB+wH/AQ4BmwHbAf8IAAEJAZoB2gH/AfIB+gH9Af8BswHt\r\n        AfoB/wGkAekB+QH/AZUB5gH4Af8BhQHiAfcB/wGBAd4B9gH/ATgB2wH1Af8BKgHXAfQB/wEEAYEBHwH/\r\n        AZwB1AG2Af8MAAGVAdIBsgH/AQABPgEKAf8EAAEaAZkB3QH/Ad4B8QH6Af8BqAHdAfQB/wGeAdsB9AH/\r\n        AZYB2gHzAf8BjgHYAfMB/wGGAdcB8wH/AYEB1AHyAf8BBAGBAR8B/wGcAdQBtgH/DAABlQHSAbIB/wEA\r\n        AT4BCgH/CAAB7wH6Af4B/wQAAZEB5QH4Af8EAAGBAd4B9gH/BAABJwHXAfQB/wQAAQwB0AHyAf8FAAHL\r\n        AfAB/wQAAQgBlAHaAf8EAAEOAaMB2wH/AfYB/AH+Af8ByAHyAfwB/wG5Ae8B+wH/AawB7AH6Af8BnAHo\r\n        AfkB/wGLAeMB9wH/AYEB4AH2Af8BPwHcAfYB/wEwAdkB9QH/ASIB1gH0Af8BFwHTAfMB/wHQAfMB/AH/\r\n        AQ4BogHbAf8IAAEJAaEB2gH/AfYB/AH+Af8ByAHyAfwB/wG5Ae8B+wH/AawB7AH6Af8BnAHoAfkB/wGL\r\n        AeMB9wH/AYEB4AH2Af8BPwHcAfYB/wEXAYkBNQH/AZAB0wGxAf8BkgHWAbEB/wQAATgBvAGMAf8BOgG8\r\n        AY8B/wEAAT4BCgH/BAABDgGXAdsB/wHvAfoB/gH/AaEB6QH5Af8BkQHlAfgB/wGBAeEB9wH/AYEB3gH2\r\n        Af8BNgHaAfUB/wEnAdcB9AH/ARcBiQE1Af8BkAHTAbEB/wGSAdYBsQH/BAABOAG8AYwB/wE6AbwBjwH/\r\n        AQABgAEQAf8EAAEJAZoB2gH/BAABswHtAfoB/wQAAZUB5gH4Af8EAAGBAd4B9gH/BAABKgHXAfQB/wQA\r\n        AQ4B0QHyAf8EAAHMAfIB+wH/CAABDgGoAdsB/wH+A/8B+AH9Av8B9gH9Av8B9QH8Av8B8wH8Af4B/wHY\r\n        AfYB/AH/AZQB5gH4Af8BhQHjAfcB/wGBAd8B9gH/ATsB2wH1Af8BLwHYAfQB/wHXAfQB/AH/AQ4BpwHb\r\n        Af8IAAEKAaYB2gH/Af4D/wH4Af0C/wH2Af0C/wH1AfwC/wHzAfwB/gH/AdgB9gH8Af8BlAHmAfgB/wGF\r\n        AeMB9wH/AScBswGuAf8BNAGrAYEB/wGVAdQBtAH/AboB5gHQAf8BPQG7AY8B/wEAAY8BKgH/AQABPgEK\r\n        Af8EAAEPAZ0B2wH/AfIB+gH9Af8BswHtAfoB/wGkAekB+QH/AZUB5gH4Af8BhQHiAfcB/wGBAd4B9gH/\r\n        ATgB2wH1Af8BJwGzAa4B/wE0AasBgQH/AZUB1AG0Af8BugHmAdAB/wE9AbsBjwH/AQABjwEqAf8BgQGu\r\n        AZEB/wgAAfYB/AH+Af8EAAG5Ae8B+wH/BAABnAHoAfkB/wQAAYEB4AH2Af8EAAEwAdkB9QH/BAABFwHT\r\n        AfMB/wQAAQgBnwHaAf8EAAEMAa0B2wH/AegB9gH7Af8BlAHUAe8B/wGIAc4B7gH/AYEBwQHpAf8ByQHp\r\n        AfYB/wHvAfsB/gH/Ae8B+wH+Af8B7wH7Af4B/wHvAfsB/gH/Ae8B+wH+Af8B7gH7Af4B/wH+A/8BDwGu\r\n        AdsB/wgAAQgBqwHaAf8B6AH2AfsB/wGUAdQB7wH/AYgBzgHuAf8BgQHBAekB/wHJAekB9gH/Ae8B+wH+\r\n        Af8B7wH7Af4B/wHvAfsB/gH/AT8B3AH2Af8BLgG3AbQB/wErAZcBgQH/ASIBjgE5Af8BGgGKATQB/wEF\r\n        AYwBkgH/CAABDgGjAdsB/wH2AfwB/gH/AcgB8gH8Af8BuQHvAfsB/wGsAewB+gH/AZwB6AH5Af8BiwHj\r\n        AfcB/wGBAeAB9gH/AT8B3AH2Af8BLgG3AbQB/wErAZcBgQH/ASIBjgE5Af8BGgGKATQB/wEIAY4BlAH/\r\n        CAABCgGmAdoB/wQAAfgB/QL/BAAB9QH8Av8EAAHYAfYB/AH/BAABhQHjAfcB/wQAATsB2wH1Af8EAAHX\r\n        AfQB/AH/CAABEwGuAdwB/wHxAfoB/QH/AZQB3gH1Af8BkwHcAfQB/wGBAdUB8gH/AT0BygHtAf8BIwG0\r\n        AeQB/wGGAekB+QH/ASAB2QH1Af8BEAGVAc4B/wErAacB0AH/AYEBzwHuAf8B6QH3AfsB/wERAbIB3AH/\r\n        CAABCQGqAdoB/wHxAfoB/QH/AZQB3gH1Af8BkwHcAfQB/wGBAdUB8gH/AT0BygHtAf8BIwG0AeQB/wGG\r\n        AekB+QH/ASAB2QH1Af8BEAGVAc4B/wErAacB0AH/AYEBzwHuAf8B6QH3AfsB/wEHAa4B2gH/DAABDgGo\r\n        AdsB/wH+A/8B+AH9Av8B9gH9Av8B9QH8Av8B8wH8Af4B/wHYAfYB/AH/AZQB5gH4Af8BhQHjAfcB/wGB\r\n        Ad8B9gH/ATsB2wH1Af8BLwHYAfQB/wHXAfQB/AH/AQ4BpwHbAf8MAAHoAfYB+wH/BAABiAHOAe4B/wQA\r\n        AckB6QH2Af8EAAHzAfwB/gH/BAAB8AH8Af4B/wQAAe4B+wH+Af8EAAEJAasB2gH/BAABFAG0AdwB/wH3\r\n        AfwB/gH/AY4B5AH4Af8BkQHeAfUB/wGfAeAB9QH/AawB4QH2Af8BOgG6AeYB/wGhAeYB+AH/AQsB0gHy\r\n        Af8BGgHWAfYB/wEVAZgBzwH/AaABvgHXAf8B7wH0AfsB/wEoAbgB3gH/CAABCAGvAdoB/wH3AfwB/gH/\r\n        AY4B5AH4Af8BkQHeAfUB/wGfAeAB9QH/AawB4QH2Af8BOgG6AeYB/wGhAeYB+AH/AQsB0gHyAf8BGgHW\r\n        AfYB/wEVAZgBzwH/AaABvgHXAf8B7wH0AfsB/wEIAaoB2AH/DAABDAGtAdsB/wHoAfYB+wH/AZQB1AHv\r\n        Af8BiAHOAe4B/wGBAcEB6QH/AckB6QH2Af8B8gH8Af4B/wHzAfwB/gH/AfIB/AH+Af8B8AH8Af4B/wHv\r\n        AfsB/gH/Ae4B+wH+Af8B/gP/AQ8BrgHbAf8IAAEJAaoB2gH/BAABlAHeAfUB/wQAAYEB1QHyAf8EAAE/\r\n        AcsB6gH/BAABgQHSAe8B/wQAAYEBzwHuAf8EAAHpAfcB+wH/CAABDwG1AdsB/wH9Av4B/wH+A/8C/gL/\r\n        Af0B/gL/Af4D/wGnAdUB7wH/ARcBpgHeAf8BmQHiAfYB/wEmAdwB9QH/ARkB2QH2Af8BDQGTAc0B/wEP\r\n        AYoB0gH/ARUBjAHVAf8BtgHLAeIB/wQAAQkBswHaAf8B/QL+Af8B/gP/Av4C/wH9Af4C/wH+A/8BpwHV\r\n        Ae8B/wEWAaYB3gH/AZkB4gH2Af8BJgHcAfUB/wEZAdkB9gH/AQ0BkwHNAf8BDQGJAdEB/wEJAYUB0gH/\r\n        AQABMQGnAf8IAAETAa4B3AH/AfEB+gH9Af8BlAHeAfUB/wGTAdwB9AH/AYEB1QHyAf8BPQHKAe0B/wE/\r\n        AcsB6gH/AYUB0wHvAf8BgQHSAe8B/wGBAdAB7wH/AYEBzwHuAf8BgQHPAe4B/wHpAfcB+wH/AREBsgHc\r\n        Af8MAAH3AfwB/gH/BAABkQHeAfUB/wQAAawB4QH2Af8EAAH0Af0B/gH/BAAB8QH8Af4B/wQAAe4B+wH+\r\n        Af8EAAEJAa8B2gH/BAABLAHCAeAB/wE0AcMB4gH/ATYBxAHjAf8BNgHEAeMB/wE2AcQB4wH/ATUBxAHj\r\n        Af8BKQHAAeAB/wHFAeQB9QH/AT0BuwHnAf8BOAHBAegB/wExAdkB8gH/ASEB2wH2Af8BLgHdAfcB/wEo\r\n        AdgB9QH/AQgBhAHPAf8BsQHFAd8B/wEHAbQB2QH/ATEBwgHhAf8BMwHDAeIB/wEzAcMB4gH/ATMBwwHi\r\n        Af8BMgHDAeIB/wEPAbYB2wH/AQABnQHZAf8BGQGqAeEB/wEjAbgB5QH/ATEB2QHyAf8BIQHbAfYB/wEu\r\n        Ad0B9wH/ASgB2AH1Af8BAQGBAc0B/wEAASsBogH/BAABFAG0AdwB/wH3AfwB/gH/AY4B5AH4Af8BkQHe\r\n        AfUB/wGfAeAB9QH/AawB4QH2Af8B7wH7Af4B/wH0Af0B/gH/AfMB/AH+Af8B8QH8Af4B/wHvAfsB/gH/\r\n        Ae4B+wH+Af8B+gH9Av8BKwG8AeAB/wgAAQkBswHaAf8EAAH+A/8EAAH9Af4C/wQAAeoB9wH7Af8EAAE+\r\n        AccB4wH/BAABPgHHAeMB/wQAAYEBygHlAf8sAAGBAbwB5AH/AYkB3QH0Af8BPQHgAfYB/wGBAeIB9wH/\r\n        ATIB3wH2Af8BKAHaAfYB/wEUAYUBzwH/JAABCwGXAdUB/wGJAd0B9AH/AT0B4AH2Af8BgQHiAfcB/wEy\r\n        Ad8B9gH/ASgB2gH2Af8BCwGBAc0B/wQAAQ8BtQHbAf8B/QL+Af8B/gP/Av4C/wH9Af4C/wH+A/8B6gH3\r\n        AfsB/wFBAcgB5QH/AUIByQHkAf8BQgHJAeQB/wFCAckB5AH/AYEBzwHnAf8BhAHQAegB/wG6AeUB8gH/\r\n        DAABMQHCAeEB/wQAATMBwwHiAf8EAAEyAcMB4gH/BQABsgHYAf8FAAGyAdgB/wUAAbIB2AH/BQABswHY\r\n        Af8oAAE8AbQB4QH/AakB7gH5Af8BgQHmAfgB/wGaAegB+AH/AYEB0QHwAf8BgQHiAfYB/wEdAZ4B2wH/\r\n        JAABDwGdAdgB/wGpAe4B+QH/AYEB5gH4Af8BmgHoAfgB/wGBAdEB8AH/AYEB4gH2Af8BEgGYAdkB/wQA\r\n        ASwBwgHgAf8BNAHDAeIB/wE2AcQB4wH/ATYBxAHjAf8BNgHEAeMB/wE1AcQB4wH/ASkBwAHgAf8B7QH4\r\n        AfwB/wHzAfoB/QH/AfMB+gH9Af8B8wH6Af0B/wHzAfoB/QH/AfMB+wH9Af8B/AL+Af9oAAGPAcUB5wH/\r\n        ATEBwQHqAf8BowHwAfsB/wGBAdQB8AH/AYEBxwHsAf8BKgGnAd4B/wGyAcwB5gH/JAABCAGWAdQB/wEw\r\n        AcEB6gH/AaMB8AH7Af8BgQHUAfAB/wGBAccB7AH/ASMBowHdAf8BAAFBAbYB/6gAAaEBzwHuAf8BQgHJ\r\n        AewB/wHJAfMB+wH/ATYBvwHpAf8BwQHdAfEB/y0AAZEB2AH/AUIByQHsAf8ByQHzAfsB/wEqAboB5wH/\r\n        AQABhQHNAf+sAAH9Af4C/wGQAcgB6wH/AT8BvAHnAf8BrQHWAfEB/zEAAZYB2gH/AQQBmQHaAf8BGQGr\r\n        AeEB/wEAAZYB2gH/SAAD/gH/AZEBqwGoAf8BAAEuAScB/wEAAS4BJwH/AQABLgEnAf8BAAEuAScB/wEA\r\n        AS4BJwH/AQABLgEnAf8BAAEuAScB/wEAAS4BJwH/AQABLgEnAf8BAAEuAScB/wEAAS4BJwH/AQABLgEn\r\n        Af8BkAGqAacB/wP9Af8IAAP+Af8D+wH/A/oB/wP4Af8D9wH/A/YB/wP2Af8D9wH/A/cB/wP5Af8D+wH/\r\n        A/0B/xAAA/4B/wP7Af8D+gH/A/gB/wP3Af8D9gH/A/UB/wP2Af8D9wH/A/kB/wP7Af8D/QH/SAAD+AH/\r\n        AQABLgEnAf8BgQGzAa8B/wGOAdIBzAH/AY0B0QHJAf8BiwHMAccB/wGJAcoBwwH/AYcBxgG/Af8BhgHC\r\n        AbwB/wGEAb4BuAH/AYIBuwG1Af8BgQG4AbIB/wGBAbIBrAH/ATgBkwGOAf8BAAEuAScB/wP5Af8EAAP7\r\n        Af8D8wH/A+oB/wLkAeMB/wLbAdwB/wLDAckB/wKzAb0B/wKyAbwB/wLCAcgB/wLZAdoB/wLjAeIB/wPp\r\n        Af8D8gH/A/oB/wgAA/sB/wPzAf8D6gH/AeIB4QHiAf8B3QLcAf8B0ALRAf8BugG+AbwB/wHKAssB/wPT\r\n        Af8D2AH/A+AB/wPpAf8D8gH/A/oB/0kAAS4BJwH/AZAB1QHNAf8BMgHFAbsB/wEwAcMBuQH/AS0BvQGz\r\n        Af8BKgG3Aa0B/wEnAbEBqAH/AZ4BywHEAf8BIAGmAZwB/wEdAZ8BlgH/ARkBmQGQAf8BFQGQAYcB/wFB\r\n        AacBoQH/AQABLgEnAf8QAAP+Af8C4gHrAf8CgQHGAf8CDwHAAf8CAAG8Af8CAAG8Af8CDwHAAf8CgQHF\r\n        Af8C4gHrAf8D/gH/GAAD/gH/A/0B/wHeAeQB4QH/AYIBrgGWAf8BNgGuAYUB/wGnAcIBswH/A/sB/wP8\r\n        Af8D/AH/A/0B/xAAAaIBygHuAf8BgQGyAeYB/wERAZEB2wH/AQcBjAHZAf8BBwGMAdkB/wEHAYwB2QH/\r\n        AQcBjAHZAf8BBwGMAdkB/wEHAYwB2QH/AQcBjAHZAf8BBwGMAdkB/wEHAYsB2QH/AQwBjwHaAf8BhQG5\r\n        AekB/wkAAS4BJwH/AZMB1wHRAf8BNQHGAbwB/wE0AcUBuwH/ATwBxAG7Af8BoQHSAc0B/wGZAcoBwwH/\r\n        AbwB2QHUAf8BuwHYAdMB/wE6Aa8BpwH/AR0BnAGSAf8BGAGSAYkB/wGBAasBowH/AQABLgEnAf8QAALd\r\n        AfkB/wIdAd0B/wIAAdgB/wIAAeQB/wIAAesB/wIAAesB/wIAAeQB/wIAAdgB/wIdAd0B/wLdAfkB/xwA\r\n        AdIB6QHcAf8BgQHHAZgB/wGAAdwBoAH/AYEB5gGrAf8BMAHCAYoB/wHkAfIB6gH/HAABGgGZAd0B/wHe\r\n        AfEB+gH/AagB3QH0Af8BngHbAfQB/wGWAdoB8wH/AY4B2AHzAf8BhgHXAfMB/wGBAdQB8gH/AYEB0wHy\r\n        Af8BgQHSAfEB/wE/AdAB8QH/ATwBzwHxAf8BwgHqAfgB/wESAZUB2wH/CQABLgEnAf8BkQHWAdAB/wE4\r\n        AccBvQH/ATYBxwG9Af8BuwHZAdMB/wGBAcYBvQH/ATABtwGuAf8BpQHOAcgB/wE2AbIBqgH/AbkB1wHS\r\n        Af8BIgGgAZYB/wEbAZMBiwH/AYEBrQGoAf8BAAEuAScB/wwAAvEB/AH/AhYB3AH/AgAB6QH/AgAB8QH/\r\n        AgMB8AH/AgAB+gH/AgAB+gH/AgMB8AH/AgAB8QH/AgAB6QH/AhYB3AH/AvEB/AH/FAABvwHiAc8B/wEd\r\n        AcIBgQH/ASIB1wGMAf8BIAHXAYoB/wEfAdcBiQH/ARwB0wGGAf8BOAHDAY4B/wH0AfoB9wH/GAABDgGX\r\n        AdsB/wHvAfoB/gH/AaEB6QH5Af8BkQHlAfgB/wGBAeEB9wH/AYEB3gH2Af8BNgHaAfUB/wEnAdcB9AH/\r\n        ARoB0wHzAf8BDAHQAfIB/wEBAc0B8QH/AQABywHwAf8BygHyAfsB/wEOAZcB2wH/CQABLgEnAf8BhAHR\r\n        AcoB/wEqAcIBuAH/ATQBxgG8Af8BuwHZAdQB/wHIAdsB1gH/AS8BtwGtAf8BLAGyAakB/wEzAbIBqQH/\r\n        AYEBvgG3Af8BIwGhAZgB/wEfAZoBkQH/AYEBrAGlAf8BAAEuAScB/wwAAosB6AH/AgAB6gH/AgAB8wH/\r\n        Ap0B8QH/AsoB9AH/Ah0B7gH/AhwB7gH/AskB9AH/ApwB8AH/AgAB8gH/AgAB6gH/AosB6AH/EAABxQHn\r\n        AdQB/wEAAbgBPAH/AQABwwE7Af8BAAG+ATIB/wEAAb4BLwH/AQABwAExAf8BAAHEATcB/wEAAb4BOQH/\r\n        AYEByAGbAf8B+wH9AfwB/xQAAQ8BnQHbAf8B8gH6Af0B/wGzAe0B+gH/AaQB6QH5Af8BlQHmAfgB/wGF\r\n        AeIB9wH/AYEB3gH2Af8BOAHbAfUB/wEqAdcB9AH/ARwB1AHzAf8BDgHRAfIB/wEDAc4B8QH/AcwB8gH7\r\n        Af8BDgGbAdsB/wkAAS4BJwH/AYEB0QHJAf8BJAHAAbUB/wEkAcABtQH/AZ0B0gHMAf8BQAHDAboB/wE3\r\n        AbsBsgH/AZ8B0QHMAf8BoQHSAc0B/wEpAakBnwH/ASUBogGaAf8BIgGdAZQB/wE+AaQBnwH/AQABLgEn\r\n        Af8IAAL2Af0B/wIZAeEB/wILAfQB/wImAe8B/wLPAfYD/wH+Af8C1wH3Af8C1wH3A/8B/gH/AsoB9QH/\r\n        AhEB7AH/AgAB9AH/AhgB4QH/AvYB/QH/CAAB9AH7AfcB/wENAbgBgQH/AQABtAEzAf8BPwHJAZYB/wGm\r\n        Ad0BvgH/AYwB1AGsAf8BEAG9AYEB/wEAAbQBKQH/AQABuAEsAf8BAAGxASoB/wGxAeEBxwH/FAABDgGj\r\n        AdsB/wH2AfwB/gH/AcgB8gH8Af8BuQHvAfsB/wGsAewB+gH/AZwB6AH5Af8BiwHjAfcB/wGBAeAB9gH/\r\n        AT8B3AH2Af8BMAHZAfUB/wEiAdYB9AH/ARcB0wHzAf8B0AHzAfwB/wEOAaIB2wH/CQABLgEnAf8BgQHQ\r\n        AccB/wEkAcABtQH/ASQBwAG1Af8BIwG9AbIB/wE4AcABuAH/AcgB2wHWAf8ByAHbAdYB/wGeAdABywH/\r\n        ASkBqQGgAf8BHAGeAZUB/wEbAZUBjAH/AS8BkQGKAf8BAAEuAScB/wgAAuEB+AH/AhIB4QH/AjgB9gH/\r\n        AjYB9AH/AoEB8AH/AtsB+QH/CAAC2AH4Af8CKgHsAf8CAwHxAf8CFwHzAf8CEQHhAf8C4QH4Af8IAAHP\r\n        Ae0B3AH/ASQBwAGCAf8B4AHzAegB/wP+Af8IAAH1AfsB+AH/AZsB2wG4Af8BAAGyATEB/wEAAa4BJgH/\r\n        AQABsQE1Af8B3wHzAegB/xAAAQ4BqAHbAf8B/gP/AfgB/QL/AfYB/QL/AfUB/AL/AfMB/AH+Af8B2AH2\r\n        AfwB/wGUAeYB+AH/AYUB4wH3Af8BgQHfAfYB/wE7AdsB9QH/AS8B2AH0Af8B1wH0AfwB/wEOAacB2wH/\r\n        CQABLgEnAf8BgQHQAccB/wEkAcABtQH/ASQBwAG1Af8BIwG+AbMB/wEcAa4BpQH/ASgBrwGmAf8BNwGy\r\n        AaoB/wEaAaIBmAH/AREBlAGLAf8BDQGJAYEB/wEKAYIBgQH/ASwBkgGKAf8BAAEuAScB/wgAAt4B9wH/\r\n        AhsB3wH/AoEB9AH/AoEB9AH/AoEB8QH/AtsB+QH/CAAC2QH5Af8CPQHvAf8CMgHxAf8CgQH0Af8CHAHf\r\n        Af8C3gH3Af8IAAHoAfcB7wH/Ae8B+QH0Af8UAAH+A/8BxwHsAdcB/wEAAbYBPQH/AQABpgEhAf8BKwHD\r\n        AYgB/wH4Af0B+gH/DAABDAGtAdsB/wHoAfYB+wH/AZQB1AHvAf8BiAHOAe4B/wGBAcEB6QH/AckB6QH2\r\n        Af8B8gH8Af4B/wHzAfwB/gH/AfIB/AH+Af8B8AH8Af4B/wHvAfsB/gH/Ae4B+wH+Af8B/gP/AQ8BrgHb\r\n        Af8EAAGBAZwBmAH/AQABLgEnAf8BLAGaAZMB/wEIAYIBgQH/AQcCgQH/AQYCgQH/AQUCgQH/AQQBgQFC\r\n        Af8BAgGBAT8B/wEAAUABOQH/AQABOwE0Af8BAAE2ATAB/wEAATQBLgH/AQABMQEqAf8BAAEuAScB/wGB\r\n        AZsBlwH/BAAC7QH7Af8CFQHYAf8ChAHxAf8ChAHyAf8C0QH5A/8B/gH/AtwB+wH/At0B+wP/Af4B/wLT\r\n        AfgB/wKFAfEB/wKFAfEB/wIXAdkB/wLtAfsB/ywAAdcB8gHjAf8BCQG5AYEB/wEAAaEBHgH/AacB4gHB\r\n        Af8MAAETAa4B3AH/AfEB+gH9Af8BlAHeAfUB/wGTAdwB9AH/AYEB1QHyAf8BPQHKAe0B/wE/AcsB6gH/\r\n        AYUB0wHvAf8BgQHSAe8B/wGBAdAB7wH/AYEBzwHuAf8BgQHPAe4B/wHpAfcB+wH/AREBsgHcAf8FAAEu\r\n        AScB/wGmAbsBtgH/AdcB4AHbAf8B1wHgAdsB/wHXAeAB2wH/AdcB4AHbAf8B1wHgAdsB/wHXAeAB2wH/\r\n        AdcB4AHbAf8B1wHgAdsB/wHXAeAB2wH/AdcB4AHbAf8B1wHgAdsB/wHXAeAB2wH/AZQBrQGpAf8BAAEu\r\n        AScB/wQAAv0C/wJCAd8B/wI8AecB/wKTAfEB/wK9AfcB/wLUAfoB/wKaAfMB/wKaAfMB/wLVAfoB/wK9\r\n        AfcB/wKTAfEB/wI9AecB/wJCAd8B/wL9Av8wAAHdAfYB6AH/AQcBuQFCAf8BAAGvATQB/wHmAfgB7gH/\r\n        CAABFAG0AdwB/wH3AfwB/gH/AY4B5AH4Af8BkQHeAfUB/wGfAeAB9QH/AawB4QH2Af8B7wH7Af4B/wH0\r\n        Af0B/gH/AfMB/AH+Af8B8QH8Af4B/wHvAfsB/gH/Ae4B+wH+Af8B+gH9Av8BKwG8AeAB/wUAAS4BJwH/\r\n        AdcB4AHbAf8BHwEgARwB/wEyATcBNQH/ATYBOQE3Af8BOAE9ATsB/wE7AT8BPQH/AT4BQgFAAf8BQQGB\r\n        AYAB/wOBAf8DgQH/A4EB/wOBAf8BlAGaAZgB/wHXAeAB2wH/AQABLgEnAf8IAALUAfQB/wIQAdgB/wKJ\r\n        Ae0B/wKXAfEB/wKZAfEB/wKrAfMB/wKrAfMB/wKZAfEB/wKXAfEB/wKJAe0B/wIQAdgB/wLUAfQB/zgA\r\n        AdYB9QHkAf8BAAG2AToB/wGBAdgBpgH/Af4B/wH+Af8EAAEPAbUB2wH/Af0C/gH/Af4D/wL+Av8B/QH+\r\n        Av8B/gP/AeoB9wH7Af8BQQHIAeUB/wFCAckB5AH/AUIByQHkAf8BQgHJAeQB/wGBAc8B5wH/AYQB0AHo\r\n        Af8BugHlAfIB/wUAAS4BJwH/AdcB4AHbAf8DgQH/ASwBMQEvAf8BLwEzATEB/wExATYBNAH/ATQBOAE2\r\n        Af8BNgE7ATkB/wE5AT0BOwH/ATsBQAE+Af8BPgFCAUAB/wFAAYEBgAH/AYACgQH/Aa0BtAGxAf8B1wHg\r\n        AdsB/wEAAS4BJwH/DAACtQHtAf8CGAHbAf8ChwHuAf8CogHzAf8CpwHzAf8CpwHzAf8CowHzAf8CiAHu\r\n        Af8CGgHbAf8CtQHtAf9AAAHJAfIB2wH/AQoByAGBAf8B4wH5Ae0B/wQAASwBwgHgAf8BNAHDAeIB/wE2\r\n        AcQB4wH/ATYBxAHjAf8BNgHEAeMB/wE1AcQB4wH/ASkBwAHgAf8B7QH4AfwB/wHzAfoB/QH/AfMB+gH9\r\n        Af8B8wH6Af0B/wHzAfoB/QH/AfMB+wH9Af8B/AL+Af8EAAG1AcgBxQH/ATEBhgGBAf8B1wHgAdsB/wHX\r\n        AeAB2wH/AdcB4AHbAf8B1wHgAdsB/wHXAeAB2wH/AdcB4AHbAf8B1wHgAdsB/wHXAeAB2wH/AdcB4AHb\r\n        Af8B1wHgAdsB/wHXAeAB2wH/AdcB4AHbAf8BPAGOAYgB/wHEAdMB0QH/DAAC/gL/AsgB8QH/AjEB3AH/\r\n        AicB3wH/AjcB5gH/AjkB5wH/AioB4AH/AjMB3AH/AsgB8QH/Av4C/0QAAa4B8AHMAf8BugHzAdQB/0QA\r\n        AbgBywHJAf8BAAEuAScB/wEAAS4BJwH/AQABLgEnAf8BAAEuAScB/wEAAS4BJwH/AQABLgEnAf8BAAEu\r\n        AScB/wEAAS4BJwH/AQABLgEnAf8BAAEuAScB/wEAAS4BJwH/AQABLgEnAf8BmAGzAbAB/xgAAvkB/QH/\r\n        At8B9wH/As8B8wH/AtAB8wH/At8B9wH/AvkB/QH/TAAB+gH+AfwB/wHlAfsB7wH//wBBAAFCAU0BPgcA\r\n        AT4DAAEoAwABQAMAAVADAAEBAQABAQUAAYABAhYAA/8BAAL/BgAB/AF/BgAB/AE/BgAB/AE/BgAB/AE/\r\n        BgAB/AE/BgAB+AEfBgAB+AEfBgAB8AEPBgAB4AEHBgABwAEDBgABwAEDBgABgAEBBgABgAEBBgABgAEB\r\n        BgAC/wYAAf8BwQL/AeMB7wP/AYABhwHnAeABBwHAAQMB1QEIAYMBwwHwAQ8BwAEDAaoBnAKBAeABBwHA\r\n        AQMB1QEIAcABAQHAAQMBwAEDAaoBgAHgAQEBwAEDAcABAwHVAQEB8AEDAYABAQHAAQMBqgGrAeABBwGA\r\n        AQEBwAEDAdUBVQHAAQ8BgAEBAdABAwGqAasBgAEPAYABAQHAAQMB1QFVAYABBwGAAQEB4wHHAaoBqwGA\r\n        AQEBwAEDAeMBxwHVAVUBgAEhAeABBwHoAQcC/wGAAWEB8AEPAfQBDwL/AeAB+QH4AR8B+AEfCv8B8AEP\r\n        A/8B8AL/AcABAwH4AX8B/wHgAgABgAEBAcABBwH/AcACAAOBAQEB+QGAAgABAQKAAQEBwAEBAYABAQIA\r\n        AYABAQGAAQMBwgFDAgABgAEBAQABBwHCAUMBAAKAAQEBAAEPAeABBwUAAQ8B4AEHAQABQAMAAQcB8AEP\r\n        AQABQAEAAQEBAAEHAfgBHwEAAUABgAEBAQABDwH4AR8BgAEBAcABAwEAAQ8B/AE/AYABAQHAAQcBAAEP\r\n        Af4BPwHAAQMB4AEPAYABHwL/AfABDwL/AcABPwL/AQABAwEAAQEB/wHBAv8BAAEDAgAB/wGAAdUBVQEA\r\n        AQMBAAEIAYABCAGqAasBAAEDAQABHAGAARwB1QFVAQABAwEAAQgBgAEIAaoBqwEAAQMCAAGAAQAB1QFV\r\n        AQABAwEAAQEBgAEBAaoBqwEAAQMBAAEDAYABAQHVAVUBAAEDAQABAwGAAQEBqgGrAQABAQEAAQEBgAEB\r\n        AdUBVQQAAYABAQGqAasB/wGAAf8CgAEBAdUBVQH/AYAB/wKAAQED/wGAAf8BgAX/AcEB/wHBBf8BwwH/\r\n        AcMC/wIAAcABAwHAAQMC/wIAAYABAQGAAQEC/wGAAQEB4AEHAeABBwGAAQEBgAEBAeABBwHwAT8BgAEB\r\n        AYABAQHAAQMB4AEfAYABAQGAAQEBwAEDAcABDwGAAQEBgAEBAYABAQGAAQ8BgAEBAYABAQKBAYYBBwGA\r\n        AQEBgAEBAoEBnwEDAYABAQIAAYABAQH/AcMBgAEBAgABgAEBAf8B4QGAAQECAAHAAQMB/wHwAYABAQIA\r\n        AeABBwH/AfgBgAEBAgAB4AEHAf8B/AL/AYABAQH4AR8B/wH8Cv8L\r\n</value>\r\n  </data>\r\n  <metadata name=\"cmStrip.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\r\n    <value>120, 16</value>\r\n  </metadata>\r\n  <data name=\"label21.Text\" xml:space=\"preserve\">\r\n    <value>This option disables list updates during the find and delete processes and only shows you a final result at the end.\r\nYou won't be able to see the progress but it will be much faster. Hint: Set pause time to 0 to further increase deletion speed.</value>\r\n  </data>\r\n  <data name=\"label23.Text\" xml:space=\"preserve\">\r\n    <value>Possible patterns:\r\n- Specific file names: test.tmp will match only files named exactly \"test.tmp\"\r\n- Wildcard expressions: *.tmp will match all files with the ending \".tmp\" \r\n   like \"dummy.tmp\" or \"empty.tmp\"\r\n- Regular expressions: /^tmp\\.[0-9]+/ will match all files that are named \r\n   like \"tmp.001\" or \"tmp.002\" etc</value>\r\n  </data>\r\n  <data name=\"label2.Text\" xml:space=\"preserve\">\r\n    <value>Define which file names should be ignored when looking for empty directories. If one of those patterns in a filename\r\nis found RED will act as if the file doesn't exist and detect its parent directory as empty if no other files are in it.</value>\r\n  </data>\r\n  <data name=\"tbCredits.Text\" xml:space=\"preserve\">\r\n    <value>CREDITS\r\n\r\nSpecial thanks go to:\r\n\r\n  * All the generous users that send me donations over the years.\r\n    I really appreciate every contribution!\r\n  \r\n  * gioccher for many improvements and bugfixes he contributed\r\n\r\n  * jsytniak for the \"Ignore folders newer than N hours\" feature he implemented\r\n\r\n  * Wolf from the Computer Club Sunland Village (Mesa Arizona) \r\n    for his continuous kind feedback and beta testing!\r\n\r\n  * Havy A.C. (ZyntaXis) for helping me with the Windows 7 \r\n    and Vista compatibility\r\n\r\n  * Russ for his idea of protecting and unprotecting directories\r\n\r\n  * All other kind users who did send me their feedback and error reports :)\r\n\r\n\r\n\r\nHINTS &amp; FAQ\r\n\r\n  * Right-click on a directory in the tree to get more options.\r\n  \r\n  * If you only care about speed you can activate \"Fast mode\", set delete mode\r\n    to \"Bypass recycle bin and directly delete dirs\" and \r\n    \"Pause between each deletion\" to zero. This should give you a great speed \r\n    improvement but you will lose the recycle bin safety net and you won't see \r\n    the progress. I also measured the performance difference: \r\n    1000 empty dirs in normal mode take about 40 secs, with these settings \r\n    less than one second.\r\n\t\r\n  * Why am I getting these annoying \"cannot access file\" or \r\n    \"Access to ... is denied.\" errors? -&gt; That means RED tried to\r\n    scan or delete a file or directory that was locked by another \r\n    application. This is a safety feature to ensure that programs\r\n    don't access files that are currently opened by another.\r\n    To fix this problem close all other programs before using RED. \r\n    If that does not help you could try using tools such as\r\n    Unlocker (http://cedrick.collomb.perso.sfr.fr/unlocker/).\r\n\r\n\r\n\r\nTOOLS USED TO DEVELOP RED\r\n\r\n  * Microsoft Visual Studio C# Community\r\n  * Inno Setup\r\n\r\n\r\n\r\nLICENSE\r\n\r\nThe program is distributed under the terms of the GNU Lesser General \r\nPublic License which you can read over here: \r\n\r\nhttp://www.gnu.org/copyleft/lgpl.html</value>\r\n  </data>\r\n  <metadata name=\"$this.TrayHeight\" type=\"System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n    <value>62</value>\r\n  </metadata>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"$this.Icon\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        AAABAAkAICAQAAEABADoAgAAlgAAABAQEAABAAQAKAEAAH4DAAAwMAAAAQAIAKgOAACmBAAAICAAAAEA\r\n        CACoCAAAThMAABAQAAABAAgAaAUAAPYbAAAwMAAAAQAgAKglAABeIQAAICAAAAEAIACoEAAABkcAABgY\r\n        AAABACAAiAkAAK5XAAAQEAAAAQAgAGgEAAA2YQAAKAAAACAAAABAAAAAAQAEAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAMDBABCPTkARUE+AB44SQAxTVoAV1hXAIiEfwB0fYEAdYSIAKCjpADBwb8AvcHBAOXm\r\n        5gAAAAAAwMDAAP///wDd3d3d3d3fzMzP3d3d3d3d3d3d3d/MqqzMzKzN3d3d3d3d3d3KrP/////8zM3d\r\n        3d3d3d36zP/////////M3d3d3d3crPzMzMzM/////8/d3d3dyszMzMzMzMzM///8/d3d3Kz/yqzMzMzM\r\n        zM///83d3frMz/zKvqrMzMzMzM/83d3MzK6WZpuqzMzMzMzMzP3fzMzKqZdVaZm8zOuszM/N3MzMqrto\r\n        aZu7ubmWmbzM/dzMyqu4lpaZm6qqqZmZzP/8zMq7aWlmmbu+rMyrmaz/zMzKqZlprMqqzMvMypmcz8zM\r\n        qqmZrJVXVVecy1dpvM/MzKq5nJUiJ1VVUZyXmszPzMzMucZVESdVVXU5/MzMz8zMzLxlIiJVVVV3I8zM\r\n        zM/8zMyrVVUiJVVVV1BvqqzP3MzKx1UiIiIlVVVTfMuZzd/MzMVSIiIiIiVVU3vK6Zzf/MzHUiIiIiIi\r\n        IiN5/MzP3fzMySAyJVJSIlETaf///93fzMtA3QAVVVIANWn///3d3/zLgw3d0BEN0Edq/93d3d3/+pgw\r\n        3d3d0ARXbP3d3d3d3/y5hDAAAANFdr/d3d3d3d3/q5h0MzNFV3n93d3d3d3d38uZZ1VVVXec3d3d3d3d\r\n        3d38qZZ3d3eL/d3d3d3d3d3d3fy5loia3d3d3d3d3d3d3d3d3czd3d3d3d3d3f/4D///gAH//wAAf/wA\r\n        AD/4AAAP8AAAB+AAAAfAAAADwAAAAYAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AACAAAABgAAAAIAAAADAAAAA4AAAAeAAAA/wAAAf+AAAP/wAAH/+AAD//wAB///AD////P//KAAAABAA\r\n        AAAgAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQARHSQAMDEyACc5QwAsP0oANEBFAFZX\r\n        VgBmfIYAf4SEAI6RkQCepakAr7KzALvCxQDR0tIA7e3tAAAAAAD///7u7u/////+3u7u7u///+3u7u7u\r\n        7v/+3u3d7u7u7/3tuZvN7e7v7ty5mrzLrO7u3Jm8zd7a3u3bumZmjYre7dyWVmZ27d7u3GZWZmW8zv7q\r\n        ZVVVZZ7N/uwhJWYVnu7/7XHwEBe+///+x0ETaO/////rl2eO///////cz/////gf///gB///wAP//4AB\r\n        //+AAf//AAD//wAA//8AAP//AAD//wAA//+AAP//gAD//8AD///gB///8A////x///8oAAAAMAAAAGAA\r\n        AAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDBAAFBQUACAYHAA0NDQARDg8ABAwRAAkN\r\n        EAAQDxEACxUcABISFQAYFxcAFBUZABwaHAAgHx8ADhYiAAwbJQAOJTYADyo4AB8mMQAWKjUAJSMjACko\r\n        JwAqJikAKyssADIuLwAzMS8ALzE1ADIxMQA3ODcAOzk3ADc4OgBBPDYAQT06AEVAPQBIQDsAFTJEABo+\r\n        VQAkOEMALUFLADFATAA8Q0sAIkJTAC1EVAAkSVwALU5cADJQXAAaSWIAJU1kACFSaQAxVGEAPldgADtZ\r\n        ZgA2XXAARURDAEhGRABJSEYAR0pPAExLSgBTSkMAUU5LAE9QTwBSUE4AXVNMAENMUwBOT1IATVVZAFRT\r\n        UgBYVlQAWVhWAFdcWwBcW1kAZFtVAGBeXABiYF4Aa2VfAEJaYgBKXWQAS11pAEVhaQBVY2YAWmNkAFRl\r\n        aQBbZWkAXWlrAEpncQBPbXkAVW10AFhscQBedHsAZWRiAGhlYgBnaGYAbmtnAGJrbQBsa2oAcW5qAG5w\r\n        bgBwcG4Ae3NtAGFvcwBmcnUAa3JzAGV1eABseXwAdnZ1AHd4dwB+eXUAcnl6AHl9fQBBboEATnCBAGR5\r\n        gQB0foEAXYiaAGyAgQB1hIMAfIKDAHyJhgBwho4AeIeMAHaQjwBhhpQAaoSSAGaPnwB6j5AAfp6qAIGE\r\n        hACDiIcAjomDAICEiACEi4sAi42NAJWNhQCTj4oAj5CPAI2OkQCHkpMAjJKSAIWcnACNmJsAkpSTAJOX\r\n        mACUmZoAmZubAKGdmgCPnqMAgJ+tAJqdoACOpKMAl6OnAJ2iogCWpasAnaOoAKOkpQCopaEAoqinAKup\r\n        pwCipagApKmqAKqtrACwsK4AuLGtAKSssQCrrrAArLGyAKKyuACttboArbi5ALGztAC5tbIAtri2ALq5\r\n        tQCwtrsAtbq7ALq8vAC9wL8AwcC9AL+/wAC8wsIAv8jGAL3DyAC/yMwAwsTEAMnGwQDHyMcAw8XIAMTJ\r\n        yQDIyckAysrMAMrNzQDNzc0A0M7NANDRzgDEztAAy87RANDP0ADH0NEAzdHRANHR0QDR1NMA1NTTANPS\r\n        1ADS1NQA1dXVANjV0wDZ2NYA1dbYANjX2ADU2dkA29vbAOHf3gDh4d8A3d/gANzh4QDh4eEA4+TjAOTk\r\n        4wDh5OQA5eXlAOjn5wDo6OcA5+boAOjn6ADm6OgA6enpAOzq6gDq7OoA6+rsAOzr7QDq7OwA7e3tAPHw\r\n        7gDm7PEA7u/wAO7w8ADx8fEA9PPzAPP08wD09PMA8vP0APL09QD19fUA9/j3APj49wD39/gA+Pf4APf4\r\n        +AD5+fkA/Pz7APv7/AD8+vwA/Pz8AL+x/wDa0f8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj08u/y\r\n        8vj6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD68uTUzL+8ubm5ub/J1d3t+gAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8tvJt7K6xNLZ5Orq5d7VzL25x9vyAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAPLUubC91+vy8/P0+Pj4+vj4+vry38q/1PIAAAAAAAAAAAAAAAAAAAAAAAAAAAD43b2x\r\n        0Ozz8vLy8vLy8/T0+Pj4+Pj4+Pry0sTb+AAAAAAAAAAAAAAAAAAAAAAAAPLQsc/s8vLy8u/t7Ozt7e/y\r\n        8vLy8/P0+Pj4+PLO0vMAAAAAAAAAAAAAAAAAAAAA6r+54e3t7Ozs7Ozs6ufq6uvs7e/v7+/y8vPz8/T4\r\n        4tDvAAAAAAAAAAAAAAAAAADlucfq6+vq5+fn5+fn5+fl5+fq6+zs7Ozw7vLy8vLy+O/S7wAAAAAAAAAA\r\n        AAAAAOW5zNLO1dTY2dvb29vc4OHi4uTn5+rr7Ozs7Ozv8u/v8vT01fMAAAAAAAAAAAAA67zQ0/z85dK/\r\n        v8vQ0tLT1djb3ODh4+fq6uvr6+zt7e3t7e/z9Nf4AAAAAAAAAADzxMnc4v/////63r+3ub7HzNDV19vb\r\n        4eHn6urr6+zs7Ozs7Ozu8/LbAAAAAAAAAPzVv+Tbzs3d6Ojh3d3bxKmrr7O2wsXR2uPm5+vr6+vs7Ozs\r\n        7Ozs7fPn7AAAAAAAAOe83+Hb0sCsqp2RkY2Gka+1s7TD0dXW0dHW6+vq6ufq6+zs7Ovr7PD03foAAAAA\r\n        +szS4dzY09LMv6+ahGlfX2FqkK+6paW00dba1trn4dvY2N3n6+vq6uvt8uoAAAAA57/h3dnU0tDJv7yv\r\n        rq6cdlRRRl6AoJZ9eZW02ubWxquanKGx0uXq5+fr8uf8AAD8ztXd29fTzsm/vK+zr5d0c4OKnpygrq+z\r\n        s6iLi6+vlJ+EgoCKh6zZ5+fn7PLyAADyxOHb2dPSzMC8r7erg3SOjY2kh5efpKmvs7vDvrW7s8yevbev\r\n        qY+d1OTl6vPsAADh0N3Z19LQwbywt692iZCNiKmDio+Ul5ygqbC8xrvDxr+anpqfmZmUm9ji5/DvAADS\r\n        2NvX087Iv7e3s4mMkI6Hn5dtjY6QlJecoKmwu76w6uK/8bWnraOXjqzc5Or0+PjM4djU0s/EvLC5nIyQ\r\n        joeHpJCOpbfL1dra1c++urewpdL0//XDp6OelJDO4ef48/PQ3dfT0szEt7uwj5eOjYSIpcvm6864r6qs\r\n        sc3t+OfPqcjy1Orps6OalJC32+Lz8+/S29TVzsm/t72fnJCOjZ/V7LiFS0tgaWBaWl1ggaLs7tXgiEpg\r\n        jZCal5y92N3t9OzU29TS0MnEvLycl5CPu+y4Yz88PkNaYUpFPD4+Skkim/jmrikcHjxrq7nS1Nvs9OzY\r\n        29TS0Mu/xrekmpfS44ZIOyMjNyJHYUpERT43PFpHFkfn8rqtnqW8zNDS1dnr+O3b29XS0Mm+0bqhnNfU\r\n        a0hHPCAgISJJYVpcXEdHSVxfRQtC4vfg2NXQzNDS0tfr+PLb3dfS0MzD0rmg0tNrSj4+OCE3NzdHSVpc\r\n        WlpcX2FiWjYHeO3y19LMyczO0tft+vjc4tjT0szG1bC97GNbRzw2Pj06ODw+Q0VHSlpcXF9iX0UNJ6H5\r\n        5tLMy8zO1dnz/ADd59vX1c7I0q/wnURJRD4+Qzo3ODo6PD5ER0dKWlxfX0ocEH/S+sS/ydDS09v4AADk\r\n        7OHb19XPxtHmWkdEQzo6ODY2Nzg6PDw+REVHSlpaWkk3Bmih+sikmpepzuP6AADt7Ofd29fSuvC2QUdD\r\n        PDg3NiI2Nzg4ODg6PD5DREVFRUU4DFmO3Oq8rJ2PhMHnAAD66+vk4NvXy/emOUU8ODYiIjY2Njc2Nzg3\r\n        ODg6PD5DQ0M4DFmNv/rUzLKkkIOy+gAA6+/n4dzY1eqmQEU6NiI2Njg4ODo4ODc3ODc4PDw8PDw3CWiH\r\n        r/yzt7ewpJeg9AAA9O/r5N3X5eCnTkM6NjY2ODo6Ojo6ODg4Nzg4ODo6OjohFGiHofz89O/v5+fs+AAA\r\n        AO3y6ubX8NuuezYcHBw2ODo8PT06Ojw6Ojg3ODw8HBoXLnGHoPz////8+Pz8AAAAAPjz7+vc8Ny3kykY\r\n        AAACDhkdPEM9PT49PDw8PjwOABkQV3WHofz////8/P/8AAAAAADz+O/n7Oa8pm8WAQAAAAAAAw4cQ0dF\r\n        RENDHAMABA0tZ3+HsPz4+Pz/AAAAAAAAAAAA9vjv5+zGrn4rDAAAAAAAAAAABENDIRUDAAABDSRXbH+N\r\n        zPTs+PwAAAAAAAAAAAAAAPj45/jPt6N8JgoBAAAAAAAAAAAAAAAAAAEFElVkbICQ7PL6/AAAAAAAAAAA\r\n        AAAAAAD47Pzavq6YciobBAAAAAAAAAAAAAAAAwokT1hmbYOv/Pz8AAAAAAAAAAAAAAAAAAAA+O3wy7Ol\r\n        knoxKB8LAQAAAAAAAQgIECxPUmZsdY7n/wAAAAAAAAAAAAAAAAAAAAAAAO381b2voIx3bi8kEw0KBAQK\r\n        DxEqNExSXmZtg8b/AAAAAAAAAAAAAAAAAAAAAAAAAADy9Mi3q5+PeHBWNTAlJSUsMjNMTVBeZmx/r/wA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAD89PC+r6mcjoNxZ1hSTk1NTU1QU1RmbHWu+AAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAA/PrvvK6gl46EdWhlXlRTU1NUXmZsg7v4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD6\r\n        9MiroJeOhIJtbGZmZmZmbHWc4PwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vrqvKWaj4qEgnV1\r\n        bXWDoOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7+vLXu62fmZqgsNIAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//\r\n        +Af////c//8AAH///9z//AAAH///3P/wAAAH///c/8AAAAH//9z/gAAAAP//3P8AAAAAf//c/gAAAAA/\r\n        /9z8AAAAAB//3PgAAAAAD//c8AAAAAAP/9zgAAAAAAf/3OAAAAAAA//cwAAAAAAD/9zAAAAAAAH/3IAA\r\n        AAAAAf/cgAAAAAAB/9yAAAAAAAH/3IAAAAAAAP/cAAAAAAAA/9wAAAAAAAD/3AAAAAAAAP/cAAAAAAAA\r\n        /9wAAAAAAAD/3AAAAAAAAP/cAAAAAAAA/9wAAAAAAAD/3IAAAAAAAf/cgAAAAAAB/9yAAAAAAAH/3IAA\r\n        AAAAAP/cwAAAAAAA/9zAAAAAAAD/3OAAAAAAAf/c4AAAAAAB/9zwAAAAAA//3PgAAAAAH//c/AAAAAA/\r\n        /9z+AAAAAH//3P8AAAAB///c/4AAAAP//9z/wAAAB///3P/AAAAP///c/+AAAB///9z/+AAAP///3P/8\r\n        AAH////c//8AD////9z/////////3CgAAAAgAAAAQAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAABQUFAAsLDAANDxQADRIYABISEwAXFxgAGxsbABQcIQAcIicAHCUsABUoNQAXLj4AGC8/ACMj\r\n        JAAjJCgALSwrACMtNAAhMDkAKTY9ADMxMQA4NzcAPz06AEI8NwBDPzsAQUA/AExDPQAdNkgAHztKACtA\r\n        SQAsSlYAKUlcADNRXQA/UVwALE5gADVTYQBFREMATEZBAEhGRQBJSEYASklIAE1KSABNTEoATU1MAFBO\r\n        TABRUE4AXVVOAFNTUwBUU1EAVVRSAFZVVQBYVlUAW1lWAFxaWQBdXFoAX15dAGFeWwBhX10AYmFfAGdj\r\n        XwBtZV8ARVxkAE5eZQBUYmYAU2VpAFtmaABIbXwAW2dwAFVscwBcbHAAYmJgAGViYABlZWMAYmZlAGdm\r\n        ZgBpZ2QAaGhmAGBpaQBlbW8AampoAGxraQBsbGwAZm5wAGtzdQBidH8Abnt9AHNycAB0c3EAe3dyAHN5\r\n        eQCIhH8Ab32BAHF+ggB8foAAX4KPAF6BkQB3gIEAeoCAAH6CggB7g4QAeYiHAHeHjQB/i4oAdZOhAIKH\r\n        hgCLhYAAioiFAIGHiACGiYkAg4uMAIWLjQCGjY4AiIuLAIuMiwCOjIkAjY+QAIaSkACJkZIAjZGRAIiU\r\n        kwCOkZUAj56fAJCSkgCVk5AAkZSVAJWVlACfmZMAk5mYAJeamgCWmZ0AmZqaAJianQCZnZ0AnJ6eAKCb\r\n        lwCmoZwAhJqlAJmeoQCQo6IAmqChAJ2hogCboaQAnKOkAJ6lpQCdpqkAl6mqAKGiogCgpKMAoqWmAKSl\r\n        pgCppaMAqaenAKWnqACiqKkApqqqAKOqrgCkqa0Ap6yvAKmpqQCorKsAra2rAKmsrACurq0Ap66wAKuv\r\n        sACusbIAqbK0AKe2ugCutbgAr7q7ALC1swCxsbUAsra2ALW2tgC4t7UAtLi3ALW3uAC2ubkAtbu8ALC+\r\n        vQC5uroAv7y7ALm9vQC+v74AwcG/AL3BwQC/w8QAwMLCAMHEwwDCxcUAxcbGAMfIxwDCx8gAxcnJAMTJ\r\n        zwDJyckAzMvJAMvMywDJys0AzMvNAMvOzgDNzc0A0M/NAM/QzwDR0M0A0M/RAMvR0ADO0dEAzNLUANHR\r\n        0QDT09QA1NPUANLV1QDV1dUA19jXANnY1gDS2NgA19jYANbd3QDZ2dkA3NzbANnb3ADa3NwA3d3dAODe\r\n        3gDh4N8A3+LhAODh4QDk4uIA4uTjAObl4wDj4+QA4eTkAOXl5QDp5+UA5+jnAOjo5wDh5+gA5efoAOHo\r\n        6ADp6ekA6+zsAO3t7QDw7+4A8O/wAO7w8QDx8fEA9PPyAPT08wDw8vUA9fX1APf49wD5+fkA/Pv8AP39\r\n        /QD///8AAAAAAAAAAAAAAAAAAPr28fDx9vsAAAAAAAAAAAAAAAAAAAAAAAAAAAD88dXDx9Lb39zZ09Hc\r\n        9gAAAAAAAAAAAAAAAAAAAAAA6cPN6ff6+/z8/Pz8/Pbg1vMAAAAAAAAAAAAAAAAA+MvS9Pr6+Pf3+Pr7\r\n        +/v7/Pz75OEAAAAAAAAAAAAAAPHF6ff29vb08/Lz9Pb39/j6+/v79+P8AAAAAAAAAADwyeDk6enr6+zw\r\n        8PHx8vT29vb3+vr6++f9AAAAAAAA88nk/vrn0svV29/i6evw8vP09Pb39/f4++wAAAAAAPzL6+Hq9/fz\r\n        4cu2usHQ2OXx8vT09vb29vb3+vMAAAAA3+Hr4Mm1lntqcpeywM7a2trt9fLy8vT29PT39PwAAPrV8Ofg\r\n        1su/pYthTUlsmXmKs+jv2ruxu9/y8vP69gAA4+fp4dvRv7mvdGR1jJSqtrmpkaijpXiJg67s8fP3AADb\r\n        6+Tc0sO5qmZ/eppwhJOfr73Pz9DFl6KdjaDr8fr8+tzn4NbJurl3gHqSdnOFoaqssbrB1OD1xqibg7jw\r\n        9/vy5+Pe07/Aj4R8cZW94tfKxMzh8d2w4vL5wpyMkuny/PDr4NvSwbyOgoDF1348O1ZLODtYhubuqzFX\r\n        apWt4fD78Ozg2dLItpiY4ocuGiUpUTYxLCxHFqLxgV19vtnf6fvx8ODZ0tS5pOVpNC0XGCdPSkw3OlA5\r\n        B6T75d7V1tzn/PTx493V2LblWjgpKSknLDI2OkhMUVEkE9Xz3dPV3Ov9+/Hp4NvY0a40MywtJyYqKy0z\r\n        NkZPUDUIdvrDu8nf8v0A8vHp4MjyUzQtKCQZJicoKS0wNDY2Mw5c1d+wjIXhAAD38/Dp3eVDMicZJCQm\r\n        JiYmJicrLS0tD1u08sW3lHzyAPz38ezp3VQvJCQmKCgqKCcmJygpKikRYJ788eff2/cAAPr28fHdiCQH\r\n        DhkrLS0qKyooKS0QFB1ilf7+/v3+/QAAAPv28uKnIQMAAAEGFCszMTAkBQEJRGii/v3+/v4AAAAA/Pzz\r\n        8LpnCgEAAAAAARUQBQAABSBTbL76/AAAAAAAAAAA/fj6y6ZfEgUAAAAAAAAAAQQeRVlz8f0AAAAAAAAA\r\n        AAAA/frfuZBeIhEGAgEBAgMLI0BTYrT+AAAAAAAAAAAAAAAA/PrIsI1lQh8bDQwcIz0/UlmL+wAAAAAA\r\n        AAAAAAAAAAAA/PO6pYVtVUVAPj4/QU5Zi/YAAAAAAAAAAAAAAAAAAAAA/fa9oYRvYFlTUlJTY7n8AAAA\r\n        AAAAAAAAAAAAAAAAAAAAAPzpto58bmtrfMEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbxAAAAAAAA\r\n        AAAAAAAAAAAAAP/4D///gAH//wAAf/wAAD/4AAAP8AAAB+AAAAfAAAADwAAAAYAAAAGAAAABgAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAIAAAADAAAAA4AAAAeAAAA/wAAAf+AAAP/wA\r\n        AH/+AAD//wAB///AD////P//KAAAABAAAAAgAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAFBQUADRETABkZGQATHCEAER0lACYlJAAuLy4ALDAzADk6PAAnOUMALD9KADRARQBFQ0EARkZFAEhH\r\n        RQBISEcAS0lIAExKSQBOTUwAUU5MAFJRTwBOUlQAUlFQAFdVVABYVlUAW1tZAGBdWgBpYlwAUWNoAFtn\r\n        awBca3AAZGNhAGBrbQBqaWgAZnJ1AHd3eABme4QAZ36IAH+EhACKh4UAg4uMAIWMjACMjYsAlpOPAIiR\r\n        kQCVl5cAkpiYAJaamgCfo6cAnqerAKKioQChpacAqaajAKysqwCorq0ArK6vAK2xsgCwsrIAsre4ALS5\r\n        uAC2u7wAs7+/ALW+vwC4uroAuby8AL3CwwC5w8cAwMHAAMLFxQDHyMgAyMnJAMnMzADMzc0Ays7TANHS\r\n        0QDT1dUA1dXVANLa2gDV2NkA2dnZANrc3QDd3d0A4eHiAOPj5ADj5OQA5eXlAOjn6ADm6OgA6enpAOzs\r\n        6wDt7e0A8fHxAPTz8wD19fUA+fn4AP39/QAULwAAIlAAADBwAAA9kAAATLAAAFnPAABn8AAAeP8RAIr/\r\n        MQCc/1EArv9xAMD/kQDS/7EA5P/RAP///wAAAAAAJi8AAEBQAABacAAAdJAAAI6wAACpzwAAwvAAANH/\r\n        EQDY/zEA3v9RAOP/cQDp/5EA7/+xAPb/0QD///8AAAAAAC8mAABQQQAAcFsAAJB0AACwjgAAz6kAAPDD\r\n        AAD/0hEA/9gxAP/dUQD/5HEA/+qRAP/wsQD/9tEA////AAAAAAAvFAAAUCIAAHAwAACQPgAAsE0AAM9b\r\n        AADwaQAA/3kRAP+KMQD/nVEA/69xAP/BkQD/0rEA/+XRAP///wAAAAAALwMAAFAEAABwBgAAkAkAALAK\r\n        AADPDAAA8A4AAP8gEgD/PjEA/1xRAP96cQD/l5EA/7axAP/U0QD///8AAAAAAC8ADgBQABcAcAAhAJAA\r\n        KwCwADYAzwBAAPAASQD/EVoA/zFwAP9RhgD/cZwA/5GyAP+xyAD/0d8A////AAAAAAAvACAAUAA2AHAA\r\n        TACQAGIAsAB4AM8AjgDwAKQA/xGzAP8xvgD/UccA/3HRAP+R3AD/seUA/9HwAP///wAAAAAALAAvAEsA\r\n        UABpAHAAhwCQAKUAsADEAM8A4QDwAPAR/wDyMf8A9FH/APZx/wD3kf8A+bH/APvR/wD///8AAAAAABsA\r\n        LwAtAFAAPwBwAFIAkABjALAAdgDPAIgA8ACZEf8ApjH/ALRR/wDCcf8Az5H/ANyx/wDr0f8A////AAAA\r\n        AAAIAC8ADgBQABUAcAAbAJAAIQCwACYAzwAsAPAAPhH/AFgx/wBxUf8AjHH/AKaR/wC/sf8A2tH/AP//\r\n        /wAAAAAAAFxUU1RWWgAAAAAAAAAAXFFXXV5fX19ZWgAAAAAAV1JaWlpaW1xdXl5bAAAAW1JdVk1JT1Nb\r\n        XFxcXV0AAFJTSTYrKjk+TlhNU1tcAFtWUEY3LTA0PD9CODRBWl9ZU0tBLzA6QURLSFhKMUldV1FJOTg1\r\n        HCAbGyhJJDNMXFpSTEUsFA0YICAiFlhQUFxdVk9AGRIOEhUaIAk7RkBcAFtUMhMNEBAPERQJL1hHTABf\r\n        W0MIAwcOFxIGDC5gYGAAAF5RJQIAAAMBBB86XwAAAAAAXD0mCwUFCh0nWgAAAAAAAABZOSojHiEpVQAA\r\n        AAAAAAAAAABRRUUAAAAAAAAA+B8AAOAHAADAAwAAgAEAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA\r\n        AACAAAAAwAMAAOAHAADwDwAA/H8AACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAP39/QL9/f0a+/v7Svr6+nn4+PiU9vb2t/T09MLy8vLH8/PzxfT09Lv39/ee+fn5hvr6\r\n        +lv9/f0i/f39BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAP39/QX8/PxA+fn5k/T09Nzr6+v64ODg/tbW1v7Ozs7+ycnJ/sbGxv7Gxcb+xsbG/sjI\r\n        yP7MzMz+09PT/t3d3f7o6Oj98vLy4fn5+aD8/PxC/f39BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAD9/f0I/Pz8bPX19dvm5ub+09PT/sTExP6/v8D+xcXH/tDP0f7b2tz+5OTl/uvq\r\n        7P7u7u/+7u7v/uzs7f7n5uj+39/g/tXV1/7Ly8z+yMjI/tLS0v7l5eX99fX13Pv7+3P9/f0IAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAA/f39Avz8/E/19fXd4ODg/sjIyP69vb7+y8rN/uHg4v7w8PD+9vb2/vf3\r\n        9/739/f++Pj4/vn5+f76+vr++vr6/vv7+/76+vr++vr6/vv7+/77+/r+9vb2/ujn6P7T0tT+zMzM/uDg\r\n        4P709PTj+/v7Xf39/QMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0a+fn5sujo6P7Ly8v+wcHC/tjY2v7y8fH+9/b2/vb2\r\n        9v719fX+9fX1/vX19f729vb+9vb2/vf39/74+Pf++Pj4/vn5+f75+fn++fn5/vn5+f75+vn++vr6/vr6\r\n        +v77+/v+9fX1/tzc3f7Qz9D+5ubm/vn5+bP9/f0UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/UP09PTm2NjY/sHBwv7X1tj+8fHx/vb2\r\n        9f729vX+9vX1/vX19f709PT+8/Pz/vLy8v7y8vL+8/Pz/vPz8/709PP+9fX1/vb29v729vb+9vb2/vb3\r\n        9v739/f++Pj4/vn5+f75+fn++fn5/vr6+v719PX+2dna/tra2v729vbd/f39LAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/v7W+/v7/nNzc3+x8fI/uno\r\n        6f7z8/P+8/Py/vLy8v7y8vL+8vLy/vLy8v7y8vH+8fHx/u/v7/7u7u7+7+/v/u/v7/7w8PD+8fHx/vPy\r\n        8/709PT+9PT0/vT09P709PT+9fX1/vb29v739/f+9/j3/vf39/74+Pj++vr6/urq6v7Y2Nj+8/Pz6fz8\r\n        /DMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7+/tf7Ozs+sjI\r\n        yP7S0dP+7+/v/vDw8P7w8PD+7+/v/u7u7f7t7e3+7e3t/u3t7f7t7e3+7e3t/u3t7f7s7e3+7Ozs/u3t\r\n        7f7t7e3+7u/v/vDw8P7x8vL+8vLy/vLy8v7y8vL+8vPy/vP08/719fX+9vb2/vb29f729vb+9vb2/vn5\r\n        +P709PT+29vb/vPz8+n9/f0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8\r\n        /Ffs7Oz6x8fH/tfV1v7f3Nz+2NbW/t3e3P7h4eD+4+Pj/uTk5P7l5eX+5ubm/ubm5v7m5ub+5ufn/ufo\r\n        6P7p6en+6urq/urq6v7r6+v+7O3s/u7u7v7v7+/+8PDw/vDx8f7w8fD+8fHx/vHy8f7y8vL+9PT0/vX1\r\n        9P709fT+9PT0/vb29f74+Pj++Pj3/t3d3f729vbh/f39GQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAA/f39NfDw8PLJycn+2NfY/uHf3v78/P3+/Pz8/uzr7f7b2tv+zMzM/s7Ozv7T1NT+2NjY/trb\r\n        2v7c3dz+3t7e/t/g4P7i4+P+5ebm/ufn5/7n6Oj+6enp/urr6/7s7e3+7u/v/u/v7/7v8PD+8PDw/vDw\r\n        8P7x8fH+8/Pz/vPz8/7z8/P+8/Pz/vPz8/709fT+9/f3/vj4+P7h4eH++Pj4xf39/QYAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAD9/f0N9vb21tDQ0P7U1NX+6Ofn/uvp6v7+/v7+/v7+/v7+/v7+/v7++/v8/ufn\r\n        6P7Nzs7+w8PD/sfIx/7Lzcz+0NLR/tXW1v7Y2tr+3d/f/uHi4v7k5eX+5ebm/ujp6f7p6ur+7O3t/u7v\r\n        7/7v7+/+8PDw/vDw8P7x8fH+8vLy/vLy8v7y8vL+8fLx/vLy8v7y8vL+8/Tz/vf39v719fT+5ubm/vv7\r\n        +3UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7+/uS3d3d/s3Mzf7r6+v+5eXl/trX1v7Z1tP+6ejn/u/v\r\n        7v7x8O7+6+no/uno5/7p6Of+5uXl/s7P0P6ztbb+tbi3/ri8vP64wcL+wMnK/sTO0P7H0NH+09jY/uLk\r\n        5P7p7Ov+6+zs/u3u7v7v8PD+7/Dw/vDw8P7w8PD+8fLx/vLy8v7y8vL+8vLy/vHx8f7x8fH+8fHx/vPz\r\n        8/739/b+7u7u/vHx8fT9/f0hAAAAAAAAAAAAAAAAAAAAAP39/Snu7u77ycjJ/ujn6P7p6en+5eXl/tzc\r\n        3P7Qzs3+u7a1/rm0sv6vqqf+oZyZ/p6cmv6Wk5D+kY+L/qGfm/69vbv+vsTF/rrCxv6/xcX+y9DQ/tXa\r\n        2v7b4OD+2ODh/tPc3f7R2tv+2uHh/u7w8P7v8PD+7+/v/u/v7/7u7u7+7+/v/vDw8P7x8fH+8fHx/vHx\r\n        8f7w8PD+8PDw/vHx8f7y8/L++Pj4/ujo6P76+vqjAAAAAAAAAAAAAAAAAAAAAPn5+anV1dX+29vc/unp\r\n        6f7n5+f+4+Pj/t/f3/7a2tr+1dXV/s7Ozv69vbz+pKSk/ouMi/52d3X+bGxp/mlraP5ucG7+d3h3/pmb\r\n        mf66vL3+wcbI/qu0tP6ptrP+v8jG/tXa2P7d4uL+4ebm/trj5P7f5uf+6+3t/unp6f7m5ub+4+Pj/uPj\r\n        4/7o6Of+7e3s/vDw8P7w8PD+7+/v/u/v7/7w8PD+8/Py/vb29f7v7+/3/f39IgAAAAAAAAAA/f39JO3t\r\n        7fjNzM3+6enq/ujo5/7k5OT+4eHg/tzc3P7Y2Nj+09PT/s7Pzv7Jycj+uby8/rK5uv62u7z+oaeo/n2G\r\n        hv5daWn+W2Ji/ldcW/5kamz+g4iH/qisrv6Xo6f+eo+Q/naQj/6OpKP+wMvI/uHl5P7o7e3+2uPk/s7S\r\n        0f63uLb+pKam/qanp/6ur67+wMG+/tzc2v7s7Oz+7u/u/u7u7v7u7u7+8PDw/vb29f7u7u7++vr6kgAA\r\n        AAAAAAAA+vr6hNnZ2f7d3d7+6Ojo/uXl5f7i4uL+3t7e/tnZ2f7U1NP+zs/O/snJyf66vr7+v8LD/rm7\r\n        u/6dpaL+dISC/myAgf6Djo/+jJOT/qCmqf6ipqf+p6us/rS5uf65v77+vMHB/rvBwv6tuLn+hJye/oec\r\n        m/63vrz+u76+/pSen/6mqqz+jIyN/oCEiP6CiIz+ipCS/o6QkP67u7j+5OTj/uzt7P7t7e3+7u7t/vHx\r\n        8P729vb+9PT04f39/Qb9/f0E9PT02s/P0P7p6en+5ubm/uTk5P7f39/+2tva/tXV1f7Pz87+yMnI/rq+\r\n        vv7BxMT+trm4/oOOi/52hIT+j5aW/pCVlP6QlZb+qq+w/oyPj/6coaH+pamo/quvrv6ytrX+ub28/r7D\r\n        wv7Eysn+ytDQ/sXMzf68xMj+xcjK/r/Cxf7W1tb+oqSn/svKzf7GwsP+u7y+/rCzt/6VmJv+qKmn/uHh\r\n        3/7r6+v+7Ozs/u7v7v739/f+8fHx/vz8/DP9/f0s6eno/tjY2f7o6Oj+5OTk/uHh4f7c3dz+19fX/tDR\r\n        0P7Jysn+vL+//sLGxv65vLv+fImG/oeSk/6YnJz+kZWU/o2Pkf6ytbb+iIqK/o2Skf6Wmpn+mp6e/p6j\r\n        ov6ipqb+qa2s/rG1tf69v7/+yMvK/s7S0f7Fysn+yc/T/s/R0v7NzMz+p6Wl/qamqP6io6b+o6ir/p2j\r\n        qP6co6b+mJ2h/qimo/7j4+L+6urq/u3t7f7y8/L+9PT0/vr6+nP6+vpo29vb/uPj4/7l5eX+4uLi/t7e\r\n        3v7Z2dn+0tPS/szMzP7CxMP+wMTE/sDCwv6JlJP+jpiY/picm/6TlpX+jZCQ/qWoqv6eoKD+eHt6/pGT\r\n        k/6Ulpb+mJqa/puen/6foqL+o6en/qmtrP6xtLT+u7+//sbKyf7Lzs7+vL+//u7v8P7s6ur+zM3O/vH0\r\n        9/6/w8j+rrO3/q+2u/6kq7D+m6Ck/paXmf66urf+5+fn/uvr6/7v7+/++Pj3/vf396L4+Pia1tbW/unp\r\n        6f7j4+P+4ODg/tvc3P7W19f+0NDQ/snKyf67wMD+xcfH/qKop/6Ml5f+mZyc/pWWlv6NkJD+jY+P/q2u\r\n        sP6bnJv+k5WX/q2wsf7Cxcb+0tXW/tzg4P7h5OT+4OTk/t3g4P7U19j+ys3O/sPGx/7CxcX+vL6+/rCx\r\n        sv7b2tn++Pj4/v7+/v739/j+yc7V/q61uv6kq6/+oKSo/pueoP6ampv+2dnX/unp6f7t7e3++fn5/vb2\r\n        9sz19fW+2NjY/ujo6P7i4uL+3t7e/tra2v7W1tb+zs/P/sLExP7Fycn+vcC//pGbm/6doKD+lZeX/pGS\r\n        k/6Njo3+jY6O/q2wsf7S1df+6u7u/u/x8P7a2Nb+yMbD/r68uP64tbH+u7iz/sPAvP7Y1ND+8/Px/vj5\r\n        +f7s7u7+09bX/rK0tv7R1NX+9vb2/uLg3/7v7/D+5uzx/rzBxv6mrLD+o6Sm/pueof6am53+xMXE/ubm\r\n        5v7r6ur+9vf2/vf39+Hz8/PV3Nvc/uXm5f7g4OD+3d3d/tnZ2f7U1NT+zs7O/sHFxv7KzMz+oauq/qOo\r\n        qP6anJv+lZeX/pGSkf6mqar+2t3f/vDy8f7Lx8L+lY2F/m5mX/5pZF/+cW9s/nd2df5vbWr+Z2Rg/mdk\r\n        YP5ua2f+cW1o/o6Jg/64sa3+8/Lx/vP09P7c3+D+5ujq/o6Nkv5iYF/+cm9s/pWUkv6bmZr+o6Oj/qKh\r\n        ov6np6f+y8zM/uPj4/7o6Oj+8/Pz/vj4+PHx8fHq4ODg/uXl5f7g4OD+29zb/tfX1/7T09P+zs/P/sfL\r\n        y/7Iy8r+oKmp/qCiov6am5v+l5iZ/sbJyv7v8vL+ycXA/n1zbP5dU0z+V05I/ldRTP5XU1H+ZWNh/m5v\r\n        bv5hYF3+W1hW/lJOTP5UUE3+VlJO/mNhX/5hXlr+R0I//qiloP76+vn+6uzt/ra4vP5BQkf+MzM0/js5\r\n        N/5TT0z+fnt3/ra4uv7Gxsf+29zb/uDg4P7m5ub+8fHw/vj4+PXx8fHq4+Pj/uXm5v7g4OD+2tra/tfX\r\n        1/7T1NT+zc7O/s7S0/6/xMP+q7Cw/qKkpP6eoKD+2dzd/uvs6v6Vj4n+ZFtV/lNKQ/5IQDv+R0A5/kpF\r\n        Qf5GQT7+XVxb/m9wcP5hX1/+V1VT/lhXVv5SUU7+SEVC/k9NS/5mZGL+Xlta/ikoJ/5eW1j+7u7t/vX2\r\n        9v7CxMj+sLa7/qOmqP6vsLL+yMnK/tXW1v7Y2dn+29vb/t3e3f7k5eT+7/Dw/vn5+ezy8vLc5eXl/ubm\r\n        5v7f4OD+2tra/tfX1/7U1NT+y87O/tbZ2f7Dxsb+rq+v/qWmp/7f4eP+4uLf/n94c/5jXVn+XVlX/lBN\r\n        SP5DPDj+QTw2/kE9Of5FQD7+YF9f/m9vb/5mZWX+ZmZm/mdoZv5eXFr+XFpZ/l9eXP5nZ2X+a2pp/llX\r\n        Vf4YFxf+TVVZ/uzr6/73+Pj+5unp/uPk5P7d3t7+2NnZ/tbW1v7X19f+2tra/tzd3P7i4uL+8PDw/vr6\r\n        +t309PS/5ubm/+jo6P/h4eH/29zc/9fY2P/U1dX/ys/Q/9nc3P/Ex8b/q6ys/9fa2//f39z/f3p2/2Zh\r\n        Xf9UUE3/U1BP/01JR/9DPTn/SUZD/0lFQ/9JRkT/W1lZ/2BfXf5mZWX+aWlo/mZlZP5kZGL+aGdl/mtr\r\n        af5vbm3+cHBu/mVkY/5GREP+CQ0Q/nmHjP7z8/L+9fX1/uHi4v7a3Nv+1tbW/tTV1P7W1tb+2dnZ/tzd\r\n        3P7i4uL+8/Pz/vr6+rP39/em5+fn/+rq6v/j5OT/3t7e/9ra2v/W1tb/zNHR/9zf3/+9vr3/yMvM//Dz\r\n        8v96dG7/aGRg/11aWP9QTEn/R0NB/1FPTv9RUE//TUpI/0pHRv9QTUz/UlBP/1VTUf5ZWVf+XV1b/mFh\r\n        X/5kZGL+ZmZl/mdnZf5ra2n+cHBu/m1tbP5bWVf+GhoZ/i1BS/6wsK7+/Pz7/urs7P7c3dz+1dbW/tPU\r\n        1P7V1dX+2dnZ/t3d3f7k5OT+9/f3/vr6+pP6+vpz6Ojo/+3t7f/m5ub/4eHh/93e3f/Z2dn/z9PU/9rd\r\n        3f+7vL3/8fP0/66rqP9bV1T/YF1b/1hWVf9RT07/Uk9P/1RTUv9OS0r/SEVE/0tJSP9NTEr/TkxL/09O\r\n        Tf5SUE/+V1VV/ltZWf5eXFr+YGBf/mRkYv5paGj+bW1r/m1sav5iYWD+NDMy/g8eJ/5/g4T+29va/vv7\r\n        +/7Q0ND+zc7N/tPT0v7Y2dj+2tra/t7f3v7m5ub++fn5/vv7+1n8/Pw+6+vr//Hx8f/p6en/5OXl/+Hh\r\n        4f/d3d3/1NfX/83R0f/W2Nn/6ezs/2VkYv9dWlj/WFVU/1VTUv9OTEz/TUxL/0lHRv9GREP/RkRC/0hH\r\n        RP9LSUj/TUxL/09MS/5OTkz+UlFP/lZVVP5YWFf+XV1b/mJiYf5mZmT+ZmZk/mVjYv5hX13+R0VE/gQM\r\n        Ef5seX3+rq6t/vr7+v7R0tP+rK+u/qKkpP6hoqH+srOy/tfX1v7r7Ov++/v75/7+/RD9/f0M8vHy6/Ly\r\n        8v/t7e3/6Ojo/+Xl5f/h4eH/3N3d/8PIyP/y9PT/v8jM/05PUv9dXFr/VFFR/1BOTP9KSUj/R0ZE/0VD\r\n        Qf9CQD3/RUNB/0hGRf9JSEf/SUdF/0pIRv5LSkf+TUxJ/k9OTP5RUE7+VFRR/ldXVf5ZWFb+WlhW/ltZ\r\n        V/5aWFf+TElH/hQUGf5ec3r+mJiY/ufn5v7v7/D+ycrK/rm5uf6pqqr+lpmZ/ouNjf7Q0c7+7u7u+v39\r\n        /TMAAAAA+fn5ofDw8P/w8PD/6+vr/+fo6P/k5eX/4OHh/9PV1P/3+Pj/o7K5/0dKT/9ZWVn/T05M/0hI\r\n        R/9EQkL/Q0FB/0NBP/9FREL/RkVE/0ZFRP9IRkb/RkVF/0dFRP5JR0b+SEdF/khIRf5KSEf+TUtJ/k9O\r\n        Tf5SUU/+VFJQ/lRSUf5VUlH+SkdG/hMVG/5edXz+k5OT/s7Ozf77+/v+4eDg/tXV1P7AwcD+ra6u/pib\r\n        m/6Gior+wMDB/vn5+ZcAAAAA/f39O/Dw8P709PT/7e3t/+nq6v/n5+f/4+Tj/9/g4P/u7+//obG4/0NM\r\n        U/9YWFf/S0lJ/0VDQf9CQUD/Q0JB/0VFQ/9IR0b/SUhH/0lJSP9LSkn/SEhH/0hHRv5HRkX+R0ZD/khI\r\n        Rv5IR0X+SklI/k9NTP5PTkz+T0xL/k9OS/5RT0z+SUZF/gsVHP5pen3+kJGQ/ru7u/78/Pz+wMLD/sPE\r\n        xP7ExcX+vsDA/qyvrv6fo6T+qKur/vX19aMAAAAA/v7+Avf398f09PT/8PDw/+vr6//o6Oj/4eLh/+vs\r\n        7f/n6Oj/qra6/0tdaf9VVFX/TEtK/0VERP9DQ0L/RUVD/0hHR/9KSkn/S0tJ/0tMSv9NS0v/S0tJ/0pK\r\n        SP5JSUj+R0dG/kdGRP5JSEb+SUdF/kpIR/5MSkj+TktJ/k5LSf5NSkn+QT09/hYqNf5we3z+j5CP/rCw\r\n        r/78/Pz+/f39/vj4+P709PT+9PT0/u7u7v7u7u7+8vLy/vj4+JMAAAAAAAAAAP39/Ub08/P+9vb2/+/v\r\n        7//r7Oz/4uLi//Ly8//k5eX/tr2//2qEkv9FRkf/MjEw/zExMf8yMTL/Q0ND/0lJSf9LS0r/Tk5N/09Q\r\n        T/9PT07/TUxM/0xMSv5OTkz+TUxL/ktKSP5KSkf+SUZF/ktJSP5PTUz+UU9N/jQxMf4zMS/+KiYp/jJQ\r\n        XP53foD+jo+P/qusrP78/Pz+/v7+/v7+/v7+/v7+/f39/vn5+f79/f3+/Pz8/vv7+1UAAAAAAAAAAP7+\r\n        /gH5+fmu9/f3//T09P/v8PD/5+fn//Pz9P/m5+f/v8TE/4Cfrf88Q0v/Kysr/wAAAP8AAAD/BgYG/yAf\r\n        H/8uLi//Nzg3/05OTf9RUlH/UFFP/1BRUP5SUVD+UFBO/lBPTf5QTkz+T0xL/lNRT/5QTk3+Hx0d/gAA\r\n        AP4yLi/+DBsj/ldvdv59gYL+jpCQ/rCxsf79/f3+/v7+/v7+/v7+/v7+/f39/v39/f7+/v7+/Pz87/39\r\n        /REAAAAAAAAAAAAAAAD9/f0c9/f37fr6+v/09PT/7ezs//Hx8f/r7Oz/yMvL/6SzuP9OcIH/KCgr/wQE\r\n        BP8AAAD/AQEB/wEBAv8AAAD/AAAA/wcHB/8eHR7/MTAx/1NUU/5aWlr+WVhX/lZWVf5VVVL+VVNT/jQy\r\n        Mv4IBwf+AAAA/g4NDf4dGx3+LU5c/mVzd/6BhIT+kJGR/r6/v/79/f3++vr6/vr6+v79/f3+/v7+oP7+\r\n        /n/+/v5o+/r7KwAAAAAAAAAAAAAAAAAAAAAAAAAA/f39Tfj3+Pn6+vr+9PT0/u3t7f7x8vL+z9HR/rW8\r\n        vv5+nqr/LURU/xQVFv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wwMC/5SUlL+U1JR/kA/\r\n        P/4lIyP+BwYG/gAAAP4AAAD+AwMD/hwYGv4UMkL+VGxy/nF4ef6ChIT+kZOT/tXW1v74+Pj+8vLy/vn5\r\n        +f79/f2e/f39AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/G75+Pn9+vr6/u7t\r\n        7v75+fn+1tjY/sHExP6jr7P/Zo+f/yQ4Q/8TFBX/AgME/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA\r\n        AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4EBAT+EQ4P/g8qOP5KZ3H+YW9z/nZ7e/6GiIn+mZub/vHx\r\n        8f729vb++/v7/v38/Lj9/f0DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAD7+/t7+vr6/fLy8f78/Pz+4ePj/svNzf61urr/lqWr/12Imv8kQlP/LzE1/w0ODv8AAAD/AAAA/wAA\r\n        AP8AAAD/AAAA/wAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/ggGB/4QEBX+FDNE/kVia/5ba2/+bnR2/nt/\r\n        f/6Ii4v+ur28/v39/f78/Pz+/f39nvz8/AcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAA/Pz8Z/r6+vb08/P+8vPy/tLU1P6+w8L/q7Gy/4+eo/9hhpT/IVJp/zFA\r\n        TP83ODr/FhcY/wICAv8AAAD/AAAA/wAAAP4AAAD+AAAA/gMDA/4QDxD+EA8S/goZJv4mSlv+RWBo/lVm\r\n        av5qcXL+dHp6/n+Dg/6VmJj+7O3t/v7+/vP+/v5dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/Tjz8vP2/Pz8/t/g4P7Jy8v/uby7/6is\r\n        rf+NmZ7/cIaO/0Fugf8aSWL/FzJH/x8mMf8YGh3/ExMT/w0PD/4NDQ/+EBEW/g4WIv4OJTb+IEJT/jtZ\r\n        Zv5EXGT+V2Vo/mNsbf5tdHT+eH19/oaKiv7O0dD+/v7+2P7+/jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7+/tp9fX2/vj4\r\n        +P7R1NP/wsPD/7S2t/+lqan/kpmb/3iHjP9keYH/T215/zZdcP8lTWT/HD9X/xk8VP4bP1T+I0ld/jFU\r\n        Yf4+V2D+QVlh/kteZP5VZGf+YWpr/mpxcv50eXn+f4SF/ri9vf78/Pzv/f39KQAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAD9/f0C+vr7kvj4+f7y8/P8ys3N/re8vf+wsrP/oqam/5OXmf+Ciov/cn+C/2V1eP9YbHH/UGRr/0xf\r\n        Z/5IXGT+SVxj/klbYv5OXmT+VWJl/lplZ/5famz+aHFy/nJ4ef5+g4T+tru7/vn5+fP9/f1EAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAA/f39A/v7+5P6+frJ7/DwrsfKyv63urr/qq2u/5+jpP+Ul5j/iI2O/3iB\r\n        gv9veHv/Z3J0/2Bsb/5daWv+W2Zp/lplaf5cZmr+Xmls/mRtbv5qcnP+cnp7/oSKi/7Gy8r++fn57/v6\r\n        +z8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QL7+/tr+vn6wfT19ZvQ09P4tbi4/6ms\r\n        rP+eoqL/kpeY/4aNj/9+hYb/eX9//3J6ev5tdHb+a3J0/mpxcv5rcnP+a3N1/nJ4ef56gYP+n6en+uPm\r\n        5ub8+/y3+/v7IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39KPr5\r\n        +q/5+Pmp6OrqusfJyvessbH/n6Sk/5SanP+Nk5T/h4yN/36Gh/58goT+e4GB/nqAgP59goP+hoyN/qWr\r\n        rPba3d2p+/v7UP39/S/8/f0CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAP7+/gH6+fpB+vj6lPr5+pDv8PCY1tnZwcDGx+qwtrf8pqus/52kpv6fpaX+pqys+7a7\r\n        vOzKzs646uzsdfv7+yr9/f0c/f39AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn4+Az59/hH+/v7Sfz8/Ev6+vpH+fr6VPf4\r\n        +Fz4+fk/+fr6Hv39/Q3+/v4I/f39AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//4AA////3P/8AAAf///c//AAAAf/\r\n        /9z/wAAAAf//3P+AAAAA///c/wAAAAB//9z+AAAAAD//3PwAAAAAH//c+AAAAAAP/9zwAAAAAAf/3OAA\r\n        AAAAB//c4AAAAAAD/9zAAAAAAAP/3MAAAAAAAf/cgAAAAAAB/9yAAAAAAAD/3AAAAAAAAP/cAAAAAAAA\r\n        /9wAAAAAAAD/3AAAAAAAAP/cAAAAAAAA/9wAAAAAAAD/3AAAAAAAAP/cAAAAAAAA/9wAAAAAAAD/3AAA\r\n        AAAAAP/cAAAAAAAA/9wAAAAAAAD/3AAAAAAAAP/cAAAAAAAA/9yAAAAAAAD/3IAAAAAAAP/cgAAAAAAA\r\n        /9zAAAAAAAD/3MAAAAAAAP/c4AAAAAAB/9zwAAAAAA//3PgAAAAAH//c/AAAAAA//9z+AAAAAP//3P8A\r\n        AAAB///c/4AAAAP//9z/gAAAB///3P/AAAAP///c/+AAAB///9z/+AAAP///3P/8AAD////c//+AB///\r\n        /9woAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gH8/Pwy+Pj4bPLy8p7t7e286Ojo1+bm5tro6OjT7e3tu/Ly\r\n        8pn5+fli/f39IQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/RT39/eD6enp4dXV1f/Jycr/zMvN/9PT0//Z2dr/3d3e/9zc\r\n        3f/Y2Nn/1NPU/9HR0f/b29v+7u7ux/r6+l7+/v4DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gT5+flx5eXl8MjIyf/Qz9H/5eTl//Pz8//29vb/9/f3//n5\r\n        +f/6+vr/+vr6//r6+v/6+vr/+vr6//Hw8f/e3t//19fX/+3t7db7+/tEAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0d8fHxxdDQ0P/T09T/8O/w//b29v/29fX/9PT0//Pz\r\n        8//z8/P/9PT0//X19f/29/b/9/f3//f39//4+Pj/+fn5//n5+f/4+Pj/4+Lj/+Dg4Pz4+Ph/AAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/Pz8Kurq6uTLy8v/5uXm//Pz8v/y8vH/8fHx//Hx\r\n        8f/w8PD/7+/v/+7u7v/v7+//8PDw//Ly8v/z8/P/8/Pz//T08//19fX/9/f3//f39//3+Pf/8/Pz/+Hh\r\n        4f/39/eRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/Sbo6OjmzczM/+De3v/j4+L/5ubm/+bm\r\n        5v/n5+f/5+jn/+jo6P/p6en/6urq/+vr6//s7Oz/7u7u//Dw8P/x8fH/8fHx//Ly8v/z8/P/9fX0//X1\r\n        9P/29vb/+Pj4/+Tk5P/4+PiDAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0N7e3t2M7Nzv/k4uL//f3+//X1\r\n        9v/j4+T/0tLT/8/Qz//V1tX/2drZ/9zd3f/h4uL/5ebm/+fn5//p6ur/7O3t/+/v7//w8PD/8PDw//Ly\r\n        8f/z8/P/8/Pz//Pz8//09PT/9/j3/+jo6P77+/tPAAAAAAAAAAAAAAAAAAAAAPb29pnQ0ND/5+fn/+Hf\r\n        3//p5+X/8/Py//Tz8v/w7+7/4eDf/87Oz/+6vLz/wMPD/8TLy//M09T/0tjY/+Lk4//q6+v/7e7u/+/w\r\n        8P/w8PD/8fHx//Ly8v/y8vL/8fHx//Hy8f/z8/P/9fX1/+7u7uX9/f0OAAAAAAAAAAD8/Pww3d3d/eHg\r\n        4f/n5+f/39/f/8/Nzf+/vLv/qaWj/5WTkP+KiIT/joyJ/6enpv+1u7z/wsfI/8vR0P/W3Nz/1t7e/9ff\r\n        3//h5+j/7vDw/+3u7v/t7e3/7u7u//Dw8P/x8fH/8PDw//Dw8P/y8/L/8PDw//f394AAAAAAAAAAAPPz\r\n        86vV1NX/6enp/+Tk5P/e3t7/19fX/9DQ0P/HyMf/rLGy/5ygoP97gYD/YGlp/2JmZf+FiYr/oqip/4+e\r\n        n/+Qo6L/sL69/+Dk5P/h6Oj/2N3c/8DCwf+3ubj/w8PC/93d3P/u7u7/7u7u/+/v7//19fX/8fHx6/7+\r\n        /gv9/f0X4eHh+ePj5P/m5ub/4ODg/9nZ2f/R0dH/x8jH/7zBwf+0uLf/hpKQ/3mIh/+JkZL/naKj/6Km\r\n        p/+wtbX/ub6+/7zCwv+vurv/l6mq/6+3uP+nrrD/r7Gz/46Rlf+ZnqH/l5qd/7a3tf/o6Of/7O3s/+/v\r\n        7//z8/P/+/v7VPn5+WbZ2dr/5+fn/+Li4v/c3Nz/09PT/8nJyP++wcL/sLWz/3+Liv+TmZj/jpKS/6aq\r\n        qv+Ii4v/mJ2c/6Cko/+orKv/s7e3/8LGxf/N0dH/z9LS/83R1P/Ly8z/qaen/6+ur/+nrK//m6Gk/62t\r\n        q//n5+b/7O3s//X29f/19fWW8vLyo93c3P/k5OT/3t/f/9bX1//Nzc3/v8PC/77BwP+IlJP/l5ub/5CS\r\n        kv+foqP/j5GQ/42QkP+cn5//qays/6+zs/+ztrf/trm6/8DDw//FyMj/09XV/+Hf3v/v8fP/yMrO/660\r\n        uf+jqq7/mJqd/8HBv//q6ur/8/Py//b29sfq6urO4+Pk/+Hh4f/b3Nz/1NXU/8fJyP/Dx8f/n6em/5me\r\n        nv+TlJT/i4yL/6Smp//Cxcb/4OLi/9nZ1//Qz83/zMvJ/9HQzf/i4d//6+3t/9nb3P+1t7j/4OLj/+7t\r\n        7f/w8vX/xMnP/6Sprf+eoKP/oaKi/+Xl5f/t7e3/+fn56efn5+jn5+f/39/f/9na2v/S09P/xsnJ/8HE\r\n        w/+dpKT/mZqa/5eZmf/Hy8v/2djW/5+Zk/9tZV//Z2Ng/3NycP9pZ2T/Yl5b/2djX/97d3L/oJuX/+bl\r\n        4//l5+j/sbG1/1VUVP90c3H/i4iH/6Skpf+1trb/4ODg/+np6f/4+Pj36Ojo8ejp6P/e3t7/2NjY/9LT\r\n        0//Lz8//uL29/6Wnp/+lp6j/4OLi/6ahnP9dVU7/TEM9/0xGQf9PSkj/bGxs/15cW/9WVFL/UE1K/1BO\r\n        S/9kYWD/Pz06/6+urP/r7O3/lZid/3x+gP+VlZT/xcbG/9jY2P/d3t3/5ubm//j4+PTq6uvi6urq/97e\r\n        3v/X2Nj/09TU/9HV1f+9wMD/ra+w/+Lk5P+LhYD/XllW/1NQTP9CPDf/Qz87/0tIRv9qamn/Z2Zm/2ho\r\n        Z/9fXl3/YmFf/2xraf9hX13/Hh4f/6mvsf/29/f/4uXk/9vc3P/W1tb/19jX/9zc2//k5OT/+vr64e3t\r\n        7cjs7Oz/4eHh/9rb2//V1dX/09jY/7u8vP/i5eX/iIR//2FeW/9OSkj/TUpJ/05LSf9LSEb/UE5N/1ZV\r\n        U/9dXVv/YmFg/2VlY/9oaGb/bW1s/21tbP9GRUP/KTY9/9bW1f/u7+//2tva/9TU1P/W1tb/3Nzb/+fn\r\n        5//7+/u88vPzmezs7P/m5ub/39/f/9nZ2f/T19f/0NLS/7i3tf9cWVb/WVdW/1BOTf9SUE//S0hH/0hG\r\n        Rf9NS0r/T01M/1JRT/9ZV1f/XVxa/2NjYf9paWj/a2tp/1xaWf8UHCH/jZGS//b29v/Jysr/wcLC/8zN\r\n        zP/e3t3/7e3t//v7+4P6+vpc7u7u/+vr6//l5eX/3t/f/8vPz//t7+//bXN2/1tZV/9SUE//SklI/0ZE\r\n        Q/9DQT//SEZF/0pIR/9LSUf/TEtJ/1BQTf9UU1H/WVlX/11cWv9dXFr/WFZU/yEiJP9xfoL/1dbV/93d\r\n        3v+2t7f/n6Gh/5yenv/g4N//+vr6X/39/RDz8/Pz7+/v/+np6f/k5eX/2dva/+Lk5P9bZ3D/VlVV/0hI\r\n        Rv9DQUH/REJB/0ZFRP9HRkX/SEdG/0dGRf9IR0X/SEhF/0pIR/9OTUv/UlBO/1NRT/9RT03/IyQo/299\r\n        gf+6urn/7e3t/8vMy/++v77/o6Wl/5GUlf/n6Oi8AAAAAPb29prz8/P/7Ozs/+jo6P/l5eX/2dvb/2J0\r\n        f/9TU1P/RkVE/0NDQv9HRkX/SUlI/0tLSf9LS0r/SklI/0hIRv9HRkT/SUdG/0tKSP9NS0n/TkxJ/01K\r\n        Sf8gKzL/d4CB/6mpqf/5+fn/6+zs/+Pk5P/c3d3/2NnZ/+7v77sAAAAA/f39H/b29vXy8vL/7Ozs/+vr\r\n        6//Z29v/hJql/0RFR/8cHBz/JSQl/0BAP/9MTUz/UFBP/09PTv9MTEv/Tk5N/01MSv9LSkj/TEpI/1FP\r\n        Tf8tKir/NDEx/ytASf9+g4P/pKWl//39/f/+/v7//v7+//v7+//+/v7/+/v7gQAAAAAAAAAA+fn5d/j4\r\n        +P/y8vL/7u7u/9/i4f+ntrr/P1Fc/w4PD/8AAAD/AQEC/wYGBv8YGBj/MjEx/01NTf9XV1f/VVRT/1RT\r\n        Uf9GREP/FhQU/wYGBv8cIif/VWxz/4SHhv+trq7//f39//v7+//9/f3w/v7+qv39/ZT9/f0ZAAAAAAAA\r\n        AAD+/v4D+vn5s/n5+f/w7+//6evr/7/DxP91k6H/HCUs/wIDA/8AAAD/AAAA/wAAAP8AAAD/BQUF/zg3\r\n        N/8uLi3/ExIS/wAAAP8BAQH/EhMW/zNRXf9rdXf/h4mJ/8XGxv/29vb/+fn5+/39/UgAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAD9/f0L+vr6w/T09P/19fX/zc/P/6mytP9egZH/ITA5/xAREv8AAAD/AAAA/wAA\r\n        AP8AAAD/AAAA/wAAAP8AAAD/AwMD/w0SGP8sSlb/XWxw/3Z7e/+Nj5D/6uvr//v7+/b9/f1SAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0K+/v7p/b29v/c3t7/vcHB/52mqf9fgo//LE5g/ycv\r\n        N/8XFxj/CQoK/wMDA/8GBgb/CwoM/w0PFP8VKDX/NlVi/1Vmaf9tdHX/foKC/7i7u//+/v7W/v7+KgAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4C9/f3uPT19f/Lzc3/tbe3/5uh\r\n        o/93h43/SG18/ylJXP8dNkj/GC8//xcuPv8fO0r/NFJg/0VcZP9VY2f/Zm5v/3R6ev+boKD/9vb20f39\r\n        /QwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0T+fn50Ozt\r\n        7uK/w8T/r7Gy/5qen/+Di4z/bnt9/1xtcf9SZGr/Tl9m/05eZP9TYWb/W2Zo/2Rtb/9yeXn/mqCg//Dw\r\n        8dv9/f0eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAD9/f0T+/r7nu3u7rbCxcX8qa2t/5mdnf+GjY7/eYCB/3B4eP9pcXP/Zm5w/2dvcf9tdHX/e4OE/7m+\r\n        vvL29/e0+/n7GQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAD+/v4C+/r7Xvj3+Kfe3+DLur2++JyjpP+QlZf/hYuN/4GHh/+Bh4j/kZaX/bW6\r\n        usfq7Oxy/f39IP39/QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+A/r5+Tn6+fpM8/T0dOPm5YTd4OCS3eDgeenr\r\n        61b6+voi/v7+BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/A\r\n        A///AAB//AAAP/gAAB/wAAAP4AAAB8AAAAPAAAABgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAwAAAAMAAAAfgAAAP8AAAH/gAAD/8AAB//gAA//8A\r\n        Af//wA//KAAAABgAAAAwAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAD9/f0R9vb2XOrq6pfi4uLC3Nzc3tra2uLe3t7V5OTkuO/v74H5+fk4/f39AQAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/Pz8FO7u7pTY19j20dHS/9va\r\n        2//m5uf+8PDx//T09f/y8vL/6urr/+Hh4f/c3N3+5eXl0/b29lIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAD39/dR3d3d69XU1f/t7e3/9vb1//T09P/09PT/9fX1//b29v/3+Pf/+Pj4//n5\r\n        +f/6+vr/8fHx/+Hh4f7u7u6p/f39CwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPPz823V1db95OTk//Hx\r\n        8f/w8PD+7+/v/+/v7//u7u7+7u7u/+/v7//y8vL/8/Pz//P08//19vX/9/f2//f39//s7Oz/7e3twf39\r\n        /QsAAAAAAAAAAAAAAAAAAAAA9fX1YNXV1f3l4+P/5+fn/9va2//a29v+3+Df/+Hi4v/k5eX+6Ojo/+rq\r\n        6v/t7e3/7/Dw//Dw8P/x8fH/9PTz//T09P/19fX/8fHx//Dw8K/9/f0BAAAAAAAAAAD7+/so3Nzc9OPj\r\n        4//n5eT/9fX0//X19P/i4eH/z9DQ/8HDw//Hy8z/0NbX/9nd3f/n6en/7e7u/+/w8P/w8PD/8vLy//Ly\r\n        8v/y8vL/9PT0//Dw8P/19fVjAAAAAAAAAADq6uqz3d3d/+bm5v/Z2dj/xsPC/6yqqP+OjYr+goF+/5ia\r\n        mf+zuLj+w8nJ/8fPzv/W3dz/4efn/+rt7f/r6+v/6enp/+7u7v/w8PD/8PDw//Pz8//x8fHm/f39CPv7\r\n        +yrc3Nz96Ojo/+Hh4f/Y2Nj/zs7O/77Cwf+vtbX+f4yM/3J7e/9/hYb+oaan/6Ktrv+bq6v/q7q5/83T\r\n        0/+wtbX/lZiZ/5+io//ExcP/6+vr/+7u7v/y8/L/9vb2XvDw8ILe3t7/5OTk/9vb2//P0M//wMPD/6uw\r\n        r/+GkI//j5SU/52hof+Tl5b/oqam/66xsf+8wMD/yc7O/8TJy//Mzc7/r66w/7GytP+fpKj/srOz/+np\r\n        6P/x8fH/9fX1qebm5sDl5eX/39/f/9TV1f/Fx8b/ur29/4+YmP+Tlpb+m52e/5GTk/+lqKj+uLu8/8HE\r\n        xP/Dxsb/xMfH/8HExP/Z2dn/7e7v/8zP0/+psLX/m56h/8XFxP/s7Oz/9/j32+bm5+Tk5OT/29vb/9HS\r\n        0v/Fx8j/pKyr/5iamv+Vl5f+wcPE/8fGw/+opaH+m5mX/5KPjP+cmZX/uri1/9va2f/U19j/09PU/6qq\r\n        q/+lpqn/oaGj/7S1tf/n5+f/9vb29Onp6fTj4+P/2dnZ/9DR0f/Hy8v/o6in/6qsrf/Nzcz/f3dx/1FI\r\n        Qv9PSkf/aGdm/11bWf9UUk//VFFO/1tYVf+KiIb/4eLj/3p8f/94eHf/tLW0/9XV1f/i4uL/9PX0+Ozs\r\n        7Obk5OT+2dnZ/s/S0v7O0ND+tbe3/sjHxf5nYl7+U1BN/kQ/O/5GQkD+YmJh/mdnZv9kY2L+Y2Nh/mxs\r\n        av9HRUT+b3V4/vHy8v/f4OD+1tfW/tjY2P/f39/+9vb24+/v78bo6Oj+3t7e/tLV1f7Lzc3+1tfW/mdj\r\n        X/5VU1H+T01M/k1LSf5MSkn+UU9O/lhXVv9fXl3+ZWRj/mxsav9mZWP+Iysv/sHCwv/k5eX+0tPS/tjY\r\n        2P/h4uH++fn5uvHx8Y3u7u7/5OXl/tvc3P/W2dr/l5qb/llXVv5PTU3+SUdF/kVDQf5JR0b+TEpI/k5N\r\n        S/9UU1H/W1pZ/2BfXf9fXVv/Kyst/4SNj//o6en/tLa1/6Smpf/HyMf/9vb2ifr6+jfx8fH+6urq/uTk\r\n        5P7m5+f+c36F/lNSUf5FQ0L+REJB/kdGRf5ISEf+R0ZG/khGRf9JSEb+TUxK/lFPTf9SUE7+LC4w/nuF\r\n        h//g4OD+zs/P/ry9vf+bnp7+0dPTzgAAAAD29vbC8PDw/ubm5v7q6+v+hZWd/kZFRv47Ojr+RkZF/ktM\r\n        Sv5OTUz+S0tK/ktLSf9JSEb+SUhG/k9MSv9BPjz+LTg+/oGGhv/V1dX+/Pz8/vn5+f/19fX++Pj4uQAA\r\n        AAD5+fkz9/f3+u7u7f/t7u7/q7i9/jdCSP4BAQH+CgoK/hkZGf4xMTH+SUlJ/lVVVP9TUlD/S0lI/x4c\r\n        HP8XFhb/PVNb/4eKiv/a29r//Pz8//39/ef+/v65/Pz8SwAAAAAAAAAA+vr6bfj4+P7x8fH+x8rL/m2I\r\n        lP4TGBz+AAAB/gAAAP4AAAD+AwMC/ikpKf8ZGBj+AQEB/gYFBf8iN0H+Z3R2/oyPj//t7e3++fj47f39\r\n        /SgAAAAAAAAAAAAAAAAAAAAAAAAAAPv7+3j39/f83N7e/q20tv5ce4n+JDQ+/hMUFP4AAAD+AAAA/gAA\r\n        AP8FBAX/CQwQ/yQ7R/9YaW7/d3x8/7Gzs//9/f3T/f39KQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAD49/dm8vLz/sXHx/6kqav+b4WO/jlZaf4lOkj+FScz/hcqNf8jOUb/OlRf/1RkaP9rcnP/jZKS/+7v\r\n        77z+/v4MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vr6iunq6ty5vL3+oKOk/oSL\r\n        jf5pdnn+WWht/lNiZ/9TYWb/XGdq/2lxc/+OlJT/5ebnyP39/REAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv6+1Xt7u67w8XF65+jpP6KkJH+fIOD/nR6fP9zeXr/gomK/Lq/\r\n        wLzx8vJz+/v7CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAD7+voQ+vn6TOvs7HrT19eeyMzNq8XJyZbR1dVu8fLyKP7+/ggAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAP4AP0H4AB9B8AAHQeAAA0HAAAFBgAABQYAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAA\r\n        AEEAAABBAAAAQQAAAEGAAABBgAAAQcAAA0HgAAdB8AAPQfgAH0H8AD9B/gD/QSgAAAAQAAAAIAAAAAEA\r\n        IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Pj4JePj44Xb2tvC39/g5OHh\r\n        4urh4eHU4N/goPLy8kkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0H5eXljtzc3fvo6Oj/9PT0//b2\r\n        9v/4+Pj/+fn4//f39//q6ur/5+fnxfn5+R8AAAAAAAAAAAAAAAD9/f0J4eHhvd3c3P/s7Oz/7Ozs/+zs\r\n        7P/s7Oz/7+/v//Ly8v/z8/P/9fb1//X19f/s7Ozj+Pj4IAAAAAAAAAAA5eXln97e3v/08/P/5+bm/9XV\r\n        1f/Mzc3/1dna/+Hj4//s7e3/8PDw//Ly8v/y8vL/9PT0//Dw8Mz9/f0D9vb2N9/f3/7i4uL/zczM/6ys\r\n        q/+MjYv/h4yM/62ys/+zv7//0tra/+Xp6f/V1dX/4ODg/+/v7//y8vH/9PT0XuXk5Z3l5eX/2tra/8fJ\r\n        yP+orq3/iJGR/5Wam/+ip6f/tLm4/7W+v/+9wsP/rK2v/6Gkp/+5u7v/7Ozr//X19brm5ubb4ODg/9DQ\r\n        0P+4vLz/k5iY/5eamv+wsrL/u728/8DBwP/R09L/yczM/+fo6P/KztP/n6On/8zMzP/09PTr6Ofo9dzc\r\n        3P/Nz8//rrOz/62vr/+ppqP/aWJc/2VjYf9gXVv/YF1a/4qHhf/Mzc7/d3d4/6Kiof/T09P/8PDw+uvr\r\n        6+rc3dz/09XW/8LExP+Wk4//U09N/0dDQP9XVVT/ZGNi/2RjYf9qaWj/TlJU/+fo6P/Y2Nj/2dnZ//Dw\r\n        7+bw8PC95eXl/9XY2P+4urv/WFZV/01LSv9HRUT/TEpJ/1JRT/9bW1n/ZGNh/zo7Pf+yt7j/x8jI/7m6\r\n        uv/u7u249fX1Z+7u7v/i4+P/nqer/05NTP9EQ0L/SEhH/0lIR/9IR0X/S0lI/1BOTP84Ojz/kpiZ/+fo\r\n        6P/Iycn/zc/P3f39/Qf29vba7u7u/7nDx/8sMDP/GRkZ/y4vLv9GR0b/UlFQ/0xKSf8mJST/NEBF/5WX\r\n        l//9/f3//f395v39/YsAAAAA+vr6MPb19fDa3d3/ZnuE/w0RE/8AAAD/AQEB/xkZGf8FBQX/Exwh/1xr\r\n        cP+xsrL/+fn50P39/RIAAAAAAAAAAAAAAAD7+/st7/Dw7ba7vP9nfoj/LD9K/xAdJf8SHib/JzlD/1Fj\r\n        aP9/hIT/4+TkrP7+/goAAAAAAAAAAAAAAAAAAAAAAAAAAPr6+j3j5eXNrbCx/oSMjf9mcnX/W2dr/2Br\r\n        bf+Ciov71dfXqf39/QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/r7GO3t7mzKzc6usbW2xaqv\r\n        r7O6vr578fLyJAAAAAAAAAAAAAAAAAAAAAAAAAAA8A+cQcADnEGAAZxBgACcQQAAnEEAAJxBAACcQQAA\r\n        nEEAAJxBAACcQQAAnEEAAJxBgAGcQcADnEHgB5xB8B+cQQ==\r\n</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "RED2/Program.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Windows.Forms;\r\n\r\nnamespace RED2\r\n{\r\n\tstatic class Program\r\n\t{\r\n\t\t/// <summary>\r\n        /// The main entry point for the application.\r\n\t\t/// </summary>\r\n\t\t[STAThread]\r\n\t\tstatic void Main()\r\n\t\t{\r\n\t\t\tApplication.EnableVisualStyles();\r\n\t\t\tApplication.SetCompatibleTextRenderingDefault(false);\r\n\t\t\tApplication.Run(new MainWindow());\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "RED2/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controlled through the following\r\n// set of attributes. Change these attribute values to modify the information\r\n// associated with an assembly.\r\n\r\n[assembly: AssemblyTitle(\"Remove Empty Directories\")]\r\n[assembly: AssemblyDescription(\"Searches and deletes empty directories recursively below the specified starting folder.\" )]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"Jonas John\")]\r\n[assembly: AssemblyProduct(\"Remove Empty Directories\")]\r\n[assembly: AssemblyCopyright(\"Copyright (c) Jonas John (Released under LGPL)\")]\r\n[assembly: AssemblyTrademark(\"The GNU Lesser General Public License (LGPL)\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n\r\n// Setting ComVisible to false makes the types in this assembly not visible\r\n// to COM components.  If you need to access a type in this assembly from\r\n// COM, set the ComVisible attribute to true on that type.\r\n[assembly: ComVisible(false)]\r\n\r\n// The following GUID is for the ID of the typelib if this project is exposed to COM\r\n[assembly: Guid(\"8e03e827-e91d-4eac-9bfa-a23cd7cb7989\")]\r\n\r\n// Version information for an assembly consists of the following four values:\r\n//\r\n//      Major Version\r\n//      Minor Version\r\n//      Build Number\r\n//      Revision\r\n//\r\n// You can specify all the values or you can default the Build and Revision Numbers\r\n// by using the '*' as shown below:\r\n// [assembly: AssemblyVersion(\"1.0.*\")]\r\n[assembly: AssemblyVersion(\"2.3.0.0\")]\r\n[assembly: AssemblyFileVersion(\"2.3.0.0\")]"
  },
  {
    "path": "RED2/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.42000\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace RED2.Properties {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    internal class Resources {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Resources() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"RED2.Properties.Resources\", typeof(Resources).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Search again.\r\n        /// </summary>\r\n        internal static string btn_scan_again {\r\n            get {\r\n                return ResourceManager.GetString(\"btn_scan_again\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Deleted {0} empty directories (Failed: {1}, Skipped: {2}, Runtime: {3:D2}:{4:D2} min).\r\n        /// </summary>\r\n        internal static string delete_process_finished {\r\n            get {\r\n                return ResourceManager.GetString(\"delete_process_finished\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Delete process was aborted..\r\n        /// </summary>\r\n        internal static string deletion_aborted {\r\n            get {\r\n                return ResourceManager.GetString(\"deletion_aborted\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Error:.\r\n        /// </summary>\r\n        internal static string error {\r\n            get {\r\n                return ResourceManager.GetString(\"error\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to The path you picked is not a directory or does not exist..\r\n        /// </summary>\r\n        internal static string error_dir_does_not_exist {\r\n            get {\r\n                return ResourceManager.GetString(\"error_dir_does_not_exist\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Ignore file settings are in a bad format.\r\n        /// </summary>\r\n        internal static string error_ignore_settings {\r\n            get {\r\n                return ResourceManager.GetString(\"error_ignore_settings\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Only one directory can be accepted..\r\n        /// </summary>\r\n        internal static string error_only_one_folder {\r\n            get {\r\n                return ResourceManager.GetString(\"error_only_one_folder\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Found {0} empty directories (Checked: {1} / Runtime: {2:D2}:{3:D2} min).\r\n        /// </summary>\r\n        internal static string found_x_empty_folders {\r\n            get {\r\n                return ResourceManager.GetString(\"found_x_empty_folders\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Contains &quot;trash&quot;.\r\n        /// </summary>\r\n        internal static string icon_contains_trash {\r\n            get {\r\n                return ResourceManager.GetString(\"icon_contains_trash\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Empty.\r\n        /// </summary>\r\n        internal static string icon_default {\r\n            get {\r\n                return ResourceManager.GetString(\"icon_default\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Deleted.\r\n        /// </summary>\r\n        internal static string icon_deleted_folder {\r\n            get {\r\n                return ResourceManager.GetString(\"icon_deleted_folder\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Hidden.\r\n        /// </summary>\r\n        internal static string icon_hidden_folder {\r\n            get {\r\n                return ResourceManager.GetString(\"icon_hidden_folder\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Locked.\r\n        /// </summary>\r\n        internal static string icon_locked_folder {\r\n            get {\r\n                return ResourceManager.GetString(\"icon_locked_folder\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Protected.\r\n        /// </summary>\r\n        internal static string icon_protected_folder {\r\n            get {\r\n                return ResourceManager.GetString(\"icon_protected_folder\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Root.\r\n        /// </summary>\r\n        internal static string icon_root {\r\n            get {\r\n                return ResourceManager.GetString(\"icon_root\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Failed.\r\n        /// </summary>\r\n        internal static string icon_warning {\r\n            get {\r\n                return ResourceManager.GetString(\"icon_warning\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Please select the directory that you want to be cleaned.\r\n        /// </summary>\r\n        internal static string please_select {\r\n            get {\r\n                return ResourceManager.GetString(\"please_select\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Process was aborted.\r\n        /// </summary>\r\n        internal static string process_aborted {\r\n            get {\r\n                return ResourceManager.GetString(\"process_aborted\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Process was cancelled.\r\n        /// </summary>\r\n        internal static string process_cancelled {\r\n            get {\r\n                return ResourceManager.GetString(\"process_cancelled\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to RED deleted {0} empty directories for you since you installed it :).\r\n        /// </summary>\r\n        internal static string red_deleted {\r\n            get {\r\n                return ResourceManager.GetString(\"red_deleted\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Deleting empty directories ({0} of {1}).\r\n        /// </summary>\r\n        internal static string removing_empty_folders {\r\n            get {\r\n                return ResourceManager.GetString(\"removing_empty_folders\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Scanning directories....\r\n        /// </summary>\r\n        internal static string scanning_folders {\r\n            get {\r\n                return ResourceManager.GetString(\"scanning_folders\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Searching empty directories....\r\n        /// </summary>\r\n        internal static string searching_empty_folders {\r\n            get {\r\n                return ResourceManager.GetString(\"searching_empty_folders\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Started deletion process....\r\n        /// </summary>\r\n        internal static string started_deletion_process {\r\n            get {\r\n                return ResourceManager.GetString(\"started_deletion_process\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Warning!.\r\n        /// </summary>\r\n        internal static string warning {\r\n            get {\r\n                return ResourceManager.GetString(\"warning\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Warning, do you want to delete empty system directories? This may harm your operating system..\r\n        /// </summary>\r\n        internal static string warning_really_delete {\r\n            get {\r\n                return ResourceManager.GetString(\"warning_really_delete\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to \\&quot;{0}\\&quot; folder skipped because creation time [{2}] is &lt; {1} hours old.\r\n        /// </summary>\r\n        internal static string young_folder_skipped {\r\n            get {\r\n                return ResourceManager.GetString(\"young_folder_skipped\", resourceCulture);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "RED2/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"btn_scan_again\" xml:space=\"preserve\">\r\n    <value>Search again</value>\r\n  </data>\r\n  <data name=\"error\" xml:space=\"preserve\">\r\n    <value>Error:</value>\r\n  </data>\r\n  <data name=\"error_dir_does_not_exist\" xml:space=\"preserve\">\r\n    <value>The path you picked is not a directory or does not exist.</value>\r\n  </data>\r\n  <data name=\"error_ignore_settings\" xml:space=\"preserve\">\r\n    <value>Ignore file settings are in a bad format</value>\r\n  </data>\r\n  <data name=\"error_only_one_folder\" xml:space=\"preserve\">\r\n    <value>Only one directory can be accepted.</value>\r\n  </data>\r\n  <data name=\"found_x_empty_folders\" xml:space=\"preserve\">\r\n    <value>Found {0} empty directories (Checked: {1} / Runtime: {2:D2}:{3:D2} min)</value>\r\n  </data>\r\n  <data name=\"icon_contains_trash\" xml:space=\"preserve\">\r\n    <value>Contains \"trash\"</value>\r\n  </data>\r\n  <data name=\"icon_default\" xml:space=\"preserve\">\r\n    <value>Empty</value>\r\n  </data>\r\n  <data name=\"icon_deleted_folder\" xml:space=\"preserve\">\r\n    <value>Deleted</value>\r\n  </data>\r\n  <data name=\"icon_hidden_folder\" xml:space=\"preserve\">\r\n    <value>Hidden</value>\r\n  </data>\r\n  <data name=\"icon_locked_folder\" xml:space=\"preserve\">\r\n    <value>Locked</value>\r\n  </data>\r\n  <data name=\"icon_protected_folder\" xml:space=\"preserve\">\r\n    <value>Protected</value>\r\n  </data>\r\n  <data name=\"icon_root\" xml:space=\"preserve\">\r\n    <value>Root</value>\r\n  </data>\r\n  <data name=\"icon_warning\" xml:space=\"preserve\">\r\n    <value>Failed</value>\r\n  </data>\r\n  <data name=\"please_select\" xml:space=\"preserve\">\r\n    <value>Please select the directory that you want to be cleaned</value>\r\n  </data>\r\n  <data name=\"process_cancelled\" xml:space=\"preserve\">\r\n    <value>Process was cancelled</value>\r\n  </data>\r\n  <data name=\"red_deleted\" xml:space=\"preserve\">\r\n    <value>RED deleted {0} empty directories for you since you installed it :)</value>\r\n  </data>\r\n  <data name=\"removing_empty_folders\" xml:space=\"preserve\">\r\n    <value>Deleting empty directories ({0} of {1})</value>\r\n  </data>\r\n  <data name=\"started_deletion_process\" xml:space=\"preserve\">\r\n    <value>Started deletion process...</value>\r\n  </data>\r\n  <data name=\"scanning_folders\" xml:space=\"preserve\">\r\n    <value>Scanning directories...</value>\r\n  </data>\r\n  <data name=\"searching_empty_folders\" xml:space=\"preserve\">\r\n    <value>Searching empty directories...</value>\r\n  </data>\r\n  <data name=\"warning\" xml:space=\"preserve\">\r\n    <value>Warning!</value>\r\n  </data>\r\n  <data name=\"warning_really_delete\" xml:space=\"preserve\">\r\n    <value>Warning, do you want to delete empty system directories? This may harm your operating system.</value>\r\n  </data>\r\n  <data name=\"process_aborted\" xml:space=\"preserve\">\r\n    <value>Process was aborted</value>\r\n  </data>\r\n  <data name=\"deletion_aborted\" xml:space=\"preserve\">\r\n    <value>Delete process was aborted.</value>\r\n  </data>\r\n  <data name=\"delete_process_finished\" xml:space=\"preserve\">\r\n    <value>Deleted {0} empty directories (Failed: {1}, Skipped: {2}, Runtime: {3:D2}:{4:D2} min)</value>\r\n  </data>\r\n  <data name=\"young_folder_skipped\" xml:space=\"preserve\">\r\n    <value>\\\"{0}\\\" folder skipped because creation time [{2}] is &lt; {1} hours old</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "RED2/Properties/Resources_de.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"btn_scan_again\" xml:space=\"preserve\">\r\n    <value>Nochmal...</value>\r\n  </data>\r\n  <data name=\"config_file\" xml:space=\"preserve\">\r\n    <value>red.config</value>\r\n  </data>\r\n  <data name=\"dont_scan_hidden_folders\" xml:space=\"preserve\">\r\n    <value>False</value>\r\n  </data>\r\n  <data name=\"error\" xml:space=\"preserve\">\r\n    <value>Fehler:</value>\r\n  </data>\r\n  <data name=\"error_dir_does_not_exist\" xml:space=\"preserve\">\r\n    <value>The directory you picked is not a folder or does not exist!</value>\r\n  </data>\r\n  <data name=\"error_ignore_settings\" xml:space=\"preserve\">\r\n    <value>Ignore file settings are in a bad format!</value>\r\n  </data>\r\n  <data name=\"error_only_one_folder\" xml:space=\"preserve\">\r\n    <value>Only one folder can be accepted.</value>\r\n  </data>\r\n  <data name=\"folder\" xml:space=\"preserve\">\r\n    <value>C:\\</value>\r\n  </data>\r\n  <data name=\"found_x_empty_folders\" xml:space=\"preserve\">\r\n    <value>Found {0} empty folders (checked {1} folders)</value>\r\n  </data>\r\n  <data name=\"icon_contains_trash\" xml:space=\"preserve\">\r\n    <value>Enthält \"Müll\"</value>\r\n  </data>\r\n  <data name=\"icon_default\" xml:space=\"preserve\">\r\n    <value>Std. Ordner</value>\r\n  </data>\r\n  <data name=\"icon_deleted_folder\" xml:space=\"preserve\">\r\n    <value>Gelöscht</value>\r\n  </data>\r\n  <data name=\"icon_hidden_folder\" xml:space=\"preserve\">\r\n    <value>Versteckter Ordner</value>\r\n  </data>\r\n  <data name=\"icon_locked_folder\" xml:space=\"preserve\">\r\n    <value>Geschützter Ordner</value>\r\n  </data>\r\n  <data name=\"icon_root\" xml:space=\"preserve\">\r\n    <value>Start Ordner</value>\r\n  </data>\r\n  <data name=\"icon_warning\" xml:space=\"preserve\">\r\n    <value>Could not delete</value>\r\n  </data>\r\n  <data name=\"ignore_0kb_files\" xml:space=\"preserve\">\r\n    <value>True</value>\r\n  </data>\r\n  <data name=\"ignore_files\" xml:space=\"preserve\">\r\n    <value>/*.tmp$/\\r\\ndesktop.ini\\r\\nThumbs.db</value>\r\n  </data>\r\n  <data name=\"ignore_folders\" xml:space=\"preserve\">\r\n    <value>System Volume Information\\r\\nRECYCLER\\r\\nPapierkorb\\r\\nRecycled\\r\\nNtUninstall</value>\r\n  </data>\r\n  <data name=\"keep_system_folders\" xml:space=\"preserve\">\r\n    <value>True</value>\r\n  </data>\r\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\r\n  <data name=\"logo\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n    <value>\r\n        Qk12agAAAAAAADYAAAAoAAAAWgAAAGQAAAABABgAAAAAAAAAAAASCwAAEgsAAAAAAAAAAAAA////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////nDj/////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        //////////////////////////////////////////////////////////////////////////+cOP//\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        /////////////////////////////////////5w4////////////////////i4uLwMDA////////////\r\n        4ODggICAgICA1dXV////////oKCg4ODg////////4ODggICAgICA4ODg////4ODgoKCg////////4ODg\r\n        gICAgICA1dXV////////wMDAwMDA////////wMDAwMDA////////////4ODggICAgICAgICAgICAoKCg\r\n        ////1dXVtbW1////////6urqi4uLgICAtbW1////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        nDj////////////////V1dUgICArKyv////////KysoWFhZ1dXWAgIArKyvAwMD///9AQEDAwMD/////\r\n        //9VVVV1dXV1dXUrKyvg4ODAwMBAQED////KysoWFhZ1dXWAgIAWFha1tbX///+AgICAgID///////+A\r\n        gICAgID////////////V1dUWFhZVVVWAgICAgICgoKD///+Li4tLS0v////g4OAWFhZgYGCAgIA2NjZV\r\n        VVX/////////////////////////////////////////////////////////////////////////////\r\n        //////////////////////////////////////////+cOP///////////////2BgYICAgCsrK9XV1f//\r\n        /2BgYKCgoP///////////////////0BAQMDAwP///////////////+rq6iAgIMDAwMDAwEBAQP///2Bg\r\n        YKCgoP///////8rKyiAgIP///4CAgICAgP///////4CAgICAgP///////////////9XV1SsrK6qqqv//\r\n        /////////////////////3V1dWBgYP///////////yAgIMrKyv//////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        /////5w4////////////////FhYW4ODgi4uLdXV1////QEBAKysrQEBAQEBAQEBAoKCg////QEBAwMDA\r\n        ////////6urqa2trKysrgICA////wMDAQEBA////QEBAwMDA////////////AAAA////gICAgICA////\r\n        ////gICAgICA////////////////////6urqKysrqqqq////////////////////QEBAwMDA////////\r\n        ////gICAgICA////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////nDj///////////+goKBLS0v////g4OAg\r\n        ICD///9gYGCLi4vAwMDAwMBVVVWLi4v///9AQECgoKD///////+Li4tLS0vq6ur////////AwMBAQED/\r\n        //9gYGCAgID////////g4OAgICD///+AgIBLS0v///////91dXWAgID////////////////////////V\r\n        1dUAAADg4OD///////////////9AQEC1tbX///////////91dXWAgID/////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        //////////+cOP///////////0tLS7W1tf///////ysrK8rKytXV1SsrK3V1dXV1dSsrK+Dg4P///0BA\r\n        QCAgIHV1daqqqqCgoCsrK4CAgCsrK////8DAwEBAQP///9XV1RYWFnV1dYCAgCAgIICAgP///4CAgAsL\r\n        CzY2NnV1dRYWFsrKyv///////////////+Dg4P///+rq6gAAAMDAwP///////////////6CgoDY2Nv//\r\n        /////+rq6hYWFtXV1f//////////////////////////////////////////////////////////////\r\n        /////////////////////////////////////////////////////5w4////////////gICA////////\r\n        ////wMDAwMDA////4ODggICAgICA4ODg////////oKCgysrKgICA1dXV////ysrKgICAysrK////4ODg\r\n        oKCg////////4ODgi4uLgICAysrK////////wMDAwMDAtbW1gICAysrK////////////////////Kysr\r\n        QEBAICAgKysr6urq////////////////////VVVVICAgQEBAFhYWa2tr////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////nDj/////////////////////////////////////////////////////////////\r\n        ///////////////////////////////////////V1dW1tbX/////////////////////////////////\r\n        ///////////////////////////////////////////V1dXAwMD/////////////////////////////\r\n        ///g4ODAwMDg4OD/////////////////////////////////////////////////////////////////\r\n        //////////////////////////////////////////////////////////+cOP//////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        /7W1tYCAgP//////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        /////////////////////5w4////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////nDj/////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        //////////////////////////+cOP///////+Dg4EtLS0BAQEtLS+Dg4P///////////////+Dg4EtL\r\n        S0BAQEBAQLW1tf///////2tra0BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQODg4P///////6qqqkBA\r\n        QEBAQEBAQEBAQEBAQEBAQGBgYICAgNXV1f//////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        /////////////////////////////////////////////////////////////////////5w4////////\r\n        wMDAAAAAAAAAAAAAwMDA////////////////gICAAAAAAAAAAAAAtbW1////////AAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAwMDA////////QEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANjY2\r\n        1dXV////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////nDj////////AwMAAAAAAAAAAAADAwMD///////////////8W\r\n        FhYAAAAAAAAgICD///////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADV1dX///////9A\r\n        QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqqqr/////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        //////////////////////////////////////////////////////////////////////////+cOP//\r\n        /////8DAwAAAAAAAAAAAAMDAwP///////////6CgoAAAAAAAAAAAAIqKiv7+/v7+/v39/QAAAAAAAAAA\r\n        AH9/f/39/f39/f39/f39/f39/f7+/v7+/v7+/v7+/kBAQAAAAAAAAEBAQP///////////8DAwGBgYAAA\r\n        AAAAAAAAAAAAAODg4P//////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        /////////////////////////////////////5w4////////wMDAAAAAAAAAAAAAv7+//v7+/v7+/f39\r\n        NjY2AAAAAAAAFhYW5ubm+/v7+vr6+vr6AAAAAAAAAAAAfX19+fn5+fn5+vr6+vr6+vr6+vr6+/v7+/v7\r\n        +/v7Pz8/AAAAAAAAQEBA/v7+/v7+////////////qqqqAAAAAAAAAAAAYGBg////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        nDj///////+/v78AAAAAAAAAAAC+vr77+/v6+vrGxsYAAAAAAAAAAAB8fHz29vb19fX19fX09PQAAAAA\r\n        AAAAAAB6enr09PT09PT09PT09PT09PT19fX29vb29vb39/c+Pj4AAAAAAAA/Pz/7+/v8/Pz8/Pz9/f3+\r\n        /v7+/v5gYGAAAAAAAAAAAADq6ur/////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        //////////////////////////////////////////+cOP7+/v39/b6+vgAAAAAAAAAAALu7u/b29uHh\r\n        4SkpKQAAAAAAABUVFd7e3vHx8fHx8fHx8fDw8AAAAAAAAAAAAHh4ePDw8PDw8PDw8PDw8PDw8PHx8fHx\r\n        8fHx8fLy8j09PQAAAAAAAD09Pfb29vf39/j4+Pr6+vv7+/z8/LS0tAAAAAAAAAAAAMDAwP//////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        /////5w4+vr6+fn5u7u7AAAAAAAAAAAAKSkpPT09FRUVAAAAAAAAFRUVyMjI7+/v7+/w8PDw8fDx8fHy\r\n        AAAAAAAAAAAAXFxcuLi4uLi4uLi4t7e4t7e38vLy8fHy8fDx8PDwPDw8AAAAAAAAPDw88fHx8vLy8/Pz\r\n        9PT09vb29/f35OTkAAAAAAAAAAAAf39//v7+////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////nDj19fX09PS2trYAAAAAAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAzMzPDwsP39/f4+Pn5+fn6+vr7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9\r\n        vb77+/v6+vv6+vo+Pj4AAAAAAAA9PT3y8vLw8PHw8PDw8PDx8fHy8vL09PQAAAAAAAAAAAB+fn78/Pz9\r\n        /f3+/v7/////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        //////////+cOPHx8fDw8LS0tAAAAAAAAAAAACkpKT4+Pj4+PhYWFgAAAAAAAAAAAKmpqf39/f7+/v7+\r\n        /v7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+/v/7+/v7+/v7+/kBAQAAAAAAAAD8/QPv7+/r6\r\n        +vj4+PX19vPz9PHx8fDw8AAAAAAAAAAAAHt7e/j4+Pr6+vz8/P39/f7+/v//////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        /////////////////////////////////////////////////////5w47u7v7+/wtra3AAAAAAAAAAAA\r\n        vr69/f39/f396OjoVFRUAAAAAAAAAAAA3t7e/v79/f3+/v7+AAAAAAAAAAAAQEBAf39/f39/f39/f39/\r\n        f39/6enp/v7+/v7+/v7+QEBAAAAAAAAAQEBA/v7////+/v7+/f39/Pz8+vr62traAAAAAAAAAAAAg4OD\r\n        8/Pz9fX19/f3+vr6+/v7/f39/v7+////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////nDj29fb5+fm9vb0AAAAAAAAAAAC+vr79/f39/f39/f3o6OgAAAAAAAAAAACfn5/9\r\n        /f39/f3+/v4AAAAAAAAAAAB/f3/+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v5AQEAAAAAAAABAQED+\r\n        /v7+/v7+/v7+/v7//////v+fn58AAAAAAAAAAAC4t7jx8fHx8fHz8/P19fX39/f6+vr8/Pz9/f3+/v7/\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        //////////////////////////////////////////////////////////+cOP39/f39/b6+vgAAAAAA\r\n        AAAAAL6+vv39/f39/f39/f39/QAAAAAAAAAAAH9/f/39/f79/f79/QAAAAAAAAAAAH9/f/7+/v7+/v7+\r\n        /v7+/v7+/v7+/v7+/v7+/v7+/kBAQAAAAAAAAEBAQP7+/v7+/v7+/v7+/v7+/unp6SAgIAAAAAAAABYW\r\n        Fv39/fv7+/b29/Ly8vHx8fLy8vX19ff39/r6+vz8/P7+/v//////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        /////////////////////5w4/f39/f39vr6+AAAAAAAAAAAAvr6+/f39/f39/f39lJSUAAAAAAAAAAAA\r\n        ioqK/f39/f39/f39AAAAAAAAAAAAf39//v79/f3+/v7+/v7+/v7+/v7+/v7+/v7+/v7+QEBAAAAAAAAA\r\n        QEBA/v7+/v7+/v7+/v7+39/fKysrAAAAAAAAAAAAf39//////////v7+/Pv8+Pf48/Lz8fHx8/Pz9vb2\r\n        +Pj4+/v7/f39/v7+////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////////////////////////////////////nDj9/f39/f2+vr4A\r\n        AAAAAAAAAABfX19/f39/f39KSkoAAAAAAAAAAAAAAADe3t79/f39/f39/f0AAAAAAAAAAABAQEB/f39/\r\n        f39/f39/f39/f39/f3/p6en+/v39/f1AQEAAAAAAAAAgICB/f39/f39/f39AQEAAAAAAAAAAAAAAAAAr\r\n        Kyvp6en+/v7+/v7+/v7////+/v78/Pz4+Pnz8/Px8fH09PT29vb5+fn8/Pz+/v7/////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        //////////////////////////+cOP39/f39/b6+vgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n        AGpqav39/f39/f39/f39/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL6+vv39/f39/UBAQAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADY2Nunp6f7+/v7+/v7+/v7+/v7+/v7+/v////7+/vz8\r\n        /Pj4+PLy8vLy8vX19fj4+Pv7+/39/f7+/v//////////////////////////////////////////////\r\n        /////////////////////////////////////////////////////////////////////5w4/f39/f39\r\n        09PTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKioqs7Oz/Pz8/fz8/Pz8/Pz8/Pz8FhYWAAAAAAAAAAAA\r\n        AAAAAAAAAAAAAAAAAAAAAAAAvr6+/f39/f39SkpKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0tLn5+f\r\n        /v7+/v7+/v7+/v79/v7+/v7+/v7+/v7+/v7+/v7+/////v7++/v79vb28vLy9PT09/f3+vr6/f39/v7+\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        ////////////////////////////////nDj9/f39/f39/f3T09O+vr6+vr6+vr6+vr6+vr6+vr7n5+f8\r\n        /Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pzd3d2+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr79/f39/f39/f3o\r\n        6Oi+vr6+vr6+vr6+vr6+vr6+vr7T09P9/f39/f39/v39/f39/f39/f39/f3+/v7+/v7+/v7+/v39/v7+\r\n        /v7+/v7+/v7////+/v76+vr09PTy8vL29vb5+fn8/Pz+/v7/////////////////////////////////\r\n        //////////////////////////////////////////////////////////////////////////+cOPz8\r\n        /Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pv7+/z8/Pz8/Pz8/Pz8/Pz8/Pz8\r\n        /Pz8/Pz8/Pz8/Pz8/Pz8/P39/f38/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39\r\n        /f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f3+/f39/f7+/v7+/v/+//z8/Pb29vLy8vX1\r\n        9fn5+fz8/P7+/v//////////////////////////////////////////////////////////////////\r\n        /////////////////////////////////////5w4/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8\r\n        +/v7+/v7+/v7+/v7+/v7+/v7+/v7+/z7+/v7/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P38/f39\r\n        /Pz8/Pz8/f39/f39/f39/f39/Pz8/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39\r\n        /f39/f39/f39/f39/f39/f39/v7+/////f39+fn58/Pz9fX1+Pj4/Pz8/v7+////////////////////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        nDj8/Pz8/Pv8/Pz8/Pz8/Pz8/Pz8/Pz7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7\r\n        +/v7+/v7+/v7/Pv8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/fz8/fz8/fz9\r\n        /Pz9/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f3+/v7+/v7+\r\n        /v78/Pz09PT09PT4+Pj7+/v+/v7/////////////////////////////////////////////////////\r\n        //////////////////////////////////////////+cOPv7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7\r\n        +/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/z8/Pz8/Pz8/Pz8\r\n        /Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz9/Pz8/P39/f39/f39/f39/f39/f39/f39\r\n        /f39/f39/f39/f39/f39/f39/f39/f39/f39/f7+/f7+/v////39/fb29vT09Pj4+Pv7+/7+/v//////\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        /////5w46+zr7Ozs7Ozs7Ozs7Ozs6+zs7Ozs7Ozs7Ozs7Ozs7e3t7ezs7e3t7Ozs7O3t7Ozs7Ozs7Ozs\r\n        7O3t7Ozs7e3t7O3t7e3t7u7u7u7u7+/v8PDw8PHx8PHx8fHx8vLy8vLy8fLx8vLy8fLy8vLy8vLy8fLy\r\n        8vLy8vPy8vLy8/Pz8/Pz8/Pz9PT09PX09fX09vb29vb29fX19vb19vb29fb29vX29vb19vb29vb29/f3\r\n        +Pj4+fn4+/v6/v79/Pv829vbzMzM39/f7+/v+vr6/f39/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+\r\n        /v7+/v7+/v7+/v7+/v7+/v7+////////////////////////nDjp6enp6unp6enp6enp6enp6enq6urp\r\n        6urq6urp6urr6+vq6+vr6+vr6+vr6+vq6+vr7Ovr7Ovs7Ozs7Ozs7Ozs7O3t7e3s7e3v7+3t7u/v7+/v\r\n        8PDv8PDw8fHx8fHx8fHx8fHw8fHy8vLy8fHw8fHx8fHy8vLy8fLy8vLy8vLy8vLy8/Lz8/P09PT09PT1\r\n        9fX19fX19fX09PT19fX09PT29vT29vX19fX29vb29vb3+Pb3+Pb4+fj6+vr+/v79/f3e3t7Nzc3g4ODw\r\n        8PD6+vr9/f3+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7/////////////\r\n        //////////+cOObn5ubm5ubm5ubn5ufn5+fn5+fn5+Xn5+jo6Ofn6Ojo6Onp6enp6enp6enq6err6+vq\r\n        6urr6+vr6+vr6+zs6+vs7Ovr6+zs7O3u7O3u7u7v7+/v7+/v7/Dw7/Dw8PDw8PHx8fHx8fDw8PHx8fHx\r\n        8fDx8fHx8PHx8fHx8fHy8fLy8fLy8vLy8vLy8vPz8/T09fT09PX19fX19fX19fX09PX09PX19PT18/T0\r\n        9PX29fb29fb29ff39vj4+Pr6+f39/f7+/t/f38/Pz+Li4vLy8vv7+/7+/v7+/v7+/v7+/v7+/v7+/v7+\r\n        /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v///////////////////////5w44+Tj4+Ti4+Pj4+Pj5OTk4+Tk\r\n        4+Tk4+Xl5OTk5eXm5Obm5+fm5+fn6Ojo6Ojo6erq6erq6urq6enp6unp6urq6enp6uvr6+vr7O3s7Ozs\r\n        7O3t7e3t7u7u7+/v7+/v8PDw8PDv8PDw7/Dw8fHx8PHw8PHw8fHw8PHx8PDw8fHx8fHx8vLy8vLy8vLy\r\n        8/Pz8/Pz9PTz9PTz9fX09PT09PX09PT09PT08/Pz9PT09PT09fX19vX19vf29vb29/j3+vr5/f39/v7+\r\n        39/f0NDQ5OTk8/Pz/Pz8/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+////////\r\n        ////////////////nDjd3t7d3t7e39/e39/f4eDf4ODg4eDh4eDh4eHi4+Lj4+Pi5OTl5OTm5ubm5ubn\r\n        6Ofo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojp6enq6urq6urq6+rr6+vr7Ozs7e3u7u7u7u7v7/Dv8O/v8PDw7+/v\r\n        7+/u8PDw8PDw8PDw8PHw8PDw8PDx8fHx8fHy8vLy8vLy8vLz8/P09PTz8/P09PP09PT09fT09PTz8/Pz\r\n        8/Pz8/P09PT09PT19fX09PT29vb29vb39/f6+vr8/Pz+/v7d3d3T09Pm5ub29vb9/f3+/v7+/v7+/v7+\r\n        /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7///////////////////////+cONjY2NnZ2dra2trb2tvb\r\n        29zc3Nzd3d3e3t3e3t7f397f39/g4OHh4eHj4+Tk5OXl5ebm5ufn5+fo6Ojo6Obo6Ofo6Ojo6Ofp6enq\r\n        6urq6uvr6+vs7Ozs7Ozt7e7u7u7v7+7v8PDw8O/v7+/v7/Dw8PDw8PDw8PDw8PHx8PDw8PDw8PHx8fHx\r\n        8fLy8fLy8vLy8vPz8/Pz8/P08/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P08/T08/T09PX19PX19fX19ff3\r\n        9/n5+f39/f39/dra2tfX1+vr6/j4+P39/f7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v//\r\n        /////////////////////5w40tLR09PT1NXU1NbW1dfV1tfX2NjZ2dnZ2tvb29vb29zc3N3d3d/e39/f\r\n        3+Hh4ePj4uTk4+Xl5ebm5+fn5+fn5ufn5Obm5+fn6enp6Onp6urq6uvr6uvr7Ovr7O3t7e7u7u/u7+/v\r\n        7+/v7u/v7/Dw8O/v7/Dw8PDw7/Dv8PDw8PDw8fHx8PDw8vHx8vLy8vLy8/Pz8vPy8vLy8/Pz8/Pz8vLy\r\n        8vLy8vLy8vLy8/Pz8/Pz8vLy8/Pz9PTz9PT09PT09fX19/f3+vr5/f38/Pz819fX3Nzc7u7u+vr6/f39\r\n        /v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+////////////////////////nDjHyMbKysrMzMvO\r\n        z87O0NDQ0dHS09LU1dPV1dXW1tbX2NjY2dna29vZ3Nzc39/e4N/f4eHg4uLj5OTk5eXk5eXl5ubm5+fl\r\n        5+fm5+fo6enp6urp6urq6urp6+rr7Ozs7O3u7u7u7+/u7+/v7+/w8PDv7+/w8PDw8PDv8PDv8PDv7+/w\r\n        8PDw8PDx8fHx8fHy8vLy8vLy8vLy8/Pz8/Ly8vLy8vLy8vLx8fHx8vLz8/Py8vLy8vLy8vLy8vPz8/P0\r\n        9PP09fT19vX3+Pf5+vn+/v34+PjU1NTh4eHy8vL8/Pz+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+\r\n        /v7///////////////////////+cOL6+vb7Av8LCwsXFxcbHx8fJycnMy8vPzs7Q0NHS0tPU1NTV1dXX\r\n        19XY2Nrc3Nvd3Nze3t7f397h4OHj4+Pk5OPk5OTl5eXm5ubn5+bn5+np6ejp6efp6urq6unr7Ort7O3u\r\n        7u7u7u7v7+/v7+/w8O/w8PDw8PDx8fDw8PDw8O/v7/Hw8fHx8fHx8fLy8vHy8fLy8vPz8/Pz8/Ly8vLy\r\n        8vLy8vLy8PHy8vLy8vLy8vLy8vLy8vLy8fLy8vPz8/Pz8/P08/Pz9Pb19vf49/n5+f7+/vHx8dPT0+fn\r\n        5/f39/39/f7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v///////////////////////5w4vb2+uLi4\r\n        uLm3uLq6u7y8vcC/wMPBxMbGx8nJy8zMzc7Oz9DQ0dLS09TU1djY19nZ2Nvb2tzc297e3eDg3+Hh4OPi\r\n        4eTk4uXl5OXl5ebm5+jo6Onp6erq6Onp6evq6+vs6+3s7e7u7u/v7e/v8PDw7vDw7u/v7/Dw8PDw8PDw\r\n        8PDw8PDw8fHx8fHx8vLy8vLy8vLy8vLy8/Py8vPy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8fHy8vLx8vLy\r\n        8fHx8vLy8/Pz8/Pz9PT09fb1+Pj2+vr6/v7+6Ojo2dnZ7e3t+vr6/f39/v7+/v7+/v7+/v7+/v7+/v7+\r\n        /v7+/v7+////////////////////////nDj29fjZ2d65ubywsrCwsrGytbS1t7a5u7u9v7+/wsLCxcTH\r\n        x8bHycjKysnKzMvOz83O0M7S09HU1tTY2dfZ29rc3dze4N/h4+Ph5OTj5uXk5ubn6enq7Ovq7ezq7Ozq\r\n        6+vq7Ozs7u7u7u7v8PDv7+/w8PDv7+/w8PDw8PDv8PDw8PDw8PDx8fHw8PDx8fHx8vHy8vLy8vLy8vLz\r\n        8/Py8vLy8vLy8vLy8vLy8vLy8vLx8fHy8vLy8vLx8fHx8fHx8fDx8fHz8/Lz8/T19PT09PT39/f7+/v+\r\n        /v7b29vi4uLz8/P8/Pz+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7///////////////////////+cOOzq\r\n        5vr6+Pr6/N/g5by+wqmqqqapqaaqp6erp6WpqKKpqpqnp5WqrZarr52ztqO4uqW8w6O8waG5v6e9xKK4\r\n        vaG4uqe4u7G9vcTMyNPY1N7g3+Lk5Obo6Ovu7e3v7+7v7+zs7Ors7O3t7ezu7vDw8PDw8PDx8e7w8O/v\r\n        7+/w8PDw8PDw8PDw8PDw8PHx8fHy8vHy8vLy8vLy8vLy8vHy8vPz8/Ly8vLy8vLy8vHx8fHx8fHx8fLy\r\n        8vHy8fDw8PHx8fHx8fLy8vPz8/Pz8/T09PX29Pj49/3+/fn5+dbW1unp6fj4+P39/f7+/v7+/v7+/v7+\r\n        /v7+/v7+/v7+/v///////////////////////5w4p6SitbOuxcS+3tzX9vbz6eruzNDWnKWpjaKlobO2\r\n        qbe7t8LFxc7Py9DQzdLR0tfW1tva2dzc29/e3+Pi3+Tj4Ofn2uTm09/ix9XYxNLWusrNs8PFxc7L3+He\r\n        6Orp7e/v7/Ly7vHw7O/v7e7u7e/v7u/w8PDw7/Dw7/Dw8PDw7/Dw7/Dv7+/v7+/v7/Dw8PDw8fHx8fHx\r\n        8fHx8fLy8fLy8vLy8fHx8vLy8vLy8vLy8fHx8fHx8fHx8fHx8PHw8PDw8PDw8fHx8vLy8vLy8vLy8/Tz\r\n        9fX1+Pj4/v7+6urq3Nzc8PDw+/v7/v7+/v7+/v7+/v7+/v7+/v7+/v7+////////////////////////\r\n        nDiLh4SKh4SNi4iPjImdmpa7u7ff3djv8fHf4eXCxsuzubq3vby5v7+/xcTCxsbKz87N0tHR1tXU2dnZ\r\n        3d3Z3dzd4uHc4uHg5eTh5eTk6Ofk6Ofg6OnN296+z9OyxcfQ1tPm6ebx8vLz9vXy9PTv8fHt7+/u7+/v\r\n        7+/v7+/t7+/v7+/v7+/v7+/u7u3u7+3v7+/w8O/v8O/w8PDx8fHx8fHy8vLx8vLx8fHx8fHy8vLy8vLx\r\n        8fHx8fHw8fDw8PDw8PDw8PDw8PDx8fDx8fHy8vLy8/Lz8/P09PT6+/r9/f3b29vm5ub39/f9/f3+/v7+\r\n        /v7+/v7+/v7+/v7+/v7///////////////////////+cOHt5dHp6eIKBfXt8eX19eYWFgoeIhZ6cmLy9\r\n        tt3f3ODl6sbM0rK3u6+3tba8urzBwcHHxsXKysnPz8/U0tLX1tXa2dfd3Nrg393i4d/l5ODl5OHm5ePn\r\n        5uTn5+Dm58XV2rnN0cfT0ubp5/L19PP29vDz8+7w8O/u7u3t7e3t7e7v7+7u7u3t7ezs7Ozs7Ozs7O3t\r\n        7e7u7e7u7vDv8PDw8PHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fDw8PDw8PDw8PDw8PDw8PDw8PHx8fDw\r\n        8PLy8vLy8vT09Pb29v39/fX19dzc3O/v7/v7+/7+/v7+/v7+/v7+/v7+/v7+/v//////////////////\r\n        /////5w4bm5qb29rbW5qb29ucHFudXZ0eXl3eXp4fH17h4eDp6ik0dPR5Obo0tXbuLzCq7Czs7m4tr28\r\n        u8PCwcfHxszKytDPz9TU0tfX1tva2d7d2t/e3OHg4OTj4Obl4+fn4+fm5urq2eXov9PXx9PV5ejl7/Hw\r\n        8PPz7/Hx7O3t6uvr6+vr6+vr6urq6urp6enp6enp6eno6erp6urq6urq7Ozr7e3t7u7u8PDw8PDx8fHx\r\n        8fHx8PDw8fHx8PDw8PDw7+/v7+/v8O/w7+/v8O/w8PDw8PHw8fHx8vLx9PT0+fr4/v7+4+Pj5eXl9vb2\r\n        /f39/v7+/v7+/v7+/v7+/v7+////////////////////////nDhmZWJkZWRkZmJjaGNmZ2VpamlsbWxs\r\n        bm1xc3J0dXR2eHh/gH6bmpe8vrra29zh5OnCyM+orLGMmZeNmpKUoJqmr6mwuLPAx8PLz87R1dTS19bV\r\n        2trY3t3d4eHh5eXj6Ofj6Ofp7Ozs7+7i6+/B1drM19jn6eft7e3u7+/s7e3n6Ojl5eXl5eXi4+Pi4uLh\r\n        4eHf397e397f39/g4eDi4+Ll5eTn5+fq6unt7ezv7+7w8PDw8PDw8PDw8PDv7+/w8O/v7+/v7+/u7+/u\r\n        7+7v7+/w8O/w8fHx8vDy8/L19vT8/Pz6+vrd3d3v7+/7+/v+/v7+/v7+/v7+/v7+/v7/////////////\r\n        //////////+cOG1ycGJnZ11jYlthYWBjYmFmZGNnZmVpaWZrampsa2twb3N2dXh8eXp/fYmNi6qsqsrM\r\n        yOrr7NLW3ZGirWWGjGB+gkpyck50dVB3cGWEfJSnoLS+uM7T0NTa2tnd3d7j4uDl5OXq6ejs6+3w8O/x\r\n        8eTu8MTY2tLc3OLl5OLj4+Pk4+Hh4dzc3NfY1tPS0c3OzMvMysnJyMnKx8vMyc/PzNTV0tra197f3eTk\r\n        4+jo5+zs7O/v7/Dw8O/w7+/v7+/v7+/v7+7u7u7u7u7u7u/v7+/v7/Dw8PDx8PHx8fTz8/f49v7//ubm\r\n        5ubm5vf39/39/f7+/v7+/v7+/v7+/v///////////////////////5w4rbS0naWohpCVc3l/X2ZmWV9e\r\n        V19eWF5bWVxZV1tYVVxaV1pZWF5cW2NfYGZjZ2plcHJtgYJ+l5iSrq6nt7u5q7S3i5qcdYyOcIiIdoyO\r\n        Z4mKTXd4V356laedyc7L1NjX2t7e3+Pi4+Xl5+vq7e/v6/Dv8fX04OzvwNLU3N/c3d3d19jVysvJwMG/\r\n        tre2ra6spaakoaGgnp+dn5+coaKgrKypuLi0xcW/0dLO29zZ4uPi6Onn7e3t7+/v7+/v7+/v7+/u7u/v\r\n        7u7u7u7u7u/v7+/u7+/v8O/w8fDw8fHx9PT0+/z7+vr639/f8fHx/Pz8/v7+/v7+/v7+/v7+////////\r\n        ////////////////nDipr6+nrKuYnppsgX1UcHFbdHljdXdganFWXF9MUVFMUVJLUVNTWWBiaHFveYJ5\r\n        g4aDi5GMlpycpayjp6+gp6uepamlqq+hpaido6eUoKKImpt2jY96kJNkhYlNenl1lIy9xMDU2NjY3Nzf\r\n        4+Pk5+bn6urp7Ozq7O3m7Oy6ztO1v762t7amp6aUl5OFiYeAh4eLj5KOkpaYmp6coaScnZ6anZ6en6Gc\r\n        nZ+ioqGytK/LysXZ2tbj4+Hq6urt7e3u7+7v7+7u7u7u7u7t7e3u7u7t7e3u7u7v7+/w8O/w8PDy8vL3\r\n        +Pb+//7o6Ojq6ur5+fn+/v7+/v7+/v7+/v7///////////////////////+cOIiQiFBrZU5ucGN5emJ6\r\n        fXqNjoeWl5CYl4uRj4GGh4CGipmgp7nCx7zCw56hn5qdnaOprLK3t7m+vbzBwL7EwsDFxMLIx8LJyMHH\r\n        ybzDxLjAwrK4u6CqroGUmHCMjWmLiU59gH2XkrzCvtHU09TY19jc29rd3d3g39jb2tLU1LG+wXaLjHd+\r\n        fYGLj5+lp6impYeEf5SWnYWKjHh3eHFxcW9wcH2BgIKHiYWJiJ6dnKqpqrCwrMrJxN3d2+fn5uzt7O3t\r\n        7e7u7u3t7e3t7e7t7u7u7e3t7e7u7e/v7/Dw8PDw8PT09Pz9/Pj4+OLi4vX19f39/f7+/v7+/v7+/v//\r\n        /////////////////////5w4WXN0XXN0aoCBeIqMjpeZkJeXhouKf4WEiI2LlpqcrrW7v8XHoKKgjZCR\r\n        naGjqK6vrLKyqrCxrrW1tLm6tLm4s7q6t728ur6+ub6+vMPCwsfHx83Lx83NwcfJtr/ChpqeeI6QcIqK\r\n        XoCAdpKLucC8wsbGw8bFwMPCt7u5p6uoi5GPeISGl6Cktbe4ube9ioiHcnR1dH6AdXp8c3p+eIGEgIqQ\r\n        iI+Si5GTgouPcXyAd3t5jY+LqaqkuLi109PN5OTi7Ozs7Ozs7e3t7e3s7e3t7e3s7e7t7u3t7u7t8PDw\r\n        8fDw8vLy+Pn4////5ubm7u7u+/v7/v7+/v7+/v7+////////////////////////nDhzhoaBkZKSmJmU\r\n        mZiVmJiGioqCh4iRmJqnrLC7w8azt7eOkZCDiImdo6Wrrq6tsLCusrKytbW0t7e1urm4vLy4vb25vr26\r\n        vr27vr+4vr61vLy2v7/Ax8bGzMvM0M/M0tO+xsmVo6xviI1ie4BIaGV3hYCUmZiMk5KBiId9hYaMlJmv\r\n        tLe1tLLY2tri3d6NjJBxdHV0eHiWn6eqrbqhq7WnsryosLegpqufoqeUlZuAhIp8f4RyeHiRlJKvsK3E\r\n        xL/i4d7r6+rs7Ovs7Ozs7Ozs7Ozt7e3t7e3s7Ozv7+/v7+/w8fD09PP9/f3x8fHn5+f4+Pj+/v7+/v7+\r\n        /v7///////////////////////+cOJOZmZOZmZebm5SYl4iMi4KGh5mho62ztrzCw66wrYqMiIeNjpqg\r\n        oaKmpqarqqmrq6qvra2ysbCzsrG1tbO3tra5ubi8u7q+vbzAv77CwcDFxMTJycfMzMHJycDJycfNzc7U\r\n        09HV1cvT1cnQ17zG0J6suaOstLO3vcDFzdLV3MXJzbe1t7++vfX09MPDxrC1xIGDh5eboN7j6uLe5czJ\r\n        zcTEx8XIy8DBxLq9wba4vbi7waqutpSWoIeJjI2Oj6ytrMHBv97e3Orq6uvr6+vr6+vr6+vs6+zr6+3t\r\n        7e/v7u7u7vDw8PLz8vv7+v39/eTk5PT09P39/f7+/v7+/v///////////////////////5w4mJ2clJqZ\r\n        jpOThoyLfoKDl5ues7e7ub6/n6Gfenx8eXx+k5eXmJ2bm5+enqKhnqSjoqWlo6moqKurqq6trbGwsLSz\r\n        tbi4trq5uLy7u76+vsHBwcXExMnIx8zLy8/Oyc/PxczMzdLS0dbV0NTU3t/d9fXz/v/++Pj24uHgzNXd\r\n        yczQtbKy6urq087P19/j2Nvifn14pJ+b6ens2NPUzsO+0cjGx8LCxcTEuLq8tri4vcLCvsHEsbS4mp2h\r\n        kJKXj5KSnp2Ww8LB4N/c6eno6+vq6+vr6+vq6+vr6+zr7O3s7u7u7+/v8PDw9vf2////7e3t7+/v/Pz8\r\n        /v7+/v7+////////////////////////nDiSlpaRlJSMkI99gICRlZi1ubvBxsexs7SLjIpxdHSIi4uV\r\n        mZmWm5uYnZyan5+boqKdoqGgpKOhpqaip6ejqKinqqqqrq6xtLS0uLi3vby6vr29wMC/xMPExsbGy8rL\r\n        z87Q0tLQ1NXO09PP1NTP09TBxcTQ0dGnpqa2vsDZ6PLHyc23t7Xh3t+1s7PY4ePFyM+Ef4Cnn5q+tLO0\r\n        qqWypqK4r6y3r620srKvr7GnqqulqKmlqq6ipqmgpaifpqqTl56CgoeXmJDDwr7g4N3p6enq6urq6+rq\r\n        6urr6+rt7e3u7u7v7+/w8PD09PT9/v319fXp6en5+fn+/v7+/v7///////////////////////+cOJGV\r\n        lI6QkIWHh5OZnLCztL7AwrzAwJmamHB0c4KGiJCWlZSXl5WYmJeam5ebmpudnZugn5yhoJ6iop6ko6Cl\r\n        pKOmpqSop6epqaitrKyurq+1s7a5ub2+v8DDw8TFxcbJyMnNzM7Q0NHV1c/T08bMy8XLysTHxc/T19Hf\r\n        6NLc47u7u9PV19TT1cTCwb+/vqqmp5qWlZiVlZ2dnp2go52cnZuen5Sbn5icoJqfo5qippacopqgpJyj\r\n        pJqhpZujpqGprKKorJOQkp+blMHBvOPj4Onp6Orq6err6uvr6uzs7O3t7O7v7u/w7/Ly8fv8+/39/efn\r\n        5/b29v7+/v7+/v///////////////////////5w4j5KRiIqKhYWFo6issLO1ury9lJSSbnBufX+AjZKR\r\n        kZSTkZaVk5eWlZiYlpqZl5ybmp6dmqCfnaGhnqKin6OjoaWlpKenpKmop6urqq2trLCvrrKysbW1t7q5\r\n        vsDAwsbFx8rKyM3My87Nz9PSz9LSwcbGs7m6xcrK2+HjyMfJycnK/v//9/b4yMbGrKuqo6GfrKqqpKeq\r\n        r7S6qq+znaSppauwoqqwp66yp7K3payyoKitmJ+mnaKlmaOmmKGkmKGklpudkZWXlJKSnJqXycrG5ebk\r\n        6enp6enp6urp6+vq7Ozs7u7u7u7u8PHw+Pn4////7e3t8/Pz/f39/v7+////////////////////////\r\n        nDiLj46IiYqbn6Orrq62ubyipKN0dXRrbWyGiomOkZGRk5OTlZWTl5eVmJiXmZmZnJuanp2bn5+doaGe\r\n        oqGeo6OipKSjp6ajqKemqqqprKyrr66usrGxtLS1uLi6vr6/wsLAxMPGycnJzczNz8/P0tLMz8+6v8Cy\r\n        tbbCw8LT1df3+Pj////+/f7i4eWuqai7u7vM0NPk7fLr8fba3uW4vsWlqq6yubuwtrqxtruwub+ttLqs\r\n        srWjq7Kdpaugpaiao6WTmJuTlJiUlJWZmpqqqqfW1tHn6Ofo6efp6enq6urr6+vu7u3u7u7v7+/29vX/\r\n        //7z8/Pv7+/8/Pz+/v7///////////////////////+cOImLip+ip6aqrK2xsrS2t5OWlXN0c2hqaIKG\r\n        hYyQj5CTk5OVlZOWlpaYmJebmZqcnJucnJqdnJuenZ2fnpyfn52goJ+ioqGkpKSnpqapqamtra2xsLC0\r\n        s7K1tbW4uLm+vb3CwcLGxsXKycjLys3Ozs7R0cnNza+zs7i6uubm5vz+/v////////v7/MfCwMnIycrK\r\n        zeTn6P7///T3+9HW3bq+xKeqrq+0t62ztrW6vbO6wK61uqits6WssKatsZ2lqJygpJSXnpKSlJWVlJqb\r\n        mrm4teHh3ufn5+jo6Onp6evr6u3t7e3t7e/v7/Pz8/7+/vj4+Ovr6/v7+/7+/v//////////////////\r\n        /////5w4iYqMq66wp6mqsrS1t7u7rK2se3p4aGpmgYOEjpGQkZSTkZOSjpGQjpGQkZKTk5WWmJqbm56g\r\n        oKOmpKappamqqKuuqqytqayvqaytqKytp6utqKqrqKusqqytrbCwsrW1t7y7vcHBwsXFx8jJycvLys3M\r\n        ys7OvsLCvsHB0tPWx8jJ5ufl/f38//79zsbF29vc7vDz/v7+/////v//8vL12tvfx8XIrK6wq66wrbS2\r\n        rLW5rLO4qa+zqa+1o6muoKOomp2hnaKlnqClmJqclZaXm5uZ0dLM5ubl5+fn6Ono6+vq7ezs7u7t7u7u\r\n        8fLx/P38/v7+6urq+fn5/v7+////////////////////////nDiJiouusrSprK6ys7S4vLuio6J/fn57\r\n        foCJiouNjY6OkZKYm5ykp6ixs7a5vb/BxcfHy8zM0tHR1dXT19bU2NjV2dnW2dnW2drV2NnV2NfT1dXP\r\n        0tPJzc7Fx8m9wcO1uruztbaztba3uru/wcHDx8fIy8rIysrBw8O3ubm/v7+rra64u7rU08/x6+bW0tD5\r\n        +Pj9/f3////////////////5+fne3OLKzdOyu8OorrOssranrrGlq7CkrrKmq6+hp62an6ObnKCfnqCc\r\n        nJ6bmZyWlpeqrKjg4N7m5ubn5+fp6unr6+vt7e3u7e3v7+/5+vn////t7e339/f+/v7/////////////\r\n        //////////+cOIyOjq+ytKyusbKysqOinoiHiIqMjJSWmaSnq7W4u8HGx83P0dPW1tvf3+Di4+Tn6Ofr\r\n        6+vt7+3x8fD08/P19vL09fDz9PD09fD09PDz8+7y8u3v7+nt7Obp6eTm5t3h4djc3NDU1cbJyru/wLm7\r\n        vbu+vsLExL/AwKuvr7Gzs6eqq6qrqsXGx9LV1+Pl5v////////////////////////3+//L4/d3h6srP\r\n        1r7EzK+1u6ivsqSsr6SrsaOpraOnqqGmqaGkppmcoJSXmJaYmpqampqamM7PzOXl5Obm5ujo6Orr6uvs\r\n        6+3s7O/v7/b39f////Hx8fX19f39/f///////////////////////5w4iouKq6+un5+ci4qKkJKVpamr\r\n        uL2/yczO0tbW3N/f4uXm6+/w8fP19Pf39vr6+Pz7+v39+/39+f39+vz8/P3+/P7++/7++/39+/39+/39\r\n        +/7+/f7+/P7+/P3++vz89vn68fT17/Hx6ezs4+Xl2dzdzM7Qv8LDur6/r7O0oaOjoaOioqOjvsC/1tve\r\n        9/r7/////////////////////v///f//+Pv+6fD42uDoytDUwsrPsLi/oKesoKeqoqaqoaOnpaaooaGi\r\n        naKmnKGll5mdl5eZnJycury44uLh5eXl5+fm6eno6+vr6+zs7u7u8/Tz////9vb28/Pz/f39////////\r\n        ////////////////nDiIiIiJiomZnJ+xtbjHyczU2Nne4ePo7O3w9fT1+fn5+/v5/fz6/v78/v73+Pbv\r\n        7ern5d/f29PW0MrPyL/Kw7rIwLnJwbfNxr3X0Mrf29Xm497w7+r5+ff9/v78/v79/v79/v79/v78/f36\r\n        +/z19/fs7u7i5eXW2drHy824vL+kp6mdoKCur67f4ub5/P3////49/f8+/n8+/v8/f39/f74+v319vrr\r\n        8fja4ObCxci2uruztrqyucGiqrCdoqefoKSnp6eioaGam5+bnaGbn6OTlJWcm5ulqajf4N/k5OTm5ubo\r\n        6Ofq6unq6urs7Ozx8fD9/f35+fnx8fH9/f3///////////////////////+cOJqdobe6vcrOz9rd3+bq\r\n        6/D09fb5+vn8/fr9/fj8/PPz793Y0b62rqOYkY+FgYR+eoB8en57eX58e359fHt6eHt5eHp3dnp3dHl1\r\n        b3h0bnhxbXxzaoR6cp+SiL2zqN/Z0/T08fj8+/7+/v7+/v7+/v3+/vr7+/Lz8+fq6tzf4MzQ0ry/wqyt\r\n        r9XY1/T7/v7//+jo6qyoprSvrby2stTOzdzb2+bp7O/19vH5/dzi68bK0a6ytqirrquvsa2vs6KipaWk\r\n        pp+ho5udopWanZqcnqOjopydnaerqd3d3ePj4uXl5efn5unp6err6uzs7O/v7/z8+/v7+/Hx8fz8/P//\r\n        /////////////////////5w4y9DQ3eDh6u3v8/f4+fz8+v39+fz77erkxbqvmYp+fnJob2Zebmlgcm1q\r\n        dHFvd3RveXdzenh5fXt6f358e3p4dnVwcnBtbWpnbWpmcm9pd3ZveXZ0d3Nxc29tb2tlbWdhenFplY2E\r\n        xsC27Orl/f39/f7+/v7+/f7++vv78vPz6ezs3eDizM/Rw8XG4ert8fb4/Pz9qKetiIeHf31/goCAenRw\r\n        g394lZKNtbezzdHS09newcPLrK2zoqKlpKOlqamqpaannqGlm5yfnZ+go6Khp6Wlpqant7m53t3d4ODg\r\n        5OTk5ubm6Ojo6urq6+vq7u7t+vr6/f398PDw/Pz8////////////////////////nDjr7/D1+Pn5/Pz7\r\n        /v739vPNxLyUioB3bWVsY11rY15mYVlkXVllXVdiXllsaGNvbGtwb2tzcXF2dHN2dnVzc3BqZ2FlYmBm\r\n        Y15jYF9iXVpgXFlkYF1tbGZxcm50c3JycW1saWZoZl5oY15ybGd9bWXAs6n5+PX+///+/v7+/v77+/vy\r\n        9PTr7Ozd3+DLzc/a3d7z8/Tc3+h9fIFsanBUVFdXVVRPS0pPTUpkX1prZF1+enSUj42joJ+npaein5+l\r\n        pKSgoKGjo6WkoaOlpKKpqKamp6eqqqq/wcDb29vg4ODj4+Pl5uXn5+fp6enp6ent7ez3+Pf+/v7w8PD8\r\n        /Pz///////////////////////+cOPn8/Pr9/e/u6b2yp4h8cXFoYGtiW2VdVmNaU2FcVGFcV2FaVmNe\r\n        W2BcWGVhXmdlYmppZ29ubnFxcHFxcG9ubmViYGBcWWBeW2JfW15bVllVUFVRT1pWUmBdV2RhXWpnYW5r\r\n        aG9rZ2pmZGRgXWhkYVFFREM3MKaYj/b07/3+/v7+/v39/fj4+PP09Ojq69PU19fY2Ovw9amosV5cY09O\r\n        VEhGRklKSElGRUhEQVVRS1NSTGllYG5mYXl0bo6IhpuXlaWkpKShoailpKurq6qrqausrLGzs9TW19rb\r\n        2d7f3uLi4ePj4+bn5ujo6Onp6ezs7Pb39v7+/vHx8fz8/P///////////////////////5w48/Pvuq2j\r\n        f3NsbWVcal9WYFZQXFJNWlFNWVBKWFJLWlRSWFRQXFhTXFdWXFlYZmNiaGdmbGxrb3Bvb3BuampmXl1a\r\n        XFpXXFpWXltYWVZUUk9MUkxKVFJNVlJQV1JQVlRPXVhVY2Nha2hnamhmYl9cYV1XW1lXExISMykjrKOW\r\n        +Pj1/f39/v7+/Pz8+Pn57vDw1djZ1NjZyc3ScW92NzlBMTQ3ODg7MzU1MzE0OTY1RkNDRkZASURBWVRR\r\n        YVtZdXFslZGNpqWlsri5s7i5tLa3u7y80NHR29vb3d3d3t7e4eHg4uLi5ebl6Ojn6Ojn6+vr9fX2////\r\n        8fHx/Pz8////////////////////////nDiHe3NwaWNpXlpbVU5cTUpYS0RUS0JTTElTSkNTTEZVTEtT\r\n        UExTTk5UUE1UUE5hXl5oZmRtbW1ucG9ubm1lZGJdW1ZcW1taWFdZVVNUUk5PTElSS0lST01RTkpQTEhP\r\n        SkdQTElUUU5fXVdoZ2dpaGZiX1tcWFVcWlgcGxwFAgBhWEzY0837/Pv+/v79/f32+vvx8/Tg4+TR1NaU\r\n        lZlOTllCQ0YyNTotMDAvMDEvMDIyMzAtLSc+PDhTT0xfW1hjXlp9eXWdn5/Aw8bJy87Ix8jU1NPb29rc\r\n        3Nvc3Nzd3d3g4N/i4uLl5eXm5ubn5+fq6ur09fT////y8vL8/Pz///////////////////////+cOGxn\r\n        YWJYTVlLRVFGQE5FPk5CPEpDP1BGP0xFQExGQVFLQ1JMR05JRkpEQk5IR1xZVmVlZG9tbHBxcWxtbWJi\r\n        YV9dXFtYV1dVVFVTTlJOSVBLS1FPTVVQTU9NSktKRUtFP0ZFQEhFQU9NTF5cWmpnY2toZ2JgXlpUU1xb\r\n        VSAfHwAAADAoJJmTiPLy7/39/fj8/Pn7+vn5+evs7cvN0YWDim10flVbZjk6RB0hJSwtLignJzU0Ny8s\r\n        KlBOS2VlZX9/gJ2dnbe4uM3NzdHS0tjY2Nra2tra2trb29vc3N3d3N7e3uHh4OTk5OXl5ebm5unq6fT0\r\n        8/////Pz8/z8/P///////////////////////5w4XVBJV0xCT0hAUEdAS0I+RT88RD84SEA5SUE8SEI7\r\n        SkRCTkhFRkM/Qj07SUNAVVRQY2JibG5scnJzbW5tZWZlXl1eWVVUVlRRVVNPVFJTVVNTV1ZVVVVRUU9K\r\n        TUtGSEVCREE/R0M/SkhEVVJQYF9damhnamdnYF5dVlJTW1hVHBsdAgEBGxYYYFtS4+Ld+/v7/v7+/f39\r\n        /Pz87O/wyszRu7m39Pn71uHmvsXNrLS7qbC1tLm8ubzDw8bI09XW19jY19nZ19nY2NnY2dnZ2dnZ2NnZ\r\n        2trZ29zb3Nzc3Nzc3d7d4OHg5OTk5eXl5eXm6erp9PX1////9PT0/Pz8////////////////////////\r\n        nDhaUkxXUUhUTEZOSEVIQz9FPThDPjRFOzJDPTdAPDVGQUFJRUNFQDw/OTRJRURaV1diZGJucHBzdHVv\r\n        bm5qampgX2FaWVhZWFdcWVhfXV1iYGBgYV9ZWllTUVBPTktMSEdIREJIRkRNTEtVU1FcWVlnY2Nra2po\r\n        ZWVdXl1VVFBbWFYSEhMDAgISDgxBQD/R0Mv4+Pj+/v79/f3+/f3y8/PLzNDv8vHu9PXj5+fm6Ojm5+bi\r\n        5OTh4+He4N/c3t3a29va2trZ2dnY2NjX2NjY2NjY2NjY2dna2trb29vc3Nvc3Nze3t3i4+Ll5eXn5+bo\r\n        6Oj19fX////09PT9/f3///////////////////////+cOF5XVVpUUVNOSEtIQUdBPEQ9N0M5M0E5NEA5\r\n        M0E7M0VAPEM/O0M9Oj87N01KSllaWmZlZnByc3N0dHBvb2tra2VjYlxcWl1eX2RlZGZnZGloZmRkYl5d\r\n        XltaVldVU1ZRUVNRT1ZST1dVU1lYVl9cWWRkYmtsa2xsaWRjZF1bWlZRTlNRUQYGBwcFBAkFCEVOVMfE\r\n        vvj49/7+/v7+/v7+/vDx8tvd3vL39+Lm5uXn5+Tm5eHk49/h4d7f39zd3Nrb29nZ2dfY19bX19bX19fX\r\n        19fY19jY2NnZ2dvb29vb29zd29zd3d/f3+Tk5Obm5unp6fb29v7+/vT09P39/f//////////////////\r\n        /////5w4XltYWldTUU5JSUU+ST8/QDk0QDs2QT01QTw3QT49Pzs1Pjo1RD08QD49TkxKW1pZZWdncHBv\r\n        c3JybmxsaWloZWVlYmNhZmZma2tqbW1saWpqY2RjYGBfX1xZW1pZXV1dXV5bX19bX19dYmBgZGNiaWhn\r\n        bW1scG5tbGlpY2JhWVhWVFBNREFCAQEBDw4KBQwTU2p1wsG89/f3/v7+/////v3+7u7v4+bl4efm5ufn\r\n        4+Xl3+Pi3t/g3d7e2tvb2drZ2NnY1tbW1dbW1tbW19fX19fX2NjY2dnZ29vb29vb3N3b3d3e39/f4uLi\r\n        5OTk6Ojo9/f2/v7+9fX1/f39////////////////////////nDhaV1VZV1VTT0xJREJDOzRBOzZBOzlB\r\n        PThFQj9HQj9APT1COzlDPz1GQj9NSkpaWFllZmNra2ttbGpnZWRoZmdnaGdqaWhqbGptbmxtbm5pamll\r\n        ZGJgYF1hX11iYWBmZGJmZmRoZ2ZpamZpamdpamhtbWpwcG9wcW5sbGxpaGVgX19UUVBWVFEgICECAQEM\r\n        CQkUMEJweoDEw774+fj+/v7+/v79/f3q6+vg4+Pl5ubj5OTf4uHe39/c3d3Z2trX2NjW19fV1dXV1dXV\r\n        1dXW1tbX19bY2NfZ2dna2trb3Nvc3dze3t3f39/i4uLl5eXp6en5+fj9/f329vb+/v7/////////////\r\n        //////////+cOFdTUldVVFJNS0NBPD03MkE8NkA/NkVCPkhGREtHRkpGQEZBP0Q/PERBP0lIR1lYWWNg\r\n        YGZlY2ZkZWNiYGhlZ2pqaWxsa21sbWpsa2lpaGdoZmNiYmJiYGVkYWVlZGZnZ2hoZmpqZ2xta2xua25u\r\n        bXFvbXFwb3BxbnBvbGxraWRkYlxZWVNNTFNRUAYGBggHBwUIDTZec4CDgsvMyfr6+v7+/v////z8/Obn\r\n        5+Pk5OLk5N7g4N3e3trb29na2dfX19XW1tTU1NXV1dXV1dXW1dbX1tfY19nZ2drb2tvb29zc3N7e3t/f\r\n        3+Pj4+Xl5evr6/v7+vz8/Pf39/7+/v///////////////////////5w4T0tLTktKT0xKRkJAQTo2Qz89\r\n        TUdGTkpJSkdFSUdDSkdFS0ZIS0dHS0hHT09NVlVWXVtaXVtYXVpYXFpZYGBdZmZmZ2dnaGhnZmdmZmZl\r\n        ZWVjZmNhZGRjZmZkZ2dlaGhlaGhma2lna2tqbG1rbW1rb3BucXBxcXBucHBvb25tbGtpYmJiV1NTVlFP\r\n        KikpAAAACQYHFDtGW298lpWR2NjU+/v7/v/+////9/f45OTl4uPj3uDg297d2tra2NjY19fX1dXU1dXV\r\n        1dXU1NXV1NbV1tbW19jX2dnY2trZ2tvZ3Nzb3t/d4OHg4+Tj5ubm7e3t/Pz8+/v7+Pj4/v7+////////\r\n        ////////////////nDhKR0RIRUVMSUdMRkVFPz1PTUtST05PS0lMSEdLSkhOSUhMR0dNS0hTUVFXVVVW\r\n        VVZVVFNUU1FUVVFVVlFZWVZfX1xhYF5gYV5iY19kYl9kY19lZmRkZWVnZWRoZ2NnZ2dnZmVlZ2ZoaGdr\r\n        amhqa2pubWtvb21ycXBwcXBwcXBtbWxoZ2VdXFtQT0pQUE0GBwcGBQQBCBE5ZnlydnaioaDn5+T9/f3/\r\n        ///+/v7x8PHg4uLe4ODb3d3a2trY2NjV1tbS1NTT09TU1NTT1NTV1dXX1tfX2NfZ2dnZ2tra2trb29ve\r\n        3t3g4eDj4+Pn5+fu7+7+/v36+vr6+vr+/v7///////////////////////+cOENAP0pHRVNSUVZTUlFQ\r\n        TVNTU1NQT01JRExKSEpIR0hGREhFQ01KSlBOTlRQTlNQT1RTUVVSUFRST1VUU1hWVFlaV1tcWl1cW2Be\r\n        XF9fXWJhYGRiYWVkYWZlZGdmZWZmZWdnZmlmZWlnZ2lpZmlpaWtraW5tbHFwbnJwbnBxb25vbmtraWVk\r\n        YVZTUlNRTSMiIwAAAAQBAh5DVltrcouMirW1svPz8v7+/v////39/efo6eDi4t3e3trc29na2dXX1tPU\r\n        1NPU1NPU1NPU1NTU1NXV1dfX1tnZ2dra2tvb2t3d3d/f3uLi4uXl5Ojo6PHy8P////n5+fz8/P7+/v//\r\n        /////////////////////5w4R0ZES0hHU1JTV1dXVVVUVFJTUU5NT0tJTEhGS0hFSUdFTUpJUk1MTkxK\r\n        T01MTExKUE1KUlFOVFNRWFZVWFZVV1dWWVhXWFhYXVtbXl1aXF5dYGBeYWFhYGJhZGRhZmVlZWVjZ2Vk\r\n        ZWZkZ2dlaWdlaGpnbW1tcG9ucHBub29ub25tbW1samhnXVpbTk1LQUJBAQEBAQACBx8sTm56eXp6mJmX\r\n        zc3J+fn5////////9fb34uPj4OHh3N3d29vb2NnY1tbV09XU09TU1NXU09TU1dXV1tfW19jX2drY29zb\r\n        3d3d39/f4uPi5OXj6+rq9fX1////9/f3/f39/v7+////////////////////////nDhQTExPUFBXVlRZ\r\n        VlZWUlFRTkxLR0hMSEhLSEdIRUVLSUpPTk1OSkxOTUxNTElPTU1PTUxOT01QT05VUVBUUU1RUVBTU1NY\r\n        VVVZWldbW1pcW1tdW1tfXlphX1xiYF9iYWBjY2JlZGVlZWJmZWRoZ2dpamttbGtvbm1vb2xvbmxubWtt\r\n        bWxra2lgXl5QTk1PTUwSEREAAAAABQ46ZnZrcHCOjo6np6bn5+b8/fz////+/v7s7Ozk5OXg4eHe3t/b\r\n        3NvX2djX2NfX19fX19bX19bX19fY2NfY2djZ2drb3Nrd3tzg39/j4+Pm5ubq6+v4+Pf+/v739vf+/v7+\r\n        /v7///////////////////////+cOFRUU1dVVVhUU1JST1FNTU9LSEpIRkpHRkZEQUdGQ0tJSE5LSktL\r\n        SU1OS01NTE9MSE5MSk9MS01NTU9OS1BPTlNQUVVSU1VVVVlXVltXVVpZWVtZWl1bW15bWFxdXV1fXmBi\r\n        X2NhXWVkYWVlZGdmZWdoaGxqam1tbW1ta2xsam5sa21raWxqamRiYFVRUE5MSiYkJQAAAAAAASNKXWRu\r\n        dIaFhJubm7/Avvb29v7+/v////n5+dDO0M7Ny9XU0tnZ19vc29zd3Nzc3Nrb2tna2dnZ2dna2dnZ2dra\r\n        2tzc3N7f3eDg3+Pj4+fn5uzs7Pz8+/z7/Pj4+P7+/v7+/v///////////////////////5w4VFVTVlJS\r\n        UE9OTk1JSktKSkhKSEREREVCQz4/RUNASUhGSklHS0pFTUlJTUpJTkxLTU1MT05NT01MT01LUk9NUE9M\r\n        UlFQVVJSVlRSWVZWWFhWWlhYW1lYXFpYWltYX11aX15cY2NhYWNiZmViZ2ZjaGhna2tpa2toamtpbGpo\r\n        ampoamloaWhnZWNiVVRSTEpIPTw9AAAAAAAAEy9EW3B5fX17lZSTpqal4eLg/Pz8/////v7+2djbpqqp\r\n        pKeno6empqmorK2ts7SywcC+z87M2trY3t/d3N3c3Nzc3t7e39/f4eHh5OXi5+fn8PDw/v7++vn6/Pz8\r\n        /v7+/v7+////////////////////////nDhQTk5PSklMSUZIR0RJRkNJR0RIRENGQ0FEQEBGQ0BIRkNH\r\n        RkNIR0dLSUlNTEtPTkxPTk1QTU5OTExPTEpOTkxQT01QUE1QUE5TUlBWVVRXVlVXVlZYV1ZbWllaWlpe\r\n        XVtgXV1hYmBjZGJlZWJmZmVnaGZqaWhqaWlpaGdoaGVmZmVoZWRmY2FkYmBcWFdPSkxHRkYKCgwAAAAG\r\n        HypWc3p1eXmMjYyfn57Dw8H19fT////////z8/W0tLessLCpraynqamjpaWho6OcnZ2Zm5ufoJ+rrau/\r\n        v7va2dfh4eHh4eDj4+Pl5uXp6en19fX////5+Pn+/v7+/v7+/v7///////////////////////+cOEtJ\r\n        R0dGRkZEQ0ZDRUVDQ0RCQ0VEQUZFREdHR0tHR0pHRUpIRUxIR0xKSkpKSExLSk9NTFBNTlBOTU5LSkxL\r\n        S05NS1BPT1FRTVNRT1ZVUFZVVVVVVFdXVFlYV1laV1xcWl5eW2FfXmFhYWRjY2ZlY2ZmZGdlZWNkYWVk\r\n        YGRiYWJhYGNhX2JfXWFfXFtZVU9MSEpGRRkZGQECAQERIU1vfW52eImJiJqamausq+Tl5P39/f////39\r\n        /c7O0bW4uLO2tq2vr6mrq6Wnp52hoJibm5SWlpKVlZKWlZSVlLKzrtzc2ebm5ufn5+zs7fr6+fv7+/z8\r\n        /P7+/v7+/v7+/v///////////////////////5w4SUdGSUdGRkRDRENCQ0I+QT8+QD88Q0I+SERCSEdH\r\n        SkdGSkdISUhIS0lIS0dITUtITUtJTktLS0pJTEtIS0pKS0pJT05NT01LUVBNUVFNU1JQVVNQVFVRVlVT\r\n        V1dUWVlXWVlYWltaXl5dYF9dYWBdYV9dXl1cXVxbXl1bXl5cX15bXlxbXFxbXltYXFhVUExLSUVALiwu\r\n        CAcHAAkVRmt7anR6hIaElZWUo6OjzM3K+fn4////////4+Plvb+/ubu7tbe3srS0rK2tpaenoKKim52d\r\n        k5WWlJeWkZOUhIiJkZKQycjF6uvp8PDw9vf28fHx/Pz8/v7+/v7+/v7+////////////////////////\r\n        nDhHRkZGQ0JIRkBCQUFCPzxDQDxDQTxCQkJHRUNHRENISEVIR0dJSUdJSEZLSUdKRkVJSERKSUVMSEZK\r\n        SEVJSEVNS0pNTExMS0hPTUlQTk1PT01QT05TUE1TUE9SU1FVVFNUVVFXVVNYV1ZZWFdYWVZYWFhZWVda\r\n        V1ZcWFZbWVlaWVdbWllbWllaWllYVlROTExIRERAPTwRDQ8ABRA9Z3dodXiBg4GRkZCgoKC2trbv7+/+\r\n        /v7////z8/XMzc3HyMjDxMTAwMC5ubmztLSsra2nqaifoaGXmZiSlZWLjY2ChYSDhYW3ubXy8/Hq6uro\r\n        6Oj39/f9/f3+/v7+/v7///////////////////////+cOEZFQ0hEQUNCP0NAQENBQEJAP0FBPUNDQkdE\r\n        REhFQ0ZFQkVFRU5LSUdGREVFRkdFREZEQ0hHREhGRUtIRUpIREpLR0tKRUpJSUpLRktMSkpLSEtMSk1L\r\n        S05MS05PTVFPTVFQTFJRUVJTUFRTUVRSUVVTUlZUVFhWVVpWUllWVlpYU1lXVlhXVlhXVVZUUFBMSkdD\r\n        Q0JBQREODgAEDjtndWl3eH+Bf4+Pj52dnaurq+Dh4Pz8/P////z8/ePk5ODg4NPU08rKycLCwr29vbi4\r\n        uLKztKqrq5+ioZaamZCUlIaKioGEg4CEgrW1r+bm5N3d3fDw8Pv7+/7+/v7+/v//////////////////\r\n        /////5w4RENDREFBQj8+Q0JBREJBQUE/REQ/RURERURFRUVCRkRDRkRFQ0NCRkRDR0RDREREREREREND\r\n        RUVFRkZFS0lIS0dGSUdISkhGSkhGS0lISEhDTEpFSklHTEtITExKTEtJUE5LTk5LUE9OUVBPUlFQVFJQ\r\n        VFNRVFVTVVRUVVRTWFRUV1VUWFNUV1ZSVFJQTUtJRUNBREJDDgsMAAUTOmh3Z3Z7fICAkI+Om5qap6am\r\n        z8/N+vn4/////v7/7e3t6enp5OTj4eHgzs7NxcXEv8DAuru7tLW1q6ysn6KhmJublpeXio2OgIOEf4OB\r\n        n56gvbu+6Ojn9/f3/f39/v7+////////////////////////nDhBQEFDPj5CQD9DQkBGRENERENHRkJG\r\n        RkNGRERFRUNGRURGRkVHRkZKSUZIR0dJSEVFRUREQ0FHRkZJRUVJRkZIRkVISEdIRkRHR0NJSUVHR0ZH\r\n        R0dJR0ZKSEdLSUZMSklMTElPTE1NTUxPT05RUU9RUE9SUU9UUU5UU09TUk5VUlJUU1JTU1JXUk9TT0xL\r\n        SEhGQkJGQEMKBwkACBZCbH1pd3t9gYGNjoyampqlpaW/wL/z8/L////////19PXw8PDp6enl5eTW1dXO\r\n        zs7Hx8e/wMC5u7u0tbSqrKyio6OYmpqXm5uLj5J5e3qJjouamp7a2trx8fH8/Pz+/v7/////////////\r\n        //////////+cOEVBQERBP0NCP0ZFQ0hFRkdGRkpIRkdHR0hHREdIR0hIR0lJRUtJSEtKSUhJSUpISEZG\r\n        RkhGRUhGREhGRUdGRkhFRUZGQ0VIRElHRUlHRUhHRkZGRElGQkpGRklHSEtJSE1KSE1KSU1MSlBNTFNS\r\n        TlBQT1FPTFNPS1JRUFJQTFFQT1JRUFJRUVRSUFBOTUpHRUdEQz05OwIBAgAQHk1ygGl5eXyBgYyMjJmZ\r\n        maOjorS1tOrr6P7+/v///+nm6auqqsC/vdfW1OLi4NjY2M3OzcfGxr/AwLy9vLS2tqysrKKlpJiampmd\r\n        nIuPkYyRkJCTlLe5ue3t7fv7+/7+/v///////////////////////5w4Q0JBRENARURDRkdESEhHSEdG\r\n        SUhDSEdHSEdHSEdISkpJSUlJS0tIS0pKS0lKSkdFSEhISUhISUhGR0ZFR0VFR0ZFSEdIR0ZDSUZDSkhG\r\n        R0lIRkdGRUZFSEZER0dGSUdHSUpITEtITExLUU5NUVBPUE5NUE1LUE1KUU1KT05MUFBLUE5MU1FLU1BO\r\n        TkxJS0dGSURDNDI0AAAAAhonV3V/bHp6fICAiouLl5eWoaGhra6t4eLg/f39////7+7xo6aonaGinJ+g\r\n        rK2uuri5wL++xsXExMTDw8XCwcLCtre3rK2toaOjkpaXmJybnZ+ejo+RkJaV5+jo+fn5/v7+////////\r\n        ////////////////nDg=\r\n</value>\r\n  </data>\r\n  <data name=\"max_depth\" xml:space=\"preserve\">\r\n    <value>-1</value>\r\n  </data>\r\n  <data name=\"pause_between\" xml:space=\"preserve\">\r\n    <value>150</value>\r\n  </data>\r\n  <data name=\"please_select\" xml:space=\"preserve\">\r\n    <value>Please select the folder that you want to be cleaned</value>\r\n  </data>\r\n  <data name=\"process_cancelled\" xml:space=\"preserve\">\r\n    <value>Vorgang abgebrochen!</value>\r\n  </data>\r\n  <data name=\"red_deleted\" xml:space=\"preserve\">\r\n    <value>RED deleted {0} directories for you!</value>\r\n  </data>\r\n  <data name=\"registry_name\" xml:space=\"preserve\">\r\n    <value>Entferne Leere Ordner</value>\r\n  </data>\r\n  <data name=\"rem_empty_folders\" xml:space=\"preserve\">\r\n    <value>Entferne Leere Ordner...</value>\r\n  </data>\r\n  <data name=\"removing_empty_folders\" xml:space=\"preserve\">\r\n    <value>Entferne Leere Ordner ({0}/{1})...</value>\r\n  </data>\r\n  <data name=\"scanning_folders\" xml:space=\"preserve\">\r\n    <value>Scanning folders...</value>\r\n  </data>\r\n  <data name=\"searching_empty_folders\" xml:space=\"preserve\">\r\n    <value>Searching empty folders...</value>\r\n  </data>\r\n  <data name=\"warning\" xml:space=\"preserve\">\r\n    <value>Achtung!</value>\r\n  </data>\r\n  <data name=\"warning_really_delete\" xml:space=\"preserve\">\r\n    <value>Warning, do you really want to delete empty system folders?\\nThis may harm your operating system.</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "RED2/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.42000\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace RED2.Properties {\r\n    \r\n    \r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"16.8.1.0\")]\r\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\r\n        \r\n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\r\n        \r\n        public static Settings Default {\r\n            get {\r\n                return defaultInstance;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"C:\\\\\")]\r\n        public string last_used_directory {\r\n            get {\r\n                return ((string)(this[\"last_used_directory\"]));\r\n            }\r\n            set {\r\n                this[\"last_used_directory\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"False\")]\r\n        public bool dont_scan_hidden_folders {\r\n            get {\r\n                return ((bool)(this[\"dont_scan_hidden_folders\"]));\r\n            }\r\n            set {\r\n                this[\"dont_scan_hidden_folders\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"True\")]\r\n        public bool ignore_0kb_files {\r\n            get {\r\n                return ((bool)(this[\"ignore_0kb_files\"]));\r\n            }\r\n            set {\r\n                this[\"ignore_0kb_files\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"True\")]\r\n        public bool keep_system_folders {\r\n            get {\r\n                return ((bool)(this[\"keep_system_folders\"]));\r\n            }\r\n            set {\r\n                this[\"keep_system_folders\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"False\")]\r\n        public bool clipboard_detection {\r\n            get {\r\n                return ((bool)(this[\"clipboard_detection\"]));\r\n            }\r\n            set {\r\n                this[\"clipboard_detection\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"desktop.ini\\r\\nThumbs.db\\r\\n.DS_Store\\r\\n._*\")]\r\n        public string ignore_files {\r\n            get {\r\n                return ((string)(this[\"ignore_files\"]));\r\n            }\r\n            set {\r\n                this[\"ignore_files\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"System Volume Information\\r\\nRECYCLER\\r\\nRecycled\\r\\nNtUninstall\\r\\n$RECYCLE.BIN\\r\\nGAC_MSI\" +\r\n            \"L\\r\\nGAC_32\\r\\nwinsxs\\r\\nSystem32\")]\r\n        public string ignore_directories {\r\n            get {\r\n                return ((string)(this[\"ignore_directories\"]));\r\n            }\r\n            set {\r\n                this[\"ignore_directories\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"-1\")]\r\n        public decimal max_depth {\r\n            get {\r\n                return ((decimal)(this[\"max_depth\"]));\r\n            }\r\n            set {\r\n                this[\"max_depth\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"10\")]\r\n        public decimal infinite_loop_detection_count {\r\n            get {\r\n                return ((decimal)(this[\"infinite_loop_detection_count\"]));\r\n            }\r\n            set {\r\n                this[\"infinite_loop_detection_count\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"0\")]\r\n        public decimal pause_between {\r\n            get {\r\n                return ((decimal)(this[\"pause_between\"]));\r\n            }\r\n            set {\r\n                this[\"pause_between\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"True\")]\r\n        public bool ignore_deletion_errors {\r\n            get {\r\n                return ((bool)(this[\"ignore_deletion_errors\"]));\r\n            }\r\n            set {\r\n                this[\"ignore_deletion_errors\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"0\")]\r\n        public int delete_stats {\r\n            get {\r\n                return ((int)(this[\"delete_stats\"]));\r\n            }\r\n            set {\r\n                this[\"delete_stats\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"0\")]\r\n        public int delete_mode {\r\n            get {\r\n                return ((int)(this[\"delete_mode\"]));\r\n            }\r\n            set {\r\n                this[\"delete_mode\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"True\")]\r\n        public bool hide_scan_errors {\r\n            get {\r\n                return ((bool)(this[\"hide_scan_errors\"]));\r\n            }\r\n            set {\r\n                this[\"hide_scan_errors\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"0\")]\r\n        public uint min_folder_age_hours {\r\n            get {\r\n                return ((uint)(this[\"min_folder_age_hours\"]));\r\n            }\r\n            set {\r\n                this[\"min_folder_age_hours\"] = value;\r\n            }\r\n        }\r\n        \r\n        [global::System.Configuration.UserScopedSettingAttribute()]\r\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n        [global::System.Configuration.DefaultSettingValueAttribute(\"False\")]\r\n        public bool fast_search_mode {\r\n            get {\r\n                return ((bool)(this[\"fast_search_mode\"]));\r\n            }\r\n            set {\r\n                this[\"fast_search_mode\"] = value;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "RED2/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\r\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\" GeneratedClassNamespace=\"RED2.Properties\" GeneratedClassName=\"Settings\">\r\n  <Profiles />\r\n  <Settings>\r\n    <Setting Name=\"last_used_directory\" Type=\"System.String\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">C:\\</Value>\r\n    </Setting>\r\n    <Setting Name=\"dont_scan_hidden_folders\" Type=\"System.Boolean\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">False</Value>\r\n    </Setting>\r\n    <Setting Name=\"ignore_0kb_files\" Type=\"System.Boolean\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">True</Value>\r\n    </Setting>\r\n    <Setting Name=\"keep_system_folders\" Type=\"System.Boolean\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">True</Value>\r\n    </Setting>\r\n    <Setting Name=\"clipboard_detection\" Type=\"System.Boolean\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">False</Value>\r\n    </Setting>\r\n    <Setting Name=\"ignore_files\" Type=\"System.String\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">desktop.ini\r\nThumbs.db\r\n.DS_Store\r\n._*</Value>\r\n    </Setting>\r\n    <Setting Name=\"ignore_directories\" Type=\"System.String\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">System Volume Information\r\nRECYCLER\r\nRecycled\r\nNtUninstall\r\n$RECYCLE.BIN\r\nGAC_MSIL\r\nGAC_32\r\nwinsxs\r\nSystem32</Value>\r\n    </Setting>\r\n    <Setting Name=\"max_depth\" Type=\"System.Decimal\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">-1</Value>\r\n    </Setting>\r\n    <Setting Name=\"infinite_loop_detection_count\" Type=\"System.Decimal\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">10</Value>\r\n    </Setting>\r\n    <Setting Name=\"pause_between\" Type=\"System.Decimal\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">0</Value>\r\n    </Setting>\r\n    <Setting Name=\"ignore_deletion_errors\" Type=\"System.Boolean\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">True</Value>\r\n    </Setting>\r\n    <Setting Name=\"delete_stats\" Type=\"System.Int32\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">0</Value>\r\n    </Setting>\r\n    <Setting Name=\"delete_mode\" Type=\"System.Int32\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">0</Value>\r\n    </Setting>\r\n    <Setting Name=\"hide_scan_errors\" Type=\"System.Boolean\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">True</Value>\r\n    </Setting>\r\n    <Setting Name=\"min_folder_age_hours\" Type=\"System.UInt32\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">0</Value>\r\n    </Setting>\r\n    <Setting Name=\"fast_search_mode\" Type=\"System.Boolean\" Scope=\"User\">\r\n      <Value Profile=\"(Default)\">False</Value>\r\n    </Setting>\r\n  </Settings>\r\n</SettingsFile>"
  },
  {
    "path": "RED2/RED2.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" ToolsVersion=\"12.0\">\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProductVersion>8.0.50727</ProductVersion>\r\n    <SchemaVersion>2.0</SchemaVersion>\r\n    <ProjectGuid>{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}</ProjectGuid>\r\n    <OutputType>WinExe</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>RED2</RootNamespace>\r\n    <AssemblyName>RED2</AssemblyName>\r\n    <ApplicationIcon>coffee.ico</ApplicationIcon>\r\n    <SignAssembly>false</SignAssembly>\r\n    <IsWebBootstrapper>false</IsWebBootstrapper>\r\n    <ManifestCertificateThumbprint>12333660AF16C494E347751E1615A64A0EE33DAE</ManifestCertificateThumbprint>\r\n    <ManifestKeyFile>RED2_TemporaryKey.pfx</ManifestKeyFile>\r\n    <GenerateManifests>true</GenerateManifests>\r\n    <SignManifests>false</SignManifests>\r\n    <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>\r\n    <FileUpgradeFlags>\r\n    </FileUpgradeFlags>\r\n    <OldToolsVersion>2.0</OldToolsVersion>\r\n    <UpgradeBackupLocation />\r\n    <TargetFrameworkProfile />\r\n    <PublishUrl>publish\\</PublishUrl>\r\n    <Install>true</Install>\r\n    <InstallFrom>Disk</InstallFrom>\r\n    <UpdateEnabled>false</UpdateEnabled>\r\n    <UpdateMode>Foreground</UpdateMode>\r\n    <UpdateInterval>7</UpdateInterval>\r\n    <UpdateIntervalUnits>Days</UpdateIntervalUnits>\r\n    <UpdatePeriodically>false</UpdatePeriodically>\r\n    <UpdateRequired>false</UpdateRequired>\r\n    <MapFileExtensions>true</MapFileExtensions>\r\n    <SupportUrl>http://www.jonasjohn.de/</SupportUrl>\r\n    <ProductName>Remove Empty Directories</ProductName>\r\n    <PublisherName>Jonas John</PublisherName>\r\n    <AutorunEnabled>true</AutorunEnabled>\r\n    <ApplicationRevision>0</ApplicationRevision>\r\n    <ApplicationVersion>2.3.0.0</ApplicationVersion>\r\n    <UseApplicationTrust>false</UseApplicationTrust>\r\n    <PublishWizardCompleted>true</PublishWizardCompleted>\r\n    <BootstrapperEnabled>true</BootstrapperEnabled>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <DebugType>full</DebugType>\r\n    <Optimize>false</Optimize>\r\n    <OutputPath>bin\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <Prefer32Bit>false</Prefer32Bit>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\r\n    <DebugType>pdbonly</DebugType>\r\n    <Optimize>true</Optimize>\r\n    <OutputPath>bin\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <WarningLevel>4</WarningLevel>\r\n    <Prefer32Bit>false</Prefer32Bit>\r\n  </PropertyGroup>\r\n  <PropertyGroup>\r\n    <StartupObject>RED2.Program</StartupObject>\r\n  </PropertyGroup>\r\n  <PropertyGroup>\r\n    <ApplicationManifest>app.manifest</ApplicationManifest>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release-x86|AnyCPU'\">\r\n    <OutputPath>bin\\Release-x86\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <Optimize>true</Optimize>\r\n    <DebugType>pdbonly</DebugType>\r\n    <PlatformTarget>AnyCPU</PlatformTarget>\r\n    <LangVersion>7.3</LangVersion>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <DebugType>full</DebugType>\r\n    <PlatformTarget>x86</PlatformTarget>\r\n    <LangVersion>7.3</LangVersion>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\r\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <Optimize>true</Optimize>\r\n    <DebugType>pdbonly</DebugType>\r\n    <PlatformTarget>x86</PlatformTarget>\r\n    <LangVersion>7.3</LangVersion>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release-x86|x86'\">\r\n    <OutputPath>bin\\x86\\Release-x86\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <Optimize>true</Optimize>\r\n    <DebugType>pdbonly</DebugType>\r\n    <PlatformTarget>x86</PlatformTarget>\r\n    <LangVersion>7.3</LangVersion>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release-x64|AnyCPU'\">\r\n    <OutputPath>bin\\Release-x64\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <Optimize>true</Optimize>\r\n    <DebugType>pdbonly</DebugType>\r\n    <PlatformTarget>AnyCPU</PlatformTarget>\r\n    <LangVersion>7.3</LangVersion>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release-x64|x86'\">\r\n    <OutputPath>bin\\x86\\Release-x64\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <Optimize>true</Optimize>\r\n    <DebugType>pdbonly</DebugType>\r\n    <PlatformTarget>x86</PlatformTarget>\r\n    <LangVersion>7.3</LangVersion>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <DebugType>full</DebugType>\r\n    <PlatformTarget>x64</PlatformTarget>\r\n    <LangVersion>7.3</LangVersion>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\r\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <Optimize>true</Optimize>\r\n    <DebugType>pdbonly</DebugType>\r\n    <PlatformTarget>x64</PlatformTarget>\r\n    <LangVersion>7.3</LangVersion>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release-x86|x64'\">\r\n    <OutputPath>bin\\x64\\Release-x86\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <Optimize>true</Optimize>\r\n    <DebugType>pdbonly</DebugType>\r\n    <PlatformTarget>x64</PlatformTarget>\r\n    <LangVersion>7.3</LangVersion>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release-x64|x64'\">\r\n    <OutputPath>bin\\x64\\Release-x64\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <Optimize>true</Optimize>\r\n    <DebugType>pdbonly</DebugType>\r\n    <PlatformTarget>x64</PlatformTarget>\r\n    <LangVersion>7.3</LangVersion>\r\n    <ErrorReport>prompt</ErrorReport>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"AlphaFS, Version=2.2.0.0, Culture=neutral, PublicKeyToken=4d31a58f7d7ad5c9, processorArchitecture=MSIL\">\r\n      <HintPath>..\\packages\\AlphaFS.2.2.6\\lib\\net452\\AlphaFS.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Microsoft.VisualBasic\" />\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Deployment\" />\r\n    <Reference Include=\"System.Drawing\" />\r\n    <Reference Include=\"System.Transactions\" />\r\n    <Reference Include=\"System.Windows.Forms\" />\r\n    <Reference Include=\"System.Xml\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"DeletionError.cs\">\r\n      <SubType>Form</SubType>\r\n    </Compile>\r\n    <Compile Include=\"DeletionError.Designer.cs\">\r\n      <DependentUpon>DeletionError.cs</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Lib\\DeletionWorker.cs\">\r\n      <SubType>Component</SubType>\r\n    </Compile>\r\n    <Compile Include=\"Lib\\Enums.cs\" />\r\n    <Compile Include=\"Lib\\Events.cs\" />\r\n    <Compile Include=\"Lib\\RuntimeData.cs\" />\r\n    <Compile Include=\"Lib\\TreeManager.cs\" />\r\n    <Compile Include=\"Lib\\Core.cs\" />\r\n    <Compile Include=\"Lib\\UIHelpers.cs\" />\r\n    <Compile Include=\"MainWindow.cs\">\r\n      <SubType>Form</SubType>\r\n    </Compile>\r\n    <Compile Include=\"MainWindow.Designer.cs\">\r\n      <DependentUpon>MainWindow.cs</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Lib\\FindEmptyDirectoryWorker.cs\">\r\n      <SubType>Component</SubType>\r\n    </Compile>\r\n    <Compile Include=\"LogWindow.cs\">\r\n      <SubType>Form</SubType>\r\n    </Compile>\r\n    <Compile Include=\"LogWindow.Designer.cs\">\r\n      <DependentUpon>LogWindow.cs</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Program.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"Lib\\SystemFunctions.cs\" />\r\n    <EmbeddedResource Include=\"DeletionError.resx\">\r\n      <DependentUpon>DeletionError.cs</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"MainWindow.resx\">\r\n      <SubType>Designer</SubType>\r\n      <DependentUpon>MainWindow.cs</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"LogWindow.resx\">\r\n      <DependentUpon>LogWindow.cs</DependentUpon>\r\n    </EmbeddedResource>\r\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\r\n      <Generator>ResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r\n      <SubType>Designer</SubType>\r\n    </EmbeddedResource>\r\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DependentUpon>Resources.resx</DependentUpon>\r\n      <DesignTime>True</DesignTime>\r\n    </Compile>\r\n    <None Include=\"app.config\" />\r\n    <None Include=\"app.manifest\" />\r\n    <None Include=\"packages.config\" />\r\n    <None Include=\"Properties\\Settings.settings\">\r\n      <Generator>SettingsSingleFileGenerator</Generator>\r\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\r\n    </None>\r\n    <Compile Include=\"Properties\\Settings.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DependentUpon>Settings.settings</DependentUpon>\r\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"coffee.ico\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Client.3.5\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.2.0\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 2.0</ProductName>\r\n      <Install>false</Install>\r\n    </BootstrapperPackage>\r\n    <BootstrapperPackage Include=\"Microsoft.Net.Framework.3.5.SP1\">\r\n      <Visible>False</Visible>\r\n      <ProductName>.NET Framework 3.5 SP1</ProductName>\r\n      <Install>true</Install>\r\n    </BootstrapperPackage>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <PublishFile Include=\"coffee.ico\">\r\n      <Visible>False</Visible>\r\n      <Group>\r\n      </Group>\r\n      <TargetPath>\r\n      </TargetPath>\r\n      <PublishState>Exclude</PublishState>\r\n      <IncludeHash>True</IncludeHash>\r\n      <FileType>File</FileType>\r\n    </PublishFile>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "RED2/RED2.csproj.user",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <PublishUrlHistory>publish\\</PublishUrlHistory>\r\n    <InstallUrlHistory>\r\n    </InstallUrlHistory>\r\n    <SupportUrlHistory>http://www.jonasjohn.de/</SupportUrlHistory>\r\n    <UpdateUrlHistory>\r\n    </UpdateUrlHistory>\r\n    <BootstrapperUrlHistory>\r\n    </BootstrapperUrlHistory>\r\n    <FallbackCulture>de-DE</FallbackCulture>\r\n    <VerifyUploadedFiles>false</VerifyUploadedFiles>\r\n    <ErrorReportUrlHistory />\r\n    <ProjectView>ShowAllFiles</ProjectView>\r\n  </PropertyGroup>\r\n  <PropertyGroup>\r\n    <EnableSecurityDebugging>false</EnableSecurityDebugging>\r\n  </PropertyGroup>\r\n</Project>"
  },
  {
    "path": "RED2/app.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n    <configSections>\r\n        <sectionGroup name=\"userSettings\" type=\"System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\r\n            <section name=\"RED2.Properties.Settings\" type=\"System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" allowExeDefinition=\"MachineToLocalUser\" requirePermission=\"false\"/>\r\n        </sectionGroup>\r\n    </configSections>\r\n    <userSettings>\r\n        <RED2.Properties.Settings>\r\n            <setting name=\"last_used_directory\" serializeAs=\"String\">\r\n                <value>C:\\</value>\r\n            </setting>\r\n            <setting name=\"dont_scan_hidden_folders\" serializeAs=\"String\">\r\n                <value>False</value>\r\n            </setting>\r\n            <setting name=\"ignore_0kb_files\" serializeAs=\"String\">\r\n                <value>True</value>\r\n            </setting>\r\n            <setting name=\"keep_system_folders\" serializeAs=\"String\">\r\n                <value>True</value>\r\n            </setting>\r\n            <setting name=\"clipboard_detection\" serializeAs=\"String\">\r\n                <value>False</value>\r\n            </setting>\r\n            <setting name=\"ignore_files\" serializeAs=\"String\">\r\n                <value>desktop.ini\r\nThumbs.db\r\n.DS_Store\r\n._*</value>\r\n            </setting>\r\n            <setting name=\"ignore_directories\" serializeAs=\"String\">\r\n                <value>System Volume Information\r\nRECYCLER\r\nRecycled\r\nNtUninstall\r\n$RECYCLE.BIN\r\nGAC_MSIL\r\nGAC_32\r\nwinsxs\r\nSystem32</value>\r\n            </setting>\r\n            <setting name=\"max_depth\" serializeAs=\"String\">\r\n                <value>-1</value>\r\n            </setting>\r\n            <setting name=\"infinite_loop_detection_count\" serializeAs=\"String\">\r\n                <value>10</value>\r\n            </setting>\r\n            <setting name=\"pause_between\" serializeAs=\"String\">\r\n                <value>0</value>\r\n            </setting>\r\n            <setting name=\"ignore_deletion_errors\" serializeAs=\"String\">\r\n                <value>True</value>\r\n            </setting>\r\n            <setting name=\"delete_stats\" serializeAs=\"String\">\r\n                <value>0</value>\r\n            </setting>\r\n            <setting name=\"delete_mode\" serializeAs=\"String\">\r\n                <value>0</value>\r\n            </setting>\r\n            <setting name=\"hide_scan_errors\" serializeAs=\"String\">\r\n                <value>True</value>\r\n            </setting>\r\n            <setting name=\"min_folder_age_hours\" serializeAs=\"String\">\r\n                <value>0</value>\r\n            </setting>\r\n            <setting name=\"fast_search_mode\" serializeAs=\"String\">\r\n                <value>False</value>\r\n            </setting>\r\n        </RED2.Properties.Settings>\r\n    </userSettings>\r\n\t<startup>\r\n\t\t<supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.6.2\"/>\r\n\t</startup>\r\n</configuration>\r\n"
  },
  {
    "path": "RED2/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"MyApplication.app\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <!-- UAC Manifest Options\n             If you want to change the Windows User Account Control level replace the \n             requestedExecutionLevel node with one of the following.\n\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n        <requestedExecutionLevel  level=\"requireAdministrator\" uiAccess=\"false\" />\n        <requestedExecutionLevel  level=\"highestAvailable\" uiAccess=\"false\" />\n\n            Specifying requestedExecutionLevel element will disable file and registry virtualization. \n            Remove this element if your application requires this virtualization for backwards\n            compatibility.\n        -->\n        <requestedExecutionLevel level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <!--<supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />-->\n\n      <!-- Windows 7 -->\n      <!--<supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />-->\n\n      <!-- Windows 8 -->\n      <!--<supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />-->\n\n      <!-- Windows 8.1 -->\n      <!--<supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />-->\n\n      <!-- Windows 10 -->\n      <!--<supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />-->\n\n    </application>\n  </compatibility>\n\n  <!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher\n       DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need \n       to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should \n       also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->\n  <!--\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true</dpiAware>\n    </windowsSettings>\n  </application>\n  -->\n\t<application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n\t\t<windowsSettings>\n\t\t\t<longPathAware xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">true</longPathAware>\n\t\t</windowsSettings>\n\t</application>\n\n  <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->\n  <!--\n  <dependency>\n    <dependentAssembly>\n      <assemblyIdentity\n          type=\"win32\"\n          name=\"Microsoft.Windows.Common-Controls\"\n          version=\"6.0.0.0\"\n          processorArchitecture=\"*\"\n          publicKeyToken=\"6595b64144ccf1df\"\n          language=\"*\"\n        />\n    </dependentAssembly>\n  </dependency>\n  -->\n\n</assembly>\n"
  },
  {
    "path": "RED2/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"AlphaFS\" version=\"2.2.6\" targetFramework=\"net462\" />\n</packages>"
  },
  {
    "path": "Scripts/create-1000-empty-directories.bat",
    "content": "mkdir test-1000-dirs\n\nFOR /L %%A IN (1,1,1000) DO (\n  mkdir test-1000-dirs\\dir-%%A\n)\n\necho \"Done, created 1000 empty directories\"\npause"
  },
  {
    "path": "Scripts/create-test-directories.bat",
    "content": "rem Change active code page to utf-8 (because of special chars)\nchcp 65001\n\nmkdir test-dirs\\empty-1\nmkdir test-dirs\\empty-2\nmkdir test-dirs\\empty-3\nmkdir test-dirs\\empty-with-child-dirs-1\\empty-subdir-1-of-3\nmkdir test-dirs\\empty-with-child-dirs-1\\empty-subdir-2-of-3\nmkdir test-dirs\\empty-with-child-dirs-1\\empty-subdir-3-of-3\n\nmkdir test-dirs\\not-empty\necho Test> test-dirs\\not-empty\\dummy.txt\n\nmkdir test-dirs\\empty-4\n\nmkdir test-dirs\\deep-nested-empty-dirs\\a\\b\\c\\d\\e\\f\nmkdir test-dirs\\deep-nested-empty-dirs\\a\\b2\nmkdir test-dirs\\deep-nested-empty-dirs\\a\\b\\c2\nmkdir test-dirs\\deep-nested-empty-dirs\\a\\b\\c3\nmkdir test-dirs\\deep-nested-empty-dirs\\a\\b\\c\\d\\e\\f2\n\nmkdir test-dirs\\empty-hidden-dir\nattrib +h test-dirs\\empty-hidden-dir /s /d\n\nmkdir test-dirs\\empty-hidden-nested-dirs\\a\\b\nmkdir test-dirs\\empty-hidden-nested-dirs\\a2\\b2\nmkdir test-dirs\\empty-hidden-nested-dirs\\a3\\b3\nattrib +h test-dirs\\empty-hidden-nested-dirs /s /d\nattrib +h test-dirs\\empty-hidden-nested-dirs\\* /s /d\nattrib +h test-dirs\\empty-hidden-nested-dirs\\a\\* /s /d\n\nmkdir test-dirs\\not-empty-hidden-dir\necho Test> test-dirs\\not-empty-hidden-dir\\dummy.txt\n\nmkdir test-dirs\\contains-1-empty-file\ntype nul > test-dirs\\contains-1-empty-file\\empty.txt\n\nmkdir test-dirs\\contains-3-empty-files\ntype nul > test-dirs\\contains-3-empty-files\\empty-1.txt\ntype nul > test-dirs\\contains-3-empty-files\\empty-2.txt\ntype nul > test-dirs\\contains-3-empty-files\\empty-3.txt\n\nmkdir test-dirs\\contains-empty-files-and-non-empty\ntype nul > test-dirs\\contains-empty-files-and-non-empty\\empty-1.txt\ntype nul > test-dirs\\contains-empty-files-and-non-empty\\empty-2.txt\necho 1 > test-dirs\\contains-empty-files-and-non-empty\\not-empty.txt\n\nmkdir test-dirs\\with-desktop.ini\necho \"test\" > test-dirs\\with-desktop.ini\\desktop.ini\n\nmkdir test-dirs\\with-Thumbs.db\necho \"test\" > test-dirs\\with-Thumbs.db\\Thumbs.db\n\nmkdir test-dirs\\with-mac-DS_Store\necho \"test\" > test-dirs\\with-mac-DS_Store\\.DS_Store\n\nmkdir test-dirs\\with-AppleDouble-files\necho \"test\" > test-dirs\\with-AppleDouble-files\\._test1\necho \"test\" > test-dirs\\with-AppleDouble-files\\._test2\n\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\with spaces\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\spaces a b c d\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\#test\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\test!\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\     spaces\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\     spaces      \"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\!test\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\^test\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\#+!^-_\"\n\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\chinese\\删除空目录\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\chinese\\测试\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\chinese\\红\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\chinese\\紅\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\chinese\\刪除空目錄\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\chinese\\去掉\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\chinese\\不是空的\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\chinese\\这个\\空的\\是\"\necho Test> test-dirs\\empty-dirs-with-special-chars\\chinese\\不是空的\\文件\necho Test> test-dirs\\empty-dirs-with-special-chars\\chinese\\不是空的2\\文件.txt\n\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\arabic\\صباح الخير\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\arabic\\اختبار\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\arabic\\ر\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\arabic\\ليس فارغا\"\necho Test> \"test-dirs\\empty-dirs-with-special-chars\\arabic\\ليس فارغا\\dummy.txt\"\n\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\russian\\т\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\russian\\тест\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\russian\\удалить пустые каталоги\"\nmkdir \"test-dirs\\empty-dirs-with-special-chars\\russian\\не пусто\"\necho Test> \"test-dirs\\empty-dirs-with-special-chars\\russian\\не пусто\\да да.txt\"\n\necho \"Done, created all test directories\"\npause"
  },
  {
    "path": "red2_project.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.30907.101\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RED2\", \"RED2\\RED2.csproj\", \"{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tDebug|x86 = Debug|x86\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\t\tRelease|x64 = Release|x64\r\n\t\tRelease|x86 = Release|x86\r\n\t\tRelease-x64|Any CPU = Release-x64|Any CPU\r\n\t\tRelease-x64|x64 = Release-x64|x64\r\n\t\tRelease-x64|x86 = Release-x64|x86\r\n\t\tRelease-x86|Any CPU = Release-x86|Any CPU\r\n\t\tRelease-x86|x64 = Release-x86|x64\r\n\t\tRelease-x86|x86 = Release-x86|x86\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release-x64|Any CPU.ActiveCfg = Release-x64|x64\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release-x64|Any CPU.Build.0 = Release-x64|x64\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release-x64|x64.ActiveCfg = Release-x64|x64\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release-x64|x64.Build.0 = Release-x64|x64\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release-x64|x86.ActiveCfg = Release-x64|x64\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release-x64|x86.Build.0 = Release-x64|x64\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release-x86|Any CPU.ActiveCfg = Release-x86|x86\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release-x86|Any CPU.Build.0 = Release-x86|x86\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release-x86|x64.ActiveCfg = Release-x86|x86\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release-x86|x64.Build.0 = Release-x86|x86\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release-x86|x86.ActiveCfg = Release-x86|x86\r\n\t\t{643E0BFC-DBFA-4FE5-ADB6-AC4387849762}.Release-x86|x86.Build.0 = Release-x86|x86\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {3E80EAAB-29DD-4BED-9F6F-6FBFF73F5E99}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  }
]